plugin.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /**
  2. * plugin.js
  3. *
  4. * Copyright, Moxiecode Systems AB
  5. * Released under LGPL License.
  6. *
  7. * License: http://www.tinymce.com/license
  8. * Contributing: http://www.tinymce.com/contributing
  9. */
  10. /*global tinymce:true */
  11. tinymce.PluginManager.add('insertdatetime', function(editor) {
  12. var daysShort = "Sun Mon Tue Wed Thu Fri Sat Sun".split(' ');
  13. var daysLong = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(' ');
  14. var monthsShort = "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(' ');
  15. var monthsLong = "January February March April May June July August September October November December".split(' ');
  16. var menuItems = [], lastFormat, defaultButtonTimeFormat;
  17. function getDateTime(fmt, date) {
  18. function addZeros(value, len) {
  19. value = "" + value;
  20. if (value.length < len) {
  21. for (var i = 0; i < (len - value.length); i++) {
  22. value = "0" + value;
  23. }
  24. }
  25. return value;
  26. }
  27. date = date || new Date();
  28. fmt = fmt.replace("%D", "%m/%d/%Y");
  29. fmt = fmt.replace("%r", "%I:%M:%S %p");
  30. fmt = fmt.replace("%Y", "" + date.getFullYear());
  31. fmt = fmt.replace("%y", "" + date.getYear());
  32. fmt = fmt.replace("%m", addZeros(date.getMonth() + 1, 2));
  33. fmt = fmt.replace("%d", addZeros(date.getDate(), 2));
  34. fmt = fmt.replace("%H", "" + addZeros(date.getHours(), 2));
  35. fmt = fmt.replace("%M", "" + addZeros(date.getMinutes(), 2));
  36. fmt = fmt.replace("%S", "" + addZeros(date.getSeconds(), 2));
  37. fmt = fmt.replace("%I", "" + ((date.getHours() + 11) % 12 + 1));
  38. fmt = fmt.replace("%p", "" + (date.getHours() < 12 ? "AM" : "PM"));
  39. fmt = fmt.replace("%B", "" + editor.translate(monthsLong[date.getMonth()]));
  40. fmt = fmt.replace("%b", "" + editor.translate(monthsShort[date.getMonth()]));
  41. fmt = fmt.replace("%A", "" + editor.translate(daysLong[date.getDay()]));
  42. fmt = fmt.replace("%a", "" + editor.translate(daysShort[date.getDay()]));
  43. fmt = fmt.replace("%%", "%");
  44. return fmt;
  45. }
  46. function insertDateTime(format) {
  47. var html = getDateTime(format);
  48. if (editor.settings.insertdatetime_element) {
  49. var computerTime;
  50. if (/%[HMSIp]/.test(format)) {
  51. computerTime = getDateTime("%Y-%m-%dT%H:%M");
  52. } else {
  53. computerTime = getDateTime("%Y-%m-%d");
  54. }
  55. html = '<time datetime="' + computerTime + '">' + html + '</time>';
  56. var timeElm = editor.dom.getParent(editor.selection.getStart(), 'time');
  57. if (timeElm) {
  58. editor.dom.setOuterHTML(timeElm, html);
  59. return;
  60. }
  61. }
  62. editor.insertContent(html);
  63. }
  64. editor.addCommand('mceInsertDate', function() {
  65. insertDateTime(editor.getParam("insertdatetime_dateformat", editor.translate("%Y-%m-%d")));
  66. });
  67. editor.addCommand('mceInsertTime', function() {
  68. insertDateTime(editor.getParam("insertdatetime_timeformat", editor.translate('%H:%M:%S')));
  69. });
  70. editor.addButton('insertdatetime', {
  71. type: 'splitbutton',
  72. title: 'Insert date/time',
  73. onclick: function() {
  74. insertDateTime(lastFormat || defaultButtonTimeFormat);
  75. },
  76. menu: menuItems
  77. });
  78. tinymce.each(editor.settings.insertdatetime_formats || [
  79. "%H:%M:%S",
  80. "%Y-%m-%d",
  81. "%I:%M:%S %p",
  82. "%D"
  83. ], function(fmt) {
  84. if (!defaultButtonTimeFormat) {
  85. defaultButtonTimeFormat = fmt;
  86. }
  87. menuItems.push({
  88. text: getDateTime(fmt),
  89. onclick: function() {
  90. lastFormat = fmt;
  91. insertDateTime(fmt);
  92. }
  93. });
  94. });
  95. editor.addMenuItem('insertdatetime', {
  96. icon: 'date',
  97. text: 'Insert date/time',
  98. menu: menuItems,
  99. context: 'insert'
  100. });
  101. });