admin.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  1. /*! elementor - v2.2.4 - 20-09-2018 */
  2. /******/ (function(modules) { // webpackBootstrap
  3. /******/ // The module cache
  4. /******/ var installedModules = {};
  5. /******/
  6. /******/ // The require function
  7. /******/ function __webpack_require__(moduleId) {
  8. /******/
  9. /******/ // Check if module is in cache
  10. /******/ if(installedModules[moduleId]) {
  11. /******/ return installedModules[moduleId].exports;
  12. /******/ }
  13. /******/ // Create a new module (and put it into the cache)
  14. /******/ var module = installedModules[moduleId] = {
  15. /******/ i: moduleId,
  16. /******/ l: false,
  17. /******/ exports: {}
  18. /******/ };
  19. /******/
  20. /******/ // Execute the module function
  21. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22. /******/
  23. /******/ // Flag the module as loaded
  24. /******/ module.l = true;
  25. /******/
  26. /******/ // Return the exports of the module
  27. /******/ return module.exports;
  28. /******/ }
  29. /******/
  30. /******/
  31. /******/ // expose the modules object (__webpack_modules__)
  32. /******/ __webpack_require__.m = modules;
  33. /******/
  34. /******/ // expose the module cache
  35. /******/ __webpack_require__.c = installedModules;
  36. /******/
  37. /******/ // define getter function for harmony exports
  38. /******/ __webpack_require__.d = function(exports, name, getter) {
  39. /******/ if(!__webpack_require__.o(exports, name)) {
  40. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41. /******/ }
  42. /******/ };
  43. /******/
  44. /******/ // define __esModule on exports
  45. /******/ __webpack_require__.r = function(exports) {
  46. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48. /******/ }
  49. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  50. /******/ };
  51. /******/
  52. /******/ // create a fake namespace object
  53. /******/ // mode & 1: value is a module id, require it
  54. /******/ // mode & 2: merge all properties of value into the ns
  55. /******/ // mode & 4: return value when already ns object
  56. /******/ // mode & 8|1: behave like require
  57. /******/ __webpack_require__.t = function(value, mode) {
  58. /******/ if(mode & 1) value = __webpack_require__(value);
  59. /******/ if(mode & 8) return value;
  60. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61. /******/ var ns = Object.create(null);
  62. /******/ __webpack_require__.r(ns);
  63. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65. /******/ return ns;
  66. /******/ };
  67. /******/
  68. /******/ // getDefaultExport function for compatibility with non-harmony modules
  69. /******/ __webpack_require__.n = function(module) {
  70. /******/ var getter = module && module.__esModule ?
  71. /******/ function getDefault() { return module['default']; } :
  72. /******/ function getModuleExports() { return module; };
  73. /******/ __webpack_require__.d(getter, 'a', getter);
  74. /******/ return getter;
  75. /******/ };
  76. /******/
  77. /******/ // Object.prototype.hasOwnProperty.call
  78. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79. /******/
  80. /******/ // __webpack_public_path__
  81. /******/ __webpack_require__.p = "";
  82. /******/
  83. /******/
  84. /******/ // Load entry module and return exports
  85. /******/ return __webpack_require__(__webpack_require__.s = 160);
  86. /******/ })
  87. /************************************************************************/
  88. /******/ ({
  89. /***/ 1:
  90. /***/ (function(module, exports, __webpack_require__) {
  91. "use strict";
  92. var Module = __webpack_require__(2),
  93. ViewModule;
  94. ViewModule = Module.extend({
  95. elements: null,
  96. getDefaultElements: function getDefaultElements() {
  97. return {};
  98. },
  99. bindEvents: function bindEvents() {},
  100. onInit: function onInit() {
  101. this.initElements();
  102. this.bindEvents();
  103. },
  104. initElements: function initElements() {
  105. this.elements = this.getDefaultElements();
  106. }
  107. });
  108. module.exports = ViewModule;
  109. /***/ }),
  110. /***/ 160:
  111. /***/ (function(module, exports, __webpack_require__) {
  112. "use strict";
  113. (function ($) {
  114. var ViewModule = __webpack_require__(1);
  115. var ElementorAdmin = ViewModule.extend({
  116. maintenanceMode: null,
  117. config: ElementorAdminConfig,
  118. getDefaultElements: function getDefaultElements() {
  119. var elements = {
  120. $window: $(window),
  121. $body: $('body'),
  122. $switchMode: $('#elementor-switch-mode'),
  123. $goToEditLink: $('#elementor-go-to-edit-page-link'),
  124. $switchModeInput: $('#elementor-switch-mode-input'),
  125. $switchModeButton: $('#elementor-switch-mode-button'),
  126. $elementorLoader: $('.elementor-loader'),
  127. $builderEditor: $('#elementor-editor'),
  128. $importButton: $('#elementor-import-template-trigger'),
  129. $importArea: $('#elementor-import-template-area'),
  130. $settingsForm: $('#elementor-settings-form'),
  131. $settingsTabsWrapper: $('#elementor-settings-tabs-wrapper')
  132. };
  133. elements.$settingsFormPages = elements.$settingsForm.find('.elementor-settings-form-page');
  134. elements.$activeSettingsPage = elements.$settingsFormPages.filter('.elementor-active');
  135. elements.$settingsTabs = elements.$settingsTabsWrapper.children();
  136. elements.$activeSettingsTab = elements.$settingsTabs.filter('.nav-tab-active');
  137. return elements;
  138. },
  139. toggleStatus: function toggleStatus() {
  140. var isElementorMode = this.isElementorMode();
  141. this.elements.$body.toggleClass('elementor-editor-active', isElementorMode).toggleClass('elementor-editor-inactive', !isElementorMode);
  142. },
  143. bindEvents: function bindEvents() {
  144. var self = this;
  145. self.elements.$switchModeButton.on('click', function (event) {
  146. event.preventDefault();
  147. if (self.isElementorMode()) {
  148. self.elements.$switchModeInput.val('');
  149. } else {
  150. self.elements.$switchModeInput.val(true);
  151. var $wpTitle = $('#title');
  152. if (!$wpTitle.val()) {
  153. $wpTitle.val('Elementor #' + $('#post_ID').val());
  154. }
  155. if (wp.autosave) {
  156. wp.autosave.server.triggerSave();
  157. }
  158. self.animateLoader();
  159. $(document).on('heartbeat-tick.autosave', function () {
  160. self.elements.$window.off('beforeunload.edit-post');
  161. location.href = self.elements.$goToEditLink.attr('href');
  162. });
  163. }
  164. self.toggleStatus();
  165. });
  166. self.elements.$goToEditLink.on('click', function () {
  167. self.animateLoader();
  168. });
  169. $('div.notice.elementor-message-dismissed').on('click', 'button.notice-dismiss, .elementor-button-notice-dismiss', function (event) {
  170. event.preventDefault();
  171. $.post(ajaxurl, {
  172. action: 'elementor_set_admin_notice_viewed',
  173. notice_id: $(this).closest('.elementor-message-dismissed').data('notice_id')
  174. });
  175. var $wrapperElm = $(this).closest('.elementor-message-dismissed');
  176. $wrapperElm.fadeTo(100, 0, function () {
  177. $wrapperElm.slideUp(100, function () {
  178. $wrapperElm.remove();
  179. });
  180. });
  181. });
  182. $('#elementor-clear-cache-button').on('click', function (event) {
  183. event.preventDefault();
  184. var $thisButton = $(this);
  185. $thisButton.removeClass('success').addClass('loading');
  186. $.post(ajaxurl, {
  187. action: 'elementor_clear_cache',
  188. _nonce: $thisButton.data('nonce')
  189. }).done(function () {
  190. $thisButton.removeClass('loading').addClass('success');
  191. });
  192. });
  193. $('#elementor-library-sync-button').on('click', function (event) {
  194. event.preventDefault();
  195. var $thisButton = $(this);
  196. $thisButton.removeClass('success').addClass('loading');
  197. $.post(ajaxurl, {
  198. action: 'elementor_reset_library',
  199. _nonce: $thisButton.data('nonce')
  200. }).done(function () {
  201. $thisButton.removeClass('loading').addClass('success');
  202. });
  203. });
  204. $('#elementor-replace-url-button').on('click', function (event) {
  205. event.preventDefault();
  206. var $this = $(this),
  207. $tr = $this.parents('tr'),
  208. $from = $tr.find('[name="from"]'),
  209. $to = $tr.find('[name="to"]');
  210. $this.removeClass('success').addClass('loading');
  211. $.post(ajaxurl, {
  212. action: 'elementor_replace_url',
  213. from: $from.val(),
  214. to: $to.val(),
  215. _nonce: $this.data('nonce')
  216. }).done(function (response) {
  217. $this.removeClass('loading');
  218. if (response.success) {
  219. $this.addClass('success');
  220. }
  221. self.getDialogsManager().createWidget('alert', {
  222. message: response.data
  223. }).show();
  224. });
  225. });
  226. self.elements.$settingsTabs.on({
  227. click: function click(event) {
  228. event.preventDefault();
  229. event.currentTarget.focus(); // Safari does not focus the tab automatically
  230. },
  231. focus: function focus() {
  232. // Using focus event to enable navigation by tab key
  233. var hrefWithoutHash = location.href.replace(/#.*/, '');
  234. history.pushState({}, '', hrefWithoutHash + this.hash);
  235. self.goToSettingsTabFromHash();
  236. }
  237. });
  238. $('.elementor-rollback-button').on('click', function (event) {
  239. event.preventDefault();
  240. var $this = $(this);
  241. self.getDialogsManager().createWidget('confirm', {
  242. headerMessage: self.config.i18n.rollback_to_previous_version,
  243. message: self.config.i18n.rollback_confirm,
  244. strings: {
  245. confirm: self.config.i18n.yes,
  246. cancel: self.config.i18n.cancel
  247. },
  248. onConfirm: function onConfirm() {
  249. $this.addClass('loading');
  250. location.href = $this.attr('href');
  251. }
  252. }).show();
  253. });
  254. $('.elementor_css_print_method select').on('change', function () {
  255. var $descriptions = $('.elementor-css-print-method-description');
  256. $descriptions.hide();
  257. $descriptions.filter('[data-value="' + $(this).val() + '"]').show();
  258. }).trigger('change');
  259. },
  260. setMarionetteTemplateCompiler: function setMarionetteTemplateCompiler() {
  261. if ('undefined' !== typeof Marionette) {
  262. Marionette.TemplateCache.prototype.compileTemplate = function (rawTemplate, options) {
  263. options = {
  264. evaluate: /<#([\s\S]+?)#>/g,
  265. interpolate: /{{{([\s\S]+?)}}}/g,
  266. escape: /{{([^}]+?)}}(?!})/g
  267. };
  268. return _.template(rawTemplate, options);
  269. };
  270. }
  271. },
  272. onInit: function onInit() {
  273. ViewModule.prototype.onInit.apply(this, arguments);
  274. this.setMarionetteTemplateCompiler();
  275. this.initDialogsManager();
  276. this.initTemplatesImport();
  277. this.initMaintenanceMode();
  278. this.goToSettingsTabFromHash();
  279. this.roleManager.init();
  280. },
  281. initDialogsManager: function initDialogsManager() {
  282. var dialogsManager;
  283. this.getDialogsManager = function () {
  284. if (!dialogsManager) {
  285. dialogsManager = new DialogsManager.Instance();
  286. }
  287. return dialogsManager;
  288. };
  289. },
  290. initTemplatesImport: function initTemplatesImport() {
  291. if (!this.elements.$body.hasClass('post-type-elementor_library')) {
  292. return;
  293. }
  294. var self = this,
  295. $importButton = self.elements.$importButton,
  296. $importArea = self.elements.$importArea;
  297. self.elements.$formAnchor = $('h1');
  298. $('#wpbody-content').find('.page-title-action:last').after($importButton);
  299. self.elements.$formAnchor.after($importArea);
  300. $importButton.on('click', function () {
  301. $('#elementor-import-template-area').toggle();
  302. });
  303. },
  304. initMaintenanceMode: function initMaintenanceMode() {
  305. var MaintenanceMode = __webpack_require__(161);
  306. this.maintenanceMode = new MaintenanceMode();
  307. },
  308. isElementorMode: function isElementorMode() {
  309. return !!this.elements.$switchModeInput.val();
  310. },
  311. animateLoader: function animateLoader() {
  312. this.elements.$goToEditLink.addClass('elementor-animate');
  313. },
  314. goToSettingsTabFromHash: function goToSettingsTabFromHash() {
  315. var hash = location.hash.slice(1);
  316. if (hash) {
  317. this.goToSettingsTab(hash);
  318. }
  319. },
  320. goToSettingsTab: function goToSettingsTab(tabName) {
  321. var $activePage = this.elements.$settingsFormPages.filter('#' + tabName);
  322. if (!$activePage.length) {
  323. return;
  324. }
  325. this.elements.$activeSettingsPage.removeClass('elementor-active');
  326. this.elements.$activeSettingsTab.removeClass('nav-tab-active');
  327. var $activeTab = this.elements.$settingsTabs.filter('#elementor-settings-' + tabName);
  328. $activePage.addClass('elementor-active');
  329. $activeTab.addClass('nav-tab-active');
  330. this.elements.$settingsForm.attr('action', 'options.php#' + tabName);
  331. this.elements.$activeSettingsPage = $activePage;
  332. this.elements.$activeSettingsTab = $activeTab;
  333. },
  334. roleManager: {
  335. selectors: {
  336. body: 'elementor-role-manager',
  337. row: '.elementor-role-row',
  338. label: '.elementor-role-label',
  339. excludedIndicator: '.elementor-role-excluded-indicator',
  340. excludedField: 'input[name="elementor_exclude_user_roles[]"]',
  341. controlsContainer: '.elementor-role-controls',
  342. toggleHandle: '.elementor-role-toggle',
  343. arrowUp: 'dashicons-arrow-up',
  344. arrowDown: 'dashicons-arrow-down'
  345. },
  346. toggle: function toggle($trigger) {
  347. var self = this,
  348. $row = $trigger.closest(self.selectors.row),
  349. $toggleHandleIcon = $row.find(self.selectors.toggleHandle).find('.dashicons'),
  350. $controls = $row.find(self.selectors.controlsContainer);
  351. $controls.toggleClass('hidden');
  352. if ($controls.hasClass('hidden')) {
  353. $toggleHandleIcon.removeClass(self.selectors.arrowUp).addClass(self.selectors.arrowDown);
  354. } else {
  355. $toggleHandleIcon.removeClass(self.selectors.arrowDown).addClass(self.selectors.arrowUp);
  356. }
  357. self.updateLabel($row);
  358. },
  359. updateLabel: function updateLabel($row) {
  360. var self = this,
  361. $indicator = $row.find(self.selectors.excludedIndicator),
  362. excluded = $row.find(self.selectors.excludedField).is(':checked');
  363. if (excluded) {
  364. $indicator.html($indicator.data('excluded-label'));
  365. } else {
  366. $indicator.html('');
  367. }
  368. self.setAdvancedState($row, excluded);
  369. },
  370. setAdvancedState: function setAdvancedState($row, state) {
  371. var self = this,
  372. $controls = $row.find('input[type="checkbox"]').not(self.selectors.excludedField);
  373. $controls.each(function (index, input) {
  374. $(input).prop('disabled', state);
  375. });
  376. },
  377. bind: function bind() {
  378. var self = this;
  379. $(document).on('click', self.selectors.label + ',' + self.selectors.toggleHandle, function (event) {
  380. event.stopPropagation();
  381. event.preventDefault();
  382. self.toggle($(this));
  383. }).on('change', self.selectors.excludedField, function () {
  384. self.updateLabel($(this).closest(self.selectors.row));
  385. });
  386. },
  387. init: function init() {
  388. var self = this;
  389. if (!$('body[class*="' + self.selectors.body + '"]').length) {
  390. return;
  391. }
  392. self.bind();
  393. $(self.selectors.row).each(function (index, row) {
  394. self.updateLabel($(row));
  395. });
  396. }
  397. }
  398. });
  399. $(function () {
  400. window.elementorAdmin = new ElementorAdmin();
  401. elementorAdmin.elements.$window.trigger('elementor/admin/init');
  402. });
  403. })(jQuery);
  404. /***/ }),
  405. /***/ 161:
  406. /***/ (function(module, exports, __webpack_require__) {
  407. "use strict";
  408. var ViewModule = __webpack_require__(1),
  409. MaintenanceModeModule;
  410. MaintenanceModeModule = ViewModule.extend({
  411. getDefaultSettings: function getDefaultSettings() {
  412. return {
  413. selectors: {
  414. modeSelect: '.elementor_maintenance_mode_mode select',
  415. maintenanceModeTable: '#tab-maintenance_mode table',
  416. maintenanceModeDescriptions: '.elementor-maintenance-mode-description',
  417. excludeModeSelect: '.elementor_maintenance_mode_exclude_mode select',
  418. excludeRolesArea: '.elementor_maintenance_mode_exclude_roles',
  419. templateSelect: '.elementor_maintenance_mode_template_id select',
  420. editTemplateButton: '.elementor-edit-template',
  421. maintenanceModeError: '.elementor-maintenance-mode-error'
  422. },
  423. classes: {
  424. isEnabled: 'elementor-maintenance-mode-is-enabled'
  425. }
  426. };
  427. },
  428. getDefaultElements: function getDefaultElements() {
  429. var elements = {},
  430. selectors = this.getSettings('selectors');
  431. elements.$modeSelect = jQuery(selectors.modeSelect);
  432. elements.$maintenanceModeTable = elements.$modeSelect.parents(selectors.maintenanceModeTable);
  433. elements.$excludeModeSelect = elements.$maintenanceModeTable.find(selectors.excludeModeSelect);
  434. elements.$excludeRolesArea = elements.$maintenanceModeTable.find(selectors.excludeRolesArea);
  435. elements.$templateSelect = elements.$maintenanceModeTable.find(selectors.templateSelect);
  436. elements.$editTemplateButton = elements.$maintenanceModeTable.find(selectors.editTemplateButton);
  437. elements.$maintenanceModeDescriptions = elements.$maintenanceModeTable.find(selectors.maintenanceModeDescriptions);
  438. elements.$maintenanceModeError = elements.$maintenanceModeTable.find(selectors.maintenanceModeError);
  439. return elements;
  440. },
  441. bindEvents: function bindEvents() {
  442. var settings = this.getSettings(),
  443. elements = this.elements;
  444. elements.$modeSelect.on('change', function () {
  445. elements.$maintenanceModeTable.toggleClass(settings.classes.isEnabled, !!elements.$modeSelect.val());
  446. elements.$maintenanceModeDescriptions.hide();
  447. elements.$maintenanceModeDescriptions.filter('[data-value="' + elements.$modeSelect.val() + '"]').show();
  448. }).trigger('change');
  449. elements.$excludeModeSelect.on('change', function () {
  450. elements.$excludeRolesArea.toggle('custom' === elements.$excludeModeSelect.val());
  451. }).trigger('change');
  452. elements.$templateSelect.on('change', function () {
  453. var templateID = elements.$templateSelect.val();
  454. if (!templateID) {
  455. elements.$editTemplateButton.hide();
  456. elements.$maintenanceModeError.show();
  457. return;
  458. }
  459. var editUrl = elementorAdmin.config.home_url + '?p=' + templateID + '&elementor';
  460. elements.$editTemplateButton.prop('href', editUrl).show();
  461. elements.$maintenanceModeError.hide();
  462. }).trigger('change');
  463. }
  464. });
  465. module.exports = MaintenanceModeModule;
  466. /***/ }),
  467. /***/ 2:
  468. /***/ (function(module, exports, __webpack_require__) {
  469. "use strict";
  470. var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
  471. var Module = function Module() {
  472. var $ = jQuery,
  473. instanceParams = arguments,
  474. self = this,
  475. settings,
  476. events = {};
  477. var ensureClosureMethods = function ensureClosureMethods() {
  478. $.each(self, function (methodName) {
  479. var oldMethod = self[methodName];
  480. if ('function' !== typeof oldMethod) {
  481. return;
  482. }
  483. self[methodName] = function () {
  484. return oldMethod.apply(self, arguments);
  485. };
  486. });
  487. };
  488. var initSettings = function initSettings() {
  489. settings = self.getDefaultSettings();
  490. var instanceSettings = instanceParams[0];
  491. if (instanceSettings) {
  492. $.extend(settings, instanceSettings);
  493. }
  494. };
  495. var init = function init() {
  496. self.__construct.apply(self, instanceParams);
  497. ensureClosureMethods();
  498. initSettings();
  499. self.trigger('init');
  500. };
  501. this.getItems = function (items, itemKey) {
  502. if (itemKey) {
  503. var keyStack = itemKey.split('.'),
  504. currentKey = keyStack.splice(0, 1);
  505. if (!keyStack.length) {
  506. return items[currentKey];
  507. }
  508. if (!items[currentKey]) {
  509. return;
  510. }
  511. return this.getItems(items[currentKey], keyStack.join('.'));
  512. }
  513. return items;
  514. };
  515. this.getSettings = function (setting) {
  516. return this.getItems(settings, setting);
  517. };
  518. this.setSettings = function (settingKey, value, settingsContainer) {
  519. if (!settingsContainer) {
  520. settingsContainer = settings;
  521. }
  522. if ('object' === (typeof settingKey === 'undefined' ? 'undefined' : _typeof(settingKey))) {
  523. $.extend(settingsContainer, settingKey);
  524. return self;
  525. }
  526. var keyStack = settingKey.split('.'),
  527. currentKey = keyStack.splice(0, 1);
  528. if (!keyStack.length) {
  529. settingsContainer[currentKey] = value;
  530. return self;
  531. }
  532. if (!settingsContainer[currentKey]) {
  533. settingsContainer[currentKey] = {};
  534. }
  535. return self.setSettings(keyStack.join('.'), value, settingsContainer[currentKey]);
  536. };
  537. this.forceMethodImplementation = function (methodArguments) {
  538. var functionName = methodArguments.callee.name;
  539. throw new ReferenceError('The method ' + functionName + ' must to be implemented in the inheritor child.');
  540. };
  541. this.on = function (eventName, callback) {
  542. if ('object' === (typeof eventName === 'undefined' ? 'undefined' : _typeof(eventName))) {
  543. $.each(eventName, function (singleEventName) {
  544. self.on(singleEventName, this);
  545. });
  546. return self;
  547. }
  548. var eventNames = eventName.split(' ');
  549. eventNames.forEach(function (singleEventName) {
  550. if (!events[singleEventName]) {
  551. events[singleEventName] = [];
  552. }
  553. events[singleEventName].push(callback);
  554. });
  555. return self;
  556. };
  557. this.off = function (eventName, callback) {
  558. if (!events[eventName]) {
  559. return self;
  560. }
  561. if (!callback) {
  562. delete events[eventName];
  563. return self;
  564. }
  565. var callbackIndex = events[eventName].indexOf(callback);
  566. if (-1 !== callbackIndex) {
  567. delete events[eventName][callbackIndex];
  568. }
  569. return self;
  570. };
  571. this.trigger = function (eventName) {
  572. var methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1),
  573. params = Array.prototype.slice.call(arguments, 1);
  574. if (self[methodName]) {
  575. self[methodName].apply(self, params);
  576. }
  577. var callbacks = events[eventName];
  578. if (!callbacks) {
  579. return self;
  580. }
  581. $.each(callbacks, function (index, callback) {
  582. callback.apply(self, params);
  583. });
  584. return self;
  585. };
  586. init();
  587. };
  588. Module.prototype.__construct = function () {};
  589. Module.prototype.getDefaultSettings = function () {
  590. return {};
  591. };
  592. Module.extendsCount = 0;
  593. Module.extend = function (properties) {
  594. var $ = jQuery,
  595. parent = this;
  596. var child = function child() {
  597. return parent.apply(this, arguments);
  598. };
  599. $.extend(child, parent);
  600. child.prototype = Object.create($.extend({}, parent.prototype, properties));
  601. child.prototype.constructor = child;
  602. /*
  603. * Constructor ID is used to set an unique ID
  604. * to every extend of the Module.
  605. *
  606. * It's useful in some cases such as unique
  607. * listener for frontend handlers.
  608. */
  609. var constructorID = ++Module.extendsCount;
  610. child.prototype.getConstructorID = function () {
  611. return constructorID;
  612. };
  613. child.__super__ = parent.prototype;
  614. return child;
  615. };
  616. module.exports = Module;
  617. /***/ })
  618. /******/ });
  619. //# sourceMappingURL=admin.js.map