A tumblelog CMS built on AJAX, PHP and MySQL.

functions.js 16KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. /* Functions for the advimage plugin popup */
  2. var preloadImg = null;
  3. var orgImageWidth, orgImageHeight;
  4. function preinit() {
  5. // Initialize
  6. tinyMCE.setWindowArg('mce_windowresize', false);
  7. // Import external list url javascript
  8. var url = tinyMCE.getParam("external_image_list_url");
  9. if (url != null) {
  10. // Fix relative
  11. if (url.charAt(0) != '/' && url.indexOf('://') == -1)
  12. url = tinyMCE.documentBasePath + "/" + url;
  13. document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');
  14. }
  15. }
  16. function convertURL(url, node, on_save) {
  17. return eval("tinyMCEPopup.windowOpener." + tinyMCE.settings['urlconverter_callback'] + "(url, node, on_save);");
  18. }
  19. function getImageSrc(str) {
  20. var pos = -1;
  21. if (!str)
  22. return "";
  23. if ((pos = str.indexOf('this.src=')) != -1) {
  24. var src = str.substring(pos + 10);
  25. src = src.substring(0, src.indexOf('\''));
  26. if (tinyMCE.getParam('convert_urls'))
  27. src = convertURL(src, null, true);
  28. return src;
  29. }
  30. return "";
  31. }
  32. function init() {
  33. tinyMCEPopup.resizeToInnerSize();
  34. var formObj = document.forms[0];
  35. var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
  36. var elm = inst.getFocusElement();
  37. var action = "insert";
  38. var html = "";
  39. // Image list src
  40. html = getImageListHTML('imagelistsrc','src','onSelectMainImage');
  41. if (html == "")
  42. document.getElementById("imagelistsrcrow").style.display = 'none';
  43. else
  44. document.getElementById("imagelistsrccontainer").innerHTML = html;
  45. // Image list oversrc
  46. html = getImageListHTML('imagelistover','onmouseoversrc');
  47. if (html == "")
  48. document.getElementById("imagelistoverrow").style.display = 'none';
  49. else
  50. document.getElementById("imagelistovercontainer").innerHTML = html;
  51. // Image list outsrc
  52. html = getImageListHTML('imagelistout','onmouseoutsrc');
  53. if (html == "")
  54. document.getElementById("imagelistoutrow").style.display = 'none';
  55. else
  56. document.getElementById("imagelistoutcontainer").innerHTML = html;
  57. // Src browser
  58. html = getBrowserHTML('srcbrowser','src','image','advimage');
  59. document.getElementById("srcbrowsercontainer").innerHTML = html;
  60. // Over browser
  61. html = getBrowserHTML('oversrcbrowser','onmouseoversrc','image','advimage');
  62. document.getElementById("onmouseoversrccontainer").innerHTML = html;
  63. // Out browser
  64. html = getBrowserHTML('outsrcbrowser','onmouseoutsrc','image','advimage');
  65. document.getElementById("onmouseoutsrccontainer").innerHTML = html;
  66. // Longdesc browser
  67. html = getBrowserHTML('longdescbrowser','longdesc','file','advimage');
  68. document.getElementById("longdesccontainer").innerHTML = html;
  69. // Resize some elements
  70. if (isVisible('srcbrowser'))
  71. document.getElementById('src').style.width = '260px';
  72. if (isVisible('oversrcbrowser'))
  73. document.getElementById('onmouseoversrc').style.width = '260px';
  74. if (isVisible('outsrcbrowser'))
  75. document.getElementById('onmouseoutsrc').style.width = '260px';
  76. if (isVisible('longdescbrowser'))
  77. document.getElementById('longdesc').style.width = '180px';
  78. // Check action
  79. if (elm != null && elm.nodeName == "IMG")
  80. action = "update";
  81. formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true);
  82. if (action == "update") {
  83. var src = tinyMCE.getAttrib(elm, 'src');
  84. var onmouseoversrc = getImageSrc(tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseover')));
  85. var onmouseoutsrc = getImageSrc(tinyMCE.cleanupEventStr(tinyMCE.getAttrib(elm, 'onmouseout')));
  86. src = convertURL(src, elm, true);
  87. // Use mce_src if found
  88. var mceRealSrc = tinyMCE.getAttrib(elm, 'mce_src');
  89. if (mceRealSrc != "") {
  90. src = mceRealSrc;
  91. if (tinyMCE.getParam('convert_urls'))
  92. src = convertURL(src, elm, true);
  93. }
  94. if (onmouseoversrc != "" && tinyMCE.getParam('convert_urls'))
  95. onmouseoversrc = convertURL(onmouseoversrc, elm, true);
  96. if (onmouseoutsrc != "" && tinyMCE.getParam('convert_urls'))
  97. onmouseoutsrc = convertURL(onmouseoutsrc, elm, true);
  98. // Setup form data
  99. var style = tinyMCE.parseStyle(tinyMCE.getAttrib(elm, "style"));
  100. // Store away old size
  101. orgImageWidth = trimSize(getStyle(elm, 'width'))
  102. orgImageHeight = trimSize(getStyle(elm, 'height'));
  103. formObj.src.value = src;
  104. formObj.alt.value = tinyMCE.getAttrib(elm, 'alt');
  105. formObj.title.value = tinyMCE.getAttrib(elm, 'title');
  106. formObj.border.value = trimSize(getStyle(elm, 'border', 'borderWidth'));
  107. formObj.vspace.value = tinyMCE.getAttrib(elm, 'vspace');
  108. formObj.hspace.value = tinyMCE.getAttrib(elm, 'hspace');
  109. formObj.width.value = orgImageWidth;
  110. formObj.height.value = orgImageHeight;
  111. formObj.onmouseoversrc.value = onmouseoversrc;
  112. formObj.onmouseoutsrc.value = onmouseoutsrc;
  113. formObj.id.value = tinyMCE.getAttrib(elm, 'id');
  114. formObj.dir.value = tinyMCE.getAttrib(elm, 'dir');
  115. formObj.lang.value = tinyMCE.getAttrib(elm, 'lang');
  116. formObj.longdesc.value = tinyMCE.getAttrib(elm, 'longdesc');
  117. formObj.usemap.value = tinyMCE.getAttrib(elm, 'usemap');
  118. formObj.style.value = tinyMCE.serializeStyle(style);
  119. // Select by the values
  120. if (tinyMCE.isMSIE)
  121. selectByValue(formObj, 'align', getStyle(elm, 'align', 'styleFloat'));
  122. else
  123. selectByValue(formObj, 'align', getStyle(elm, 'align', 'cssFloat'));
  124. addClassesToList('classlist', 'advimage_styles');
  125. selectByValue(formObj, 'classlist', tinyMCE.getAttrib(elm, 'class'));
  126. selectByValue(formObj, 'imagelistsrc', src);
  127. selectByValue(formObj, 'imagelistover', onmouseoversrc);
  128. selectByValue(formObj, 'imagelistout', onmouseoutsrc);
  129. updateStyle();
  130. showPreviewImage(src, true);
  131. changeAppearance();
  132. window.focus();
  133. } else
  134. addClassesToList('classlist', 'advimage_styles');
  135. // If option enabled default contrain proportions to checked
  136. if (tinyMCE.getParam("advimage_constrain_proportions", true))
  137. formObj.constrain.checked = true;
  138. // Check swap image if valid data
  139. if (formObj.onmouseoversrc.value != "" || formObj.onmouseoutsrc.value != "")
  140. setSwapImageDisabled(false);
  141. else
  142. setSwapImageDisabled(true);
  143. }
  144. function setSwapImageDisabled(state) {
  145. var formObj = document.forms[0];
  146. formObj.onmousemovecheck.checked = !state;
  147. setBrowserDisabled('overbrowser', state);
  148. setBrowserDisabled('outbrowser', state);
  149. if (formObj.imagelistover)
  150. formObj.imagelistover.disabled = state;
  151. if (formObj.imagelistout)
  152. formObj.imagelistout.disabled = state;
  153. formObj.onmouseoversrc.disabled = state;
  154. formObj.onmouseoutsrc.disabled = state;
  155. }
  156. function setAttrib(elm, attrib, value) {
  157. var formObj = document.forms[0];
  158. var valueElm = formObj.elements[attrib];
  159. if (typeof(value) == "undefined" || value == null) {
  160. value = "";
  161. if (valueElm)
  162. value = valueElm.value;
  163. }
  164. if (value != "") {
  165. elm.setAttribute(attrib, value);
  166. if (attrib == "style")
  167. attrib = "style.cssText";
  168. if (attrib == "longdesc")
  169. attrib = "longDesc";
  170. if (attrib == "width") {
  171. attrib = "style.width";
  172. value = value + "px";
  173. value = value.replace(/%px/g, 'px');
  174. }
  175. if (attrib == "height") {
  176. attrib = "style.height";
  177. value = value + "px";
  178. value = value.replace(/%px/g, 'px');
  179. }
  180. if (attrib == "class")
  181. attrib = "className";
  182. eval('elm.' + attrib + "=value;");
  183. } else
  184. elm.removeAttribute(attrib);
  185. }
  186. function makeAttrib(attrib, value) {
  187. var formObj = document.forms[0];
  188. var valueElm = formObj.elements[attrib];
  189. if (typeof(value) == "undefined" || value == null) {
  190. value = "";
  191. if (valueElm)
  192. value = valueElm.value;
  193. }
  194. if (value == "")
  195. return "";
  196. // XML encode it
  197. value = value.replace(/&/g, '&amp;');
  198. value = value.replace(/\"/g, '&quot;');
  199. value = value.replace(/</g, '&lt;');
  200. value = value.replace(/>/g, '&gt;');
  201. return ' ' + attrib + '="' + value + '"';
  202. }
  203. function insertAction() {
  204. var inst = tinyMCE.getInstanceById(tinyMCE.getWindowArg('editor_id'));
  205. var elm = inst.getFocusElement();
  206. var formObj = document.forms[0];
  207. var src = formObj.src.value;
  208. var onmouseoversrc = formObj.onmouseoversrc.value;
  209. var onmouseoutsrc = formObj.onmouseoutsrc.value;
  210. if (!AutoValidator.validate(formObj)) {
  211. alert(tinyMCE.getLang('lang_invalid_data'));
  212. return false;
  213. }
  214. if (tinyMCE.getParam("accessibility_warnings")) {
  215. if (formObj.alt.value == "" && !confirm(tinyMCE.getLang('lang_advimage_missing_alt', '', true)))
  216. return;
  217. }
  218. if (onmouseoversrc && onmouseoversrc != "")
  219. onmouseoversrc = "this.src='" + convertURL(onmouseoversrc, tinyMCE.imgElement) + "';";
  220. if (onmouseoutsrc && onmouseoutsrc != "")
  221. onmouseoutsrc = "this.src='" + convertURL(onmouseoutsrc, tinyMCE.imgElement) + "';";
  222. if (elm != null && elm.nodeName == "IMG") {
  223. setAttrib(elm, 'src', convertURL(src, tinyMCE.imgElement));
  224. setAttrib(elm, 'mce_src', src);
  225. setAttrib(elm, 'alt');
  226. setAttrib(elm, 'title');
  227. setAttrib(elm, 'border');
  228. setAttrib(elm, 'vspace');
  229. setAttrib(elm, 'hspace');
  230. setAttrib(elm, 'width');
  231. setAttrib(elm, 'height');
  232. setAttrib(elm, 'onmouseover', onmouseoversrc);
  233. setAttrib(elm, 'onmouseout', onmouseoutsrc);
  234. setAttrib(elm, 'id');
  235. setAttrib(elm, 'dir');
  236. setAttrib(elm, 'lang');
  237. setAttrib(elm, 'longdesc');
  238. setAttrib(elm, 'usemap');
  239. setAttrib(elm, 'style');
  240. setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
  241. setAttrib(elm, 'align', getSelectValue(formObj, 'align'));
  242. //tinyMCEPopup.execCommand("mceRepaint");
  243. // Repaint if dimensions changed
  244. if (formObj.width.value != orgImageWidth || formObj.height.value != orgImageHeight)
  245. inst.repaint();
  246. // Refresh in old MSIE
  247. if (tinyMCE.isMSIE5)
  248. elm.outerHTML = elm.outerHTML;
  249. } else {
  250. var html = "<img";
  251. html += makeAttrib('src', convertURL(src, tinyMCE.imgElement));
  252. html += makeAttrib('mce_src', src);
  253. html += makeAttrib('alt');
  254. html += makeAttrib('title');
  255. html += makeAttrib('border');
  256. html += makeAttrib('vspace');
  257. html += makeAttrib('hspace');
  258. html += makeAttrib('width');
  259. html += makeAttrib('height');
  260. html += makeAttrib('onmouseover', onmouseoversrc);
  261. html += makeAttrib('onmouseout', onmouseoutsrc);
  262. html += makeAttrib('id');
  263. html += makeAttrib('dir');
  264. html += makeAttrib('lang');
  265. html += makeAttrib('longdesc');
  266. html += makeAttrib('usemap');
  267. html += makeAttrib('style');
  268. html += makeAttrib('class', getSelectValue(formObj, 'classlist'));
  269. html += makeAttrib('align', getSelectValue(formObj, 'align'));
  270. html += " />";
  271. tinyMCEPopup.execCommand("mceInsertContent", false, html);
  272. }
  273. tinyMCE._setEventsEnabled(inst.getBody(), false);
  274. tinyMCEPopup.close();
  275. }
  276. function cancelAction() {
  277. tinyMCEPopup.close();
  278. }
  279. function changeAppearance() {
  280. var formObj = document.forms[0];
  281. var img = document.getElementById('alignSampleImg');
  282. if (img) {
  283. img.align = formObj.align.value;
  284. img.border = formObj.border.value;
  285. img.hspace = formObj.hspace.value;
  286. img.vspace = formObj.vspace.value;
  287. }
  288. }
  289. function changeMouseMove() {
  290. var formObj = document.forms[0];
  291. setSwapImageDisabled(!formObj.onmousemovecheck.checked);
  292. }
  293. function updateStyle() {
  294. var formObj = document.forms[0];
  295. var st = tinyMCE.parseStyle(formObj.style.value);
  296. if (tinyMCE.getParam('inline_styles', false)) {
  297. st['width'] = formObj.width.value == '' ? '' : formObj.width.value + "px";
  298. st['height'] = formObj.height.value == '' ? '' : formObj.height.value + "px";
  299. st['border-width'] = formObj.border.value == '' ? '' : formObj.border.value + "px";
  300. st['margin-top'] = formObj.vspace.value == '' ? '' : formObj.vspace.value + "px";
  301. st['margin-bottom'] = formObj.vspace.value == '' ? '' : formObj.vspace.value + "px";
  302. st['margin-left'] = formObj.hspace.value == '' ? '' : formObj.hspace.value + "px";
  303. st['margin-right'] = formObj.hspace.value == '' ? '' : formObj.hspace.value + "px";
  304. } else {
  305. st['width'] = st['height'] = st['border-width'] = null;
  306. if (st['margin-top'] == st['margin-bottom'])
  307. st['margin-top'] = st['margin-bottom'] = null;
  308. if (st['margin-left'] == st['margin-right'])
  309. st['margin-left'] = st['margin-right'] = null;
  310. }
  311. formObj.style.value = tinyMCE.serializeStyle(st);
  312. }
  313. function styleUpdated() {
  314. var formObj = document.forms[0];
  315. var st = tinyMCE.parseStyle(formObj.style.value);
  316. if (st['width'])
  317. formObj.width.value = st['width'].replace('px', '');
  318. if (st['height'])
  319. formObj.height.value = st['height'].replace('px', '');
  320. if (st['margin-top'] && st['margin-top'] == st['margin-bottom'])
  321. formObj.vspace.value = st['margin-top'].replace('px', '');
  322. if (st['margin-left'] && st['margin-left'] == st['margin-right'])
  323. formObj.hspace.value = st['margin-left'].replace('px', '');
  324. if (st['border-width'])
  325. formObj.border.value = st['border-width'].replace('px', '');
  326. }
  327. function changeHeight() {
  328. var formObj = document.forms[0];
  329. if (!formObj.constrain.checked || !preloadImg) {
  330. updateStyle();
  331. return;
  332. }
  333. if (formObj.width.value == "" || formObj.height.value == "")
  334. return;
  335. var temp = (parseInt(formObj.width.value) / parseInt(preloadImg.width)) * preloadImg.height;
  336. formObj.height.value = temp.toFixed(0);
  337. updateStyle();
  338. }
  339. function changeWidth() {
  340. var formObj = document.forms[0];
  341. if (!formObj.constrain.checked || !preloadImg) {
  342. updateStyle();
  343. return;
  344. }
  345. if (formObj.width.value == "" || formObj.height.value == "")
  346. return;
  347. var temp = (parseInt(formObj.height.value) / parseInt(preloadImg.height)) * preloadImg.width;
  348. formObj.width.value = temp.toFixed(0);
  349. updateStyle();
  350. }
  351. function onSelectMainImage(target_form_element, name, value) {
  352. var formObj = document.forms[0];
  353. formObj.alt.value = name;
  354. formObj.title.value = name;
  355. resetImageData();
  356. showPreviewImage(formObj.elements[target_form_element].value, false);
  357. }
  358. function showPreviewImage(src, start) {
  359. var formObj = document.forms[0];
  360. selectByValue(document.forms[0], 'imagelistsrc', src);
  361. var elm = document.getElementById('prev');
  362. var src = src == "" ? src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], src);
  363. if (!start && tinyMCE.getParam("advimage_update_dimensions_onchange", true))
  364. resetImageData();
  365. if (src == "")
  366. elm.innerHTML = "";
  367. else
  368. elm.innerHTML = '<img id="previewImg" src="' + src + '" border="0" onload="updateImageData();" onerror="resetImageData();" />'
  369. }
  370. function updateImageData() {
  371. var formObj = document.forms[0];
  372. preloadImg = document.getElementById('previewImg');
  373. if (formObj.width.value == "")
  374. formObj.width.value = preloadImg.width;
  375. if (formObj.height.value == "")
  376. formObj.height.value = preloadImg.height;
  377. updateStyle();
  378. }
  379. function resetImageData() {
  380. var formObj = document.forms[0];
  381. formObj.width.value = formObj.height.value = "";
  382. }
  383. function getSelectValue(form_obj, field_name) {
  384. var elm = form_obj.elements[field_name];
  385. if (elm == null || elm.options == null)
  386. return "";
  387. return elm.options[elm.selectedIndex].value;
  388. }
  389. function getImageListHTML(elm_id, target_form_element, onchange_func) {
  390. if (typeof(tinyMCEImageList) == "undefined" || tinyMCEImageList.length == 0)
  391. return "";
  392. var html = "";
  393. html += '<select id="' + elm_id + '" name="' + elm_id + '"';
  394. html += ' class="mceImageList" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
  395. html += 'this.options[this.selectedIndex].value;';
  396. if (typeof(onchange_func) != "undefined")
  397. html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
  398. html += '"><option value="">---</option>';
  399. for (var i=0; i<tinyMCEImageList.length; i++)
  400. html += '<option value="' + tinyMCEImageList[i][1] + '">' + tinyMCEImageList[i][0] + '</option>';
  401. html += '</select>';
  402. return html;
  403. // tinyMCE.debug('-- image list start --', html, '-- image list end --');
  404. }
  405. // While loading
  406. preinit();