You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

910 lines
28 KiB

10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
10 years ago
10 years ago
9 years ago
10 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
9 years ago
10 years ago
8 years ago
10 years ago
8 years ago
10 years ago
8 years ago
8 years ago
10 years ago
10 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
8 years ago
10 years ago
8 years ago
10 years ago
10 years ago
10 years ago
  1. /*!
  2. * # Semantic UI 2.2.0 - Shape
  3. * http://github.com/semantic-org/semantic-ui/
  4. *
  5. *
  6. * Copyright 2015 Contributors
  7. * Released under the MIT license
  8. * http://opensource.org/licenses/MIT
  9. *
  10. */
  11. ;(function ($, window, document, undefined) {
  12. "use strict";
  13. window = (typeof window != 'undefined' && window.Math == Math)
  14. ? window
  15. : (typeof self != 'undefined' && self.Math == Math)
  16. ? self
  17. : Function('return this')()
  18. ;
  19. $.fn.shape = function(parameters) {
  20. var
  21. $allModules = $(this),
  22. $body = $('body'),
  23. time = new Date().getTime(),
  24. performance = [],
  25. query = arguments[0],
  26. methodInvoked = (typeof query == 'string'),
  27. queryArguments = [].slice.call(arguments, 1),
  28. requestAnimationFrame = window.requestAnimationFrame
  29. || window.mozRequestAnimationFrame
  30. || window.webkitRequestAnimationFrame
  31. || window.msRequestAnimationFrame
  32. || function(callback) { setTimeout(callback, 0); },
  33. returnedValue
  34. ;
  35. $allModules
  36. .each(function() {
  37. var
  38. moduleSelector = $allModules.selector || '',
  39. settings = ( $.isPlainObject(parameters) )
  40. ? $.extend(true, {}, $.fn.shape.settings, parameters)
  41. : $.extend({}, $.fn.shape.settings),
  42. // internal aliases
  43. namespace = settings.namespace,
  44. selector = settings.selector,
  45. error = settings.error,
  46. className = settings.className,
  47. // define namespaces for modules
  48. eventNamespace = '.' + namespace,
  49. moduleNamespace = 'module-' + namespace,
  50. // selector cache
  51. $module = $(this),
  52. $sides = $module.find(selector.sides),
  53. $side = $module.find(selector.side),
  54. // private variables
  55. nextIndex = false,
  56. $activeSide,
  57. $nextSide,
  58. // standard module
  59. element = this,
  60. instance = $module.data(moduleNamespace),
  61. module
  62. ;
  63. module = {
  64. initialize: function() {
  65. module.verbose('Initializing module for', element);
  66. module.set.defaultSide();
  67. module.instantiate();
  68. },
  69. instantiate: function() {
  70. module.verbose('Storing instance of module', module);
  71. instance = module;
  72. $module
  73. .data(moduleNamespace, instance)
  74. ;
  75. },
  76. destroy: function() {
  77. module.verbose('Destroying previous module for', element);
  78. $module
  79. .removeData(moduleNamespace)
  80. .off(eventNamespace)
  81. ;
  82. },
  83. refresh: function() {
  84. module.verbose('Refreshing selector cache for', element);
  85. $module = $(element);
  86. $sides = $(this).find(selector.shape);
  87. $side = $(this).find(selector.side);
  88. },
  89. repaint: function() {
  90. module.verbose('Forcing repaint event');
  91. var
  92. shape = $sides[0] || document.createElement('div'),
  93. fakeAssignment = shape.offsetWidth
  94. ;
  95. },
  96. animate: function(propertyObject, callback) {
  97. module.verbose('Animating box with properties', propertyObject);
  98. callback = callback || function(event) {
  99. module.verbose('Executing animation callback');
  100. if(event !== undefined) {
  101. event.stopPropagation();
  102. }
  103. module.reset();
  104. module.set.active();
  105. };
  106. settings.beforeChange.call($nextSide[0]);
  107. if(module.get.transitionEvent()) {
  108. module.verbose('Starting CSS animation');
  109. $module
  110. .addClass(className.animating)
  111. ;
  112. $sides
  113. .css(propertyObject)
  114. .one(module.get.transitionEvent(), callback)
  115. ;
  116. module.set.duration(settings.duration);
  117. requestAnimationFrame(function() {
  118. $module
  119. .addClass(className.animating)
  120. ;
  121. $activeSide
  122. .addClass(className.hidden)
  123. ;
  124. });
  125. }
  126. else {
  127. callback();
  128. }
  129. },
  130. queue: function(method) {
  131. module.debug('Queueing animation of', method);
  132. $sides
  133. .one(module.get.transitionEvent(), function() {
  134. module.debug('Executing queued animation');
  135. setTimeout(function(){
  136. $module.shape(method);
  137. }, 0);
  138. })
  139. ;
  140. },
  141. reset: function() {
  142. module.verbose('Animating states reset');
  143. $module
  144. .removeClass(className.animating)
  145. .attr('style', '')
  146. .removeAttr('style')
  147. ;
  148. // removeAttr style does not consistently work in safari
  149. $sides
  150. .attr('style', '')
  151. .removeAttr('style')
  152. ;
  153. $side
  154. .attr('style', '')
  155. .removeAttr('style')
  156. .removeClass(className.hidden)
  157. ;
  158. $nextSide
  159. .removeClass(className.animating)
  160. .attr('style', '')
  161. .removeAttr('style')
  162. ;
  163. },
  164. is: {
  165. complete: function() {
  166. return ($side.filter('.' + className.active)[0] == $nextSide[0]);
  167. },
  168. animating: function() {
  169. return $module.hasClass(className.animating);
  170. }
  171. },
  172. set: {
  173. defaultSide: function() {
  174. $activeSide = $module.find('.' + settings.className.active);
  175. $nextSide = ( $activeSide.next(selector.side).length > 0 )
  176. ? $activeSide.next(selector.side)
  177. : $module.find(selector.side).first()
  178. ;
  179. nextIndex = false;
  180. module.verbose('Active side set to', $activeSide);
  181. module.verbose('Next side set to', $nextSide);
  182. },
  183. duration: function(duration) {
  184. duration = duration || settings.duration;
  185. duration = (typeof duration == 'number')
  186. ? duration + 'ms'
  187. : duration
  188. ;
  189. module.verbose('Setting animation duration', duration);
  190. if(settings.duration || settings.duration === 0) {
  191. $sides.add($side)
  192. .css({
  193. '-webkit-transition-duration': duration,
  194. '-moz-transition-duration': duration,
  195. '-ms-transition-duration': duration,
  196. '-o-transition-duration': duration,
  197. 'transition-duration': duration
  198. })
  199. ;
  200. }
  201. },
  202. currentStageSize: function() {
  203. var
  204. $activeSide = $module.find('.' + settings.className.active),
  205. width = $activeSide.outerWidth(true),
  206. height = $activeSide.outerHeight(true)
  207. ;
  208. $module
  209. .css({
  210. width: width,
  211. height: height
  212. })
  213. ;
  214. },
  215. stageSize: function() {
  216. var
  217. $clone = $module.clone().addClass(className.loading),
  218. $activeSide = $clone.find('.' + settings.className.active),
  219. newWidth = (settings.width == 'next')
  220. ? $nextSide.outerWidth(true)
  221. : (settings.width == 'initial')
  222. ? $module.width()
  223. : settings.width,
  224. newHeight = (settings.height == 'next')
  225. ? $nextSide.outerHeight(true)
  226. : (settings.height == 'initial')
  227. ? $module.height()
  228. : settings.height,
  229. $nextSide = (nextIndex)
  230. ? $clone.find(selector.side).eq(nextIndex)
  231. : ( $activeSide.next(selector.side).length > 0 )
  232. ? $activeSide.next(selector.side)
  233. : $clone.find(selector.side).first()
  234. ;
  235. $activeSide.removeClass(className.active);
  236. $nextSide.addClass(className.active);
  237. $clone.insertAfter($module);
  238. $clone.remove();
  239. if(settings.width != 'auto') {
  240. $module.css('width', newWidth + settings.jitter);
  241. module.verbose('Specifying width during animation', newWidth);
  242. }
  243. if(settings.height != 'auto') {
  244. $module.css('height', newHeight + settings.jitter);
  245. module.verbose('Specifying height during animation', newHeight);
  246. }
  247. },
  248. nextSide: function(selector) {
  249. nextIndex = selector;
  250. $nextSide = $side.filter(selector);
  251. nextIndex = $side.index($nextSide);
  252. if($nextSide.length === 0) {
  253. module.set.defaultSide();
  254. module.error(error.side);
  255. }
  256. module.verbose('Next side manually set to', $nextSide);
  257. },
  258. active: function() {
  259. module.verbose('Setting new side to active', $nextSide);
  260. $side
  261. .removeClass(className.active)
  262. ;
  263. $nextSide
  264. .addClass(className.active)
  265. ;
  266. settings.onChange.call($nextSide[0]);
  267. module.set.defaultSide();
  268. }
  269. },
  270. flip: {
  271. up: function() {
  272. if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
  273. module.debug('Side already visible', $nextSide);
  274. return;
  275. }
  276. if( !module.is.animating()) {
  277. module.debug('Flipping up', $nextSide);
  278. module.set.stageSize();
  279. module.stage.above();
  280. module.animate( module.get.transform.up() );
  281. }
  282. else {
  283. module.queue('flip up');
  284. }
  285. },
  286. down: function() {
  287. if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
  288. module.debug('Side already visible', $nextSide);
  289. return;
  290. }
  291. if( !module.is.animating()) {
  292. module.debug('Flipping down', $nextSide);
  293. module.set.stageSize();
  294. module.stage.below();
  295. module.animate( module.get.transform.down() );
  296. }
  297. else {
  298. module.queue('flip down');
  299. }
  300. },
  301. left: function() {
  302. if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
  303. module.debug('Side already visible', $nextSide);
  304. return;
  305. }
  306. if( !module.is.animating()) {
  307. module.debug('Flipping left', $nextSide);
  308. module.set.stageSize();
  309. module.stage.left();
  310. module.animate(module.get.transform.left() );
  311. }
  312. else {
  313. module.queue('flip left');
  314. }
  315. },
  316. right: function() {
  317. if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
  318. module.debug('Side already visible', $nextSide);
  319. return;
  320. }
  321. if( !module.is.animating()) {
  322. module.debug('Flipping right', $nextSide);
  323. module.set.stageSize();
  324. module.stage.right();
  325. module.animate(module.get.transform.right() );
  326. }
  327. else {
  328. module.queue('flip right');
  329. }
  330. },
  331. over: function() {
  332. if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
  333. module.debug('Side already visible', $nextSide);
  334. return;
  335. }
  336. if( !module.is.animating()) {
  337. module.debug('Flipping over', $nextSide);
  338. module.set.stageSize();
  339. module.stage.behind();
  340. module.animate(module.get.transform.over() );
  341. }
  342. else {
  343. module.queue('flip over');
  344. }
  345. },
  346. back: function() {
  347. if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {
  348. module.debug('Side already visible', $nextSide);
  349. return;
  350. }
  351. if( !module.is.animating()) {
  352. module.debug('Flipping back', $nextSide);
  353. module.set.stageSize();
  354. module.stage.behind();
  355. module.animate(module.get.transform.back() );
  356. }
  357. else {
  358. module.queue('flip back');
  359. }
  360. }
  361. },
  362. get: {
  363. transform: {
  364. up: function() {
  365. var
  366. translate = {
  367. y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
  368. z: -($activeSide.outerHeight(true) / 2)
  369. }
  370. ;
  371. return {
  372. transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'
  373. };
  374. },
  375. down: function() {
  376. var
  377. translate = {
  378. y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
  379. z: -($activeSide.outerHeight(true) / 2)
  380. }
  381. ;
  382. return {
  383. transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'
  384. };
  385. },
  386. left: function() {
  387. var
  388. translate = {
  389. x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),
  390. z : -($activeSide.outerWidth(true) / 2)
  391. }
  392. ;
  393. return {
  394. transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'
  395. };
  396. },
  397. right: function() {
  398. var
  399. translate = {
  400. x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),
  401. z : -($activeSide.outerWidth(true) / 2)
  402. }
  403. ;
  404. return {
  405. transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'
  406. };
  407. },
  408. over: function() {
  409. var
  410. translate = {
  411. x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)
  412. }
  413. ;
  414. return {
  415. transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'
  416. };
  417. },
  418. back: function() {
  419. var
  420. translate = {
  421. x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)
  422. }
  423. ;
  424. return {
  425. transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'
  426. };
  427. }
  428. },
  429. transitionEvent: function() {
  430. var
  431. element = document.createElement('element'),
  432. transitions = {
  433. 'transition' :'transitionend',
  434. 'OTransition' :'oTransitionEnd',
  435. 'MozTransition' :'transitionend',
  436. 'WebkitTransition' :'webkitTransitionEnd'
  437. },
  438. transition
  439. ;
  440. for(transition in transitions){
  441. if( element.style[transition] !== undefined ){
  442. return transitions[transition];
  443. }
  444. }
  445. },
  446. nextSide: function() {
  447. return ( $activeSide.next(selector.side).length > 0 )
  448. ? $activeSide.next(selector.side)
  449. : $module.find(selector.side).first()
  450. ;
  451. }
  452. },
  453. stage: {
  454. above: function() {
  455. var
  456. box = {
  457. origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
  458. depth : {
  459. active : ($nextSide.outerHeight(true) / 2),
  460. next : ($activeSide.outerHeight(true) / 2)
  461. }
  462. }
  463. ;
  464. module.verbose('Setting the initial animation position as above', $nextSide, box);
  465. $sides
  466. .css({
  467. 'transform' : 'translateZ(-' + box.depth.active + 'px)'
  468. })
  469. ;
  470. $activeSide
  471. .css({
  472. 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
  473. })
  474. ;
  475. $nextSide
  476. .addClass(className.animating)
  477. .css({
  478. 'top' : box.origin + 'px',
  479. 'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'
  480. })
  481. ;
  482. },
  483. below: function() {
  484. var
  485. box = {
  486. origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),
  487. depth : {
  488. active : ($nextSide.outerHeight(true) / 2),
  489. next : ($activeSide.outerHeight(true) / 2)
  490. }
  491. }
  492. ;
  493. module.verbose('Setting the initial animation position as below', $nextSide, box);
  494. $sides
  495. .css({
  496. 'transform' : 'translateZ(-' + box.depth.active + 'px)'
  497. })
  498. ;
  499. $activeSide
  500. .css({
  501. 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
  502. })
  503. ;
  504. $nextSide
  505. .addClass(className.animating)
  506. .css({
  507. 'top' : box.origin + 'px',
  508. 'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'
  509. })
  510. ;
  511. },
  512. left: function() {
  513. var
  514. height = {
  515. active : $activeSide.outerWidth(true),
  516. next : $nextSide.outerWidth(true)
  517. },
  518. box = {
  519. origin : ( ( height.active - height.next ) / 2),
  520. depth : {
  521. active : (height.next / 2),
  522. next : (height.active / 2)
  523. }
  524. }
  525. ;
  526. module.verbose('Setting the initial animation position as left', $nextSide, box);
  527. $sides
  528. .css({
  529. 'transform' : 'translateZ(-' + box.depth.active + 'px)'
  530. })
  531. ;
  532. $activeSide
  533. .css({
  534. 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
  535. })
  536. ;
  537. $nextSide
  538. .addClass(className.animating)
  539. .css({
  540. 'left' : box.origin + 'px',
  541. 'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'
  542. })
  543. ;
  544. },
  545. right: function() {
  546. var
  547. height = {
  548. active : $activeSide.outerWidth(true),
  549. next : $nextSide.outerWidth(true)
  550. },
  551. box = {
  552. origin : ( ( height.active - height.next ) / 2),
  553. depth : {
  554. active : (height.next / 2),
  555. next : (height.active / 2)
  556. }
  557. }
  558. ;
  559. module.verbose('Setting the initial animation position as left', $nextSide, box);
  560. $sides
  561. .css({
  562. 'transform' : 'translateZ(-' + box.depth.active + 'px)'
  563. })
  564. ;
  565. $activeSide
  566. .css({
  567. 'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'
  568. })
  569. ;
  570. $nextSide
  571. .addClass(className.animating)
  572. .css({
  573. 'left' : box.origin + 'px',
  574. 'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'
  575. })
  576. ;
  577. },
  578. behind: function() {
  579. var
  580. height = {
  581. active : $activeSide.outerWidth(true),
  582. next : $nextSide.outerWidth(true)
  583. },
  584. box = {
  585. origin : ( ( height.active - height.next ) / 2),
  586. depth : {
  587. active : (height.next / 2),
  588. next : (height.active / 2)
  589. }
  590. }
  591. ;
  592. module.verbose('Setting the initial animation position as behind', $nextSide, box);
  593. $activeSide
  594. .css({
  595. 'transform' : 'rotateY(0deg)'
  596. })
  597. ;
  598. $nextSide
  599. .addClass(className.animating)
  600. .css({
  601. 'left' : box.origin + 'px',
  602. 'transform' : 'rotateY(-180deg)'
  603. })
  604. ;
  605. }
  606. },
  607. setting: function(name, value) {
  608. module.debug('Changing setting', name, value);
  609. if( $.isPlainObject(name) ) {
  610. $.extend(true, settings, name);
  611. }
  612. else if(value !== undefined) {
  613. if($.isPlainObject(settings[name])) {
  614. $.extend(true, settings[name], value);
  615. }
  616. else {
  617. settings[name] = value;
  618. }
  619. }
  620. else {
  621. return settings[name];
  622. }
  623. },
  624. internal: function(name, value) {
  625. if( $.isPlainObject(name) ) {
  626. $.extend(true, module, name);
  627. }
  628. else if(value !== undefined) {
  629. module[name] = value;
  630. }
  631. else {
  632. return module[name];
  633. }
  634. },
  635. debug: function() {
  636. if(!settings.silent && settings.debug) {
  637. if(settings.performance) {
  638. module.performance.log(arguments);
  639. }
  640. else {
  641. module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
  642. module.debug.apply(console, arguments);
  643. }
  644. }
  645. },
  646. verbose: function() {
  647. if(!settings.silent && settings.verbose && settings.debug) {
  648. if(settings.performance) {
  649. module.performance.log(arguments);
  650. }
  651. else {
  652. module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
  653. module.verbose.apply(console, arguments);
  654. }
  655. }
  656. },
  657. error: function() {
  658. if(!settings.silent) {
  659. module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
  660. module.error.apply(console, arguments);
  661. }
  662. },
  663. performance: {
  664. log: function(message) {
  665. var
  666. currentTime,
  667. executionTime,
  668. previousTime
  669. ;
  670. if(settings.performance) {
  671. currentTime = new Date().getTime();
  672. previousTime = time || currentTime;
  673. executionTime = currentTime - previousTime;
  674. time = currentTime;
  675. performance.push({
  676. 'Name' : message[0],
  677. 'Arguments' : [].slice.call(message, 1) || '',
  678. 'Element' : element,
  679. 'Execution Time' : executionTime
  680. });
  681. }
  682. clearTimeout(module.performance.timer);
  683. module.performance.timer = setTimeout(module.performance.display, 500);
  684. },
  685. display: function() {
  686. var
  687. title = settings.name + ':',
  688. totalTime = 0
  689. ;
  690. time = false;
  691. clearTimeout(module.performance.timer);
  692. $.each(performance, function(index, data) {
  693. totalTime += data['Execution Time'];
  694. });
  695. title += ' ' + totalTime + 'ms';
  696. if(moduleSelector) {
  697. title += ' \'' + moduleSelector + '\'';
  698. }
  699. if($allModules.length > 1) {
  700. title += ' ' + '(' + $allModules.length + ')';
  701. }
  702. if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
  703. console.groupCollapsed(title);
  704. if(console.table) {
  705. console.table(performance);
  706. }
  707. else {
  708. $.each(performance, function(index, data) {
  709. console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
  710. });
  711. }
  712. console.groupEnd();
  713. }
  714. performance = [];
  715. }
  716. },
  717. invoke: function(query, passedArguments, context) {
  718. var
  719. object = instance,
  720. maxDepth,
  721. found,
  722. response
  723. ;
  724. passedArguments = passedArguments || queryArguments;
  725. context = element || context;
  726. if(typeof query == 'string' && object !== undefined) {
  727. query = query.split(/[\. ]/);
  728. maxDepth = query.length - 1;
  729. $.each(query, function(depth, value) {
  730. var camelCaseValue = (depth != maxDepth)
  731. ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
  732. : query
  733. ;
  734. if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
  735. object = object[camelCaseValue];
  736. }
  737. else if( object[camelCaseValue] !== undefined ) {
  738. found = object[camelCaseValue];
  739. return false;
  740. }
  741. else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
  742. object = object[value];
  743. }
  744. else if( object[value] !== undefined ) {
  745. found = object[value];
  746. return false;
  747. }
  748. else {
  749. return false;
  750. }
  751. });
  752. }
  753. if ( $.isFunction( found ) ) {
  754. response = found.apply(context, passedArguments);
  755. }
  756. else if(found !== undefined) {
  757. response = found;
  758. }
  759. if($.isArray(returnedValue)) {
  760. returnedValue.push(response);
  761. }
  762. else if(returnedValue !== undefined) {
  763. returnedValue = [returnedValue, response];
  764. }
  765. else if(response !== undefined) {
  766. returnedValue = response;
  767. }
  768. return found;
  769. }
  770. };
  771. if(methodInvoked) {
  772. if(instance === undefined) {
  773. module.initialize();
  774. }
  775. module.invoke(query);
  776. }
  777. else {
  778. if(instance !== undefined) {
  779. instance.invoke('destroy');
  780. }
  781. module.initialize();
  782. }
  783. })
  784. ;
  785. return (returnedValue !== undefined)
  786. ? returnedValue
  787. : this
  788. ;
  789. };
  790. $.fn.shape.settings = {
  791. // module info
  792. name : 'Shape',
  793. // hide all debug content
  794. silent : false,
  795. // debug content outputted to console
  796. debug : false,
  797. // verbose debug output
  798. verbose : false,
  799. // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)
  800. jitter : 0,
  801. // performance data output
  802. performance: true,
  803. // event namespace
  804. namespace : 'shape',
  805. // width during animation, can be set to 'auto', initial', 'next' or pixel amount
  806. width: 'initial',
  807. // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount
  808. height: 'initial',
  809. // callback occurs on side change
  810. beforeChange : function() {},
  811. onChange : function() {},
  812. // allow animation to same side
  813. allowRepeats: false,
  814. // animation duration
  815. duration : false,
  816. // possible errors
  817. error: {
  818. side : 'You tried to switch to a side that does not exist.',
  819. method : 'The method you called is not defined'
  820. },
  821. // classnames used
  822. className : {
  823. animating : 'animating',
  824. hidden : 'hidden',
  825. loading : 'loading',
  826. active : 'active'
  827. },
  828. // selectors used
  829. selector : {
  830. sides : '.sides',
  831. side : '.side'
  832. }
  833. };
  834. })( jQuery, window, document );