[ Index ] |
|
Code source de Kupu-1.3.5 |
1 /***************************************************************************** 2 * 3 * Copyright (c) 2003-2005 Kupu Contributors. All rights reserved. 4 * 5 * This software is distributed under the terms of the Kupu 6 * License. See LICENSE.txt for license text. For a list of Kupu 7 * Contributors see CREDITS.txt. 8 * 9 *****************************************************************************/ 10 11 // $Id: kupusilvainit.js 12187 2005-05-11 14:29:58Z guido $ 12 13 // XXX Port this to the default dist? 14 KupuEditor.prototype.afterInit = function() { 15 // select the line after the first heading, if the document is correctly 16 // formatted 17 this.getDocument().getWindow().focus(); 18 var doc = this.getInnerDocument(); 19 var body = doc.getElementsByTagName('body')[0]; 20 var h = null; 21 var iterator = new NodeIterator(body); 22 while (h = iterator.next()) { 23 if (h.nodeType == 1 && h.nodeName.toLowerCase() == 'h2') { 24 var selection = this.getSelection(); 25 // okay, the first element node is a h2, select 26 // next node, if it doesn't exist create and select 27 var next = h.nextSibling; 28 if (!next) { 29 next = doc.createElement('p'); 30 next.appendChild(doc.createTextNode('\xa0')); 31 body.appendChild(next); 32 } else { 33 var nodeName = next.nodeName.toLowerCase(); 34 if (nodeName == 'table') { 35 next = next.getElementsByTagName('td')[0]; 36 } else if (nodeName == 'ul' || nodeName == 'ol') { 37 next = next.getElementsByTagName('li')[0]; 38 }; 39 }; 40 selection.selectNodeContents(next); 41 selection.collapse(); 42 break; 43 } else if (h.nodeType == 1) { 44 break; 45 }; 46 }; 47 // if we don't first focus the outer window, Mozilla won't show a cursor 48 window.focus(); 49 this.getDocument().getWindow().focus(); 50 }; 51 52 function WidgeteerDrawerTool() { 53 this.drawers = {}; 54 this.current_drawer = null; 55 }; 56 57 //WidgeteerDrawerTool.prototype = new DrawerTool; 58 59 WidgeteerDrawerTool.prototype.openDrawer = function(id) { 60 /* open a drawer 61 62 overridden so we can place the drawer in the parent document 63 */ 64 if (this.current_drawer) { 65 this.closeDrawer(); 66 }; 67 var drawer = this.drawers[id]; 68 if (this.isIE) { 69 drawer.editor._saveSelection(); 70 }; 71 72 // make sure the right drawertool is available in parent 73 parent.drawertool = window.drawertool; 74 var parentdoc = parent.document; 75 var placeholder = parentdoc.getElementById('drawerplaceholder') 76 77 drawer.createContent(); 78 this.current_drawer = drawer; 79 if (!parentdoc.importNode) { 80 // f$@%ng IE 81 var importNode = function(doc, oNode, bImportChildren){ 82 var oNew; 83 84 if(oNode.nodeType == 1){ 85 oNew = doc.createElement(oNode.nodeName); 86 for(var i = 0; i < oNode.attributes.length; i++){ 87 oNew.setAttribute(oNode.attributes[i].name, 88 oNode.attributes[i].value); 89 } 90 oNew.style.cssText = oNode.style.cssText; 91 } else if(oNode.nodeType == 3){ 92 oNew = doc.createTextNode(oNode.nodeValue); 93 } 94 95 if(bImportChildren && oNode.hasChildNodes()){ 96 for(var oChild = oNode.firstChild; oChild; 97 oChild = oChild.nextSibling){ 98 oNew.appendChild(importNode(doc, oChild, true)); 99 } 100 } 101 102 return oNew; 103 } 104 var imported = importNode(parentdoc, drawer.element, 1); 105 placeholder.appendChild(imported); 106 drawer.element.display = 'none'; 107 } else { 108 parentdoc.importNode(drawer.element, 1); 109 placeholder.appendChild(drawer.element); 110 }; 111 drawer.editor.suspendEditing(); 112 placeholder.style.display = 'block'; 113 }; 114 115 WidgeteerDrawerTool.prototype.closeDrawer = function(button) { 116 if (!this.current_drawer) { 117 return; 118 }; 119 this.current_drawer.hide(); 120 this.current_drawer.editor.resumeEditing(); 121 this.current_drawer = null; 122 var parentdoc = parent.document; 123 var placeholder = parentdoc.getElementById('drawerplaceholder') 124 placeholder.style.display = 'none'; 125 }; 126 127 var win = window; 128 parent.HandleDrawerEnter = function(event, clickid) { 129 var key; 130 event = event || win.event; 131 key = event.which || event.keyCode; 132 133 if (key==13) { 134 if (clickid) { 135 var button = win.document.getElementById(clickid); 136 if (button) { 137 button.click(); 138 } 139 } 140 event.cancelBubble = true; 141 if (event.stopPropogation) event.stopPropogation(); 142 143 return false; 144 } 145 return true; 146 }; 147 148 function initKupu(iframe) { 149 // we have to perform some tricks to find out what 'our' iframe is in 150 // the parent document 151 var parentiframes = parent.document.getElementsByTagName('iframe'); 152 var parentiframe = null; 153 for (var i=0; i < parentiframes.length; i++) { 154 var pif = parentiframe = parentiframes[i] 155 if (pif.contentWindow == window) { 156 // load the contents of the textarea into the body element 157 iframe.contentWindow.document.getElementsByTagName('body')[0] 158 .innerHTML = pif.textarea.value; 159 break 160 }; 161 }; 162 163 // first we create a logger 164 var l = new DummyLogger(); 165 166 // now some config values 167 var conf = loadDictFromXML(document, 'kupuconfig'); 168 169 // the we create the document, hand it over the id of the iframe 170 var doc = new KupuDocument(iframe); 171 172 // now we can create the controller 173 var kupu = new KupuEditor(doc, conf, l); 174 175 var cm = new ContextMenu(); 176 kupu.setContextMenu(cm); 177 178 // now we can create a UI object which we can use from the UI 179 var ui = new KupuUI('kupu-tb-styles'); 180 kupu.registerTool('ui', ui); 181 182 // function that returns a function to execute a button command 183 var execCommand = function(cmd) { 184 return function(button, editor) { 185 editor.execCommand(cmd); 186 }; 187 }; 188 189 var boldchecker = ParentWithStyleChecker(new Array('b', 'strong'), 190 'font-weight', 'bold'); 191 var boldbutton = new KupuStateButton('kupu-bold-button', 192 execCommand('bold'), 193 boldchecker, 194 'kupu-bold', 195 'kupu-bold-pressed'); 196 kupu.registerTool('boldbutton', boldbutton); 197 198 var italicschecker = ParentWithStyleChecker(new Array('i', 'em'), 199 'font-style', 'italic'); 200 var italicsbutton = new KupuStateButton('kupu-italic-button', 201 execCommand('italic'), 202 italicschecker, 203 'kupu-italic', 204 'kupu-italic-pressed'); 205 kupu.registerTool('italicsbutton', italicsbutton); 206 207 var underlinechecker = ParentWithStyleChecker(new Array('u')); 208 var underlinebutton = new KupuStateButton('kupu-underline-button', 209 execCommand('underline'), 210 underlinechecker, 211 'kupu-underline', 212 'kupu-underline-pressed'); 213 kupu.registerTool('underlinebutton', underlinebutton); 214 215 var subscriptchecker = ParentWithStyleChecker(new Array('sub')); 216 var subscriptbutton = new KupuStateButton('kupu-subscript-button', 217 execCommand('subscript'), 218 subscriptchecker, 219 'kupu-subscript', 220 'kupu-subscript-pressed'); 221 kupu.registerTool('subscriptbutton', subscriptbutton); 222 223 var superscriptchecker = ParentWithStyleChecker(new Array('super', 'sup')); 224 var superscriptbutton = new KupuStateButton('kupu-superscript-button', 225 execCommand('superscript'), 226 superscriptchecker, 227 'kupu-superscript', 228 'kupu-superscript-pressed'); 229 kupu.registerTool('superscriptbutton', superscriptbutton); 230 231 var undobutton = new KupuButton('kupu-undo-button', execCommand('undo')) 232 kupu.registerTool('undobutton', undobutton); 233 234 var redobutton = new KupuButton('kupu-redo-button', execCommand('redo')) 235 kupu.registerTool('redobutton', redobutton); 236 237 var colorchoosertool = new ColorchooserTool('kupu-forecolor-button', 238 'kupu-hilitecolor-button', 239 'kupu-colorchooser'); 240 kupu.registerTool('colorchooser', colorchoosertool); 241 var listtool = new ListTool('kupu-list-ul-addbutton', 'kupu-list-ol-addbutton', 242 'kupu-ulstyles', 'kupu-olstyles'); 243 kupu.registerTool('listtool', listtool); 244 245 var dltool = new DefinitionListTool('kupu-list-dl-addbutton'); 246 kupu.registerTool('dltool', dltool); 247 248 var imagetool = new ImageTool(); 249 kupu.registerTool('imagetool', imagetool); 250 var handler = function() { 251 var create_handler = new ContextFixer(imagetool.createImage, 252 imagetool).execute; 253 parent.browser_manager.startBrowser(create_handler, 254 parentiframe.textarea.getAttribute('widget:imagepath'), 255 ['image/jpeg', 'image/png', 256 'image/gif']); 257 }; 258 addEventHandler(document.getElementById('kupu-image-button'), 'click', 259 handler); 260 261 var linktool = new LinkTool(); 262 kupu.registerTool('linktool', linktool); 263 var handler = function() { 264 var create_handler = new ContextFixer(linktool.createLink, 265 linktool).execute; 266 parent.browser_manager.startBrowser(create_handler, 267 parentiframe.textarea.getAttribute('widget:linkpath')); 268 }; 269 addEventHandler(document.getElementById('kupu-intlink-button'), 'click', 270 handler); 271 272 var tabletool = new TableTool(); 273 kupu.registerTool('tabletool', tabletool); 274 275 var showpathtool = new ShowPathTool(); 276 kupu.registerTool('showpathtool', showpathtool); 277 278 var sourceedittool = new SourceEditTool('kupu-source-button', 279 'kupu-editor-textarea'); 280 kupu.registerTool('sourceedittool', sourceedittool); 281 282 var spellchecker = new KupuSpellChecker('kupu-spellchecker-button', 283 'kupu_spellcheck'); 284 kupu.registerTool('spellchecker', spellchecker); 285 286 var viewsourcetool = new ViewSourceTool(); 287 kupu.registerTool('viewsourcetool', viewsourcetool); 288 289 /* 290 // Function that returns function to open a drawer 291 var opendrawer = function(drawerid) { 292 return function(button, editor) { 293 drawertool.openDrawer(drawerid); 294 }; 295 }; 296 297 var imagelibdrawerbutton = new KupuButton('kupu-imagelibdrawer-button', 298 opendrawer('imagelibdrawer')); 299 kupu.registerTool('imagelibdrawerbutton', imagelibdrawerbutton); 300 301 var linklibdrawerbutton = new KupuButton('kupu-linklibdrawer-button', 302 opendrawer('linklibdrawer')); 303 kupu.registerTool('linklibdrawerbutton', linklibdrawerbutton); 304 305 var linkdrawerbutton = new KupuButton('kupu-linkdrawer-button', 306 opendrawer('linkdrawer')); 307 kupu.registerTool('linkdrawerbutton', linkdrawerbutton); 308 309 var tabledrawerbutton = new KupuButton('kupu-tabledrawer-button', 310 opendrawer('tabledrawer')); 311 kupu.registerTool('tabledrawerbutton', tabledrawerbutton); 312 313 // create some drawers, drawers are some sort of popups that appear when a 314 // toolbar button is clicked 315 var drawertool = new WidgeteerDrawerTool(); 316 kupu.registerTool('drawertool', drawertool); 317 318 var linklibdrawer = new LinkLibraryDrawer(linktool, conf['link_xsl_uri'], 319 conf['link_libraries_uri'], 320 conf['link_images_uri']); 321 drawertool.registerDrawer('linklibdrawer', linklibdrawer); 322 323 var imagelibdrawer = new ImageLibraryDrawer(imagetool, conf['image_xsl_uri'], 324 conf['image_libraries_uri'], 325 conf['search_images_uri']); 326 drawertool.registerDrawer('imagelibdrawer', imagelibdrawer); 327 328 var linkdrawer = new LinkDrawer('kupu-linkdrawer', linktool); 329 drawertool.registerDrawer('linkdrawer', linkdrawer); 330 331 var tabledrawer = new TableDrawer('kupu-tabledrawer', tabletool); 332 drawertool.registerDrawer('tabledrawer', tabledrawer); 333 */ 334 335 // var nonxhtmltagfilter = new NonXHTMLTagFilter(); 336 // kupu.registerFilter(nonxhtmltagfilter); 337 338 kupu.xhtmlvalid.setAttrFilter(['is_toc', 'toc_depth', 'is_citation', 339 'source', 'author', 'source_id', 340 'silva_type', 'alignment', 341 'link_to_hires', 'link']); 342 // allow all attributes on div, since ExternalSources require that 343 kupu.xhtmlvalid.includeTagAttributes(['div'], ['*']); 344 kupu.xhtmlvalid.includeTagAttributes(['p'], ['silva_type']); 345 kupu.xhtmlvalid.includeTagAttributes(['h6'], ['silva_type']); 346 kupu.xhtmlvalid.includeTagAttributes(['img'], ['alignment', 347 'link_to_hires', 348 'target', 'link']); 349 350 return kupu; 351 };
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 15:30:41 2007 | par Balluche grâce à PHPXref 0.7 |