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.

908 lines
27 KiB

9 years ago
8 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
8 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
9 years ago
10 years ago
10 years ago
9 years ago
9 years ago
10 years ago
9 years ago
10 years ago
9 years ago
8 years ago
9 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
9 years ago
8 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
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
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
9 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
9 years ago
9 years ago
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
9 years ago
9 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
8 years ago
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
10 years ago
9 years ago
10 years ago
8 years ago
10 years ago
9 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
10 years ago
9 years ago
10 years ago
9 years ago
10 years ago
10 years ago
9 years ago
9 years ago
10 years ago
9 years ago
10 years ago
9 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
9 years ago
  1. /*!
  2. * # Semantic UI 2.2.0 - Modal
  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.modal = function(parameters) {
  20. var
  21. $allModules = $(this),
  22. $window = $(window),
  23. $document = $(document),
  24. $body = $('body'),
  25. moduleSelector = $allModules.selector || '',
  26. time = new Date().getTime(),
  27. performance = [],
  28. query = arguments[0],
  29. methodInvoked = (typeof query == 'string'),
  30. queryArguments = [].slice.call(arguments, 1),
  31. requestAnimationFrame = window.requestAnimationFrame
  32. || window.mozRequestAnimationFrame
  33. || window.webkitRequestAnimationFrame
  34. || window.msRequestAnimationFrame
  35. || function(callback) { setTimeout(callback, 0); },
  36. returnedValue
  37. ;
  38. $allModules
  39. .each(function() {
  40. var
  41. settings = ( $.isPlainObject(parameters) )
  42. ? $.extend(true, {}, $.fn.modal.settings, parameters)
  43. : $.extend({}, $.fn.modal.settings),
  44. selector = settings.selector,
  45. className = settings.className,
  46. namespace = settings.namespace,
  47. error = settings.error,
  48. eventNamespace = '.' + namespace,
  49. moduleNamespace = 'module-' + namespace,
  50. $module = $(this),
  51. $context = $(settings.context),
  52. $close = $module.find(selector.close),
  53. $allModals,
  54. $otherModals,
  55. $focusedElement,
  56. $dimmable,
  57. $dimmer,
  58. element = this,
  59. instance = $module.data(moduleNamespace),
  60. elementEventNamespace,
  61. id,
  62. observer,
  63. module
  64. ;
  65. module = {
  66. initialize: function() {
  67. module.verbose('Initializing dimmer', $context);
  68. module.create.id();
  69. module.create.dimmer();
  70. module.refreshModals();
  71. module.bind.events();
  72. if(settings.observeChanges) {
  73. module.observeChanges();
  74. }
  75. module.instantiate();
  76. },
  77. instantiate: function() {
  78. module.verbose('Storing instance of modal');
  79. instance = module;
  80. $module
  81. .data(moduleNamespace, instance)
  82. ;
  83. },
  84. create: {
  85. dimmer: function() {
  86. var
  87. defaultSettings = {
  88. debug : settings.debug,
  89. dimmerName : 'modals',
  90. duration : {
  91. show : settings.duration,
  92. hide : settings.duration
  93. }
  94. },
  95. dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)
  96. ;
  97. if(settings.inverted) {
  98. dimmerSettings.variation = (dimmerSettings.variation !== undefined)
  99. ? dimmerSettings.variation + ' inverted'
  100. : 'inverted'
  101. ;
  102. }
  103. if($.fn.dimmer === undefined) {
  104. module.error(error.dimmer);
  105. return;
  106. }
  107. module.debug('Creating dimmer with settings', dimmerSettings);
  108. $dimmable = $context.dimmer(dimmerSettings);
  109. if(settings.detachable) {
  110. module.verbose('Modal is detachable, moving content into dimmer');
  111. $dimmable.dimmer('add content', $module);
  112. }
  113. else {
  114. module.set.undetached();
  115. }
  116. if(settings.blurring) {
  117. $dimmable.addClass(className.blurring);
  118. }
  119. $dimmer = $dimmable.dimmer('get dimmer');
  120. },
  121. id: function() {
  122. id = (Math.random().toString(16) + '000000000').substr(2,8);
  123. elementEventNamespace = '.' + id;
  124. module.verbose('Creating unique id for element', id);
  125. }
  126. },
  127. destroy: function() {
  128. module.verbose('Destroying previous modal');
  129. $module
  130. .removeData(moduleNamespace)
  131. .off(eventNamespace)
  132. ;
  133. $window.off(elementEventNamespace);
  134. $dimmer.off(elementEventNamespace);
  135. $close.off(eventNamespace);
  136. $context.dimmer('destroy');
  137. },
  138. observeChanges: function() {
  139. if('MutationObserver' in window) {
  140. observer = new MutationObserver(function(mutations) {
  141. module.debug('DOM tree modified, refreshing');
  142. module.refresh();
  143. });
  144. observer.observe(element, {
  145. childList : true,
  146. subtree : true
  147. });
  148. module.debug('Setting up mutation observer', observer);
  149. }
  150. },
  151. refresh: function() {
  152. module.remove.scrolling();
  153. module.cacheSizes();
  154. module.set.screenHeight();
  155. module.set.type();
  156. module.set.position();
  157. },
  158. refreshModals: function() {
  159. $otherModals = $module.siblings(selector.modal);
  160. $allModals = $otherModals.add($module);
  161. },
  162. attachEvents: function(selector, event) {
  163. var
  164. $toggle = $(selector)
  165. ;
  166. event = $.isFunction(module[event])
  167. ? module[event]
  168. : module.toggle
  169. ;
  170. if($toggle.length > 0) {
  171. module.debug('Attaching modal events to element', selector, event);
  172. $toggle
  173. .off(eventNamespace)
  174. .on('click' + eventNamespace, event)
  175. ;
  176. }
  177. else {
  178. module.error(error.notFound, selector);
  179. }
  180. },
  181. bind: {
  182. events: function() {
  183. module.verbose('Attaching events');
  184. $module
  185. .on('click' + eventNamespace, selector.close, module.event.close)
  186. .on('click' + eventNamespace, selector.approve, module.event.approve)
  187. .on('click' + eventNamespace, selector.deny, module.event.deny)
  188. ;
  189. $window
  190. .on('resize' + elementEventNamespace, module.event.resize)
  191. ;
  192. }
  193. },
  194. get: {
  195. id: function() {
  196. return (Math.random().toString(16) + '000000000').substr(2,8);
  197. }
  198. },
  199. event: {
  200. approve: function() {
  201. if(settings.onApprove.call(element, $(this)) === false) {
  202. module.verbose('Approve callback returned false cancelling hide');
  203. return;
  204. }
  205. module.hide();
  206. },
  207. deny: function() {
  208. if(settings.onDeny.call(element, $(this)) === false) {
  209. module.verbose('Deny callback returned false cancelling hide');
  210. return;
  211. }
  212. module.hide();
  213. },
  214. close: function() {
  215. module.hide();
  216. },
  217. click: function(event) {
  218. var
  219. $target = $(event.target),
  220. isInModal = ($target.closest(selector.modal).length > 0),
  221. isInDOM = $.contains(document.documentElement, event.target)
  222. ;
  223. if(!isInModal && isInDOM) {
  224. module.debug('Dimmer clicked, hiding all modals');
  225. if( module.is.active() ) {
  226. module.remove.clickaway();
  227. if(settings.allowMultiple) {
  228. module.hide();
  229. }
  230. else {
  231. module.hideAll();
  232. }
  233. }
  234. }
  235. },
  236. debounce: function(method, delay) {
  237. clearTimeout(module.timer);
  238. module.timer = setTimeout(method, delay);
  239. },
  240. keyboard: function(event) {
  241. var
  242. keyCode = event.which,
  243. escapeKey = 27
  244. ;
  245. if(keyCode == escapeKey) {
  246. if(settings.closable) {
  247. module.debug('Escape key pressed hiding modal');
  248. module.hide();
  249. }
  250. else {
  251. module.debug('Escape key pressed, but closable is set to false');
  252. }
  253. event.preventDefault();
  254. }
  255. },
  256. resize: function() {
  257. if( $dimmable.dimmer('is active') ) {
  258. requestAnimationFrame(module.refresh);
  259. }
  260. }
  261. },
  262. toggle: function() {
  263. if( module.is.active() || module.is.animating() ) {
  264. module.hide();
  265. }
  266. else {
  267. module.show();
  268. }
  269. },
  270. show: function(callback) {
  271. callback = $.isFunction(callback)
  272. ? callback
  273. : function(){}
  274. ;
  275. module.refreshModals();
  276. module.showModal(callback);
  277. },
  278. hide: function(callback) {
  279. callback = $.isFunction(callback)
  280. ? callback
  281. : function(){}
  282. ;
  283. module.refreshModals();
  284. module.hideModal(callback);
  285. },
  286. showModal: function(callback) {
  287. callback = $.isFunction(callback)
  288. ? callback
  289. : function(){}
  290. ;
  291. if( module.is.animating() || !module.is.active() ) {
  292. module.showDimmer();
  293. module.cacheSizes();
  294. module.set.position();
  295. module.set.screenHeight();
  296. module.set.type();
  297. module.set.clickaway();
  298. if( !settings.allowMultiple && module.others.active() ) {
  299. module.hideOthers(module.showModal);
  300. }
  301. else {
  302. settings.onShow.call(element);
  303. if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
  304. module.debug('Showing modal with css animations');
  305. $module
  306. .transition({
  307. debug : settings.debug,
  308. animation : settings.transition + ' in',
  309. queue : settings.queue,
  310. duration : settings.duration,
  311. useFailSafe : true,
  312. onComplete : function() {
  313. settings.onVisible.apply(element);
  314. module.add.keyboardShortcuts();
  315. module.save.focus();
  316. module.set.active();
  317. if(settings.autofocus) {
  318. module.set.autofocus();
  319. }
  320. callback();
  321. }
  322. })
  323. ;
  324. }
  325. else {
  326. module.error(error.noTransition);
  327. }
  328. }
  329. }
  330. else {
  331. module.debug('Modal is already visible');
  332. }
  333. },
  334. hideModal: function(callback, keepDimmed) {
  335. callback = $.isFunction(callback)
  336. ? callback
  337. : function(){}
  338. ;
  339. module.debug('Hiding modal');
  340. if(settings.onHide.call(element, $(this)) === false) {
  341. module.verbose('Hide callback returned false cancelling hide');
  342. return;
  343. }
  344. if( module.is.animating() || module.is.active() ) {
  345. if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
  346. module.remove.active();
  347. $module
  348. .transition({
  349. debug : settings.debug,
  350. animation : settings.transition + ' out',
  351. queue : settings.queue,
  352. duration : settings.duration,
  353. useFailSafe : true,
  354. onStart : function() {
  355. if(!module.others.active() && !keepDimmed) {
  356. module.hideDimmer();
  357. }
  358. module.remove.keyboardShortcuts();
  359. },
  360. onComplete : function() {
  361. settings.onHidden.call(element);
  362. module.restore.focus();
  363. callback();
  364. }
  365. })
  366. ;
  367. }
  368. else {
  369. module.error(error.noTransition);
  370. }
  371. }
  372. },
  373. showDimmer: function() {
  374. if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {
  375. module.debug('Showing dimmer');
  376. $dimmable.dimmer('show');
  377. }
  378. else {
  379. module.debug('Dimmer already visible');
  380. }
  381. },
  382. hideDimmer: function() {
  383. if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {
  384. $dimmable.dimmer('hide', function() {
  385. module.remove.clickaway();
  386. module.remove.screenHeight();
  387. });
  388. }
  389. else {
  390. module.debug('Dimmer is not visible cannot hide');
  391. return;
  392. }
  393. },
  394. hideAll: function(callback) {
  395. var
  396. $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)
  397. ;
  398. callback = $.isFunction(callback)
  399. ? callback
  400. : function(){}
  401. ;
  402. if( $visibleModals.length > 0 ) {
  403. module.debug('Hiding all visible modals');
  404. module.hideDimmer();
  405. $visibleModals
  406. .modal('hide modal', callback)
  407. ;
  408. }
  409. },
  410. hideOthers: function(callback) {
  411. var
  412. $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)
  413. ;
  414. callback = $.isFunction(callback)
  415. ? callback
  416. : function(){}
  417. ;
  418. if( $visibleModals.length > 0 ) {
  419. module.debug('Hiding other modals', $otherModals);
  420. $visibleModals
  421. .modal('hide modal', callback, true)
  422. ;
  423. }
  424. },
  425. others: {
  426. active: function() {
  427. return ($otherModals.filter('.' + className.active).length > 0);
  428. },
  429. animating: function() {
  430. return ($otherModals.filter('.' + className.animating).length > 0);
  431. }
  432. },
  433. add: {
  434. keyboardShortcuts: function() {
  435. module.verbose('Adding keyboard shortcuts');
  436. $document
  437. .on('keyup' + eventNamespace, module.event.keyboard)
  438. ;
  439. }
  440. },
  441. save: {
  442. focus: function() {
  443. $focusedElement = $(document.activeElement).blur();
  444. }
  445. },
  446. restore: {
  447. focus: function() {
  448. if($focusedElement && $focusedElement.length > 0) {
  449. $focusedElement.focus();
  450. }
  451. }
  452. },
  453. remove: {
  454. active: function() {
  455. $module.removeClass(className.active);
  456. },
  457. clickaway: function() {
  458. if(settings.closable) {
  459. $dimmer
  460. .off('click' + elementEventNamespace)
  461. ;
  462. }
  463. },
  464. bodyStyle: function() {
  465. if($body.attr('style') === '') {
  466. module.verbose('Removing style attribute');
  467. $body.removeAttr('style');
  468. }
  469. },
  470. screenHeight: function() {
  471. module.debug('Removing page height');
  472. $body
  473. .css('height', '')
  474. ;
  475. },
  476. keyboardShortcuts: function() {
  477. module.verbose('Removing keyboard shortcuts');
  478. $document
  479. .off('keyup' + eventNamespace)
  480. ;
  481. },
  482. scrolling: function() {
  483. $dimmable.removeClass(className.scrolling);
  484. $module.removeClass(className.scrolling);
  485. }
  486. },
  487. cacheSizes: function() {
  488. var
  489. modalHeight = $module.outerHeight()
  490. ;
  491. if(module.cache === undefined || modalHeight !== 0) {
  492. module.cache = {
  493. pageHeight : $(document).outerHeight(),
  494. height : modalHeight + settings.offset,
  495. contextHeight : (settings.context == 'body')
  496. ? $(window).height()
  497. : $dimmable.height()
  498. };
  499. }
  500. module.debug('Caching modal and container sizes', module.cache);
  501. },
  502. can: {
  503. fit: function() {
  504. return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);
  505. }
  506. },
  507. is: {
  508. active: function() {
  509. return $module.hasClass(className.active);
  510. },
  511. animating: function() {
  512. return $module.transition('is supported')
  513. ? $module.transition('is animating')
  514. : $module.is(':visible')
  515. ;
  516. },
  517. scrolling: function() {
  518. return $dimmable.hasClass(className.scrolling);
  519. },
  520. modernBrowser: function() {
  521. // appName for IE11 reports 'Netscape' can no longer use
  522. return !(window.ActiveXObject || "ActiveXObject" in window);
  523. }
  524. },
  525. set: {
  526. autofocus: function() {
  527. var
  528. $inputs = $module.find(':input').filter(':visible'),
  529. $autofocus = $inputs.filter('[autofocus]'),
  530. $input = ($autofocus.length > 0)
  531. ? $autofocus.first()
  532. : $inputs.first()
  533. ;
  534. if($input.length > 0) {
  535. $input.focus();
  536. }
  537. },
  538. clickaway: function() {
  539. if(settings.closable) {
  540. $dimmer
  541. .on('click' + elementEventNamespace, module.event.click)
  542. ;
  543. }
  544. },
  545. screenHeight: function() {
  546. if( module.can.fit() ) {
  547. $body.css('height', '');
  548. }
  549. else {
  550. module.debug('Modal is taller than page content, resizing page height');
  551. $body
  552. .css('height', module.cache.height + (settings.padding * 2) )
  553. ;
  554. }
  555. },
  556. active: function() {
  557. $module.addClass(className.active);
  558. },
  559. scrolling: function() {
  560. $dimmable.addClass(className.scrolling);
  561. $module.addClass(className.scrolling);
  562. },
  563. type: function() {
  564. if(module.can.fit()) {
  565. module.verbose('Modal fits on screen');
  566. if(!module.others.active() && !module.others.animating()) {
  567. module.remove.scrolling();
  568. }
  569. }
  570. else {
  571. module.verbose('Modal cannot fit on screen setting to scrolling');
  572. module.set.scrolling();
  573. }
  574. },
  575. position: function() {
  576. module.verbose('Centering modal on page', module.cache);
  577. if(module.can.fit()) {
  578. $module
  579. .css({
  580. top: '',
  581. marginTop: -(module.cache.height / 2)
  582. })
  583. ;
  584. }
  585. else {
  586. $module
  587. .css({
  588. marginTop : '',
  589. top : $document.scrollTop()
  590. })
  591. ;
  592. }
  593. },
  594. undetached: function() {
  595. $dimmable.addClass(className.undetached);
  596. }
  597. },
  598. setting: function(name, value) {
  599. module.debug('Changing setting', name, value);
  600. if( $.isPlainObject(name) ) {
  601. $.extend(true, settings, name);
  602. }
  603. else if(value !== undefined) {
  604. if($.isPlainObject(settings[name])) {
  605. $.extend(true, settings[name], value);
  606. }
  607. else {
  608. settings[name] = value;
  609. }
  610. }
  611. else {
  612. return settings[name];
  613. }
  614. },
  615. internal: function(name, value) {
  616. if( $.isPlainObject(name) ) {
  617. $.extend(true, module, name);
  618. }
  619. else if(value !== undefined) {
  620. module[name] = value;
  621. }
  622. else {
  623. return module[name];
  624. }
  625. },
  626. debug: function() {
  627. if(!settings.silent && settings.debug) {
  628. if(settings.performance) {
  629. module.performance.log(arguments);
  630. }
  631. else {
  632. module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
  633. module.debug.apply(console, arguments);
  634. }
  635. }
  636. },
  637. verbose: function() {
  638. if(!settings.silent && settings.verbose && settings.debug) {
  639. if(settings.performance) {
  640. module.performance.log(arguments);
  641. }
  642. else {
  643. module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
  644. module.verbose.apply(console, arguments);
  645. }
  646. }
  647. },
  648. error: function() {
  649. if(!settings.silent) {
  650. module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
  651. module.error.apply(console, arguments);
  652. }
  653. },
  654. performance: {
  655. log: function(message) {
  656. var
  657. currentTime,
  658. executionTime,
  659. previousTime
  660. ;
  661. if(settings.performance) {
  662. currentTime = new Date().getTime();
  663. previousTime = time || currentTime;
  664. executionTime = currentTime - previousTime;
  665. time = currentTime;
  666. performance.push({
  667. 'Name' : message[0],
  668. 'Arguments' : [].slice.call(message, 1) || '',
  669. 'Element' : element,
  670. 'Execution Time' : executionTime
  671. });
  672. }
  673. clearTimeout(module.performance.timer);
  674. module.performance.timer = setTimeout(module.performance.display, 500);
  675. },
  676. display: function() {
  677. var
  678. title = settings.name + ':',
  679. totalTime = 0
  680. ;
  681. time = false;
  682. clearTimeout(module.performance.timer);
  683. $.each(performance, function(index, data) {
  684. totalTime += data['Execution Time'];
  685. });
  686. title += ' ' + totalTime + 'ms';
  687. if(moduleSelector) {
  688. title += ' \'' + moduleSelector + '\'';
  689. }
  690. if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
  691. console.groupCollapsed(title);
  692. if(console.table) {
  693. console.table(performance);
  694. }
  695. else {
  696. $.each(performance, function(index, data) {
  697. console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
  698. });
  699. }
  700. console.groupEnd();
  701. }
  702. performance = [];
  703. }
  704. },
  705. invoke: function(query, passedArguments, context) {
  706. var
  707. object = instance,
  708. maxDepth,
  709. found,
  710. response
  711. ;
  712. passedArguments = passedArguments || queryArguments;
  713. context = element || context;
  714. if(typeof query == 'string' && object !== undefined) {
  715. query = query.split(/[\. ]/);
  716. maxDepth = query.length - 1;
  717. $.each(query, function(depth, value) {
  718. var camelCaseValue = (depth != maxDepth)
  719. ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
  720. : query
  721. ;
  722. if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
  723. object = object[camelCaseValue];
  724. }
  725. else if( object[camelCaseValue] !== undefined ) {
  726. found = object[camelCaseValue];
  727. return false;
  728. }
  729. else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
  730. object = object[value];
  731. }
  732. else if( object[value] !== undefined ) {
  733. found = object[value];
  734. return false;
  735. }
  736. else {
  737. return false;
  738. }
  739. });
  740. }
  741. if ( $.isFunction( found ) ) {
  742. response = found.apply(context, passedArguments);
  743. }
  744. else if(found !== undefined) {
  745. response = found;
  746. }
  747. if($.isArray(returnedValue)) {
  748. returnedValue.push(response);
  749. }
  750. else if(returnedValue !== undefined) {
  751. returnedValue = [returnedValue, response];
  752. }
  753. else if(response !== undefined) {
  754. returnedValue = response;
  755. }
  756. return found;
  757. }
  758. };
  759. if(methodInvoked) {
  760. if(instance === undefined) {
  761. module.initialize();
  762. }
  763. module.invoke(query);
  764. }
  765. else {
  766. if(instance !== undefined) {
  767. instance.invoke('destroy');
  768. }
  769. module.initialize();
  770. }
  771. })
  772. ;
  773. return (returnedValue !== undefined)
  774. ? returnedValue
  775. : this
  776. ;
  777. };
  778. $.fn.modal.settings = {
  779. name : 'Modal',
  780. namespace : 'modal',
  781. silent : false,
  782. debug : false,
  783. verbose : false,
  784. performance : true,
  785. observeChanges : false,
  786. allowMultiple : false,
  787. detachable : true,
  788. closable : true,
  789. autofocus : true,
  790. inverted : false,
  791. blurring : false,
  792. dimmerSettings : {
  793. closable : false,
  794. useCSS : true
  795. },
  796. context : 'body',
  797. queue : false,
  798. duration : 500,
  799. offset : 0,
  800. transition : 'scale',
  801. // padding with edge of page
  802. padding : 50,
  803. // called before show animation
  804. onShow : function(){},
  805. // called after show animation
  806. onVisible : function(){},
  807. // called before hide animation
  808. onHide : function(){ return true; },
  809. // called after hide animation
  810. onHidden : function(){},
  811. // called after approve selector match
  812. onApprove : function(){ return true; },
  813. // called after deny selector match
  814. onDeny : function(){ return true; },
  815. selector : {
  816. close : '> .close',
  817. approve : '.actions .positive, .actions .approve, .actions .ok',
  818. deny : '.actions .negative, .actions .deny, .actions .cancel',
  819. modal : '.ui.modal'
  820. },
  821. error : {
  822. dimmer : 'UI Dimmer, a required component is not included in this page',
  823. method : 'The method you called is not defined.',
  824. notFound : 'The element you specified could not be found'
  825. },
  826. className : {
  827. active : 'active',
  828. animating : 'animating',
  829. blurring : 'blurring',
  830. scrolling : 'scrolling',
  831. undetached : 'undetached'
  832. }
  833. };
  834. })( jQuery, window, document );