Subversion Repositories oidplus

Rev

Rev 1042 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
597 daniel-mar 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
 *
1422 daniel-mar 7
 * Version: 5.10.8 (2023-10-19)
597 daniel-mar 8
 */
9
(function () {
10
    'use strict';
11
 
637 daniel-mar 12
    var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');
597 daniel-mar 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) {
637 daniel-mar 50
      if (date === void 0) {
51
        date = new Date();
52
      }
597 daniel-mar 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
 
637 daniel-mar 98
    var register$1 = function (editor) {
679 daniel-mar 99
      editor.addCommand('mceInsertDate', function (_ui, value) {
100
        insertDateTime(editor, value !== null && value !== void 0 ? value : getDateFormat(editor));
597 daniel-mar 101
      });
679 daniel-mar 102
      editor.addCommand('mceInsertTime', function (_ui, value) {
103
        insertDateTime(editor, value !== null && value !== void 0 ? value : getTimeFormat(editor));
597 daniel-mar 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
 
637 daniel-mar 121
    var global = tinymce.util.Tools.resolve('tinymce.util.Tools');
597 daniel-mar 122
 
637 daniel-mar 123
    var register = function (editor) {
597 daniel-mar 124
      var formats = getFormats(editor);
125
      var defaultFormat = Cell(getDefaultDateTime(editor));
679 daniel-mar 126
      var insertDateTime = function (format) {
127
        return editor.execCommand('mceInsertDate', false, format);
128
      };
597 daniel-mar 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) {
637 daniel-mar 136
          done(global.map(formats, function (format) {
597 daniel-mar 137
            return {
138
              type: 'choiceitem',
139
              text: getDateTime(editor, format),
140
              value: format
141
            };
142
          }));
143
        },
144
        onAction: function (_api) {
679 daniel-mar 145
          insertDateTime(defaultFormat.get());
597 daniel-mar 146
        },
147
        onItemAction: function (_api, value) {
148
          defaultFormat.set(value);
679 daniel-mar 149
          insertDateTime(value);
597 daniel-mar 150
        }
151
      });
152
      var makeMenuItemHandler = function (format) {
153
        return function () {
154
          defaultFormat.set(format);
679 daniel-mar 155
          insertDateTime(format);
597 daniel-mar 156
        };
157
      };
158
      editor.ui.registry.addNestedMenuItem('insertdatetime', {
159
        icon: 'insert-time',
160
        text: 'Date/time',
161
        getSubmenuItems: function () {
637 daniel-mar 162
          return global.map(formats, function (format) {
597 daniel-mar 163
            return {
164
              type: 'menuitem',
165
              text: getDateTime(editor, format),
166
              onAction: makeMenuItemHandler(format)
167
            };
168
          });
169
        }
170
      });
171
    };
172
 
173
    function Plugin () {
637 daniel-mar 174
      global$1.add('insertdatetime', function (editor) {
175
        register$1(editor);
597 daniel-mar 176
        register(editor);
177
      });
178
    }
179
 
180
    Plugin();
181
 
182
}());