Mercurial > hg > AnnotationManager
comparison WebContent/jscripts/tiny_mce/plugins/advimage/js/image.js @ 5:0be9d53a6967
editor for annotations
| author | dwinter |
|---|---|
| date | Tue, 13 Dec 2011 17:43:46 +0100 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 4:c32080f364c6 | 5:0be9d53a6967 |
|---|---|
| 1 var ImageDialog = { | |
| 2 preInit : function() { | |
| 3 var url; | |
| 4 | |
| 5 tinyMCEPopup.requireLangPack(); | |
| 6 | |
| 7 if (url = tinyMCEPopup.getParam("external_image_list_url")) | |
| 8 document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); | |
| 9 }, | |
| 10 | |
| 11 init : function(ed) { | |
| 12 var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'); | |
| 13 | |
| 14 tinyMCEPopup.resizeToInnerSize(); | |
| 15 this.fillClassList('class_list'); | |
| 16 this.fillFileList('src_list', fl); | |
| 17 this.fillFileList('over_list', fl); | |
| 18 this.fillFileList('out_list', fl); | |
| 19 TinyMCE_EditableSelects.init(); | |
| 20 | |
| 21 if (n.nodeName == 'IMG') { | |
| 22 nl.src.value = dom.getAttrib(n, 'src'); | |
| 23 nl.width.value = dom.getAttrib(n, 'width'); | |
| 24 nl.height.value = dom.getAttrib(n, 'height'); | |
| 25 nl.alt.value = dom.getAttrib(n, 'alt'); | |
| 26 nl.title.value = dom.getAttrib(n, 'title'); | |
| 27 nl.vspace.value = this.getAttrib(n, 'vspace'); | |
| 28 nl.hspace.value = this.getAttrib(n, 'hspace'); | |
| 29 nl.border.value = this.getAttrib(n, 'border'); | |
| 30 selectByValue(f, 'align', this.getAttrib(n, 'align')); | |
| 31 selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true); | |
| 32 nl.style.value = dom.getAttrib(n, 'style'); | |
| 33 nl.id.value = dom.getAttrib(n, 'id'); | |
| 34 nl.dir.value = dom.getAttrib(n, 'dir'); | |
| 35 nl.lang.value = dom.getAttrib(n, 'lang'); | |
| 36 nl.usemap.value = dom.getAttrib(n, 'usemap'); | |
| 37 nl.longdesc.value = dom.getAttrib(n, 'longdesc'); | |
| 38 nl.insert.value = ed.getLang('update'); | |
| 39 | |
| 40 if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover'))) | |
| 41 nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); | |
| 42 | |
| 43 if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout'))) | |
| 44 nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1'); | |
| 45 | |
| 46 if (ed.settings.inline_styles) { | |
| 47 // Move attribs to styles | |
| 48 if (dom.getAttrib(n, 'align')) | |
| 49 this.updateStyle('align'); | |
| 50 | |
| 51 if (dom.getAttrib(n, 'hspace')) | |
| 52 this.updateStyle('hspace'); | |
| 53 | |
| 54 if (dom.getAttrib(n, 'border')) | |
| 55 this.updateStyle('border'); | |
| 56 | |
| 57 if (dom.getAttrib(n, 'vspace')) | |
| 58 this.updateStyle('vspace'); | |
| 59 } | |
| 60 } | |
| 61 | |
| 62 // Setup browse button | |
| 63 document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image'); | |
| 64 if (isVisible('srcbrowser')) | |
| 65 document.getElementById('src').style.width = '260px'; | |
| 66 | |
| 67 // Setup browse button | |
| 68 document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image'); | |
| 69 if (isVisible('overbrowser')) | |
| 70 document.getElementById('onmouseoversrc').style.width = '260px'; | |
| 71 | |
| 72 // Setup browse button | |
| 73 document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image'); | |
| 74 if (isVisible('outbrowser')) | |
| 75 document.getElementById('onmouseoutsrc').style.width = '260px'; | |
| 76 | |
| 77 // If option enabled default contrain proportions to checked | |
| 78 if (ed.getParam("advimage_constrain_proportions", true)) | |
| 79 f.constrain.checked = true; | |
| 80 | |
| 81 // Check swap image if valid data | |
| 82 if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value) | |
| 83 this.setSwapImage(true); | |
| 84 else | |
| 85 this.setSwapImage(false); | |
| 86 | |
| 87 this.changeAppearance(); | |
| 88 this.showPreviewImage(nl.src.value, 1); | |
| 89 }, | |
| 90 | |
| 91 insert : function(file, title) { | |
| 92 var ed = tinyMCEPopup.editor, t = this, f = document.forms[0]; | |
| 93 | |
| 94 if (f.src.value === '') { | |
| 95 if (ed.selection.getNode().nodeName == 'IMG') { | |
| 96 ed.dom.remove(ed.selection.getNode()); | |
| 97 ed.execCommand('mceRepaint'); | |
| 98 } | |
| 99 | |
| 100 tinyMCEPopup.close(); | |
| 101 return; | |
| 102 } | |
| 103 | |
| 104 if (tinyMCEPopup.getParam("accessibility_warnings", 1)) { | |
| 105 if (!f.alt.value) { | |
| 106 tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) { | |
| 107 if (s) | |
| 108 t.insertAndClose(); | |
| 109 }); | |
| 110 | |
| 111 return; | |
| 112 } | |
| 113 } | |
| 114 | |
| 115 t.insertAndClose(); | |
| 116 }, | |
| 117 | |
| 118 insertAndClose : function() { | |
| 119 var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el; | |
| 120 | |
| 121 tinyMCEPopup.restoreSelection(); | |
| 122 | |
| 123 // Fixes crash in Safari | |
| 124 if (tinymce.isWebKit) | |
| 125 ed.getWin().focus(); | |
| 126 | |
| 127 if (!ed.settings.inline_styles) { | |
| 128 args = { | |
| 129 vspace : nl.vspace.value, | |
| 130 hspace : nl.hspace.value, | |
| 131 border : nl.border.value, | |
| 132 align : getSelectValue(f, 'align') | |
| 133 }; | |
| 134 } else { | |
| 135 // Remove deprecated values | |
| 136 args = { | |
| 137 vspace : '', | |
| 138 hspace : '', | |
| 139 border : '', | |
| 140 align : '' | |
| 141 }; | |
| 142 } | |
| 143 | |
| 144 tinymce.extend(args, { | |
| 145 src : nl.src.value.replace(/ /g, '%20'), | |
| 146 width : nl.width.value, | |
| 147 height : nl.height.value, | |
| 148 alt : nl.alt.value, | |
| 149 title : nl.title.value, | |
| 150 'class' : getSelectValue(f, 'class_list'), | |
| 151 style : nl.style.value, | |
| 152 id : nl.id.value, | |
| 153 dir : nl.dir.value, | |
| 154 lang : nl.lang.value, | |
| 155 usemap : nl.usemap.value, | |
| 156 longdesc : nl.longdesc.value | |
| 157 }); | |
| 158 | |
| 159 args.onmouseover = args.onmouseout = ''; | |
| 160 | |
| 161 if (f.onmousemovecheck.checked) { | |
| 162 if (nl.onmouseoversrc.value) | |
| 163 args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';"; | |
| 164 | |
| 165 if (nl.onmouseoutsrc.value) | |
| 166 args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';"; | |
| 167 } | |
| 168 | |
| 169 el = ed.selection.getNode(); | |
| 170 | |
| 171 if (el && el.nodeName == 'IMG') { | |
| 172 ed.dom.setAttribs(el, args); | |
| 173 } else { | |
| 174 tinymce.each(args, function(value, name) { | |
| 175 if (value === "") { | |
| 176 delete args[name]; | |
| 177 } | |
| 178 }); | |
| 179 | |
| 180 ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1}); | |
| 181 ed.undoManager.add(); | |
| 182 } | |
| 183 | |
| 184 tinyMCEPopup.editor.execCommand('mceRepaint'); | |
| 185 tinyMCEPopup.editor.focus(); | |
| 186 tinyMCEPopup.close(); | |
| 187 }, | |
| 188 | |
| 189 getAttrib : function(e, at) { | |
| 190 var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2; | |
| 191 | |
| 192 if (ed.settings.inline_styles) { | |
| 193 switch (at) { | |
| 194 case 'align': | |
| 195 if (v = dom.getStyle(e, 'float')) | |
| 196 return v; | |
| 197 | |
| 198 if (v = dom.getStyle(e, 'vertical-align')) | |
| 199 return v; | |
| 200 | |
| 201 break; | |
| 202 | |
| 203 case 'hspace': | |
| 204 v = dom.getStyle(e, 'margin-left') | |
| 205 v2 = dom.getStyle(e, 'margin-right'); | |
| 206 | |
| 207 if (v && v == v2) | |
| 208 return parseInt(v.replace(/[^0-9]/g, '')); | |
| 209 | |
| 210 break; | |
| 211 | |
| 212 case 'vspace': | |
| 213 v = dom.getStyle(e, 'margin-top') | |
| 214 v2 = dom.getStyle(e, 'margin-bottom'); | |
| 215 if (v && v == v2) | |
| 216 return parseInt(v.replace(/[^0-9]/g, '')); | |
| 217 | |
| 218 break; | |
| 219 | |
| 220 case 'border': | |
| 221 v = 0; | |
| 222 | |
| 223 tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) { | |
| 224 sv = dom.getStyle(e, 'border-' + sv + '-width'); | |
| 225 | |
| 226 // False or not the same as prev | |
| 227 if (!sv || (sv != v && v !== 0)) { | |
| 228 v = 0; | |
| 229 return false; | |
| 230 } | |
| 231 | |
| 232 if (sv) | |
| 233 v = sv; | |
| 234 }); | |
| 235 | |
| 236 if (v) | |
| 237 return parseInt(v.replace(/[^0-9]/g, '')); | |
| 238 | |
| 239 break; | |
| 240 } | |
| 241 } | |
| 242 | |
| 243 if (v = dom.getAttrib(e, at)) | |
| 244 return v; | |
| 245 | |
| 246 return ''; | |
| 247 }, | |
| 248 | |
| 249 setSwapImage : function(st) { | |
| 250 var f = document.forms[0]; | |
| 251 | |
| 252 f.onmousemovecheck.checked = st; | |
| 253 setBrowserDisabled('overbrowser', !st); | |
| 254 setBrowserDisabled('outbrowser', !st); | |
| 255 | |
| 256 if (f.over_list) | |
| 257 f.over_list.disabled = !st; | |
| 258 | |
| 259 if (f.out_list) | |
| 260 f.out_list.disabled = !st; | |
| 261 | |
| 262 f.onmouseoversrc.disabled = !st; | |
| 263 f.onmouseoutsrc.disabled = !st; | |
| 264 }, | |
| 265 | |
| 266 fillClassList : function(id) { | |
| 267 var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; | |
| 268 | |
| 269 if (v = tinyMCEPopup.getParam('theme_advanced_styles')) { | |
| 270 cl = []; | |
| 271 | |
| 272 tinymce.each(v.split(';'), function(v) { | |
| 273 var p = v.split('='); | |
| 274 | |
| 275 cl.push({'title' : p[0], 'class' : p[1]}); | |
| 276 }); | |
| 277 } else | |
| 278 cl = tinyMCEPopup.editor.dom.getClasses(); | |
| 279 | |
| 280 if (cl.length > 0) { | |
| 281 lst.options.length = 0; | |
| 282 lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); | |
| 283 | |
| 284 tinymce.each(cl, function(o) { | |
| 285 lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']); | |
| 286 }); | |
| 287 } else | |
| 288 dom.remove(dom.getParent(id, 'tr')); | |
| 289 }, | |
| 290 | |
| 291 fillFileList : function(id, l) { | |
| 292 var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; | |
| 293 | |
| 294 l = typeof(l) === 'function' ? l() : window[l]; | |
| 295 lst.options.length = 0; | |
| 296 | |
| 297 if (l && l.length > 0) { | |
| 298 lst.options[lst.options.length] = new Option('', ''); | |
| 299 | |
| 300 tinymce.each(l, function(o) { | |
| 301 lst.options[lst.options.length] = new Option(o[0], o[1]); | |
| 302 }); | |
| 303 } else | |
| 304 dom.remove(dom.getParent(id, 'tr')); | |
| 305 }, | |
| 306 | |
| 307 resetImageData : function() { | |
| 308 var f = document.forms[0]; | |
| 309 | |
| 310 f.elements.width.value = f.elements.height.value = ''; | |
| 311 }, | |
| 312 | |
| 313 updateImageData : function(img, st) { | |
| 314 var f = document.forms[0]; | |
| 315 | |
| 316 if (!st) { | |
| 317 f.elements.width.value = img.width; | |
| 318 f.elements.height.value = img.height; | |
| 319 } | |
| 320 | |
| 321 this.preloadImg = img; | |
| 322 }, | |
| 323 | |
| 324 changeAppearance : function() { | |
| 325 var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg'); | |
| 326 | |
| 327 if (img) { | |
| 328 if (ed.getParam('inline_styles')) { | |
| 329 ed.dom.setAttrib(img, 'style', f.style.value); | |
| 330 } else { | |
| 331 img.align = f.align.value; | |
| 332 img.border = f.border.value; | |
| 333 img.hspace = f.hspace.value; | |
| 334 img.vspace = f.vspace.value; | |
| 335 } | |
| 336 } | |
| 337 }, | |
| 338 | |
| 339 changeHeight : function() { | |
| 340 var f = document.forms[0], tp, t = this; | |
| 341 | |
| 342 if (!f.constrain.checked || !t.preloadImg) { | |
| 343 return; | |
| 344 } | |
| 345 | |
| 346 if (f.width.value == "" || f.height.value == "") | |
| 347 return; | |
| 348 | |
| 349 tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height; | |
| 350 f.height.value = tp.toFixed(0); | |
| 351 }, | |
| 352 | |
| 353 changeWidth : function() { | |
| 354 var f = document.forms[0], tp, t = this; | |
| 355 | |
| 356 if (!f.constrain.checked || !t.preloadImg) { | |
| 357 return; | |
| 358 } | |
| 359 | |
| 360 if (f.width.value == "" || f.height.value == "") | |
| 361 return; | |
| 362 | |
| 363 tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width; | |
| 364 f.width.value = tp.toFixed(0); | |
| 365 }, | |
| 366 | |
| 367 updateStyle : function(ty) { | |
| 368 var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value}); | |
| 369 | |
| 370 if (tinyMCEPopup.editor.settings.inline_styles) { | |
| 371 // Handle align | |
| 372 if (ty == 'align') { | |
| 373 dom.setStyle(img, 'float', ''); | |
| 374 dom.setStyle(img, 'vertical-align', ''); | |
| 375 | |
| 376 v = getSelectValue(f, 'align'); | |
| 377 if (v) { | |
| 378 if (v == 'left' || v == 'right') | |
| 379 dom.setStyle(img, 'float', v); | |
| 380 else | |
| 381 img.style.verticalAlign = v; | |
| 382 } | |
| 383 } | |
| 384 | |
| 385 // Handle border | |
| 386 if (ty == 'border') { | |
| 387 b = img.style.border ? img.style.border.split(' ') : []; | |
| 388 bStyle = dom.getStyle(img, 'border-style'); | |
| 389 bColor = dom.getStyle(img, 'border-color'); | |
| 390 | |
| 391 dom.setStyle(img, 'border', ''); | |
| 392 | |
| 393 v = f.border.value; | |
| 394 if (v || v == '0') { | |
| 395 if (v == '0') | |
| 396 img.style.border = isIE ? '0' : '0 none none'; | |
| 397 else { | |
| 398 if (b.length == 3 && b[isIE ? 2 : 1]) | |
| 399 bStyle = b[isIE ? 2 : 1]; | |
| 400 else if (!bStyle || bStyle == 'none') | |
| 401 bStyle = 'solid'; | |
| 402 if (b.length == 3 && b[isIE ? 0 : 2]) | |
| 403 bColor = b[isIE ? 0 : 2]; | |
| 404 else if (!bColor || bColor == 'none') | |
| 405 bColor = 'black'; | |
| 406 img.style.border = v + 'px ' + bStyle + ' ' + bColor; | |
| 407 } | |
| 408 } | |
| 409 } | |
| 410 | |
| 411 // Handle hspace | |
| 412 if (ty == 'hspace') { | |
| 413 dom.setStyle(img, 'marginLeft', ''); | |
| 414 dom.setStyle(img, 'marginRight', ''); | |
| 415 | |
| 416 v = f.hspace.value; | |
| 417 if (v) { | |
| 418 img.style.marginLeft = v + 'px'; | |
| 419 img.style.marginRight = v + 'px'; | |
| 420 } | |
| 421 } | |
| 422 | |
| 423 // Handle vspace | |
| 424 if (ty == 'vspace') { | |
| 425 dom.setStyle(img, 'marginTop', ''); | |
| 426 dom.setStyle(img, 'marginBottom', ''); | |
| 427 | |
| 428 v = f.vspace.value; | |
| 429 if (v) { | |
| 430 img.style.marginTop = v + 'px'; | |
| 431 img.style.marginBottom = v + 'px'; | |
| 432 } | |
| 433 } | |
| 434 | |
| 435 // Merge | |
| 436 dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img'); | |
| 437 } | |
| 438 }, | |
| 439 | |
| 440 changeMouseMove : function() { | |
| 441 }, | |
| 442 | |
| 443 showPreviewImage : function(u, st) { | |
| 444 if (!u) { | |
| 445 tinyMCEPopup.dom.setHTML('prev', ''); | |
| 446 return; | |
| 447 } | |
| 448 | |
| 449 if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true)) | |
| 450 this.resetImageData(); | |
| 451 | |
| 452 u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u); | |
| 453 | |
| 454 if (!st) | |
| 455 tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />'); | |
| 456 else | |
| 457 tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />'); | |
| 458 } | |
| 459 }; | |
| 460 | |
| 461 ImageDialog.preInit(); | |
| 462 tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog); |
