Annotation of kupuMPIWG/silva/kupusilvainit.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: 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 initSilvaKupu(iframe) {
                     53:     // first we create a logger
                     54:     var l = new DummyLogger();
                     55: 
                     56:     // now some config values
                     57:     var conf = loadDictFromXML(document, 'kupuconfig');
                     58:     
                     59:     // the we create the document, hand it over the id of the iframe
                     60:     var doc = new KupuDocument(iframe);
                     61: 
                     62:     // now we can create the controller
                     63:     var kupu = new KupuEditor(doc, conf, l);
                     64:     
                     65:     kupu.registerContentChanger(document.getElementById('kupu-editor-textarea'));
                     66: 
                     67:     if (kupu.getBrowserName() == 'IE') {
                     68:         // IE supports onbeforeunload, so let's use that
                     69:         addEventHandler(window, 'beforeunload', saveOnPart);
                     70:     } else {
                     71:         // some versions of Mozilla support onbeforeunload (starting with 1.7)
                     72:         // so let's try to register and if it fails fall back on onunload
                     73:         var re = /rv:([0-9\.]+)/
                     74:         var match = re.exec(navigator.userAgent)
                     75:         if (match[1] && parseFloat(match[1]) > 1.6) {
                     76:             addEventHandler(window, 'beforeunload', saveOnPart);
                     77:         } else {
                     78:             addEventHandler(window, 'unload', saveOnPart);
                     79:         };
                     80:     };
                     81: 
                     82:     var cm = new ContextMenu();
                     83:     kupu.setContextMenu(cm);
                     84: 
                     85:     // now we can create a UI object which we can use from the UI
                     86:     var ui = new SilvaKupuUI('kupu-tb-styles');
                     87:     kupu.registerTool('ui', ui);
                     88: 
                     89:     var savebuttonfunc = function(button, editor) {editor.saveDocument()};
                     90:     var savebutton = new KupuButton('kupu-save-button', savebuttonfunc);
                     91:     kupu.registerTool('savebutton', savebutton);
                     92: 
                     93:     // function that returns a function to execute a button command
                     94:     var execCommand = function(cmd) {
                     95:         return function(button, editor) {
                     96:             editor.execCommand(cmd);
                     97:         };
                     98:     };
                     99: 
                    100:     var boldchecker = ParentWithStyleChecker(new Array('b', 'strong'),
                    101:                                              'font-weight', 'bold');
                    102:     var boldbutton = new KupuStateButton('kupu-bold-button', 
                    103:                                          execCommand('bold'),
                    104:                                          boldchecker,
                    105:                                          'kupu-bold',
                    106:                                          'kupu-bold-pressed');
                    107:     kupu.registerTool('boldbutton', boldbutton);
                    108: 
                    109:     var italicschecker = ParentWithStyleChecker(new Array('i', 'em'),
                    110:                                                 'font-style', 'italic');
                    111:     var italicsbutton = new KupuStateButton('kupu-italic-button', 
                    112:                                            execCommand('italic'),
                    113:                                            italicschecker, 
                    114:                                            'kupu-italic', 
                    115:                                            'kupu-italic-pressed');
                    116:     kupu.registerTool('italicsbutton', italicsbutton);
                    117: 
                    118:     var underlinechecker = ParentWithStyleChecker(new Array('u'));
                    119:     var underlinebutton = new KupuStateButton('kupu-underline-button', 
                    120:                                               execCommand('underline'),
                    121:                                               underlinechecker,
                    122:                                               'kupu-underline', 
                    123:                                               'kupu-underline-pressed');
                    124:     kupu.registerTool('underlinebutton', underlinebutton);
                    125: 
                    126:     var subscriptchecker = ParentWithStyleChecker(new Array('sub'));
                    127:     var subscriptbutton = new KupuStateButton('kupu-subscript-button',
                    128:                                               execCommand('subscript'),
                    129:                                               subscriptchecker,
                    130:                                               'kupu-subscript',
                    131:                                               'kupu-subscript-pressed');
                    132:     kupu.registerTool('subscriptbutton', subscriptbutton);
                    133: 
                    134:     var superscriptchecker = ParentWithStyleChecker(new Array('super', 'sup'));
                    135:     var superscriptbutton = new KupuStateButton('kupu-superscript-button', 
                    136:                                                 execCommand('superscript'),
                    137:                                                 superscriptchecker,
                    138:                                                 'kupu-superscript', 
                    139:                                                 'kupu-superscript-pressed');
                    140:     kupu.registerTool('superscriptbutton', superscriptbutton);
                    141: 
                    142:     var undobutton = new KupuButton('kupu-undo-button', execCommand('undo'))
                    143:     kupu.registerTool('undobutton', undobutton);
                    144: 
                    145:     var redobutton = new KupuButton('kupu-redo-button', execCommand('redo'))
                    146:     kupu.registerTool('redobutton', redobutton);
                    147: 
                    148:     var listtool = new ListTool('kupu-list-ul-addbutton', 'kupu-list-ol-addbutton',
                    149:                                 'kupu-ulstyles', 'kupu-olstyles');
                    150:     kupu.registerTool('listtool', listtool);
                    151: 
                    152:     var dltool = new DefinitionListTool('kupu-list-dl-addbutton');
                    153:     kupu.registerTool('dltool', dltool);
                    154: 
                    155:     var toctool = new SilvaTocTool(
                    156:         'kupu-toolbox-toc-depth', 'kupu-toc-add-button', 'kupu-toc-del-button',
                    157:         'kupu-toolbox-toc', 'kupu-toolbox', 'kupu-toolbox-active');
                    158:     kupu.registerTool('toctool', toctool);
                    159:     
                    160:     var linktool = new SilvaLinkTool();
                    161:     kupu.registerTool('linktool', linktool);
                    162:     var linktoolbox = new SilvaLinkToolBox(
                    163:         "kupu-link-input", 'kupu-linktarget-select', 'kupu-linktarget-input',
                    164:         "kupu-link-addbutton", 'kupu-link-updatebutton',
                    165:         'kupu-link-delbutton', 'kupu-toolbox-links', 'kupu-toolbox',
                    166:         'kupu-toolbox-active');
                    167:     linktool.registerToolBox("linktoolbox", linktoolbox);
                    168:   
                    169:     var indextool = new SilvaIndexTool(
                    170:         "kupu-index-input", 'kupu-index-addbutton', 'kupu-index-updatebutton',
                    171:         'kupu-index-deletebutton', 'kupu-toolbox-indexes', 'kupu-toolbox',
                    172:         'kupu-toolbox-active');
                    173:     kupu.registerTool('indextool', indextool);
                    174: 
                    175:     var extsourcetool = new SilvaExternalSourceTool(
                    176:         'kupu-toolbox-extsource-id', 'kupu-extsource-formcontainer', 
                    177:         'kupu-extsource-addbutton', 'kupu-extsource-cancelbutton',
                    178:         'kupu-extsource-updatebutton', 'kupu-extsource-delbutton',
                    179:         'kupu-toolbox-extsource', 'kupu-toolbox', 'kupu-toolbox-active');
                    180:     kupu.registerTool('extsourcetool', extsourcetool);
                    181: 
                    182:     var citationtool = new SilvaCitationTool(
                    183:         'kupu-citation-authorinput', 'kupu-citation-sourceinput',
                    184:         'kupu-citation-addbutton', 'kupu-citation-updatebutton',
                    185:         'kupu-citation-deletebutton');
                    186:     kupu.registerTool('citationtool', citationtool);
                    187:   
                    188:     var abbrtool = new SilvaAbbrTool('kupu-abbr-type-abbr', 'kupu-abbr-type-acronym', 
                    189:                                         'kupu-abbr-radiorow', 'kupu-abbr-title',
                    190:                                         'kupu-abbr-addbutton', 'kupu-abbr-updatebutton',
                    191:                                         'kupu-abbr-deletebutton', 'kupu-toolbox-abbr',
                    192:                                         'kupu-toolbox', 'kupu-toolbox-active');
                    193:     kupu.registerTool('abbrtool', abbrtool);
                    194:   
                    195:     var imagetool = new SilvaImageTool(
                    196:         'kupu-toolbox-image-edit', 'kupu-toolbox-image-src',
                    197:         'kupu-toolbox-image-target', 'kupu-toolbox-image-target-input',
                    198:         'kupu-toolbox-image-link-radio-hires',
                    199:         'kupu-toolbox-image-link-radio-link',  'kupu-toolbox-image-link',
                    200:         'kupu-toolbox-image-align', 'kupu-toolbox-image-alt', 
                    201:         'kupu-toolbox-images', 'kupu-toolbox',
                    202:         'kupu-toolbox-active');
                    203:     kupu.registerTool('imagetool', imagetool);
                    204: 
                    205:     var tabletool = new SilvaTableTool(); 
                    206:     kupu.registerTool('tabletool', tabletool);
                    207:     var tabletoolbox = new SilvaTableToolBox(
                    208:         'kupu-toolbox-addtable', 'kupu-toolbox-edittable', 'kupu-table-newrows',
                    209:         'kupu-table-newcols','kupu-table-makeheader', 'kupu-table-classchooser',
                    210:         'kupu-table-alignchooser', 'kupu-table-columnwidth',
                    211:         'kupu-table-addtable-button', 'kupu-table-addrow-button',
                    212:         'kupu-table-delrow-button', 'kupu-table-addcolumn-button',
                    213:         'kupu-table-delcolumn-button', 'kupu-table-fix-button',
                    214:         'kupu-table-delete-button', 'kupu-toolbox-tables', 
                    215:         'kupu-toolbox', 'kupu-toolbox-active'
                    216:         );
                    217:     tabletool.registerToolBox('tabletoolbox', tabletoolbox);
                    218: 
                    219:     var showpathtool = new ShowPathTool();
                    220:     kupu.registerTool('showpathtool', showpathtool);
                    221: 
                    222:     var sourceedittool = new SourceEditTool('kupu-source-button',
                    223:                                             'kupu-editor-textarea');
                    224:     kupu.registerTool('sourceedittool', sourceedittool);
                    225: 
                    226:     var spellchecker = new KupuSpellChecker('kupu-spellchecker-button',
                    227:                                             'kupu_spellcheck');
                    228:     kupu.registerTool('spellchecker', spellchecker);
                    229: 
                    230:     var cleanupexpressions = new CleanupExpressionsTool(
                    231:             'kupucleanupexpressionselect', 'kupucleanupexpressionbutton');
                    232:     kupu.registerTool('cleanupexpressions', cleanupexpressions);
                    233: 
                    234:     var viewsourcetool = new ViewSourceTool();
                    235:     kupu.registerTool('viewsourcetool', viewsourcetool);
                    236:     
                    237:     // Function that returns function to open a drawer
                    238:     var opendrawer = function(drawerid) {
                    239:         return function(button, editor) {
                    240:             drawertool.openDrawer(drawerid);
                    241:         };
                    242:     };
                    243: 
                    244:     /*
                    245:     var imagelibdrawerbutton = new KupuButton('kupu-imagelibdrawer-button',
                    246:                                               opendrawer('imagelibdrawer'));
                    247:     kupu.registerTool('imagelibdrawerbutton', imagelibdrawerbutton);
                    248: 
                    249:     var linklibdrawerbutton = new KupuButton('kupu-linklibdrawer-button',
                    250:                                              opendrawer('linklibdrawer'));
                    251:     kupu.registerTool('linklibdrawerbutton', linklibdrawerbutton);
                    252:     */
                    253: 
                    254:     // create some drawers, drawers are some sort of popups that appear when a 
                    255:     // toolbar button is clicked
                    256:     var drawertool = new DrawerTool();
                    257:     kupu.registerTool('drawertool', drawertool);
                    258: 
                    259:     /*
                    260:     var linklibdrawer = new LinkLibraryDrawer(linktool, conf['link_xsl_uri'],
                    261:                                               conf['link_libraries_uri'],
                    262:                                               conf['link_images_uri']);
                    263:     drawertool.registerDrawer('linklibdrawer', linklibdrawer);
                    264: 
                    265:     var imagelibdrawer = new ImageLibraryDrawer(imagetool, conf['image_xsl_uri'],
                    266:                                                 conf['image_libraries_uri'],
                    267:                                                 conf['search_images_uri']);
                    268:     drawertool.registerDrawer('imagelibdrawer', imagelibdrawer);
                    269:     */
                    270:     
                    271: //    var nonxhtmltagfilter = new NonXHTMLTagFilter();
                    272: //    kupu.registerFilter(nonxhtmltagfilter);
                    273: 
                    274:     kupu.xhtmlvalid.setAttrFilter(['is_toc', 'toc_depth', 'is_citation', 
                    275:                                     'source', 'author', 'source_id', 
                    276:                                     'silva_type', 'alignment', 
                    277:                                     'link_to_hires', 'link']);
                    278:     // allow all attributes on div, since ExternalSources require that
                    279:     kupu.xhtmlvalid.includeTagAttributes(['div'], ['*']);
                    280:     kupu.xhtmlvalid.includeTagAttributes(['p'], ['silva_type']);
                    281:     kupu.xhtmlvalid.includeTagAttributes(['h6'], ['silva_type']);
                    282:     kupu.xhtmlvalid.includeTagAttributes(['img'], ['alignment', 
                    283:                                             'link_to_hires', 
                    284:                                             'target', 'link']);
                    285: 
                    286:     return kupu;
                    287: };

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