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>