plugin.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. (function () {
  2. var template = (function () {
  3. 'use strict';
  4. var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
  5. var curry = function (f) {
  6. var x = [];
  7. for (var _i = 1; _i < arguments.length; _i++) {
  8. x[_i - 1] = arguments[_i];
  9. }
  10. var args = new Array(arguments.length - 1);
  11. for (var i = 1; i < arguments.length; i++)
  12. args[i - 1] = arguments[i];
  13. return function () {
  14. var x = [];
  15. for (var _i = 0; _i < arguments.length; _i++) {
  16. x[_i] = arguments[_i];
  17. }
  18. var newArgs = new Array(arguments.length);
  19. for (var j = 0; j < newArgs.length; j++)
  20. newArgs[j] = arguments[j];
  21. var all = args.concat(newArgs);
  22. return f.apply(null, all);
  23. };
  24. };
  25. var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
  26. var global$2 = tinymce.util.Tools.resolve('tinymce.util.XHR');
  27. var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
  28. var getCreationDateClasses = function (editor) {
  29. return editor.getParam('template_cdate_classes', 'cdate');
  30. };
  31. var getModificationDateClasses = function (editor) {
  32. return editor.getParam('template_mdate_classes', 'mdate');
  33. };
  34. var getSelectedContentClasses = function (editor) {
  35. return editor.getParam('template_selected_content_classes', 'selcontent');
  36. };
  37. var getPreviewReplaceValues = function (editor) {
  38. return editor.getParam('template_preview_replace_values');
  39. };
  40. var getTemplateReplaceValues = function (editor) {
  41. return editor.getParam('template_replace_values');
  42. };
  43. var getTemplates = function (editorSettings) {
  44. return editorSettings.templates;
  45. };
  46. var getCdateFormat = function (editor) {
  47. return editor.getParam('template_cdate_format', editor.getLang('template.cdate_format'));
  48. };
  49. var getMdateFormat = function (editor) {
  50. return editor.getParam('template_mdate_format', editor.getLang('template.mdate_format'));
  51. };
  52. var getDialogWidth = function (editor) {
  53. return editor.getParam('template_popup_width', 600);
  54. };
  55. var getDialogHeight = function (editor) {
  56. return Math.min(global$3.DOM.getViewPort().h, editor.getParam('template_popup_height', 500));
  57. };
  58. var $_j4vdpr9jkmcws43 = {
  59. getCreationDateClasses: getCreationDateClasses,
  60. getModificationDateClasses: getModificationDateClasses,
  61. getSelectedContentClasses: getSelectedContentClasses,
  62. getPreviewReplaceValues: getPreviewReplaceValues,
  63. getTemplateReplaceValues: getTemplateReplaceValues,
  64. getTemplates: getTemplates,
  65. getCdateFormat: getCdateFormat,
  66. getMdateFormat: getMdateFormat,
  67. getDialogWidth: getDialogWidth,
  68. getDialogHeight: getDialogHeight
  69. };
  70. var addZeros = function (value, len) {
  71. value = '' + value;
  72. if (value.length < len) {
  73. for (var i = 0; i < len - value.length; i++) {
  74. value = '0' + value;
  75. }
  76. }
  77. return value;
  78. };
  79. var getDateTime = function (editor, fmt, date) {
  80. var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');
  81. var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');
  82. var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');
  83. var monthsLong = 'January February March April May June July August September October November December'.split(' ');
  84. date = date || new Date();
  85. fmt = fmt.replace('%D', '%m/%d/%Y');
  86. fmt = fmt.replace('%r', '%I:%M:%S %p');
  87. fmt = fmt.replace('%Y', '' + date.getFullYear());
  88. fmt = fmt.replace('%y', '' + date.getYear());
  89. fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));
  90. fmt = fmt.replace('%d', addZeros(date.getDate(), 2));
  91. fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));
  92. fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));
  93. fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));
  94. fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));
  95. fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));
  96. fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));
  97. fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));
  98. fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));
  99. fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));
  100. fmt = fmt.replace('%%', '%');
  101. return fmt;
  102. };
  103. var $_7qxvygrbjkmcws45 = { getDateTime: getDateTime };
  104. var createTemplateList = function (editorSettings, callback) {
  105. return function () {
  106. var templateList = $_j4vdpr9jkmcws43.getTemplates(editorSettings);
  107. if (typeof templateList === 'function') {
  108. templateList(callback);
  109. return;
  110. }
  111. if (typeof templateList === 'string') {
  112. global$2.send({
  113. url: templateList,
  114. success: function (text) {
  115. callback(JSON.parse(text));
  116. }
  117. });
  118. } else {
  119. callback(templateList);
  120. }
  121. };
  122. };
  123. var replaceTemplateValues = function (editor, html, templateValues) {
  124. global$1.each(templateValues, function (v, k) {
  125. if (typeof v === 'function') {
  126. v = v(k);
  127. }
  128. html = html.replace(new RegExp('\\{\\$' + k + '\\}', 'g'), v);
  129. });
  130. return html;
  131. };
  132. var replaceVals = function (editor, e) {
  133. var dom = editor.dom, vl = $_j4vdpr9jkmcws43.getTemplateReplaceValues(editor);
  134. global$1.each(dom.select('*', e), function (e) {
  135. global$1.each(vl, function (v, k) {
  136. if (dom.hasClass(e, k)) {
  137. if (typeof vl[k] === 'function') {
  138. vl[k](e);
  139. }
  140. }
  141. });
  142. });
  143. };
  144. var hasClass = function (n, c) {
  145. return new RegExp('\\b' + c + '\\b', 'g').test(n.className);
  146. };
  147. var insertTemplate = function (editor, ui, html) {
  148. var el;
  149. var n;
  150. var dom = editor.dom;
  151. var sel = editor.selection.getContent();
  152. html = replaceTemplateValues(editor, html, $_j4vdpr9jkmcws43.getTemplateReplaceValues(editor));
  153. el = dom.create('div', null, html);
  154. n = dom.select('.mceTmpl', el);
  155. if (n && n.length > 0) {
  156. el = dom.create('div', null);
  157. el.appendChild(n[0].cloneNode(true));
  158. }
  159. global$1.each(dom.select('*', el), function (n) {
  160. if (hasClass(n, $_j4vdpr9jkmcws43.getCreationDateClasses(editor).replace(/\s+/g, '|'))) {
  161. n.innerHTML = $_7qxvygrbjkmcws45.getDateTime(editor, $_j4vdpr9jkmcws43.getCdateFormat(editor));
  162. }
  163. if (hasClass(n, $_j4vdpr9jkmcws43.getModificationDateClasses(editor).replace(/\s+/g, '|'))) {
  164. n.innerHTML = $_7qxvygrbjkmcws45.getDateTime(editor, $_j4vdpr9jkmcws43.getMdateFormat(editor));
  165. }
  166. if (hasClass(n, $_j4vdpr9jkmcws43.getSelectedContentClasses(editor).replace(/\s+/g, '|'))) {
  167. n.innerHTML = sel;
  168. }
  169. });
  170. replaceVals(editor, el);
  171. editor.execCommand('mceInsertContent', false, el.innerHTML);
  172. editor.addVisual();
  173. };
  174. var $_dv7lv7r6jkmcws40 = {
  175. createTemplateList: createTemplateList,
  176. replaceTemplateValues: replaceTemplateValues,
  177. replaceVals: replaceVals,
  178. insertTemplate: insertTemplate
  179. };
  180. var register = function (editor) {
  181. editor.addCommand('mceInsertTemplate', curry($_dv7lv7r6jkmcws40.insertTemplate, editor));
  182. };
  183. var $_ga6lx9r4jkmcws3k = { register: register };
  184. var setup = function (editor) {
  185. editor.on('PreProcess', function (o) {
  186. var dom = editor.dom, dateFormat = $_j4vdpr9jkmcws43.getMdateFormat(editor);
  187. global$1.each(dom.select('div', o.node), function (e) {
  188. if (dom.hasClass(e, 'mceTmpl')) {
  189. global$1.each(dom.select('*', e), function (e) {
  190. if (dom.hasClass(e, editor.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|'))) {
  191. e.innerHTML = $_7qxvygrbjkmcws45.getDateTime(editor, dateFormat);
  192. }
  193. });
  194. $_dv7lv7r6jkmcws40.replaceVals(editor, e);
  195. }
  196. });
  197. });
  198. };
  199. var $_cfkisrrcjkmcws47 = { setup: setup };
  200. var insertIframeHtml = function (editor, win, html) {
  201. if (html.indexOf('<html>') === -1) {
  202. var contentCssLinks_1 = '';
  203. global$1.each(editor.contentCSS, function (url) {
  204. contentCssLinks_1 += '<link type="text/css" rel="stylesheet" href="' + editor.documentBaseURI.toAbsolute(url) + '">';
  205. });
  206. var bodyClass = editor.settings.body_class || '';
  207. if (bodyClass.indexOf('=') !== -1) {
  208. bodyClass = editor.getParam('body_class', '', 'hash');
  209. bodyClass = bodyClass[editor.id] || '';
  210. }
  211. html = '<!DOCTYPE html>' + '<html>' + '<head>' + contentCssLinks_1 + '</head>' + '<body class="' + bodyClass + '">' + html + '</body>' + '</html>';
  212. }
  213. html = $_dv7lv7r6jkmcws40.replaceTemplateValues(editor, html, $_j4vdpr9jkmcws43.getPreviewReplaceValues(editor));
  214. var doc = win.find('iframe')[0].getEl().contentWindow.document;
  215. doc.open();
  216. doc.write(html);
  217. doc.close();
  218. };
  219. var open = function (editor, templateList) {
  220. var win;
  221. var values = [];
  222. var templateHtml;
  223. if (!templateList || templateList.length === 0) {
  224. var message = editor.translate('No templates defined.');
  225. editor.notificationManager.open({
  226. text: message,
  227. type: 'info'
  228. });
  229. return;
  230. }
  231. global$1.each(templateList, function (template) {
  232. values.push({
  233. selected: !values.length,
  234. text: template.title,
  235. value: {
  236. url: template.url,
  237. content: template.content,
  238. description: template.description
  239. }
  240. });
  241. });
  242. var onSelectTemplate = function (e) {
  243. var value = e.control.value();
  244. if (value.url) {
  245. global$2.send({
  246. url: value.url,
  247. success: function (html) {
  248. templateHtml = html;
  249. insertIframeHtml(editor, win, templateHtml);
  250. }
  251. });
  252. } else {
  253. templateHtml = value.content;
  254. insertIframeHtml(editor, win, templateHtml);
  255. }
  256. win.find('#description')[0].text(e.control.value().description);
  257. };
  258. win = editor.windowManager.open({
  259. title: 'Insert template',
  260. layout: 'flex',
  261. direction: 'column',
  262. align: 'stretch',
  263. padding: 15,
  264. spacing: 10,
  265. items: [
  266. {
  267. type: 'form',
  268. flex: 0,
  269. padding: 0,
  270. items: [{
  271. type: 'container',
  272. label: 'Templates',
  273. items: {
  274. type: 'listbox',
  275. label: 'Templates',
  276. name: 'template',
  277. values: values,
  278. onselect: onSelectTemplate
  279. }
  280. }]
  281. },
  282. {
  283. type: 'label',
  284. name: 'description',
  285. label: 'Description',
  286. text: '\xA0'
  287. },
  288. {
  289. type: 'iframe',
  290. flex: 1,
  291. border: 1
  292. }
  293. ],
  294. onsubmit: function () {
  295. $_dv7lv7r6jkmcws40.insertTemplate(editor, false, templateHtml);
  296. },
  297. minWidth: $_j4vdpr9jkmcws43.getDialogWidth(editor),
  298. minHeight: $_j4vdpr9jkmcws43.getDialogHeight(editor)
  299. });
  300. win.find('listbox')[0].fire('select');
  301. };
  302. var $_3zebchrejkmcws4b = { open: open };
  303. var showDialog = function (editor) {
  304. return function (templates) {
  305. $_3zebchrejkmcws4b.open(editor, templates);
  306. };
  307. };
  308. var register$1 = function (editor) {
  309. editor.addButton('template', {
  310. title: 'Insert template',
  311. onclick: $_dv7lv7r6jkmcws40.createTemplateList(editor.settings, showDialog(editor))
  312. });
  313. editor.addMenuItem('template', {
  314. text: 'Template',
  315. onclick: $_dv7lv7r6jkmcws40.createTemplateList(editor.settings, showDialog(editor)),
  316. icon: 'template',
  317. context: 'insert'
  318. });
  319. };
  320. var $_3pj1nhrdjkmcws49 = { register: register$1 };
  321. global.add('template', function (editor) {
  322. $_3pj1nhrdjkmcws49.register(editor);
  323. $_ga6lx9r4jkmcws3k.register(editor);
  324. $_cfkisrrcjkmcws47.setup(editor);
  325. });
  326. function Plugin () {
  327. }
  328. return Plugin;
  329. }());
  330. })();