mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
8f23fa99a5
The 'admin' module will be split off from 'framework', where 'framework' only provides (mostly) frontend-agnostic PHP classes. For example, HTMLEditorField.php has a TinyMCEConfig.php driver, but doesn't come with its own JS includes.
122 lines
3.4 KiB
JavaScript
122 lines
3.4 KiB
JavaScript
/**
|
|
* plugin.js
|
|
*
|
|
* Released under LGPL License.
|
|
* Copyright (c) 1999-2015 Ephox Corp. All rights reserved
|
|
*
|
|
* License: http://www.tinymce.com/license
|
|
* Contributing: http://www.tinymce.com/contributing
|
|
*/
|
|
|
|
/*global tinymce:true */
|
|
|
|
tinymce.PluginManager.add('insertdatetime', function(editor) {
|
|
var daysShort = "Sun Mon Tue Wed Thu Fri Sat Sun".split(' ');
|
|
var daysLong = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(' ');
|
|
var monthsShort = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(' ');
|
|
var monthsLong = "January February March April May June July August September October November December".split(' ');
|
|
var menuItems = [], lastFormat, defaultButtonTimeFormat;
|
|
|
|
function getDateTime(fmt, date) {
|
|
function addZeros(value, len) {
|
|
value = "" + value;
|
|
|
|
if (value.length < len) {
|
|
for (var i = 0; i < (len - value.length); i++) {
|
|
value = "0" + value;
|
|
}
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
date = date || new Date();
|
|
|
|
fmt = fmt.replace("%D", "%m/%d/%Y");
|
|
fmt = fmt.replace("%r", "%I:%M:%S %p");
|
|
fmt = fmt.replace("%Y", "" + date.getFullYear());
|
|
fmt = fmt.replace("%y", "" + date.getYear());
|
|
fmt = fmt.replace("%m", addZeros(date.getMonth() + 1, 2));
|
|
fmt = fmt.replace("%d", addZeros(date.getDate(), 2));
|
|
fmt = fmt.replace("%H", "" + addZeros(date.getHours(), 2));
|
|
fmt = fmt.replace("%M", "" + addZeros(date.getMinutes(), 2));
|
|
fmt = fmt.replace("%S", "" + addZeros(date.getSeconds(), 2));
|
|
fmt = fmt.replace("%I", "" + ((date.getHours() + 11) % 12 + 1));
|
|
fmt = fmt.replace("%p", "" + (date.getHours() < 12 ? "AM" : "PM"));
|
|
fmt = fmt.replace("%B", "" + editor.translate(monthsLong[date.getMonth()]));
|
|
fmt = fmt.replace("%b", "" + editor.translate(monthsShort[date.getMonth()]));
|
|
fmt = fmt.replace("%A", "" + editor.translate(daysLong[date.getDay()]));
|
|
fmt = fmt.replace("%a", "" + editor.translate(daysShort[date.getDay()]));
|
|
fmt = fmt.replace("%%", "%");
|
|
|
|
return fmt;
|
|
}
|
|
|
|
function insertDateTime(format) {
|
|
var html = getDateTime(format);
|
|
|
|
if (editor.settings.insertdatetime_element) {
|
|
var computerTime;
|
|
|
|
if (/%[HMSIp]/.test(format)) {
|
|
computerTime = getDateTime("%Y-%m-%dT%H:%M");
|
|
} else {
|
|
computerTime = getDateTime("%Y-%m-%d");
|
|
}
|
|
|
|
html = '<time datetime="' + computerTime + '">' + html + '</time>';
|
|
|
|
var timeElm = editor.dom.getParent(editor.selection.getStart(), 'time');
|
|
if (timeElm) {
|
|
editor.dom.setOuterHTML(timeElm, html);
|
|
return;
|
|
}
|
|
}
|
|
|
|
editor.insertContent(html);
|
|
}
|
|
|
|
editor.addCommand('mceInsertDate', function() {
|
|
insertDateTime(editor.getParam("insertdatetime_dateformat", editor.translate("%Y-%m-%d")));
|
|
});
|
|
|
|
editor.addCommand('mceInsertTime', function() {
|
|
insertDateTime(editor.getParam("insertdatetime_timeformat", editor.translate('%H:%M:%S')));
|
|
});
|
|
|
|
editor.addButton('insertdatetime', {
|
|
type: 'splitbutton',
|
|
title: 'Insert date/time',
|
|
onclick: function() {
|
|
insertDateTime(lastFormat || defaultButtonTimeFormat);
|
|
},
|
|
menu: menuItems
|
|
});
|
|
|
|
tinymce.each(editor.settings.insertdatetime_formats || [
|
|
"%H:%M:%S",
|
|
"%Y-%m-%d",
|
|
"%I:%M:%S %p",
|
|
"%D"
|
|
], function(fmt) {
|
|
if (!defaultButtonTimeFormat) {
|
|
defaultButtonTimeFormat = fmt;
|
|
}
|
|
|
|
menuItems.push({
|
|
text: getDateTime(fmt),
|
|
onclick: function() {
|
|
lastFormat = fmt;
|
|
insertDateTime(fmt);
|
|
}
|
|
});
|
|
});
|
|
|
|
editor.addMenuItem('insertdatetime', {
|
|
icon: 'date',
|
|
text: 'Insert date/time',
|
|
menu: menuItems,
|
|
context: 'insert'
|
|
});
|
|
});
|