incubator-graffito-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clomb...@apache.org
Subject svn commit: r454522 [5/10] - in /incubator/graffito/trunk: applications/browser/src/java/org/apache/portals/graffito/servlets/ applications/browser/src/java/org/apache/portals/graffito/servlets/browser/ applications/browser/src/webapp/META-INF/ applica...
Date Mon, 09 Oct 2006 21:28:32 GMT
Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers.js
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers.js?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers.js (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers.js Mon Oct  9 14:28:27 2006
@@ -0,0 +1,1025 @@
+/*****************************************************************************
+ *
+ * Copyright (c) 2003-2005 Kupu Contributors. All rights reserved.
+ *
+ * This software is distributed under the terms of the Kupu
+ * License. See LICENSE.txt for license text. For a list of Kupu
+ * Contributors see CREDITS.txt.
+ * 
+ *****************************************************************************/
+
+// $Id: kupudrawers.js 15812 2005-08-09 12:30:34Z duncan $
+
+function DrawerTool() {
+    /* a tool to open and fill drawers
+
+        this tool has to (and should!) only be instantiated once
+    */
+    this.drawers = {};
+    this.current_drawer = null;
+    
+    this.initialize = function(editor) {
+        this.editor = editor;
+        this.isIE = this.editor.getBrowserName() == 'IE';
+        // this essentially makes the drawertool a singleton
+        window.drawertool = this;
+    };
+
+    this.registerDrawer = function(id, drawer, editor) {
+        this.drawers[id] = drawer;
+        drawer.initialize(editor || this.editor, this);
+    };
+
+    this.openDrawer = function(id) {
+        /* open a drawer */
+        if (this.current_drawer) {
+            this.closeDrawer();
+        };
+        var drawer = this.drawers[id];
+        if (this.isIE) {
+            drawer.editor._saveSelection();
+        }
+        drawer.createContent();
+        drawer.editor.suspendEditing();
+        this.current_drawer = drawer;
+    };
+
+    this.updateState = function(selNode) {
+    };
+
+    this.closeDrawer = function(button) {
+        if (!this.current_drawer) {
+            return;
+        };
+        this.current_drawer.hide();
+        this.current_drawer.editor.resumeEditing();
+        this.current_drawer = null;
+    };
+
+//     this.getDrawerEnv = function(iframe_win) {
+//         var drawer = null;
+//         for (var id in this.drawers) {
+//             var ldrawer = this.drawers[id];
+//             // Note that we require drawers to provide us with an
+//             // element property!
+//             if (ldrawer.element.contentWindow == iframe_win) {
+//                 drawer = ldrawer;
+//             };
+//         };
+//         if (!drawer) {
+//             this.editor.logMessage("Drawer not found", 1);
+//             return;
+//         };
+//         return {
+//             'drawer': drawer,
+//             'drawertool': this,
+//             'tool': drawer.tool
+//         };
+//     };
+};
+
+DrawerTool.prototype = new KupuTool;
+
+function Drawer(elementid, tool) {
+    /* base prototype for drawers */
+
+    this.element = getFromSelector(elementid);
+    this.tool = tool;
+    
+    this.initialize = function(editor, drawertool) {
+        this.editor = editor;
+        this.drawertool = drawertool;
+    };
+    
+    this.createContent = function() {
+        /* fill the drawer with some content */
+        // here's where any intelligence and XSLT transformation and such 
+        // is done
+        this.element.style.display = 'block';
+        this.focusElement();
+    };
+
+    this.hide = function() {
+        this.element.style.display = 'none';
+        this.focussed = false;
+    };
+
+    this.focusElement = function() {
+        // IE can focus the drawer element, but Mozilla needs more help
+        this.focussed = false;
+        var iterator = new NodeIterator(this.element);
+        var currnode = iterator.next();
+        while (currnode) {
+            if (currnode.tagName && (currnode.tagName.toUpperCase()=='BUTTON' ||
+                (currnode.tagName.toUpperCase()=='INPUT' && !(/nofocus/.test(currnode.className)))
+                )) {
+                this.focussed = true;
+                function focusit() {
+                    currnode.focus();
+                }
+                timer_instance.registerFunction(this, focusit, 100);
+                return;
+            }
+            currnode = iterator.next();
+        }
+    }
+};
+
+function LinkDrawer(elementid, tool, wrap) {
+    /* Link drawer */
+    this.element = getFromSelector(elementid);
+    this.tool = tool;
+    function wrap(id, tag) {
+        return '#'+this.element.id+' '+tag+'.'+id;
+    }
+    var input = getBaseTagClass(this.element, 'input', 'kupu-linkdrawer-input');
+    var preview = getBaseTagClass(this.element, 'iframe', 'kupu-linkdrawer-preview');
+
+    this.createContent = function() {
+        /* display the drawer */
+        var currnode = this.editor.getSelectedNode();
+        var linkel = this.editor.getNearestParentOfType(currnode, 'a');
+        input.value = "";
+        this.preview();
+        if (linkel) {
+            input.value = linkel.getAttribute('href');
+        } else {
+            input.value = 'http://';
+        };
+        this.element.style.display = 'block';
+        this.focusElement();
+    };
+
+    this.save = function() {
+        /* add or modify a link */
+        this.editor.resumeEditing();
+        var url = input.value;
+        var target = '_self';
+        if (this.target) target = this.target;
+        this.tool.createLink(url, null, null, target);
+        input.value = '';
+
+        // XXX when reediting a link, the drawer does not close for
+        // some weird reason. BUG! Close the drawer manually until we
+        // find a fix:
+        this.drawertool.closeDrawer();
+    };
+    
+    this.preview = function() {
+        preview.src = input.value;
+        if (this.editor.getBrowserName() == 'IE') {
+            preview.width = "800";
+            preview.height = "365";
+            preview.style.zoom = "60%";
+        };
+    }
+    this.preview_loaded = function() {
+        if (input.value  != preview.src) {
+            input.value = preview.src;
+        }
+    }
+};
+
+LinkDrawer.prototype = new Drawer;
+
+function TableDrawer(elementid, tool) {
+    /* Table drawer */
+    this.element = getFromSelector(elementid);
+    this.tool = tool;
+
+    this.addpanel = getBaseTagClass(this.element, 'div', 'kupu-tabledrawer-addtable');
+    this.editpanel = getBaseTagClass(this.element, 'div', 'kupu-tabledrawer-edittable');
+    var editclassselect = getBaseTagClass(this.element, 'select', 'kupu-tabledrawer-editclasschooser');
+    var addclassselect = getBaseTagClass(this.element, 'select', 'kupu-tabledrawer-addclasschooser');
+    var alignselect = getBaseTagClass(this.element, 'select', 'kupu-tabledrawer-alignchooser');
+    var newrowsinput = getBaseTagClass(this.element, 'input', 'kupu-tabledrawer-newrows');
+    var newcolsinput = getBaseTagClass(this.element, 'input', 'kupu-tabledrawer-newcols');
+    var makeheadercheck = getBaseTagClass(this.element, 'input', 'kupu-tabledrawer-makeheader');
+
+    this.createContent = function() {
+        var editor = this.editor;
+        var selNode = editor.getSelectedNode();
+
+        function fixClasses(classselect) {
+            if (editor.config.table_classes) {
+                var classes = editor.config.table_classes['class'];
+                while (classselect.hasChildNodes()) {
+                    classselect.removeChild(classselect.firstChild);
+                };
+                for (var i=0; i < classes.length; i++) {
+                    var classinfo = classes[i];
+                    var caption = classinfo.xcaption || classinfo;
+                    var classname = classinfo.classname || classinfo;
+
+                    var option = document.createElement('option');
+                    var content = document.createTextNode(caption);
+                    option.appendChild(content);
+                    option.setAttribute('value', classname);
+                    classselect.appendChild(option);
+                };
+            };
+        };
+        fixClasses(addclassselect);
+        fixClasses(editclassselect);
+        
+        var table = editor.getNearestParentOfType(selNode, 'table');
+
+        if (!table) {
+            // show add table drawer
+            show = this.addpanel;
+            hide = this.editpanel;
+        } else {
+            // show edit table drawer
+            show = this.editpanel;
+            hide = this.addpanel;
+            var align = this.tool._getColumnAlign(selNode);
+            selectSelectItem(alignselect, align);
+            selectSelectItem(editclassselect, table.className);
+        };
+        hide.style.display = 'none';
+        show.style.display = 'block';
+        this.element.style.display = 'block';
+        this.focusElement();
+    };
+
+    this.createTable = function() {
+        this.editor.resumeEditing();
+        var rows = newrowsinput.value;
+        var cols = newcolsinput.value;
+        var style = addclassselect.value;
+        var add_header = makeheadercheck.checked;
+        this.tool.createTable(parseInt(rows), parseInt(cols), add_header, style);
+        this.drawertool.closeDrawer();
+    };
+    this.delTableRow = function() {
+        this.editor.resumeEditing();
+        this.tool.delTableRow();
+        this.editor.suspendEditing();
+    };
+    this.addTableRow = function() {
+        this.editor.resumeEditing();
+        this.tool.addTableRow();
+        this.editor.suspendEditing();
+    };
+    this.delTableColumn = function() {
+        this.editor.resumeEditing();
+        this.tool.delTableColumn();
+        this.editor.suspendEditing();
+    };
+    this.addTableColumn = function() {
+        this.editor.resumeEditing();
+        this.tool.addTableColumn();
+        this.editor.suspendEditing();
+    };
+    this.fixTable = function() {
+        this.editor.resumeEditing();
+        this.tool.fixTable();
+        this.editor.suspendEditing();
+    };
+    this.fixAllTables = function() {
+        this.editor.resumeEditing();
+        this.tool.fixAllTables();
+        this.editor.suspendEditing();
+    };
+    this.setTableClass = function(className) {
+        this.editor.resumeEditing();
+        this.tool.setTableClass(className);
+        this.editor.suspendEditing();
+    };
+    this.setColumnAlign = function(align) {
+        this.editor.resumeEditing();
+        this.tool.setColumnAlign(align);
+        this.editor.suspendEditing();
+    };
+};
+
+TableDrawer.prototype = new Drawer;
+
+function LibraryDrawer(tool, xsluri, libsuri, searchuri, baseelement) {
+    /* a drawer that loads XSLT and XML from the server 
+       and converts the XML to XHTML for the drawer using the XSLT
+
+       there are 2 types of XML file loaded from the server: the first
+       contains a list of 'libraries', partitions for the data items, 
+       and the second a list of data items for a certain library
+
+       all XML loading is done async, since sync loading can freeze Mozilla
+    */
+
+    this.init = function(tool, xsluri, libsuri, searchuri, baseelement) {
+        /* This method is there to thin out the constructor and to be
+           able to inherit it in sub-prototypes. Don't confuse this
+           method with the component initializer (initialize()).
+        */
+        // these are used in the XSLT. Maybe they should be
+        // parameterized or something, but we depend on so many other
+        // things implicitly anyway...
+        this.drawerid = 'kupu-librarydrawer';
+        this.librariespanelid = 'kupu-librariespanel';
+        this.resourcespanelid = 'kupu-resourcespanel';
+        this.propertiespanelid = 'kupu-propertiespanel';
+
+        if (baseelement) {
+            this.baseelement = getFromSelector(baseelement);
+        } else {
+            this.baseelement = getBaseTagClass(document.body, 'div', 'kupu-librarydrawer-parent');
+        }
+
+        this.tool = tool;
+        this.element = document.getElementById(this.drawerid);
+        if (!this.element) {
+            var e = document.createElement('div');
+            e.id = this.drawerid;
+            e.className = 'kupu-drawer '+this.drawerid;
+            this.baseelement.appendChild(e);
+            this.element = e;
+        }
+        this.shared.xsluri = xsluri;
+        this.shared.libsuri = libsuri;
+        this.shared.searchuri = searchuri;
+        
+        // marker that gets set when a new image has been uploaded
+        this.shared.newimages = null;
+
+        // the following vars will be available after this.initialize()
+        // has been called
+    
+        // this will be filled by this._libXslCallback()
+        this.shared.xsl = null;
+        // this will be filled by this.loadLibraries(), which is called 
+        // somewhere further down the chain starting with 
+        // this._libsXslCallback()
+        this.shared.xmldata = null;
+
+    };
+    if (tool) {
+        this.init(tool, xsluri, libsuri, searchuri);
+    }
+
+    this.initialize = function(editor, drawertool) {
+        this.editor = editor;
+        this.drawertool = drawertool;
+        this.selecteditemid = '';
+
+        // load the xsl and the initial xml
+        var wrapped_callback = new ContextFixer(this._libsXslCallback, this);
+        this._loadXML(this.shared.xsluri, wrapped_callback.execute);
+    };
+
+    /*** bootstrapping ***/
+
+    this._libsXslCallback = function(dom) {
+        /* callback for when the xsl for the libs is loaded
+        
+            this is called on init and since the initial libs need
+            to be loaded as well (and everything is async with callbacks
+            so there's no way to wait until the XSL is loaded) this
+            will also make the first loadLibraries call
+        */
+        this.shared.xsl = dom;
+
+        // Change by Paul to have cached xslt transformers for reuse of 
+        // multiple transforms and also xslt params
+        try {
+            var xsltproc =  new XSLTProcessor();
+            this.shared.xsltproc = xsltproc;
+            xsltproc.importStylesheet(dom);
+            xsltproc.setParameter("", "drawertype", this.drawertype);
+            xsltproc.setParameter("", "drawertitle", this.drawertitle);
+            xsltproc.setParameter("", "showupload", this.showupload);
+            if (this.editor.config.captions) {
+                xsltproc.setParameter("", "usecaptions", 'yes');
+            }
+        } catch(e) {
+            return; // No XSLT Processor, maybe IE 5.5?
+        }
+    };
+
+    this.createContent = function() {
+        // Make sure the drawer XML is in the current Kupu instance
+        if (this.element.parentNode != this.baseelement) {
+            this.baseelement.appendChild(this.element);
+        }
+        // load the initial XML
+        if(!this.shared.xmldata) {
+            // Do a meaningful test to see if this is IE5.5 or some other 
+            // editor-enabled version whose XML support isn't good enough 
+            // for the drawers
+            if (!window.XSLTProcessor) {
+               alert("This function requires better XML support in your browser.");
+               return;
+            }
+            this.loadLibraries();
+        } else {
+            if (this.shared.newimages) {
+                this.reloadCurrent();
+                this.shared.newimages = null;
+            };
+            this.updateDisplay();
+            this.initialSelection();
+        };
+
+        // display the drawer div
+        this.element.style.display = 'block';
+    };
+
+    this._singleLibsXslCallback = function(dom) {
+        /* callback for then the xsl for single libs (items) is loaded
+
+            nothing special needs to be called here, since initially the
+            items pane will be empty
+        */
+        this.singlelibxsl = dom;
+    };
+
+    this.loadLibraries = function() {
+        /* load the libraries and display them in a redrawn drawer */
+        var wrapped_callback = new ContextFixer(this._libsContentCallback, this);
+        this._loadXML(this.shared.libsuri, wrapped_callback.execute);
+    };
+
+    this._libsContentCallback = function(dom) {
+        /* this is called when the libs xml is loaded
+
+            does the xslt transformation to set up or renew the drawer's full
+            content and adds the content to the drawer
+        */
+        this.shared.xmldata = dom;
+        this.shared.xmldata.setProperty("SelectionLanguage", "XPath");
+
+        // replace whatever is in there with our stuff
+        this.updateDisplay(this.drawerid);
+        this.initialSelection();
+    };
+
+    this.initialSelection = function() {
+        var libnode_path = '/libraries/library[@selected]';
+        var libnode = this.shared.xmldata.selectSingleNode(libnode_path);
+        if (libnode) {
+            var id = libnode.getAttribute('id');
+            this.selectLibrary(id);
+        }
+    }
+
+    this.updateDisplay = function(id) {
+      /* (re-)transform XML and (re-)display the necessary part
+       */
+        if(!id) {
+            id = this.drawerid;
+        };
+        try {
+            this.shared.xsltproc.setParameter("", "showupload", this.showupload);
+        } catch(e) {};
+        var doc = this._transformXml();
+        var sourcenode = doc.selectSingleNode('//*[@id="'+id+'"]');
+        var targetnode = document.getElementById(id);
+        sourcenode = document.importNode(sourcenode, true);
+        Sarissa.copyChildNodes(sourcenode, targetnode);
+        if (!this.focussed) {
+            this.focusElement();
+        }
+
+        if (this.editor.getBrowserName() == 'IE' && id == this.resourcespanelid) {
+            this.updateDisplay(this.drawerid);
+        };
+    };
+
+    this.deselectActiveCollection = function() {
+        /* Deselect the currently active collection or library */
+        while (1) {
+            // deselect selected DOM node
+            var selected = this.shared.xmldata.selectSingleNode('//*[@selected]');
+            if (!selected) {
+                return;
+            };
+            selected.removeAttribute('selected');
+        };
+    };
+
+    /*** Load a library ***/
+
+    this.selectLibrary = function(id) {
+        /* unselect the currently selected lib and select a new one
+
+            the selected lib (libraries pane) will have a specific CSS class 
+            (selected)
+        */
+        // remove selection in the DOM
+        this.deselectActiveCollection();
+        // as well as visual selection in CSS
+        // XXX this is slow, but we can't do XPath, unfortunately
+        var divs = this.element.getElementsByTagName('div');
+        for (var i=0; i<divs.length; i++ ) {
+          if (divs[i].className == 'kupu-libsource-selected') {
+            divs[i].className = 'kupu-libsource';
+          };
+        };
+
+        var libnode_path = '/libraries/library[@id="' + id + '"]';
+        var libnode = this.shared.xmldata.selectSingleNode(libnode_path);
+        libnode.setAttribute('selected', '1');
+
+        var items_xpath = "items";
+        var items_node = libnode.selectSingleNode(items_xpath);
+        
+        if (items_node && !this.shared.newimages) {
+            // The library has already been loaded before or was
+            // already provided with an items list. No need to do
+            // anything except for displaying the contents in the
+            // middle pane. Newimages is set if we've lately
+            // added an image.
+            this.updateDisplay(this.resourcespanelid);
+            this.updateDisplay(this.propertiespanelid);
+        } else {
+            // We have to load the library from XML first.
+            var src_uri = libnode.selectSingleNode('src/text()').nodeValue;
+            src_uri = src_uri.strip(); // needs kupuhelpers.js
+            // Now load the library into the items pane. Since we have
+            // to load the XML, do this via a call back
+            var wrapped_callback = new ContextFixer(this._libraryContentCallback, this);
+            this._loadXML(src_uri, wrapped_callback.execute, null);
+            this.shared.newimages = null;
+        };
+        // instead of running the full transformations again we get a 
+        // reference to the element and set the classname...
+        var newseldiv = document.getElementById(id);
+        newseldiv.className = 'kupu-libsource-selected';
+    };
+
+    this._libraryContentCallback = function(dom, src_uri) {
+        /* callback for when a library's contents (item list) is loaded
+
+        This is also used as he handler for reloading a standard
+        collection.
+        */
+        var libnode = this.shared.xmldata.selectSingleNode('//*[@selected]');
+        var itemsnode = libnode.selectSingleNode("items");
+        var newitemsnode = dom.selectSingleNode("//items");
+
+        // IE does not support importNode on XML document nodes. As an
+        // evil hack, clonde the node instead.
+
+        if (this.editor.getBrowserName() == 'IE') {
+            newitemsnode = newitemsnode.cloneNode(true);
+        } else {
+            newitemsnode = this.shared.xmldata.importNode(newitemsnode, true);
+        }
+        if (!itemsnode) {
+            // We're loading this for the first time
+            libnode.appendChild(newitemsnode);
+        } else {
+            // User has clicked reload
+            libnode.replaceChild(newitemsnode, itemsnode);
+        };
+        this.updateDisplay(this.resourcespanelid);
+        this.updateDisplay(this.propertiespanelid);
+    };
+
+    /*** Load a collection ***/
+
+    this.selectCollection = function(id) {
+        this.deselectActiveCollection();
+
+        // First turn off current selection, if any
+        this.removeSelection();
+        
+        var leafnode_path = "//collection[@id='" + id + "']";
+        var leafnode = this.shared.xmldata.selectSingleNode(leafnode_path);
+
+        // Case 1: We've already loaded the data, so we just need to
+        // refer to the data by id.
+        var loadedInNode = leafnode.getAttribute('loadedInNode');
+        if (loadedInNode) {
+            var collnode_path = "/libraries/collection[@id='" + loadedInNode + "']";
+            var collnode = this.shared.xmldata.selectSingleNode(collnode_path);
+            if (collnode) {
+                collnode.setAttribute('selected', '1');
+                this.updateDisplay(this.resourcespanelid);
+                this.updateDisplay(this.propertiespanelid);
+                return;
+            };
+        };
+
+        // Case 2: We've already loaded the data, but there hasn't
+        // been a reference made yet. So, make one :)
+        uri = leafnode.selectSingleNode('uri/text()').nodeValue;
+        uri = (new String(uri)).strip(); // needs kupuhelpers.js
+        var collnode_path = "/libraries/collection/uri[text()='" + uri + "']/..";
+        var collnode = this.shared.xmldata.selectSingleNode(collnode_path);
+        if (collnode) {
+            id = collnode.getAttribute('id');
+            leafnode.setAttribute('loadedInNode', id);
+            collnode.setAttribute('selected', '1');
+            this.updateDisplay(this.resourcespanelid);
+            this.updateDisplay(this.propertiespanelid);
+            return;
+        };
+
+        // Case 3: We've not loaded the data yet, so we need to load it
+        // this is just so we can find the leafnode much easier in the
+        // callback.
+        leafnode.setAttribute('selected', '1');
+        var src_uri = leafnode.selectSingleNode('src/text()').nodeValue;
+        src_uri = src_uri.strip(); // needs kupuhelpers.js
+        var wrapped_callback = new ContextFixer(this._collectionContentCallback, this);
+        this._loadXML(src_uri, wrapped_callback.execute, null);
+    };
+
+    this._collectionContentCallback = function(dom, src_uri) {
+        // Unlike with libraries, we don't have to find a node to hook
+        // our results into (UNLESS we've hit the reload button, but
+        // that is handled in _libraryContentCallback anyway).
+        // We need to give the newly retrieved data a unique ID, we
+        // just use the time.
+        date = new Date();
+        time = date.getTime();
+
+        // attach 'loadedInNode' attribute to leaf node so Case 1
+        // applies next time.
+        var leafnode = this.shared.xmldata.selectSingleNode('//*[@selected]');
+        leafnode.setAttribute('loadedInNode', time);
+        this.deselectActiveCollection()
+
+        var collnode = dom.selectSingleNode('/collection');
+        collnode.setAttribute('id', time);
+        collnode.setAttribute('selected', '1');
+
+        var libraries = this.shared.xmldata.selectSingleNode('/libraries');
+
+        // IE does not support importNode on XML documet nodes
+        if (this.editor.getBrowserName() == 'IE') {
+            collnode = collnode.cloneNode(true);
+        } else {
+            collnode = this.shared.xmldata.importNode(collnode, true);
+        }
+        libraries.appendChild(collnode);
+        this.updateDisplay(this.resourcespanelid);
+        this.updateDisplay(this.propertiespanelid);
+    };
+
+    /*** Reloading a collection or library ***/
+
+    this.reloadCurrent = function() {
+        // Reload current collection or library
+        this.showupload = '';
+        var current = this.shared.xmldata.selectSingleNode('//*[@selected]');
+        // make sure we're dealing with a collection even though a
+        // resource might be selected
+        if (current.tagName == "resource") {
+            current.removeAttribute("selected");
+            current = current.parentNode;
+            current.setAttribute("selected", "1");
+        };
+        var src_node = current.selectSingleNode('src');
+        if (!src_node) {
+            // simply do nothing if the library cannot be reloaded. This
+            // is currently the case w/ search result libraries.
+            return;
+        };
+
+        var src_uri = src_node.selectSingleNode('text()').nodeValue;
+        
+        src_uri = src_uri.strip(); // needs kupuhelpers.js
+
+        var wrapped_callback = new ContextFixer(this._libraryContentCallback, this);
+        this._loadXML(src_uri, wrapped_callback.execute);
+    };
+
+    this.removeSelection = function() {
+        // turn off current selection, if any
+        var oldselxpath = '/libraries/*[@selected]//resource[@selected]';
+        var oldselitem = this.shared.xmldata.selectSingleNode(oldselxpath);
+        if (oldselitem) {
+            oldselitem.removeAttribute("selected");
+        };
+        if (this.selecteditemid) {
+            var item = document.getElementById(this.selecteditemid);
+            if (item) {
+                var span = item.getElementsByTagName('span');
+                if (span.length > 0) {
+                    span = span[0];
+                    span.className = span.className.replace(' selected-item', '');
+                }
+            }
+            this.selecteditemid = '';
+        }
+        this.showupload = '';
+    }
+
+    this.selectUpload = function() {
+        this.removeSelection();
+        this.showupload = 'yes';
+        this.updateDisplay(this.resourcespanelid);
+        this.updateDisplay(this.propertiespanelid);
+    }
+    /*** Selecting a resource ***/
+
+    this.selectItem = function (item, id) {
+        /* select an item in the item pane, show the item's metadata */
+
+        // First turn off current selection, if any
+        this.removeSelection();
+        
+        // Grab XML DOM node for clicked "resource" and mark it selected
+        var newselxpath = '/libraries/*[@selected]//resource[@id="' + id + '"]';
+        var newselitem = this.shared.xmldata.selectSingleNode(newselxpath);
+        newselitem.setAttribute("selected", "1");
+        //this.updateDisplay(this.resourcespanelid);
+        this.updateDisplay(this.propertiespanelid);
+
+        // Don't want to reload the resource panel xml as it scrolls to
+        // the top.
+        var span = item.getElementsByTagName('span');
+        if (span.length > 0) {
+            span = span[0];
+            span.className += ' selected-item';
+        }
+        this.selecteditemid = id;
+        if (this.editor.getBrowserName() == 'IE') {
+            var ppanel = document.getElementById(this.propertiespanelid)
+            var height = ppanel.clientHeight;
+            if (height > ppanel.scrollHeight) height = ppanel.scrollHeight;
+            if (height < 260) height = 260;
+            document.getElementById(this.resourcespanelid).style.height = height+'px';
+        }
+        return;
+    }
+
+
+    this.search = function() {
+        /* search */
+        var searchvalue = getFromSelector('kupu-searchbox-input').value;
+        //XXX make search variable configurable
+        var body = 'SearchableText=' + escape(searchvalue);
+
+        // the search uri might contain query parameters in HTTP GET
+        // style. We want to do a POST though, so find any possible
+        // parameters, trim them from the URI and append them to the
+        // POST body instead.
+        var chunks = this.shared.searchuri.split('?');
+        var searchuri = chunks[0];
+        if (chunks[1]) {
+            body += "&" + chunks[1];
+        };
+        var wrapped_callback = new ContextFixer(this._searchCallback, this);
+        this._loadXML(searchuri, wrapped_callback.execute, body);
+    };
+
+    this._searchCallback = function(dom) {
+        var resultlib = dom.selectSingleNode("/library");
+
+        var items = resultlib.selectNodes("items/*");
+        if (!items.length) {
+            alert("No results found.");
+            return;
+        };
+
+        // we need to give the newly retrieved data a unique ID, we
+        // just use the time.
+        date = new Date();
+        time = date.getTime();
+        resultlib.setAttribute("id", time);
+
+        // deselect the previous collection and mark the result
+        // library as selected
+        this.deselectActiveCollection();
+        resultlib.setAttribute("selected", "1");
+
+        // now hook the result library into our DOM
+        if (this.editor.getBrowserName() == 'IE') {
+            resultlib = resultlib.cloneNode(true);
+        } else {
+            this.shared.xmldata.importNode(resultlib, true);
+        }
+        var libraries = this.shared.xmldata.selectSingleNode("/libraries");
+        libraries.appendChild(resultlib);
+
+        this.updateDisplay(this.drawerid);
+        var newseldiv = getFromSelector(time);
+        newseldiv.className = 'selected';
+    };
+
+    this.save = function() {
+        /* save the element, should be implemented on subclasses */
+        throw "Not yet implemented";
+    };
+
+    /*** Auxiliary methods ***/
+
+    this._transformXml = function() {
+        /* transform this.shared.xmldata to HTML using this.shared.xsl and return it */
+        var doc = Sarissa.getDomDocument();
+	var result = this.shared.xsltproc.transformToDocument(this.shared.xmldata);
+        return result;
+    };
+
+    this._loadXML = function(uri, callback, body) {
+        /* load the XML from a uri
+        
+            calls callback with one arg (the XML DOM) when done
+            the (optional) body arg should contain the body for the request
+*/
+	var xmlhttp = new XMLHttpRequest();
+        var method = 'GET';
+        if (body) {
+          method = 'POST';
+        } else {
+          // be sure that body is null and not an empty string or
+          // something
+          body = null;
+        };
+        xmlhttp.open(method, uri, true);
+        // use ContextFixer to wrap the Sarissa callback, both for isolating 
+        // the 'this' problem and to be able to pass in an extra argument 
+        // (callback)
+        var wrapped_callback = new ContextFixer(this._sarissaCallback, xmlhttp,
+                                                callback, uri);
+        xmlhttp.onreadystatechange = wrapped_callback.execute;
+        if (method == "POST") {
+            // by default, we would send a 'text/xml' request, which
+            // is a dirty lie; explicitly set the content type to what
+            // a web server expects from a POST.
+            xmlhttp.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
+        };
+        xmlhttp.send(body);
+    };
+
+    this._sarissaCallback = function(user_callback, uri) {
+        /* callback for Sarissa
+            when the callback is called because the data's ready it
+            will get the responseXML DOM and call user_callback
+            with the DOM as the first argument and the uri loaded
+            as the second
+            
+            note that this method should be called in the context of an 
+            xmlhttp object
+        */
+        var errmessage = 'Error loading XML: ';
+        if (uri) {
+            errmessage = 'Error loading ' + uri + ':';
+        };
+        if (this.readyState == 4) {
+            if (this.status && this.status != 200) {
+                alert(errmessage + this.status);
+                throw "Error loading XML";
+            };
+            var dom = this.responseXML;
+            user_callback(dom, uri);
+        };
+    };
+};
+
+LibraryDrawer.prototype = new Drawer;
+LibraryDrawer.prototype.shared = {}; // Shared data
+
+function ImageLibraryDrawer(tool, xsluri, libsuri, searchuri, baseelement) {
+    /* a specific LibraryDrawer for images */
+
+    this.drawertitle = "Insert Image";
+    this.drawertype = "image";
+    this.showupload = '';
+    if (tool) {
+        this.init(tool, xsluri, libsuri, searchuri, baseelement);
+    }
+ 
+    
+    // upload, on submit/insert press
+    this.uploadImage = function() {
+        var form = document.kupu_upload_form;
+        if (!form || form.node_prop_image.value=='') return;
+
+        if (form.node_prop_caption.value == "") {
+            alert("Please enter a title for the image you are uploading");
+            return;        
+        };
+        
+        var targeturi =  this.shared.xmldata.selectSingleNode('/libraries/*[@selected]/uri/text()').nodeValue
+        document.kupu_upload_form.action =  targeturi + "/kupuUploadImage";
+        document.kupu_upload_form.submit();
+    };
+    
+    // called for example when no permission to upload for some reason
+    this.cancelUpload = function(msg) {
+        var s = this.shared.xmldata.selectSingleNode('/libraries/*[@selected]');     
+        s.removeAttribute("selected");
+        this.updateDisplay();
+        if (msg != '') {
+            alert(msg);
+        };
+    };
+    
+    // called by onLoad within document sent by server
+    this.finishUpload = function(url) {
+        this.editor.resumeEditing();
+        var imgclass = 'image-inline';
+        if (this.editor.config.captions) {
+            imgclass += " captioned";
+        };
+        this.tool.createImage(url, null, imgclass);
+        this.shared.newimages = 1;
+        this.drawertool.closeDrawer();
+    };
+    
+
+    this.save = function() {
+        this.editor.resumeEditing();
+        /* create an image in the iframe according to collected data
+           from the drawer */
+        var selxpath = '//resource[@selected]';
+        var selnode = this.shared.xmldata.selectSingleNode(selxpath);
+        
+        // If no image resource is selected, check for upload
+        if (!selnode) {
+            var uploadbutton = this.shared.xmldata.selectSingleNode("/libraries/*[@selected]//uploadbutton");
+            if (uploadbutton) {
+                this.uploadImage();
+            };
+            return;
+        };
+
+        var uri = selnode.selectSingleNode('uri/text()').nodeValue;
+        uri = uri.strip();  // needs kupuhelpers.js
+        var alt = getFromSelector('image_alt').value;
+
+        var radios = document.getElementsByName('image-align');
+        for (var i = 0; i < radios.length; i++) {
+            if (radios[i].checked) {
+                var imgclass = radios[i].value;
+            };
+        };
+
+        var caption = document.getElementsByName('image-caption');
+        if (caption && caption.length>0 && caption[0].checked) {
+            imgclass += " captioned";
+        };
+
+        this.tool.createImage(uri, alt, imgclass);
+        this.drawertool.closeDrawer();
+    };
+};
+
+ImageLibraryDrawer.prototype = new LibraryDrawer;
+ImageLibraryDrawer.prototype.shared = {}; // Shared data
+
+function LinkLibraryDrawer(tool, xsluri, libsuri, searchuri, baseelement) {
+    /* a specific LibraryDrawer for links */
+
+    this.drawertitle = "Insert Link";
+    this.drawertype = "link";
+    this.showupload = '';
+    if (tool) {
+        this.init(tool, xsluri, libsuri, searchuri, baseelement);
+    }
+
+    this.save = function() {
+        this.editor.resumeEditing();
+        /* create a link in the iframe according to collected data
+           from the drawer */
+        var selxpath = '//resource[@selected]';
+        var selnode = this.shared.xmldata.selectSingleNode(selxpath);
+        if (!selnode) {
+            return;
+        };
+
+        var uri = selnode.selectSingleNode('uri/text()').nodeValue;
+        uri = uri.strip();  // needs kupuhelpers.js
+        var title = '';
+        title = selnode.selectSingleNode('title/text()').nodeValue;
+        title = title.strip();
+
+        // XXX requiring the user to know what link type to enter is a
+        // little too much I think. (philiKON)
+        var type = null;
+        var name = getFromSelector('link_name').value;
+        var target = null;
+        if (getFromSelector('link_target') && getFromSelector('link_target').value != '')
+            target = getFromSelector('link_target').value;
+        
+        this.tool.createLink(uri, type, name, target, title);
+        this.drawertool.closeDrawer();
+    };
+};
+
+LinkLibraryDrawer.prototype = new LibraryDrawer;
+LinkLibraryDrawer.prototype.shared = {}; // Shared data
+
+/* Function to suppress enter key in drawers */
+function HandleDrawerEnter(event, clickid) {
+    var key;
+    event = event || window.event;
+    key = event.which || event.keyCode;
+
+    if (key==13) {
+        if (clickid) {
+            var button = document.getElementById(clickid);
+            if (button) {
+                button.click();
+            }
+        }
+        event.cancelBubble = true;
+        if (event.stopPropogation) event.stopPropogation();
+
+        return false;
+    }
+    return true;
+}

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/.objects
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/.objects?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/.objects (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/.objects Mon Oct  9 14:28:27 2006
@@ -0,0 +1,2 @@
+drawer.xsl:Page Template
+drawer.xsl.metadata:

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/allimages.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/allimages.xml?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/allimages.xml (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/allimages.xml Mon Oct  9 14:28:27 2006
@@ -0,0 +1,21 @@
+<?xml version="1.0" ?>
+<collection>
+    <uri>kupudrawers/allimages.xml</uri>
+    <icon>kupuimages/kupulibrary.png</icon>
+    <title>All images</title>
+    <src>kupudrawers/allimages.xml</src>
+    <items>
+        <collection id="logos">
+            <uri>kupudrawers/logos.xml</uri>
+            <title>Logo's</title>
+            <src>kupudrawers/logos.xml</src>
+            <icon>kupuimages/kupulibrary.png</icon>
+        </collection>
+        <collection id="kupubuttons">
+            <uri>kupudrawers/kupubuttons.xml</uri>
+            <title>Kupu buttons</title>
+            <src>kupudrawers/kupubuttons.xml</src>
+            <icon>kupuimages/kupulibrary.png</icon>
+        </collection>
+    </items>
+</collection>

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/allimages.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/drawer.xsl
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/drawer.xsl?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/drawer.xsl (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/drawer.xsl Mon Oct  9 14:28:27 2006
@@ -0,0 +1,307 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+##############################################################################
+#
+# Copyright (c) 2003-2005 Kupu Contributors. All rights reserved.
+#
+# This software is distributed under the terms of the Kupu
+# License. See LICENSE.txt for license text. For a list of Kupu
+# Contributors see CREDITS.txt.
+#
+##############################################################################
+
+XSL transformation from Kupu Library XML to HTML for the image library
+drawer.
+
+$Id: imagedrawer.xsl 4105 2004-04-21 23:56:13Z guido $
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:tal="http://xml.zope.org/namespaces/tal" xmlns="http://www.w3.org/1999/xhtml"
+    xmlns:i18n="http://xml.zope.org/namespaces/i18n"
+    i18n:domain="kupu">
+ <tal:block define="x python:request.RESPONSE.setHeader('Content-Type', 'text/xml;;charset=UTF-8')" />
+    <xsl:param name="drawertype">image</xsl:param>
+    <xsl:param name="drawertitle">Image Drawer</xsl:param>
+    <xsl:param name="showupload"></xsl:param>
+    <xsl:param name="usecaptions"></xsl:param>
+    <xsl:variable name="titlelength" select="60"/>
+        <xsl:variable name="i18n_drawertitle"> 
+        <xsl:choose>
+            <xsl:when i18n:translate="imagedrawer_title" test="$drawertype='image'">Insert Image</xsl:when>
+            <xsl:when i18n:translate="linkdrawer_title"
+test="$drawertype='link'">Insert Link</xsl:when>
+        </xsl:choose>
+</xsl:variable>
+    <xsl:template match="/">
+        <html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
+            <head>
+                <title>
+                    <xsl:value-of select="$i18n_drawertitle"/>
+                </title>
+                <link type="text/css" rel="stylesheet">
+                    <xsl:attribute name="href">kupudrawerstyles.css </xsl:attribute>
+                </link>
+            </head>
+            <body>
+                <div style="width: 500px; border: solid black 1px; width: 100px">
+                    <div id="kupu-librarydrawer">
+                        <h1 style="padding: 0;float: left;">
+                            <xsl:value-of select="$i18n_drawertitle"/>
+                        </h1>
+                        <div id="kupu-searchbox" style="text-align: right">
+                            <form onsubmit="return false;">
+                                <xsl:variable name="search_value" 
+                                              i18n:translate="kupudrawer_search">search</xsl:variable>
+                                <input id="kupu-searchbox-input"
+                                    class="kupu-searchbox-input nofocus"
+                                    name="searchbox"
+                                    style="font-style: italic;"
+                                    onkeyup="if (event.keyCode == 13 ) drawertool.current_drawer.search();">
+                                   <xsl:attribute name="value">
+                                      <xsl:value-of select="$search_value" />
+                                   </xsl:attribute>
+                                   <xsl:attribute name="onclick">
+                                      if (this.value == '<xsl:value-of select="$search_value" />') this.value = ''; this.style.fontStyle='normal';</xsl:attribute>
+                                </input>
+                            </form>
+                        </div>
+                        <div class="kupu-panels">
+                            <table>
+                                <tr class="kupu-panelsrow">
+                                    <td id="kupu-librariespanel" class="panel">
+                                        <div id="kupu-librariesitems" class="overflow">
+                                        <xsl:apply-templates select="/libraries/library"/>
+                                        </div>
+                                    </td>
+                                    <td id="kupu-resourcespanel" class="panel">
+                                        <div id="kupu-resourceitems" class="overflow">
+                                        <xsl:apply-templates select="/libraries/*[@selected]/items"/>
+                                        </div>
+                                    </td>
+                                    <td id="kupu-propertiespanel" class="panel">
+                                        <div id="kupu-properties" class="overflow">
+                                        <xsl:choose>
+                                        <xsl:when test="$drawertype='image'">
+                                            <xsl:if test="//resource[@selected]">
+                                                <xsl:apply-templates
+                                                select="/libraries/*[@selected]//resource[@selected]" mode="image-properties"/>
+                                            </xsl:if>
+                                            <!-- use image upload template -->
+                                            <xsl:if test="$showupload='yes'">
+                                                <xsl:apply-templates select="/libraries/*[@selected]//uploadbutton" mode="image-upload"/>
+                                            </xsl:if>
+                                        </xsl:when>
+                                        <xsl:when test="$drawertype='link'">
+                                        <xsl:apply-templates
+                                        select="/libraries/*[@selected]//resource[@selected]" mode="link-properties"/>
+                                        </xsl:when>
+                                        <xsl:otherwise>
+                                            <xsl:apply-templates
+                                            select="/libraries/*[@selected]//resource[@selected]" mode="properties"/>
+                                        </xsl:otherwise>
+                                        </xsl:choose>
+                                        </div>
+                                    </td>
+                                </tr>
+                            </table>
+                        </div>
+                        <div class="kupu-dialogbuttons">                            
+                            <button type="button" 
+                                    class="kupu-dialog-button"
+                                    i18n:translate="" 
+                                    onclick="drawertool.current_drawer.save();">Ok</button>
+                            <button type="button"
+                                    class="kupu-dialog-button" 
+                                    i18n:translate="" 
+                                    onclick="drawertool.closeDrawer();">Cancel</button>
+                        </div>
+                    </div>
+                </div>
+            </body>
+        </html>
+    </xsl:template>
+    <xsl:template match="library">
+        <div onclick="drawertool.current_drawer.selectLibrary('{@id}');"
+            class="kupu-libsource" title="{title}" style="">
+            <xsl:attribute name="id">
+                <xsl:value-of select="@id"/>
+            </xsl:attribute>
+            <xsl:apply-templates select="icon"/>
+            <span class="drawer-item-title"><xsl:value-of select="title"/></span>
+        </div>
+    </xsl:template>
+    <xsl:template match="items">
+        <xsl:apply-templates select="collection|resource|uploadbutton" mode="currentpanel"/>
+    </xsl:template>
+    <xsl:template match="resource|collection" mode="currentpanel">
+        <div id="{@id}" class="kupu-{local-name()}" title="{description}">
+            <xsl:attribute name="onclick">
+                <xsl:choose>
+                    <xsl:when
+                            test="local-name()='collection'">drawertool.current_drawer.selectCollection('<xsl:value-of select="@id"/>');</xsl:when>
+
+                    <xsl:otherwise>drawertool.current_drawer.selectItem(this, '<xsl:value-of select="@id"/>')</xsl:otherwise>
+                </xsl:choose>
+            </xsl:attribute>
+            <xsl:apply-templates select="icon"/>
+            <xsl:apply-templates select="(label|title)[1]"/>
+        </div>
+    </xsl:template>
+    <xsl:template match="uploadbutton" mode="currentpanel">
+        <div class="kupu-upload">
+            <xsl:attribute name="onclick">
+                drawertool.current_drawer.selectUpload();
+            </xsl:attribute>
+            <span class="drawer-item-title" 
+                  i18n:translate="imagedrawer_upload_link">Upload ...</span>
+        </div>
+    </xsl:template>
+    <xsl:template match="icon">
+        <img src="{.}" alt="{../title}">
+            <xsl:attribute name="class">library-icon-<xsl:value-of select="local-name(..)"/>
+            </xsl:attribute>
+        </img>
+    </xsl:template>
+    <xsl:template match="label|title">
+        <span class="drawer-item-title">
+            <xsl:if test="../@selected">
+                <xsl:attribute name="class">drawer-item-title selected-item</xsl:attribute>
+            </xsl:if>
+            <xsl:choose>
+                <xsl:when test="string-length() &gt; $titlelength">
+                    <xsl:value-of select="substring(., 0, $titlelength)"/>... </xsl:when>
+                <xsl:otherwise>
+                    <xsl:value-of select="."/>
+                </xsl:otherwise>
+            </xsl:choose>
+        </span>
+    </xsl:template>
+    <xsl:template match="resource|collection" mode="image-properties">
+        <div>
+            <xsl:value-of select="title"/>
+        </div>
+        <xsl:choose>
+            <xsl:when test="width">
+                <div>
+                    <xsl:variable name="h" select="number(height) div 120"/>
+                    <xsl:variable name="w" select="number(width) div 100"/>
+                    <xsl:choose>
+                        <xsl:when test="($h&gt;$w) and $h&gt;1">
+                            <img src="{uri}" title="{title}" height="120"
+                                width="{width div $h}" alt="{title}"/>
+                        </xsl:when>
+                        <xsl:when test="($w&gt;$h) and $w&gt;1">
+                            <img src="{uri}" title="{title}"
+                                height="{height div $w}" width="100" alt="{title}"/>
+                        </xsl:when>
+                        <xsl:otherwise>
+                            <img src="{uri}" title="{title}" height="{height}"
+                                width="{width}" alt="{title}"/>
+                        </xsl:otherwise>
+                    </xsl:choose>
+                </div>
+            </xsl:when>
+            <xsl:when test="preview">
+                <tr>
+                    <td>
+                        <strong i18n:translate="imagedrawer_upload_preview_label">Preview</strong>
+                        <br/>
+                        <img src="{preview}" title="{title}" height="{height}"
+                            width="{width}" alt="{title}"/>
+                    </td>
+                </tr>
+            </xsl:when>
+            <xsl:otherwise>
+                <img src="{uri}" title="{title}" height="120" alt="{title}" />
+            </xsl:otherwise>
+        </xsl:choose>
+        <div>
+            <xsl:value-of select="size"/>
+            <xsl:if test="width" i18n:translate="imagedrawer_size">(<span i18n:name="width"><xsl:value-of select="width" /></span> by <span i18n:name="height"><xsl:value-of select="height" /></span>)</xsl:if>
+        </div>
+        <div>
+            <xsl:value-of select="description"/>
+        </div>
+        <div>
+            <form onsubmit="return false;">
+                <strong i18n:translate="imagedrawer_upload_alt_text">ALT-text</strong>
+                <br/>
+                <input type="text" id="image_alt" size="20" value="{title}"/>
+                <br/>
+                <input type="radio" name="image-align" id="image-align-left"
+                    checked="checked" value="image-left"/>
+                <label for="image-align-left" i18n:translate="imagedrawer_left">Left</label>
+                <input type="radio" name="image-align" id="image-align-inline" value="image-inline"/>
+                <label for="image-align-inline" i18n:translate="imagedrawer_inline">Inline</label>
+                <input type="radio" name="image-align" id="image-align-right" value="image-right"/>
+                <label for="image-align-right" i18n:translate="imagedrawer_right">Right</label>
+                <xsl:if test="$usecaptions='yes'">
+                    <br/>
+                    <input type="checkbox" name="image-caption"
+                        id="image-caption" checked="checked"/>
+                    <label for="image-caption" i18n:translate="imagedrawer_caption_label">Caption</label>
+                </xsl:if>
+            </form>
+        </div>
+    </xsl:template>
+    <xsl:template match="resource|collection" mode="link-properties">
+        <form onsubmit="return false;">
+            <table>
+                <tr class="kupu-linkdrawer-title-row">
+                    <td>
+                        <strong i18n:translate="linkdrawer_title_label">Title</strong>
+                        <br/>
+                        <xsl:value-of select="title"/>
+                    </td>
+                </tr>
+                <tr class="kupu-linkdrawer-description-row">
+                    <td>
+                        <strong i18n:translate="linkdrawer_description_label">Description</strong>
+                        <br/>
+                        <xsl:value-of select="description"/>
+                    </td>
+                </tr>
+                <tr class="kupu-linkdrawer-name-row">
+                    <td>
+                        <strong i18n:translate="linkdrawer_name_label">Name</strong>
+                        <br/>
+                        <input type="text" id="link_name" size="10"/>
+                    </td>
+                </tr>
+                <tr class="kupu-linkdrawer-target-row">
+                    <td>
+                        <strong i18n:translate="linkdrawer_target_label">Target</strong>
+                        <br/>
+                        <input type="text" id="link_target" value="_self" 
+                               size="10"/>
+                    </td>
+                </tr>
+            </table>
+        </form>
+    </xsl:template>
+    
+    <!-- image upload form -->
+    <xsl:template match="uploadbutton" mode="image-upload">
+     <div>
+        <div id="kupu-upload-instructions" i18n:translate="imagedrawer_upload_instructions">
+            Select an image from your computer and click ok to have it
+            automatically uploaded to selected folder and inserted into the
+            editor.
+        </div>
+        <form name="kupu_upload_form" method="POST" action="" scrolling="off" target="kupu_upload_form_target"
+              enctype="multipart/form-data" style="margin: 0; border: 0;">
+
+            <label for="kupu-upload-file" i18n:translate="imagedrawer_upload_to_label">Upload to: <span i18n:name="folder"><xsl:value-of select='/libraries/*[@selected]/title' /></span></label>
+            <input id="kupu-upload-file" type="file" name="node_prop_image" size="20"/><br/>
+            <label for="kupu-upload-title"
+i18n:translate="imagedrawer_upload_title_label">Title:</label>
+            <input id="kupu-upload-title" type="text" name="node_prop_caption" size="23" value=""/><br/>
+        </form>
+
+        <iframe id="kupu-upload-form-target" name="kupu_upload_form_target"
+                src="kupublank.html" scrolling="off" frameborder="0" width="0px" height="0px" display="None">
+        </iframe>
+      </div>
+    </xsl:template>
+    
+</xsl:stylesheet>

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/drawer.xsl
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/drawer.xsl.metadata
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/drawer.xsl.metadata?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/drawer.xsl.metadata (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/drawer.xsl.metadata Mon Oct  9 14:28:27 2006
@@ -0,0 +1,2 @@
+[default]
+keep_extension=1

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/imagelibrary.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/imagelibrary.xml?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/imagelibrary.xml (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/imagelibrary.xml Mon Oct  9 14:28:27 2006
@@ -0,0 +1,22 @@
+<?xml version="1.0" ?>
+<libraries>
+  <library id="logos">
+    <uri>kupudrawers/logos.xml</uri>
+    <title>Logo's</title>
+    <src>kupudrawers/logos.xml</src>
+    <icon>kupuimages/kupulibrary.png</icon>
+  </library>
+  <library id="kupubuttons">
+    <uri>kupudrawers/kupubuttons.xml</uri>
+    <title>Kupu buttons</title>
+    <src>kupudrawers/kupubuttons.xml</src>
+    <icon>kupuimages/kupulibrary.png</icon>
+  </library>
+  <library id="allimages">
+    <uri>kupudrawers/allimages.xml</uri>
+    <title>All images</title>
+    <src>kupudrawers/allimages.xml</src>
+    <icon>kupuimages/kupulibrary.png</icon>
+  </library>
+
+</libraries>

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/imagelibrary.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/kupubuttons.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/kupubuttons.xml?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/kupubuttons.xml (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/kupubuttons.xml Mon Oct  9 14:28:27 2006
@@ -0,0 +1,369 @@
+<?xml version="1.0" ?>
+<collection>
+   <uri>kupudrawers/kupubuttons.xml</uri>
+   <icon>kupuimages/kupulibrary.png</icon>
+   <title>Kupu buttons</title>
+   <src>kupudrawers/kupubuttons.xml</src>
+   <items>
+        <resource id="smaller-text.png">
+            <uri>kupuimages/smaller-text.png</uri>
+            <title>smaller-text</title>
+            <description></description>
+            <size>961</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="undo.png">
+            <uri>kupuimages/undo.png</uri>
+            <title>undo</title>
+            <description></description>
+            <size>959</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="superscript.png">
+            <uri>kupuimages/superscript.png</uri>
+            <title>superscript</title>
+            <description></description>
+            <size>961</size>
+            <height>20</height>
+            <width>19</width>
+        </resource>
+        <resource id="fonts.png">
+            <uri>kupuimages/fonts.png</uri>
+            <title>fonts</title>
+            <description></description>
+            <size>953</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="cut.png">
+            <uri>kupuimages/cut.png</uri>
+            <title>cut</title>
+            <description></description>
+            <size>975</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="save.png">
+            <uri>kupuimages/save.png</uri>
+            <title>save</title>
+            <description></description>
+            <size>966</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="paste.png">
+            <uri>kupuimages/paste.png</uri>
+            <title>paste</title>
+            <description></description>
+            <size>1004</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="justify-center.png">
+            <uri>kupuimages/justify-center.png</uri>
+            <title>justify-center</title>
+            <description></description>
+            <size>934</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="larger-text.png">
+            <uri>kupuimages/larger-text.png</uri>
+            <title>larger-text</title>
+            <description></description>
+            <size>959</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="view-source.png">
+            <uri>kupuimages/view-source.png</uri>
+            <title>view-source</title>
+            <description></description>
+            <size>1045</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="definitionlist.png">
+            <uri>kupuimages/definitionlist.png</uri>
+            <title>definitionlist</title>
+            <description></description>
+            <size>212</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="indent.png">
+            <uri>kupuimages/indent.png</uri>
+            <title>indent</title>
+            <description></description>
+            <size>963</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="document.png">
+            <uri>kupuimages/document.png</uri>
+            <title>document</title>
+            <description></description>
+            <size>390</size>
+            <height>16</height>
+            <width>16</width>
+        </resource>
+        <resource id="exthyperlink.png">
+            <uri>kupuimages/exthyperlink.png</uri>
+            <title>exthyperlink</title>
+            <description></description>
+            <size>314</size>
+            <height>22</height>
+            <width>23</width>
+        </resource>
+        <resource id="background-color.png">
+            <uri>kupuimages/background-color.png</uri>
+            <title>background-color</title>
+            <description></description>
+            <size>1005</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="size.png">
+            <uri>kupuimages/size.png</uri>
+            <title>size</title>
+            <description></description>
+            <size>955</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="justify-right.png">
+            <uri>kupuimages/justify-right.png</uri>
+            <title>justify-right</title>
+            <description></description>
+            <size>934</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="buttons.png">
+            <uri>kupuimages/buttons.png</uri>
+            <title>buttons</title>
+            <description></description>
+            <size>3253</size>
+            <height>140</height>
+            <width>120</width>
+        </resource>
+        <resource id="subscript.png">
+            <uri>kupuimages/subscript.png</uri>
+            <title>subscript</title>
+            <description></description>
+            <size>961</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="remove.png">
+            <uri>kupuimages/remove.png</uri>
+            <title>remove</title>
+            <description></description>
+            <size>1298</size>
+            <height>22</height>
+            <width>23</width>
+        </resource>
+        <resource id="caret.png">
+            <uri>kupuimages/caret.png</uri>
+            <title>caret</title>
+            <description></description>
+            <size>948</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="underline.png">
+            <uri>kupuimages/underline.png</uri>
+            <title>underline</title>
+            <description></description>
+            <size>953</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="copy.png">
+            <uri>kupuimages/copy.png</uri>
+            <title>copy</title>
+            <description></description>
+            <size>984</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="hr.png">
+            <uri>kupuimages/hr.png</uri>
+            <title>hr</title>
+            <description></description>
+            <size>937</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="image.png">
+            <uri>kupuimages/image.png</uri>
+            <title>image</title>
+            <description></description>
+            <size>1002</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="strikethrough.png">
+            <uri>kupuimages/strikethrough.png</uri>
+            <title>strikethrough</title>
+            <description></description>
+            <size>963</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="format.png">
+            <uri>kupuimages/format.png</uri>
+            <title>format</title>
+            <description></description>
+            <size>965</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="undo-disabled.png">
+            <uri>kupuimages/undo-disabled.png</uri>
+            <title>undo-disabled</title>
+            <description></description>
+            <size>959</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="folder.png">
+            <uri>kupuimages/folder.png</uri>
+            <title>folder</title>
+            <description></description>
+            <size>1126</size>
+            <height>16</height>
+            <width>16</width>
+        </resource>
+        <resource id="create-new.png">
+            <uri>kupuimages/create-new.png</uri>
+            <title>create-new</title>
+            <description></description>
+            <size>951</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="unlink.png">
+            <uri>kupuimages/unlink.png</uri>
+            <title>unlink</title>
+            <description></description>
+            <size>983</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="justify-full.png">
+            <uri>kupuimages/justify-full.png</uri>
+            <title>justify-full</title>
+            <description></description>
+            <size>929</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="kupulibrary.png">
+            <uri>kupuimages/kupulibrary.png</uri>
+            <title>kupulibrary</title>
+            <description></description>
+            <size>2094</size>
+            <height>32</height>
+            <width>32</width>
+        </resource>
+        <resource id="bold.png">
+            <uri>kupuimages/bold.png</uri>
+            <title>bold</title>
+            <description></description>
+            <size>945</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="text-color.png">
+            <uri>kupuimages/text-color.png</uri>
+            <title>text-color</title>
+            <description></description>
+            <size>988</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="unordered-list.png">
+            <uri>kupuimages/unordered-list.png</uri>
+            <title>unordered-list</title>
+            <description></description>
+            <size>937</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="ordered-list.png">
+            <uri>kupuimages/ordered-list.png</uri>
+            <title>ordered-list</title>
+            <description></description>
+            <size>957</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="redo-disabled.png">
+            <uri>kupuimages/redo-disabled.png</uri>
+            <title>redo-disabled</title>
+            <description></description>
+            <size>959</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="outdent.png">
+            <uri>kupuimages/outdent.png</uri>
+            <title>outdent</title>
+            <description></description>
+            <size>962</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="table.png">
+            <uri>kupuimages/table.png</uri>
+            <title>table</title>
+            <description></description>
+            <size>952</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="justify-left.png">
+            <uri>kupuimages/justify-left.png</uri>
+            <title>justify-left</title>
+            <description></description>
+            <size>932</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="redo.png">
+            <uri>kupuimages/redo.png</uri>
+            <title>redo</title>
+            <description></description>
+            <size>959</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="italic.png">
+            <uri>kupuimages/italic.png</uri>
+            <title>italic</title>
+            <description></description>
+            <size>965</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="link.png">
+            <uri>kupuimages/link.png</uri>
+            <title>link</title>
+            <description></description>
+            <size>1030</size>
+            <height>20</height>
+            <width>20</width>
+        </resource>
+        <resource id="inthyperlink.png">
+            <uri>kupuimages/inthyperlink.png</uri>
+            <title>inthyperlink</title>
+            <description></description>
+            <size>296</size>
+            <height>22</height>
+            <width>23</width>
+        </resource>
+    </items>
+</collection>

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/linklibrary.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/linklibrary.xml?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/linklibrary.xml (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/linklibrary.xml Mon Oct  9 14:28:27 2006
@@ -0,0 +1,22 @@
+<?xml version="1.0" ?>
+<libraries>
+  <library id="logos">
+    <uri>kupudrawers/logos.xml</uri>
+    <title>Logo's</title>
+    <src>kupudrawers/logos.xml</src>
+    <icon>kupuimages/kupulibrary.png</icon>
+  </library>
+  <library id="kupubuttons">
+    <uri>kupudrawers/kupubuttons.xml</uri>
+    <title>Kupu buttons</title>
+    <src>kupudrawers/kupubuttons.xml</src>
+    <icon>kupuimages/kupulibrary.png</icon>
+  </library>
+  <library id="allimages">
+    <uri>kupudrawers/allimages.xml</uri>
+    <title>All images</title>
+    <src>kupudrawers/allimages.xml</src>
+    <icon>kupuimages/kupulibrary.png</icon>
+  </library>
+
+</libraries>

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/linklibrary.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos.xml
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos.xml?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos.xml (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos.xml Mon Oct  9 14:28:27 2006
@@ -0,0 +1,162 @@
+<?xml version="1.0" ?>
+<collection>
+    <uri>kupudrawers/logos.xml</uri>
+    <icon>kupuimages/kupulibrary.png</icon>
+    <title>Logo's</title>
+    <src>kupudrawers/logos.xml</src>
+    <items>
+        <resource id="bitflux_logo.png">
+            <uri>kupudrawers/logos/bitflux_logo.png</uri>
+            <title>Bitflux logo</title>
+            <description>Bitflux CMS: http://bitflux.ch</description>
+            <size>957b</size>
+            <height>60</height>
+            <width>160</width>
+            <preview>kupudrawers/logos/bitflux_logo_preview.png</preview>
+        </resource>
+        <resource id="bubnbros.png">
+            <uri>kupudrawers/logos/bubnbros.png</uri>
+            <title>Bub'n'bros banner</title>
+            <description>Bub'n'bros game: http://bub-n-bros.sourceforge.net/</description>
+            <size>4806b</size>
+            <height>51</height>
+            <width>461</width>
+            <preview>kupudrawers/logos/bubnbros_preview.png</preview>
+        </resource>
+        <resource id="codespeak_logo.png">
+            <uri>kupudrawers/logos/codespeak_logo.png</uri>
+            <title>Codespeak logo</title>
+            <description>Codespeak: http://codespeak.net</description>
+            <size>4270b</size>
+            <height>75</height>
+            <width>154</width>
+            <preview>kupudrawers/logos/codespeak_logo_preview.png</preview>
+        </resource>
+        <resource id="diver_logo.png">
+            <uri>kupudrawers/logos/diver_logo.png</uri>
+            <title>Diver logo</title>
+            <description>ver.di: http://www.verdi.de</description>
+            <size>1800b</size>
+            <height>53</height>
+            <width>215</width>
+            <preview>kupudrawers/logos/diver_logo_preview.png</preview>
+        </resource>
+        <resource id="eth_logo.png">
+            <uri>kupudrawers/logos/eth_logo.png</uri>
+            <title>ETH logo</title>
+            <description>ETH: http://www.ethz.ch</description>
+            <size>4030b</size>
+            <height>103</height>
+            <width>400</width>
+            <preview>kupudrawers/logos/eth_logo_preview.png</preview>
+        </resource>
+        <resource id="infrae_logo.png">
+            <uri>kupudrawers/logos/infrae_logo.png</uri>
+            <title>Infrae logo</title>
+            <description>Infrae: http://www.infrae.com</description>
+            <size>3846b</size>
+            <height>140</height>
+            <width>280</width>
+            <preview>kupudrawers/logos/infrae_logo_preview.png</preview>
+        </resource>
+        <resource id="kupu_logo.png">
+            <uri>kupudrawers/logos/kupu_logo.png</uri>
+            <title>Kupu logo</title>
+            <description>Kupu: http://kupu.oscom.org</description>
+            <size>17489b</size>
+            <height>115</height>
+            <width>175</width>
+            <preview>kupudrawers/logos/kupu_logo_preview.png</preview>
+        </resource>
+        <resource id="lenya_logo.png">
+            <uri>kupudrawers/logos/lenya_logo.png</uri>
+            <title>Lenya logo</title>
+            <description>Lenya: http://lenya.apache.org</description>
+            <size>3469b</size>
+            <height>86</height>
+            <width>330</width>
+            <preview>kupudrawers/logos/lenya_logo_preview.png</preview>
+        </resource>
+        <resource id="opensource.png">
+            <uri>kupudrawers/logos/opensource.png</uri>
+            <title>Open Source icon</title>
+            <description>OSI: http://www.opensource.org</description>
+            <size>7767b</size>
+            <height>216</height>
+            <width>250</width>
+            <preview>kupudrawers/logos/opensource_preview.png</preview>
+        </resource>
+        <resource id="oscom4_banner.png">
+            <uri>kupudrawers/logos/oscom4_banner.gif</uri>
+            <title>OSCOM 4 banner</title>
+            <description>OSCOM: http://www.oscom.org</description>
+            <size>15129b</size>
+            <height>60</height>
+            <width>460</width>
+            <preview>kupudrawers/logos/oscom4_banner_preview.png</preview>
+        </resource>
+        <resource id="oscom_logo.png">
+            <uri>kupudrawers/logos/oscom_logo.png</uri>
+            <title>OSCOM logo</title>
+            <description>OSCOM: http://www.oscom.org</description>
+            <size>3233b</size>
+            <height>54</height>
+            <width>330</width>
+            <preview>kupudrawers/logos/oscom_logo_preview.png</preview>
+        </resource>
+        <resource id="plone_logo.png">
+            <uri>kupudrawers/logos/plone_logo.png</uri>
+            <title>Plone logo</title>
+            <description>Plone: http://plone.org</description>
+            <size>10624b</size>
+            <height>57</height>
+            <width>219</width>
+            <preview>kupudrawers/logos/plone_logo_preview.png</preview>
+        </resource>
+        <resource id="pypy_logo.png">
+            <uri>kupudrawers/logos/pypy_logo.png</uri>
+            <title>PYPY logo</title>
+            <description>PYPY: http://codespeak.net/pypy/</description>
+            <size>2163b</size>
+            <height>110</height>
+            <width>149</width>
+            <preview>kupudrawers/logos/pypy_logo_preview.png</preview>
+        </resource>
+        <resource id="silva_logo.png">
+            <uri>kupudrawers/logos/silva_logo.png</uri>
+            <title>Silva icon</title>
+            <description>Silva: http://www.infrae.com/products/silva/</description>
+            <size>22033b</size>
+            <height>250</height>
+            <width>250</width>
+            <preview>kupudrawers/logos/silva_logo_preview.png</preview>
+        </resource>
+        <resource id="twiki_logo.png">
+            <uri>kupudrawers/logos/twiki_logo.png</uri>
+            <title>TWiki logo</title>
+            <description>TWiki: http://www.twiki.org</description>
+            <size>7218b</size>
+            <height>64</height>
+            <width>131</width>
+            <preview>kupudrawers/logos/twiki_logo_preview.png</preview>
+        </resource>
+        <resource id="zea_logo.png">
+            <uri>kupudrawers/logos/zea_logo.png</uri>
+            <title>ZEA logo</title>
+            <description>Zope Europe Association: http://www.zope-europe.org</description>
+            <size>15027b</size>
+            <height>54</height>
+            <width>287</width>
+            <preview>kupudrawers/logos/zea_logo_preview.png</preview>
+        </resource>
+        <resource id="zope_logo.png">
+            <uri>kupudrawers/logos/zope_logo.png</uri>
+            <title>Zope logo</title>
+            <description>Zope: http://www.zope.org</description>
+            <size>1799b</size>
+            <height>54</height>
+            <width>201</width>
+            <preview>kupudrawers/logos/zope_logo_preview.png</preview>
+        </resource>
+    </items>
+</collection>

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bitflux_logo.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bitflux_logo.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bitflux_logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bitflux_logo_preview.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bitflux_logo_preview.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bitflux_logo_preview.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bubnbros.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bubnbros.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bubnbros.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bubnbros_preview.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bubnbros_preview.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/bubnbros_preview.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/codespeak_logo.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/codespeak_logo.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/codespeak_logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/codespeak_logo_preview.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/codespeak_logo_preview.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/codespeak_logo_preview.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/diver_logo.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/diver_logo.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/diver_logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/diver_logo_preview.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/diver_logo_preview.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/diver_logo_preview.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/eth_logo.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/eth_logo.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/eth_logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/eth_logo_preview.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/eth_logo_preview.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/eth_logo_preview.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/infrae_logo.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/infrae_logo.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.

Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/infrae_logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/infrae_logo_preview.png
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupudrawers/logos/infrae_logo_preview.png?view=auto&rev=454522
==============================================================================
Binary file - no diff available.



Mime
View raw message