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.

921 lines
28 KiB

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