Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

198 строки
5.9 KiB

  1. /**
  2. * Copyright © Magento, Inc. All rights reserved.
  3. * See COPYING.txt for license details.
  4. */
  5. /* global Variables, updateElementAtCursor */
  6. define([
  7. 'jquery',
  8. 'mage/translate',
  9. 'Magento_Ui/js/modal/modal',
  10. 'jquery/ui',
  11. 'prototype'
  12. ], function (jQuery, $t) {
  13. 'use strict';
  14. window.Variables = {
  15. textareaElementId: null,
  16. variablesContent: null,
  17. dialogWindow: null,
  18. dialogWindowId: 'variables-chooser',
  19. overlayShowEffectOptions: null,
  20. overlayHideEffectOptions: null,
  21. insertFunction: 'Variables.insertVariable',
  22. variablesValue: [],
  23. /**
  24. * @param {*} textareaElementId
  25. * @param {Function} insertFunction
  26. */
  27. init: function (textareaElementId, insertFunction) {
  28. if ($(textareaElementId)) {
  29. this.textareaElementId = textareaElementId;
  30. }
  31. if (insertFunction) {
  32. this.insertFunction = insertFunction;
  33. }
  34. },
  35. /**
  36. * reset data.
  37. */
  38. resetData: function () {
  39. this.variablesContent = null;
  40. this.dialogWindow = null;
  41. },
  42. /**
  43. * @param {Object} variables
  44. */
  45. openVariableChooser: function (variables) {
  46. if (this.variablesContent == null && variables) {
  47. this.variablesContent = '<ul class="insert-variable">';
  48. variables.each(function (variableGroup) {
  49. if (variableGroup.label && variableGroup.value) {
  50. this.variablesContent += '<li><b>' + variableGroup.label.escapeHTML() + '</b></li>';
  51. variableGroup.value.each(function (variable) {
  52. if (variable.value && variable.label) {
  53. this.variablesValue.push(variable.value);
  54. this.variablesContent += '<li>' +
  55. this.prepareVariableRow(this.variablesValue.length, variable.label) + '</li>';
  56. }
  57. }.bind(this));
  58. }
  59. }.bind(this));
  60. this.variablesContent += '</ul>';
  61. }
  62. if (this.variablesContent) {
  63. this.openDialogWindow(this.variablesContent);
  64. }
  65. },
  66. /**
  67. * @param {*} variablesContent
  68. */
  69. openDialogWindow: function (variablesContent) {
  70. var windowId = this.dialogWindowId;
  71. jQuery('<div id="' + windowId + '">' + variablesContent + '</div>').modal({
  72. title: $t('Insert Variable...'),
  73. type: 'slide',
  74. buttons: [],
  75. /** @inheritdoc */
  76. closed: function (e, modal) {
  77. modal.modal.remove();
  78. }
  79. });
  80. jQuery('#' + windowId).modal('openModal');
  81. },
  82. /**
  83. * Close dialog window.
  84. */
  85. closeDialogWindow: function () {
  86. jQuery('#' + this.dialogWindowId).modal('closeModal');
  87. },
  88. /**
  89. * @param {Number} index
  90. * @param {*} varLabel
  91. * @return {String}
  92. */
  93. prepareVariableRow: function (index, varLabel) {
  94. return '<a href="#" onclick="' +
  95. this.insertFunction +
  96. '(' +
  97. index +
  98. ');return false;">' +
  99. varLabel.escapeHTML() +
  100. '</a>';
  101. },
  102. /**
  103. * @param {*} variable
  104. */
  105. insertVariable: function (variable) {
  106. var windowId = this.dialogWindowId,
  107. textareaElm, scrollPos;
  108. jQuery('#' + windowId).modal('closeModal');
  109. textareaElm = $(this.textareaElementId);
  110. if (textareaElm) {
  111. scrollPos = textareaElm.scrollTop;
  112. if (!isNaN(variable)) {
  113. updateElementAtCursor(textareaElm, Variables.variablesValue[variable - 1]);
  114. } else {
  115. updateElementAtCursor(textareaElm, variable);
  116. }
  117. textareaElm.focus();
  118. textareaElm.scrollTop = scrollPos;
  119. jQuery(textareaElm).trigger('change');
  120. textareaElm = null;
  121. }
  122. }
  123. };
  124. window.MagentovariablePlugin = {
  125. editor: null,
  126. variables: null,
  127. textareaId: null,
  128. /**
  129. * @param {*} editor
  130. */
  131. setEditor: function (editor) {
  132. this.editor = editor;
  133. },
  134. /**
  135. * @param {String} url
  136. * @param {*} textareaId
  137. */
  138. loadChooser: function (url, textareaId) {
  139. this.textareaId = textareaId;
  140. if (this.variables == null) {
  141. new Ajax.Request(url, {
  142. parameters: {},
  143. onComplete: function (transport) {
  144. if (transport.responseText.isJSON()) {
  145. Variables.init(null, 'MagentovariablePlugin.insertVariable');
  146. this.variables = transport.responseText.evalJSON();
  147. this.openChooser(this.variables);
  148. }
  149. }.bind(this)
  150. });
  151. } else {
  152. this.openChooser(this.variables);
  153. }
  154. },
  155. /**
  156. * @param {*} variables
  157. */
  158. openChooser: function (variables) {
  159. Variables.openVariableChooser(variables);
  160. },
  161. /**
  162. * @param {*} value
  163. */
  164. insertVariable: function (value) {
  165. if (this.textareaId) {
  166. Variables.init(this.textareaId);
  167. Variables.insertVariable(value);
  168. } else {
  169. Variables.closeDialogWindow();
  170. this.editor.execCommand('mceInsertContent', false, value);
  171. }
  172. }
  173. };
  174. });