/static/scripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js

http://n23.googlecode.com/ · JavaScript · 221 lines · 164 code · 38 blank · 19 comment · 43 complexity · f34a7f8a7c51986be3834b41346a7a3f MD5 · raw file

  1. /**
  2. * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
  3. *
  4. * @author Moxiecode - based on work by Andrew Tetlaw
  5. * @copyright Copyright Š 2004-2008, Moxiecode Systems AB, All rights reserved.
  6. */
  7. tinyMCEPopup.requireLangPack();
  8. function initCommonAttributes(elm) {
  9. var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
  10. // Setup form data for common element attributes
  11. setFormValue('title', dom.getAttrib(elm, 'title'));
  12. setFormValue('id', dom.getAttrib(elm, 'id'));
  13. selectByValue(formObj, 'class', dom.getAttrib(elm, 'class'), true);
  14. setFormValue('style', dom.getAttrib(elm, 'style'));
  15. selectByValue(formObj, 'dir', dom.getAttrib(elm, 'dir'));
  16. setFormValue('lang', dom.getAttrib(elm, 'lang'));
  17. setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));
  18. setFormValue('onblur', dom.getAttrib(elm, 'onblur'));
  19. setFormValue('onclick', dom.getAttrib(elm, 'onclick'));
  20. setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));
  21. setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));
  22. setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));
  23. setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));
  24. setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));
  25. setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));
  26. setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));
  27. setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));
  28. setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));
  29. }
  30. function setFormValue(name, value) {
  31. if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;
  32. }
  33. function insertDateTime(id) {
  34. document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");
  35. }
  36. function getDateTime(d, fmt) {
  37. fmt = fmt.replace("%D", "%m/%d/%y");
  38. fmt = fmt.replace("%r", "%I:%M:%S %p");
  39. fmt = fmt.replace("%Y", "" + d.getFullYear());
  40. fmt = fmt.replace("%y", "" + d.getYear());
  41. fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));
  42. fmt = fmt.replace("%d", addZeros(d.getDate(), 2));
  43. fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));
  44. fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));
  45. fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));
  46. fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));
  47. fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));
  48. fmt = fmt.replace("%%", "%");
  49. return fmt;
  50. }
  51. function addZeros(value, len) {
  52. var i;
  53. value = "" + value;
  54. if (value.length < len) {
  55. for (i=0; i<(len-value.length); i++)
  56. value = "0" + value;
  57. }
  58. return value;
  59. }
  60. function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
  61. if (!form_obj || !form_obj.elements[field_name])
  62. return;
  63. var sel = form_obj.elements[field_name];
  64. var found = false;
  65. for (var i=0; i<sel.options.length; i++) {
  66. var option = sel.options[i];
  67. if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
  68. option.selected = true;
  69. found = true;
  70. } else
  71. option.selected = false;
  72. }
  73. if (!found && add_custom && value != '') {
  74. var option = new Option('Value: ' + value, value);
  75. option.selected = true;
  76. sel.options[sel.options.length] = option;
  77. }
  78. return found;
  79. }
  80. function setAttrib(elm, attrib, value) {
  81. var formObj = document.forms[0];
  82. var valueElm = formObj.elements[attrib.toLowerCase()];
  83. tinyMCEPopup.editor.dom.setAttrib(elm, attrib, value || valueElm.value);
  84. }
  85. function setAllCommonAttribs(elm) {
  86. setAttrib(elm, 'title');
  87. setAttrib(elm, 'id');
  88. setAttrib(elm, 'class');
  89. setAttrib(elm, 'style');
  90. setAttrib(elm, 'dir');
  91. setAttrib(elm, 'lang');
  92. /*setAttrib(elm, 'onfocus');
  93. setAttrib(elm, 'onblur');
  94. setAttrib(elm, 'onclick');
  95. setAttrib(elm, 'ondblclick');
  96. setAttrib(elm, 'onmousedown');
  97. setAttrib(elm, 'onmouseup');
  98. setAttrib(elm, 'onmouseover');
  99. setAttrib(elm, 'onmousemove');
  100. setAttrib(elm, 'onmouseout');
  101. setAttrib(elm, 'onkeypress');
  102. setAttrib(elm, 'onkeydown');
  103. setAttrib(elm, 'onkeyup');*/
  104. }
  105. SXE = {
  106. currentAction : "insert",
  107. inst : tinyMCEPopup.editor,
  108. updateElement : null
  109. }
  110. SXE.focusElement = SXE.inst.selection.getNode();
  111. SXE.initElementDialog = function(element_name) {
  112. addClassesToList('class', 'xhtmlxtras_styles');
  113. TinyMCE_EditableSelects.init();
  114. element_name = element_name.toLowerCase();
  115. var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());
  116. if (elm != null && elm.nodeName == element_name.toUpperCase()) {
  117. SXE.currentAction = "update";
  118. }
  119. if (SXE.currentAction == "update") {
  120. initCommonAttributes(elm);
  121. SXE.updateElement = elm;
  122. }
  123. document.forms[0].insert.value = tinyMCEPopup.getLang(SXE.currentAction, 'Insert', true);
  124. }
  125. SXE.insertElement = function(element_name) {
  126. var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase()), h, tagName;
  127. tinyMCEPopup.execCommand('mceBeginUndoLevel');
  128. if (elm == null) {
  129. var s = SXE.inst.selection.getContent();
  130. if(s.length > 0) {
  131. tagName = element_name;
  132. if (tinymce.isIE && element_name.indexOf('html:') == 0)
  133. element_name = element_name.substring(5).toLowerCase();
  134. h = '<' + tagName + ' id="#sxe_temp_' + element_name + '#">' + s + '</' + tagName + '>';
  135. tinyMCEPopup.execCommand('mceInsertContent', false, h);
  136. var elementArray = tinymce.grep(SXE.inst.dom.select(element_name), function(n) {return n.id == '#sxe_temp_' + element_name + '#';});
  137. for (var i=0; i<elementArray.length; i++) {
  138. var elm = elementArray[i];
  139. elm.id = '';
  140. elm.setAttribute('id', '');
  141. elm.removeAttribute('id');
  142. setAllCommonAttribs(elm);
  143. }
  144. }
  145. } else {
  146. setAllCommonAttribs(elm);
  147. }
  148. SXE.inst.nodeChanged();
  149. tinyMCEPopup.execCommand('mceEndUndoLevel');
  150. }
  151. SXE.removeElement = function(element_name){
  152. element_name = element_name.toLowerCase();
  153. elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());
  154. if(elm && elm.nodeName == element_name.toUpperCase()){
  155. tinyMCEPopup.execCommand('mceBeginUndoLevel');
  156. tinyMCE.execCommand('mceRemoveNode', false, elm);
  157. SXE.inst.nodeChanged();
  158. tinyMCEPopup.execCommand('mceEndUndoLevel');
  159. }
  160. }
  161. SXE.showRemoveButton = function() {
  162. document.getElementById("remove").style.display = 'block';
  163. }
  164. SXE.containsClass = function(elm,cl) {
  165. return (elm.className.indexOf(cl) > -1) ? true : false;
  166. }
  167. SXE.removeClass = function(elm,cl) {
  168. if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {
  169. return true;
  170. }
  171. var classNames = elm.className.split(" ");
  172. var newClassNames = "";
  173. for (var x = 0, cnl = classNames.length; x < cnl; x++) {
  174. if (classNames[x] != cl) {
  175. newClassNames += (classNames[x] + " ");
  176. }
  177. }
  178. elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end
  179. }
  180. SXE.addClass = function(elm,cl) {
  181. if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;
  182. return true;
  183. }