Annotation of kupuMPIWG/plone/kupu_plone_layer/kupuploneinit.js, revision 1.1.1.1

1.1       dwinter     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: kupuploneinit.js 9881 2005-03-18 12:26:04Z duncan $
                     12: 
                     13: function initPloneKupu(editorId) {
                     14:     var topnode = getFromSelector(editorId);
                     15:     var prefix = '#'+editorId+' ';
                     16: 
                     17:     var iframe = getFromSelector(prefix+'iframe.kupu-editor-iframe');
                     18:     var textarea = getFromSelector(prefix+'textarea.kupu-editor-textarea');
                     19:     var l = new DummyLogger();
                     20: 
                     21:     // XXX this should be fixed in stylesheets, but I don't know how to do 
                     22:     // that without applying this change to the outter document. Damn iframes.
                     23:     var ibody = iframe.contentWindow.document.body;
                     24:     var form = textarea.form;
                     25:     ibody.style.margin = "12px";
                     26:     ibody.className = "kupu"; // This is set in emptypage but gets lost for some reason.
                     27:     ibody.innerHTML = textarea.value || '<p class=""><br></p>';
                     28: 
                     29:     // now some config values
                     30:     var conf = loadDictFromXML(document, prefix+'xml.kupuconfig');
                     31: 
                     32:     // the we create the document, hand it over the id of the iframe
                     33:     var doc = new KupuDocument(iframe);
                     34: 
                     35:     // now we can create the controller
                     36:     var kupu = new KupuEditor(doc, conf, l);
                     37: 
                     38:     // add the contextmenu
                     39:     var cm = new ContextMenu();
                     40:     kupu.setContextMenu(cm);
                     41: 
                     42:     // now we can create a UI object which we can use from the UI
                     43:     var ui = new PloneKupuUI(prefix+'select.kupu-tb-styles');
                     44:     kupu.registerTool('ui', ui);
                     45: 
                     46:     // function that returns a function to execute a button command
                     47:     var execCommand = function(cmd) {
                     48:         return function(button, editor) {
                     49:             editor.execCommand(cmd);
                     50:         };
                     51:     };
                     52: 
                     53:     var boldchecker = ParentWithStyleChecker(new Array('b', 'strong'),
                     54:                         'font-weight', 'bold');
                     55:     var boldbutton = new KupuStateButton(prefix+'button.kupu-bold', 
                     56:                                          execCommand('bold'),
                     57:                                          boldchecker,
                     58:                                          'kupu-bold',
                     59:                                          'kupu-bold-pressed');
                     60:     kupu.registerTool('boldbutton', boldbutton);
                     61: 
                     62:     var italicschecker = ParentWithStyleChecker(new Array('i', 'em'),
                     63:                        'font-style', 'italic');
                     64:     var italicsbutton = new KupuStateButton(prefix+'button.kupu-italic', 
                     65:                                            execCommand('italic'),
                     66:                                            italicschecker, 
                     67:                                            'kupu-italic', 
                     68:                                            'kupu-italic-pressed');
                     69:     kupu.registerTool('italicsbutton', italicsbutton);
                     70: 
                     71:     var underlinechecker = ParentWithStyleChecker(new Array('u'));
                     72:     var underlinebutton = new KupuStateButton(prefix+'button.kupu-underline', 
                     73:                                               execCommand('underline'),
                     74:                                               underlinechecker,
                     75:                                               'kupu-underline', 
                     76:                                               'kupu-underline-pressed');
                     77:     kupu.registerTool('underlinebutton', underlinebutton);
                     78: 
                     79:     var subscriptchecker = ParentWithStyleChecker(new Array('sub'));
                     80:     var subscriptbutton = new KupuStateButton(prefix+'button.kupu-subscript',
                     81:                                               execCommand('subscript'),
                     82:                                               subscriptchecker,
                     83:                                               'kupu-subscript',
                     84:                                               'kupu-subscript-pressed');
                     85:     kupu.registerTool('subscriptbutton', subscriptbutton);
                     86: 
                     87:     var superscriptchecker = ParentWithStyleChecker(new Array('super', 'sup'));
                     88:     var superscriptbutton = new KupuStateButton(prefix+'button.kupu-superscript', 
                     89:                                                 execCommand('superscript'),
                     90:                                                 superscriptchecker,
                     91:                                                 'kupu-superscript', 
                     92:                                                 'kupu-superscript-pressed');
                     93:     kupu.registerTool('superscriptbutton', superscriptbutton);
                     94: 
                     95:     var justifyleftbutton = new KupuButton(prefix+'button.kupu-justifyleft',
                     96:                                            execCommand('justifyleft'));
                     97:     kupu.registerTool('justifyleftbutton', justifyleftbutton);
                     98: 
                     99:     var justifycenterbutton = new KupuButton(prefix+'button.kupu-justifycenter',
                    100:                                              execCommand('justifycenter'));
                    101:     kupu.registerTool('justifycenterbutton', justifycenterbutton);
                    102: 
                    103:     var justifyrightbutton = new KupuButton(prefix+'button.kupu-justifyright',
                    104:                                             execCommand('justifyright'));
                    105:     kupu.registerTool('justifyrightbutton', justifyrightbutton);
                    106: 
                    107:     var outdentbutton = new KupuButton(prefix+'button.kupu-outdent', execCommand('outdent'));
                    108:     kupu.registerTool('outdentbutton', outdentbutton);
                    109: 
                    110:     var indentbutton = new KupuButton(prefix+'button.kupu-indent', execCommand('indent'));
                    111:     kupu.registerTool('indentbutton', indentbutton);
                    112: 
                    113:     var undobutton = new KupuButton(prefix+'button.kupu-undo', execCommand('undo'));
                    114:     kupu.registerTool('undobutton', undobutton);
                    115: 
                    116:     var redobutton = new KupuButton(prefix+'button.kupu-redo', execCommand('redo'));
                    117:     kupu.registerTool('redobutton', redobutton);
                    118: 
                    119:     var removeimagebutton = new KupuRemoveElementButton(prefix+'button.kupu-removeimage',
                    120:                            'img',
                    121:                            'kupu-removeimage');
                    122:     kupu.registerTool('removeimagebutton', removeimagebutton);
                    123:     var removelinkbutton = new KupuRemoveElementButton(prefix+'button.kupu-removelink',
                    124:                               'a',
                    125:                               'kupu-removelink');
                    126:     kupu.registerTool('removelinkbutton', removelinkbutton);
                    127: 
                    128:     // add some tools
                    129: 
                    130:     var listtool = new ListTool(prefix+'button.kupu-insertunorderedlist',
                    131:                                 prefix+'button.kupu-insertorderedlist',
                    132:                                 prefix+'select.kupu-ulstyles',
                    133:                                 prefix+'select.kupu-olstyles');
                    134:     kupu.registerTool('listtool', listtool);
                    135: 
                    136:     var definitionlisttool = new DefinitionListTool(prefix+'button.kupu-insertdefinitionlist');
                    137:     kupu.registerTool('definitionlisttool', definitionlisttool);
                    138:     
                    139:     var tabletool = new TableTool();
                    140:     kupu.registerTool('tabletool', tabletool);
                    141: 
                    142:     var showpathtool = new ShowPathTool('kupu-showpath-field');
                    143:     kupu.registerTool('showpathtool', showpathtool);
                    144: 
                    145:     var sourceedittool = new SourceEditTool(prefix+'button.kupu-source',
                    146:                                             prefix+'textarea.kupu-editor-textarea');
                    147:     kupu.registerTool('sourceedittool', sourceedittool);
                    148: 
                    149:     var imagetool = NoContextMenu(new ImageTool());
                    150:     kupu.registerTool('imagetool', imagetool);
                    151: 
                    152:     var linktool = NoContextMenu(new LinkTool());
                    153:     kupu.registerTool('linktool', linktool);
                    154: 
                    155:     var zoom = new KupuZoomTool(prefix+'button.kupu-zoom',
                    156:         prefix+'select.kupu-tb-styles',
                    157:         prefix+'button.kupu-logo');
                    158:     kupu.registerTool('zoomtool', zoom);
                    159: 
                    160:     // Use the generic beforeUnload handler if we have it:
                    161:     var beforeunloadTool = window.onbeforeunload && window.onbeforeunload.tool;
                    162:     if (beforeunloadTool) {
                    163:         var initialBody = ibody.innerHTML;
                    164:         beforeunloadTool.addHandler(function() {
                    165:             return ibody.innerHTML != initialBody;
                    166:         });
                    167:         beforeunloadTool.chkId[textarea.id] = function() { return false; }
                    168:         beforeunloadTool.addForm(form);
                    169:     }
                    170:     // Patch for bad AT format pulldown.
                    171:     var fmtname = textarea.name+'_text_format';
                    172:     var pulldown = form[fmtname];
                    173:     if (pulldown && pulldown.type=='select-one') {
                    174:         for (var i=0 ; i < pulldown.length; i++) {
                    175:             var opt = pulldown.options[i];
                    176:             opt.selected = opt.defaultSelected = (opt.value=='text/html');
                    177:         }
                    178:         pulldown.disabled = true;
                    179:         var hidden = document.createElement('input');
                    180:         hidden.type = 'hidden';
                    181:         hidden.name = fmtname;
                    182:         hidden.value = 'text/html';
                    183:         pulldown.parentNode.appendChild(hidden);
                    184:     };
                    185: 
                    186:     // Drawers...
                    187: 
                    188:     // Function that returns function to open a drawer
                    189:     var opendrawer = function(drawerid) {
                    190:         return function(button, editor) {
                    191:             drawertool.openDrawer(prefix+drawerid);
                    192:         };
                    193:     };
                    194: 
                    195:     var imagelibdrawerbutton = new KupuButton(prefix+'button.kupu-image',
                    196:                                               opendrawer('imagelibdrawer'));
                    197:     kupu.registerTool('imagelibdrawerbutton', imagelibdrawerbutton);
                    198: 
                    199:     var linklibdrawerbutton = new KupuButton(prefix+'button.kupu-inthyperlink',
                    200:                                              opendrawer('linklibdrawer'));
                    201:     kupu.registerTool('linklibdrawerbutton', linklibdrawerbutton);
                    202: 
                    203:     var linkdrawerbutton = new KupuButton(prefix+'button.kupu-exthyperlink',
                    204:                                           opendrawer('linkdrawer'));
                    205:     kupu.registerTool('linkdrawerbutton', linkdrawerbutton);
                    206: 
                    207:     var tabledrawerbutton = new KupuButton(prefix+'button.kupu-table',
                    208:                                            opendrawer('tabledrawer'));
                    209:     kupu.registerTool('tabledrawerbutton', tabledrawerbutton);
                    210: 
                    211:     // create some drawers, drawers are some sort of popups that appear when a 
                    212:     // toolbar button is clicked
                    213:     var drawertool = window.drawertool || new DrawerTool();
                    214:     kupu.registerTool('drawertool', drawertool);
                    215: 
                    216:     var drawerparent = prefix+'div.kupu-librarydrawer-parent';
                    217:     var linklibdrawer = new LinkLibraryDrawer(linktool, conf['link_xsl_uri'],
                    218:                                               conf['link_libraries_uri'],
                    219:                                               conf['search_links_uri'], drawerparent);
                    220:     drawertool.registerDrawer(prefix+'linklibdrawer', linklibdrawer, kupu);
                    221: 
                    222:     var imagelibdrawer = new ImageLibraryDrawer(imagetool, conf['image_xsl_uri'],
                    223:                                                 conf['image_libraries_uri'],
                    224:                                                 conf['search_images_uri'], drawerparent);
                    225:     drawertool.registerDrawer(prefix+'imagelibdrawer', imagelibdrawer, kupu);
                    226: 
                    227:     var linkdrawer = new LinkDrawer(prefix+'div.kupu-linkdrawer', linktool);
                    228:     drawertool.registerDrawer(prefix+'linkdrawer', linkdrawer, kupu);
                    229: 
                    230:     var tabledrawer = new TableDrawer(prefix+'div.kupu-tabledrawer', tabletool);
                    231:     drawertool.registerDrawer(prefix+'tabledrawer', tabledrawer, kupu);
                    232: 
                    233:     // register form submit handler, remove the drawer's contents before submitting 
                    234:     // the form since it seems to crash IE if we leave them alone
                    235:     function prepareForm(event) {
                    236:         kupu.saveDataToField(this.form, this);
                    237:         var drawer = window.document.getElementById('kupu-librarydrawer');
                    238:         if (drawer) {
                    239:             drawer.parentNode.removeChild(drawer);
                    240:         }
                    241:     };
                    242:     addEventHandler(textarea.form, 'submit', prepareForm, textarea);
                    243: 
                    244:     return kupu;
                    245: };
                    246: 
                    247: // modify LinkDrawer so all links have a target
                    248: // defaults to _self, override here if reqd.
                    249: //LinkDrawer.prototype.target = '_blank';
                    250: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>