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 | }()); |