293 lines
11 KiB
JavaScript
293 lines
11 KiB
JavaScript
/*
|
|
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;
|
|
};
|