wiki-archive/twiki/pub/TWiki/KupuContrib/kupuinit.js

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;
};