Subversion Repositories oidplus

Rev

Rev 1422 | View as "text/javascript" | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /**
  2.  * Copyright (c) Tiny Technologies, Inc. All rights reserved.
  3.  * Licensed under the LGPL or a commercial license.
  4.  * For LGPL see License.txt in the project root for license information.
  5.  * For commercial licenses see https://www.tiny.cloud/
  6.  *
  7.  * Version: 5.10.9 (2023-11-15)
  8.  */
  9. (function () {
  10.     'use strict';
  11.  
  12.     var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');
  13.  
  14.     var getDateFormat = function (editor) {
  15.       return editor.getParam('insertdatetime_dateformat', editor.translate('%Y-%m-%d'));
  16.     };
  17.     var getTimeFormat = function (editor) {
  18.       return editor.getParam('insertdatetime_timeformat', editor.translate('%H:%M:%S'));
  19.     };
  20.     var getFormats = function (editor) {
  21.       return editor.getParam('insertdatetime_formats', [
  22.         '%H:%M:%S',
  23.         '%Y-%m-%d',
  24.         '%I:%M:%S %p',
  25.         '%D'
  26.       ]);
  27.     };
  28.     var getDefaultDateTime = function (editor) {
  29.       var formats = getFormats(editor);
  30.       return formats.length > 0 ? formats[0] : getTimeFormat(editor);
  31.     };
  32.     var shouldInsertTimeElement = function (editor) {
  33.       return editor.getParam('insertdatetime_element', false);
  34.     };
  35.  
  36.     var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');
  37.     var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');
  38.     var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');
  39.     var monthsLong = 'January February March April May June July August September October November December'.split(' ');
  40.     var addZeros = function (value, len) {
  41.       value = '' + value;
  42.       if (value.length < len) {
  43.         for (var i = 0; i < len - value.length; i++) {
  44.           value = '0' + value;
  45.         }
  46.       }
  47.       return value;
  48.     };
  49.     var getDateTime = function (editor, fmt, date) {
  50.       if (date === void 0) {
  51.         date = new Date();
  52.       }
  53.       fmt = fmt.replace('%D', '%m/%d/%Y');
  54.       fmt = fmt.replace('%r', '%I:%M:%S %p');
  55.       fmt = fmt.replace('%Y', '' + date.getFullYear());
  56.       fmt = fmt.replace('%y', '' + date.getYear());
  57.       fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));
  58.       fmt = fmt.replace('%d', addZeros(date.getDate(), 2));
  59.       fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));
  60.       fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));
  61.       fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));
  62.       fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));
  63.       fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));
  64.       fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));
  65.       fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));
  66.       fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));
  67.       fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));
  68.       fmt = fmt.replace('%%', '%');
  69.       return fmt;
  70.     };
  71.     var updateElement = function (editor, timeElm, computerTime, userTime) {
  72.       var newTimeElm = editor.dom.create('time', { datetime: computerTime }, userTime);
  73.       timeElm.parentNode.insertBefore(newTimeElm, timeElm);
  74.       editor.dom.remove(timeElm);
  75.       editor.selection.select(newTimeElm, true);
  76.       editor.selection.collapse(false);
  77.     };
  78.     var insertDateTime = function (editor, format) {
  79.       if (shouldInsertTimeElement(editor)) {
  80.         var userTime = getDateTime(editor, format);
  81.         var computerTime = void 0;
  82.         if (/%[HMSIp]/.test(format)) {
  83.           computerTime = getDateTime(editor, '%Y-%m-%dT%H:%M');
  84.         } else {
  85.           computerTime = getDateTime(editor, '%Y-%m-%d');
  86.         }
  87.         var timeElm = editor.dom.getParent(editor.selection.getStart(), 'time');
  88.         if (timeElm) {
  89.           updateElement(editor, timeElm, computerTime, userTime);
  90.         } else {
  91.           editor.insertContent('<time datetime="' + computerTime + '">' + userTime + '</time>');
  92.         }
  93.       } else {
  94.         editor.insertContent(getDateTime(editor, format));
  95.       }
  96.     };
  97.  
  98.     var register$1 = function (editor) {
  99.       editor.addCommand('mceInsertDate', function (_ui, value) {
  100.         insertDateTime(editor, value !== null && value !== void 0 ? value : getDateFormat(editor));
  101.       });
  102.       editor.addCommand('mceInsertTime', function (_ui, value) {
  103.         insertDateTime(editor, value !== null && value !== void 0 ? value : getTimeFormat(editor));
  104.       });
  105.     };
  106.  
  107.     var Cell = function (initial) {
  108.       var value = initial;
  109.       var get = function () {
  110.         return value;
  111.       };
  112.       var set = function (v) {
  113.         value = v;
  114.       };
  115.       return {
  116.         get: get,
  117.         set: set
  118.       };
  119.     };
  120.  
  121.     var global = tinymce.util.Tools.resolve('tinymce.util.Tools');
  122.  
  123.     var register = function (editor) {
  124.       var formats = getFormats(editor);
  125.       var defaultFormat = Cell(getDefaultDateTime(editor));
  126.       var insertDateTime = function (format) {
  127.         return editor.execCommand('mceInsertDate', false, format);
  128.       };
  129.       editor.ui.registry.addSplitButton('insertdatetime', {
  130.         icon: 'insert-time',
  131.         tooltip: 'Insert date/time',
  132.         select: function (value) {
  133.           return value === defaultFormat.get();
  134.         },
  135.         fetch: function (done) {
  136.           done(global.map(formats, function (format) {
  137.             return {
  138.               type: 'choiceitem',
  139.               text: getDateTime(editor, format),
  140.               value: format
  141.             };
  142.           }));
  143.         },
  144.         onAction: function (_api) {
  145.           insertDateTime(defaultFormat.get());
  146.         },
  147.         onItemAction: function (_api, value) {
  148.           defaultFormat.set(value);
  149.           insertDateTime(value);
  150.         }
  151.       });
  152.       var makeMenuItemHandler = function (format) {
  153.         return function () {
  154.           defaultFormat.set(format);
  155.           insertDateTime(format);
  156.         };
  157.       };
  158.       editor.ui.registry.addNestedMenuItem('insertdatetime', {
  159.         icon: 'insert-time',
  160.         text: 'Date/time',
  161.         getSubmenuItems: function () {
  162.           return global.map(formats, function (format) {
  163.             return {
  164.               type: 'menuitem',
  165.               text: getDateTime(editor, format),
  166.               onAction: makeMenuItemHandler(format)
  167.             };
  168.           });
  169.         }
  170.       });
  171.     };
  172.  
  173.     function Plugin () {
  174.       global$1.add('insertdatetime', function (editor) {
  175.         register$1(editor);
  176.         register(editor);
  177.       });
  178.     }
  179.  
  180.     Plugin();
  181.  
  182. }());
  183.