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>