A tumblelog CMS built on AJAX, PHP and MySQL.

element_common.js 7.3KB

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