File: kupuinit.js

package info (click to toggle)
twiki 1%3A4.0.5-9.1
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 20,000 kB
  • ctags: 4,044
  • sloc: perl: 29,135; python: 2,583; xml: 573; sh: 256; makefile: 150; php: 129
file content (292 lines) | stat: -rw-r--r-- 11,297 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
/*
   Copyright (C) 2005 ILOG http://www.ilog.fr
   and TWiki Contributors. All Rights Reserved. TWiki Contributors
   are listed in the AUTHORS file in the root of this distribution.
   NOTE: Please extend that file, not this notice.

   Portions Copyright (c) 2003-2004 Kupu Contributors. All rights reserved.

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
   as published by the Free Software Foundation; either version 2
   of the License, or (at your option) any later version.
  
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
   As per the GPL, removal of this notice is prohibited.
*/

/*
 * TWiki-specific customisation of kupuinit.js
 */

function initKupu(iframe) {

    // first we create a logger
    var l = new PlainLogger('kupu-toolbox-debuglog', 20);
    
    // now some config values
    var conf = loadDictFromXML(document, 'kupuconfig');
    
    // the we create the document, hand it over the id of the iframe
    var doc = new KupuDocument(iframe);
    
    // now we can create the controller
    var kupu = new KupuEditor(doc, conf, l);

    var contextmenu = new ContextMenu();
    kupu.setContextMenu(contextmenu);

    // now we can create a UI object which we can use from the UI
    var ui = new KupuUI('kupu-tb-styles');

    // override the setTextStyle method
    var preUp = parentFinder(hasTag(new Array('pre')));
    var preDown = childFinder(hasTag(new Array('pre')));

    var superstyle = ui.setTextStyle;
    ui.setTextStyle = function(style) {
      var verbatim = false;
      style = style.toUpperCase();
      if (kupu.getBrowserName() == "IE") {
        kupu.execCommand('formatblock', '<'+style+'>');
      } else {
        kupu.execCommand('formatblock', style);
      }
      if (style == 'PRE') {
        // Add class to PRE nodes
        var selNode = kupu.getSelectedNode();
        var preNode = preUp(selNode);
        if (preNode) {
          preNode.className = 'TMLverbatim';
        } else {
          var preNodes = preDown(selNode, null, kupu);
          for (var i = 0; i < preNodes.length; i++) {
            preNodes[i].className = 'TMLverbatim';
          }
        }
      }
    }
    // the ui must be registered to the editor like a tool so it can be
    // notified of state changes
    kupu.registerTool('ui', ui); // XXX Should this be a different method?

    // var boldcheck = hasOne(hasTag(new Array('b', 'strong')),
    //                    hasStyle('font-weight', 'bold'));
    var boldcheck = hasTag(new Array('b', 'strong'));
    var boldexec = function(button, editor) {
      editor.execCommand('bold');
    };
    var boldbutton = new TWiki3StateButton('twiki-bold-button', 
                                           boldcheck,
                                           boldexec,
                                           'twiki-bold-button');
    kupu.registerTool('boldbutton', boldbutton);

    //var italicscheck = hasOne(hasTag(new Array('i', 'em')),
    //hasStyle('font-style', 'italic'));
    var italicscheck = hasTag(new Array('i', 'em'));
    var italicsexec = function(button, editor) {
      editor.execCommand('italic');
    };
    var italicsbutton = new TWiki3StateButton('twiki-italic-button', 
                                              italicscheck, 
                                              italicsexec,
                                              'twiki-italic-button');
    kupu.registerTool('italicsbutton', italicsbutton);

    /*
    var codetags = new Array('tt', 'code');
    var codecheck = hasTag(codetags);
    var codecreate = coverSelection('code');
    var codeclean = tagCleaner('code');
    var codeexec = TWiki3StateToggler(codecheck, codecreate, codeclean );
    var codebutton = new TWiki3StateButton('twiki-code-button', 
                                           codecheck, codeexec,
                                           'twiki-code-button');
    kupu.registerTool('codebutton', codebutton);
    */

    var nopcheck = hasClass('TMLnop');
    var nopcreator = coverSelection('span', 'TMLnop');
    var nopcleaner = classCleaner('TMLnop');
    var nopexec = TWiki3StateToggler(nopcheck, nopcreator, nopcleaner);
    var nopbutton = new TWiki3StateButton('twiki-nop-button', 
                                          nopcheck, nopexec,
                                          'twiki-nop-button');
    kupu.registerTool('nopbutton', nopbutton);

    // Icon picker
    var twikiiconstool = new TWikiIconsTool('twiki-icons-button', 
                                            'twiki-icons');
    kupu.registerTool('twikiicons', twikiiconstool);

    // String picker
    var twikistringtool = new TWikiStringTool('twiki-strings-button', 
                                              'twiki-strings-select',
                                              'twiki-strings');
    kupu.registerTool('twikistringtool', twikistringtool);

    var execCommand = function(c) {
      return function(button, editor) {
        editor.execCommand(c);
      };
    };
    var outdentbutton = new KupuButton('kupu-outdent-button',
                                       execCommand('outdent'));
    kupu.registerTool('outdentbutton', outdentbutton);

    var indentbutton = new KupuButton('kupu-indent-button',
                                      execCommand('indent'));
    kupu.registerTool('indentbutton', indentbutton);

    var undobutton = new KupuButton('kupu-undo-button',
                                    execCommand('undo'));
    kupu.registerTool('undobutton', undobutton);

    var redobutton = new KupuButton('kupu-redo-button', execCommand('redo'));
    kupu.registerTool('redobutton', redobutton);

    var removelinkbutton =
      new TWikiRemoveElementButton('kupu-removelink-button',
                                  'a',
                                  'kupu-removelink');
    kupu.registerTool('removelinkbutton', removelinkbutton);

    // add some tools
    var colorchoosertool = new TWikiColorChooserTool('kupu-forecolor-button',
                                                     'kupu-colorchooser');
    kupu.registerTool('colorchooser', colorchoosertool);

    var listtool = new ListTool('kupu-list-ul-addbutton',
                                'kupu-list-ol-addbutton',
                                'kupu-ulstyles', 'kupu-olstyles');

    // Override methods that enable the bullet type selection box
    // Kupu doesn't do OO properly, so this is harder to do than it needs to be
    listtool.super_handleStyles = listtool._handleStyles;
    listtool._handleStyles = function(currnode, onselect, offselect) {
      listtool.super_handleStyles(currnode, onselect, offselect);
      onselect.style.display = "none";
    };
    listtool.super_addList = listtool.addList;
    listtool.addList = function(command) {
      listtool.super_addList(command);
      listtool.ulselect.style.display = "none";
    };

    kupu.registerTool('listtool', listtool);
    
    /*
    var definitionlisttool = new DefinitionListTool('kupu-list-dl-addbutton');
    kupu.registerTool('definitionlisttool', definitionlisttool);
    */
    // shows the path to the current element in the status bar
    var showpathtool = new ShowPathTool();
    kupu.registerTool('showpathtool', showpathtool);

    var sourceedittool = new SourceEditTool('kupu-source-button',
                                            'kupu-editor-textarea');
    kupu.registerTool('sourceedittool', sourceedittool);

    var zoom = new KupuZoomTool('kupu-zoom-button');
    kupu.registerTool('zoomtool', zoom);

    // Save button
    var savebutton = document.getElementById('kupu-save-button');
    function submitForm() {
      // Explicitly call the form submit handler; it is not called by submit()
      var form = TWikiHandleSubmit(kupu);
      form.submit();
    }
    addEventHandler(savebutton, 'click', submitForm, kupu);

    var cancelbutton = document.getElementById('twiki-cancel-button');
    function cancelEdit() {
      var url = conf.cancel;
      window.document.location = conf.cancel;
    }
    addEventHandler(cancelbutton, 'click', cancelEdit, kupu);

    // Tools with Drawers...

    var drawertool = new DrawerTool();
    kupu.registerTool('drawertool', drawertool);

    // Function that returns function to open a drawer
    var opendrawer = function(drawerid) {
        return function(button, editor) {
            drawertool.openDrawer(drawerid);
        };
    };

    // Link drawer

    var linktool = new NoContextMenu( new LinkTool() );
    kupu.registerTool('linktool', linktool);

    var linkdrawerbutton = new KupuButton('kupu-linkdrawer-button',
                                          opendrawer('linkdrawer'));
    kupu.registerTool('linkdrawerbutton', linkdrawerbutton);

    var linkdrawer = new LinkDrawer('kupu-linkdrawer', linktool);
    drawertool.registerDrawer('linkdrawer', linkdrawer);

    // Table drawer
    var tabletool = new TWikiTableTool();
    kupu.registerTool('tabletool', tabletool);

    var tabledrawerbutton = new KupuButton('kupu-tabledrawer-button',
                                           opendrawer('tabledrawer'));
    kupu.registerTool('tabledrawerbutton', tabledrawerbutton);

    var tabledrawer = new TableDrawer('kupu-tabledrawer', tabletool);
    drawertool.registerDrawer('tabledrawer', tabledrawer);

    // WikiWord drawer
    var wikiwordtool = new TWikiWikiWordTool(linktool);
    kupu.registerTool('wikiwordtool', wikiwordtool);

    var wikiworddrawerbutton = new KupuButton('twiki-wikiworddrawer-button',
                                              opendrawer('wikiworddrawer'));
    kupu.registerTool('wikiworddrawerbutton', wikiworddrawerbutton);

    var wikiworddrawer = new TWikiTopicDrawer('twiki-wikiworddrawer',
                                              'twiki-wikiweb-select',
                                              'twiki-wikiword-select',
                                              wikiwordtool);
    drawertool.registerDrawer('wikiworddrawer', wikiworddrawer);

    // Attachments drawer
    var newImageTool = new TWikiInsertAttachmentTool();
    kupu.registerTool('insertImage', newImageTool);
    
    var newImageButton = new KupuButton('twiki-image-button',
                                        opendrawer('newImageDrawer'));
    kupu.registerTool('newImageButton', newImageButton);

    var newImageDrawer =
      new TWikiNewAttachmentDrawer('twiki-new-attachment-drawer',
                                   'twiki-upload-form',
                                   newImageTool);
    drawertool.registerDrawer('newImageDrawer', newImageDrawer);

    // New attachment drawer
    /* 
       var newAttButton = new KupuButton('twiki-attach-button',
       opendrawer('newAttDrawer'));
       kupu.registerTool('newAttButton', newAttButton);

       var newAttDrawer =
       new TWikiNewAttachmentDrawer('twiki-new-attachment-drawer',
       'twiki-upload-form',
       null);
       drawertool.registerDrawer('newAttDrawer', newAttDrawer);
    */

    //kupu.registerFilter(new PreSaveFilter());

    return kupu;
};