You are viewing a plain text version of this content. The canonical link for it is here.
Posted to graffito-commits@incubator.apache.org by cl...@apache.org on 2006/10/09 21:28:32 UTC
svn commit: r454522 [10/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/ applic...
Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustart_form.js
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustart_form.js?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustart_form.js (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustart_form.js Mon Oct 9 14:28:27 2006
@@ -0,0 +1,56 @@
+/*****************************************************************************
+ *
+ * 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$
+
+function startKupu() {
+ // initialize the editor, initKupu groks 1 arg, a reference to the iframe
+ var frame = getFromSelector('kupu-editor');
+ var kupu = initKupu(frame);
+
+ // first let's load the message catalog
+ // if there's no global 'i18n_message_catalog' variable available, don't
+ // try to load any translations
+ if (!window.i18n_message_catalog) {
+ continueStartKupu(kupu);
+ return kupu;
+ };
+ // loading will be done asynchronously (to keep Mozilla from freezing)
+ // so we'll continue in a follow-up function (continueStartKupu() below)
+ var handler = function(request) {
+ if (this.readyState == 4) {
+ var status = this.status;
+ if (status != '200') {
+ alert(_('Error loading translation (status ${status} ' +
+ '), falling back to english'), {'status': status});
+ continueStartKupu(kupu);
+ return;
+ };
+ var dom = this.responseXML;
+ window.i18n_message_catalog.initialize(dom);
+ continueStartKupu(kupu);
+ };
+ };
+ var request = new XMLHttpRequest();
+ request.onreadystatechange = (new ContextFixer(handler, request)).execute;
+ request.open('GET', 'kupu.pox', true);
+ request.send('');
+
+ // we need to return a reference to the editor here for certain 'external'
+ // stuff, developers should note that it's not yet initialized though, we
+ // need to wait for i18n data before we can do that
+ return kupu;
+};
+
+function continueStartKupu(kupu) {
+ kupu.initialize();
+
+ return kupu;
+};
Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustart_multi.js
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustart_multi.js?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustart_multi.js (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustart_multi.js Mon Oct 9 14:28:27 2006
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ *
+ * 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$
+
+function startKupu() {
+ // initialize the editor, this version groks an array of iframeids
+ var iframeids = new Array('kupu_1', 'kupu_2', 'kupu_3');
+ var kupu = initKupu(iframeids);
+
+ // if there's no global 'i18n_message_catalog' variable available, don't
+ // try to load any translations
+ if (!window.i18n_message_catalog) {
+ continueStartKupu(kupu);
+ return kupu;
+ };
+ // loading will be done asynchronously (to keep Mozilla from freezing)
+ // so we'll continue in a follow-up function (continueStartKupu() below)
+ var handler = function(request) {
+ if (this.readyState == 4) {
+ var status = this.status;
+ if (status != '200') {
+ alert(_('Error loading translation (status ${status} ' +
+ '), falling back to english'), {'status': status});
+ continueStartKupu(kupu);
+ return;
+ };
+ var dom = this.responseXML;
+ window.i18n_message_catalog.initialize(dom);
+ continueStartKupu(kupu);
+ };
+ };
+ var request = new XMLHttpRequest();
+ request.onreadystatechange = (new ContextFixer(handler, request)).execute;
+ request.open('GET', 'kupu.pox', true);
+ request.send('');
+
+ // we need to return a reference to the editor here for certain 'external'
+ // stuff, developers should note that it's not yet initialized though, we
+ // need to wait for i18n data before we can do that
+ return kupu;
+};
+
+function continueStartKupu(kupu) {
+ kupu.initialize();
+
+ return kupu;
+};
Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustyles.css
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustyles.css?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustyles.css (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kupustyles.css Mon Oct 9 14:28:27 2006
@@ -0,0 +1,279 @@
+/*****************************************************************************
+ *
+ * Kupu common styles
+ *
+ * Copyright (c) 2003-2005 Kupu Contributors. See CREDITS.txt
+ *
+ * Instead of customizing this file, it is recommended to add your own
+ * CSS file. Feel free to use whole or parts of this for your own
+ * designs, but give credit where credit is due.
+ *
+ *****************************************************************************/
+
+/* $Id: kupustyles.css 16467 2005-08-25 11:08:10Z guido $ */
+
+.kupu-fulleditor, .kupu-toolboxes {
+ font-family: Verdana, "Lucida Grande", Helvetica, Arial, sans-serif;
+ background-color: white;
+}
+
+div.kupu-fulleditor .kupu-fulleditor-zoomed {
+ height: 100%;
+ padding: 0px;
+}
+
+div.kupu-fulleditor .kupu-editorframe {
+ margin: 0px;
+ margin-right: 20em;
+ border: none;
+}
+
+div.kupu-fulleditor-zoomed {
+ z-index: 100;
+ margin: 0; border: none;
+ position: fixed;
+ top: 0; left: 0;
+ background-color: white;
+}
+
+* html div.kupu-fulleditor-zoomed {
+ position: absolute; /* IE */
+}
+
+div.kupu-fulleditor-zoomed .kupu-editor-iframe {
+ border: none;
+ margin: 0;
+}
+
+div.kupu-smalleditor .kupu-editorframe {
+ margin-right: 0.2em;
+}
+
+h1.kupu-toolbox-heading, h1.kupu-toolbox-heading-closed {
+ cursor: default;
+ background-image: url("kupuimages/closed.png");
+ background-repeat: no-repeat;
+ background-position: left;
+}
+
+h1.kupu-toolbox-heading-opened {
+ cursor: default;
+ background-image: url("kupuimages/opened.png");
+ background-repeat: no-repeat;
+ background-position: left;
+}
+
+div.kupu-sourcemode span.kupu-tb-buttongroup,
+body.kupu-fulleditor-zoomed select { display: none; }
+body.kupu-fulleditor-zoomed div.kupu-fulleditor-zoomed select { display: inline; }
+div.kupu-sourcemode select { display: none !IMPORTANT; }
+div.kupu-sourcemode span#kupu-logo,
+div.kupu-sourcemode span#kupu-zoom,
+div.kupu-sourcemode span#kupu-source { display: inline; }
+
+div.kupu-smalleditor {
+ font-family: Verdana, "Lucida Grande", Helvetica, Arial, sans-serif;
+ border: solid 3px ButtonHighlight;
+ margin: 0.2em;
+ height: 100%;
+}
+
+.kupu-tb {
+ padding: 3px;
+ margin-bottom: 0.4em;
+ background-color: ButtonFace;
+ border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.kupu-tb-buttons button {
+ color: ButtonText;
+ border: 1px solid ButtonFace;
+ margin-top: 0;
+ margin-left: 0;
+ height: 26px;
+ width: 26px;
+ background-repeat: no-repeat;
+}
+
+.kupu-tb-buttons button:hover {
+ cursor: default;
+ border: 1px solid;
+ border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight;
+}
+
+.kupu-tb-buttons button:active {
+ border: 1px solid;
+ border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow;
+}
+
+.kupu-tb-buttongroup {
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+
+.kupu-bold {background-image: url("kupuimages/bold.png");}
+.kupu-bold-pressed {background-image: url("kupuimages/bold.png"); background-color: white;}
+.kupu-forecolor {background-image: url("kupuimages/text-color.png");}
+.kupu-hilitecolor {background-image: url("kupuimages/background-color.png");}
+
+.kupu-inthyperlink {background-image: url("kupuimages/inthyperlink.png");}
+.kupu-inthyperlink-pressed {background-image: url("kupuimages/inthyperlink.png"); background-color: white}
+.kupu-exthyperlink {background-image: url("kupuimages/exthyperlink.png");}
+.kupu-exthyperlink-pressed {background-image: url("kupuimages/exthyperlink.png"); background-color: white}
+
+.kupu-image {background-image: url("kupuimages/image.png");}
+.kupu-indent {background-image: url("kupuimages/indent.png");}
+.kupu-inserthorizontalrule {background-image: url("kupuimages/hr.png");}
+.kupu-insertorderedlist {background-image: url("kupuimages/ordered-list.png");}
+.kupu-insertunorderedlist {background-image: url("kupuimages/unordered-list.png");}
+.kupu-insertdefinitionlist {background-image: url("kupuimages/definitionlist.png");}
+.kupu-italic {background-image: url("kupuimages/italic.png");}
+.kupu-italic-pressed {background-image: url("kupuimages/italic.png"); background-color: white}
+.kupu-justifycenter {background-image: url("kupuimages/justify-center.png");}
+.kupu-justifyleft {background-image: url("kupuimages/justify-left.png");}
+.kupu-justifyright {background-image: url("kupuimages/justify-right.png");}
+button.kupu-logo {background-image: url("kupuimages/kupu_icon.gif");}
+.kupu-outdent {background-image: url("kupuimages/outdent.png");}
+.kupu-redo {background-image: url("kupuimages/redo.png");}
+.kupu-save {background-image: url("kupuimages/save.png");}
+.kupu-save-and-exit {background-image: url("kupuimages/exit.gif");}
+.kupu-space {background-image: url("kupuimages/space.gif");}
+.kupu-source {background-image: url("kupuimages/view-source.png");}
+.kupu-spellchecker {background-image: url("kupuimages/text-check.png");}
+.kupu-subscript {background-image: url("kupuimages/subscript.png");}
+.kupu-subscript-pressed {background-image: url("kupuimages/subscript.png"); background-color: white}
+.kupu-superscript {background-image: url("kupuimages/superscript.png");}
+.kupu-superscript-pressed {background-image: url("kupuimages/superscript.png"); background-color: white}
+.kupu-table {background-image: url("kupuimages/table.png");}
+.kupu-underline {background-image: url("kupuimages/underline.png");}
+.kupu-underline-pressed {background-image: url("kupuimages/underline.png"); background-color: white}
+.kupu-undo {background-image: url("kupuimages/undo.png");}
+.kupu-removelink {background-image: url("kupuimages/remove.png");}
+.kupu-removeimage {background-image: url("kupuimages/remove.png");}
+.kupu-zoom {background-image: url("kupuimages/zoom-in.gif");}
+.kupu-zoom-pressed {background-image: url("kupuimages/zoom-out.gif");}
+
+.kupu-tb-buttons button.invisible {
+ display: none;
+ /*visibility: hidden;*/
+}
+
+.kupu-tb-buttons button.visible {
+ display: inline;
+}
+
+div.kupu-editorframe {
+ margin-left: 0.3em;
+ margin-bottom: 0.3em;
+ border: solid 2px ButtonFace;
+}
+
+iframe.kupu-editor-iframe {
+ height: 450px;
+ width: 99%;
+}
+
+textarea.kupu-editor-textarea {
+ height: 450px;
+ width: 99%;
+ display: none;
+}
+
+div.kupu-toolboxes {
+ float: right;
+ border: solid 2px ButtonFace;
+ width: 19.4em;
+ margin-right: 0.3em;
+ margin-bottom: 0.3em;
+ font-size: 0.8em;
+}
+
+div.kupu-fulleditor-zoomed div.kupu-toolboxes {
+ display: none;
+}
+
+div.kupu-toolbox, div.kupu-toolbox-active {
+ margin-bottom: 1em;
+}
+
+div.kupu-toolbox h1, div.kupu-toolbox-active h1 {
+ text-align: center;
+ width: 100%;
+ background-color: ButtonFace;
+ margin-top: 0;
+ font-size: 1.1em;
+}
+
+div.kupu-toolbox-label, span.kupu-toolbox-searchterm,
+input.wide, select.wide, textarea.wide, button.kupu-toolbox-action,
+div.kupu-toolbox-results {
+ margin-left: 0.2em;
+ margin-right: 0.2em;
+}
+
+.wide {
+ width: 95%;
+}
+
+div.kupu-toolbox-label {
+ margin-bottom: 0.4em;
+}
+
+.kupu-toolbox-buttons {
+ text-align: center;
+}
+
+.kupu-toolbox-buttons button {
+ width: 45%;
+}
+
+div.kupu-toolbox-results {
+ border: solid 2px ButtonFace;
+ margin-top: 0.8em;
+ text-decoration: underline;
+ padding: 0.2em;
+ display: none;
+}
+
+div.kupu-toolbox table.kupu-toolbox-addtable input,
+div.kupu-toolbox-active table.kupu-toolbox-edittable input {
+ width: 20px;
+}
+
+div.kupu-toolbox-active {
+ background-color: ButtonFace;
+}
+
+.kupu-toolbox-editlink, .kupu-toolbox-edittable,
+.kupu-ulstyles, .kupu-olstyles {
+ display: none;
+}
+
+
+div#kupu-colorchooser {
+ position: absolute;
+ visibility: hidden;
+ border: solid black 1px;
+ background-color: white;
+ padding: 0.2em;
+ font-size: small;
+}
+
+.kupu-toolboxes input, .kupu-toolboxes select, .kupu-toolboxes textarea {
+ font-size: x-small;
+ font-family: Verdana, "Lucida Grande", Helvetica, Arial, sans-serif;
+}
+
+div#kupu-fgcolorchooser div:hover {
+ /* border: outset 1px; */
+}
+
+div.kupu-drawer {
+ overflow: auto;
+}
+
+button.disabled {
+ opacity:0.5;
+ filter:alpha(opacity=50);
+}
Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kuputoolcollapser.js
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kuputoolcollapser.js?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kuputoolcollapser.js (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/kuputoolcollapser.js Mon Oct 9 14:28:27 2006
@@ -0,0 +1,133 @@
+// turn this into a nice module-like namespace to avoid messing up the global
+// (window) namespace
+this.kuputoolcollapser = new function() {
+ var ToolCollapser = function(toolboxesparentid) {
+ this.parent = document.getElementById(toolboxesparentid);
+ };
+
+ // make the collapser available in the namespace
+ this.Collapser = ToolCollapser;
+
+ ToolCollapser.prototype.initialize = function() {
+ var initial_state = {};
+ if (navigator.cookieEnabled) {
+ var cookie = document.cookie;
+ var reg = /initial_state=([^;]+);?/;
+ var match = cookie.match(reg);
+ if (match) {
+ eval(unescape(match[0]));
+ };
+ };
+ for (var i=0; i < this.parent.childNodes.length; i++) {
+ var child = this.parent.childNodes[i];
+ if (child.className == 'kupu-toolbox') {
+ var heading = child.getElementsByTagName('h1')[0];
+ if (!heading) {
+ throw('heading not found by collapser for toolbox ' +
+ child.id);
+ };
+ heading.setAttribute('title', _('click to unfold'));
+ // find the toolbox's body
+ var body = this.getToolBody(child);
+ // now set a handler that makes the body display and hide
+ // on click, and register it to the heading
+ // WAAAAAHHHH!!! since there's some weird shit happening when
+ // I just use closures to refer to the body (somehow only the
+ // *last* value body is set to in this loop is used?!?) I
+ // used a reference to the body as 'this' in the handler
+ var handler = function(heading) {
+ if (this.style.display == 'none') {
+ // assume we have a block-level element here...
+ this.style.display = 'block';
+ heading.className = 'kupu-toolbox-heading-opened';
+ heading.setAttribute('title', _('click to fold'));
+ } else {
+ this.style.display = 'none';
+ heading.className = 'kupu-toolbox-heading-closed';
+ heading.setAttribute('title', _('click to unfold'));
+ };
+ };
+ var wrap_openhandler = function(body, heading) {
+ return function() {
+ body.style.display = 'block';
+ heading.className = 'kupu-toolbox-heading-opened';
+ };
+ };
+ addEventHandler(heading, 'click', handler, body, heading);
+ if (initial_state[child.id] === undefined ||
+ initial_state[child.id] == '0') {
+ body.style.display = 'none';
+ } else {
+ heading.className = 'kupu-toolbox-heading-opened';
+ heading.setAttribute('title', _('click to fold'));
+ };
+ // add a reference to the openhandler on the toolbox div
+ // so any toolbox code can use that to open the toolbox if
+ // it so desires
+ child.open_handler = wrap_openhandler(body, heading);
+ };
+ };
+
+ addEventHandler(window, 'beforeunload', this.saveState, this);
+ };
+
+ ToolCollapser.prototype.getToolBody = function(tool) {
+ var heading = tool.getElementsByTagName('h1')[0];
+ var currchild = heading.nextSibling;
+ while (currchild.nodeType != 1) {
+ currchild = currchild.nextSibling;
+ if (!currchild) {
+ throw('body not found by collapser for toolbox ' +
+ child.id);
+ };
+ };
+ return currchild;
+ };
+
+ ToolCollapser.prototype.saveState = function() {
+ /* save collapse state of the toolboxes in a cookie */
+ if (!navigator.cookieEnabled) {
+ return;
+ };
+ var current_state = {};
+ for (var i=0; i < this.parent.childNodes.length; i++) {
+ var child = this.parent.childNodes[i];
+ if (child.nodeType != 1) {
+ continue;
+ };
+ var body = this.getToolBody(child);
+ current_state[child.id] = body.style.display == 'none' ? '0' : '1';
+ };
+
+ var exp = new Date();
+ // 100 years before state is lost... should be enough ;)
+ exp.setTime(exp.getTime() + (100 * 365 * 24 * 60 * 60 * 1000));
+ var cookie = 'initial_state=' +
+ escape(this.serializeMapping(current_state)) +
+ ';' +
+ 'expires=' + exp.toGMTString() + ';' +
+ 'path=/';
+ document.cookie = cookie;
+ };
+
+ ToolCollapser.prototype.serializeMapping = function(mapping) {
+ /* serializes the config dict into a string that can be evalled
+
+ works only for dicts with string values
+ */
+ if (typeof(mapping) == 'string') {
+ return "'" + mapping + "'";
+ };
+ var ret = '{';
+ var first = true;
+ for (var key in mapping) {
+ if (!first) {
+ ret += ', ';
+ };
+ ret += "'" + key + "': " +
+ this.serializeMapping(mapping[key]);
+ first = false;
+ };
+ return ret + '}';
+ };
+}();
Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/sarissa.js
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/sarissa.js?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/sarissa.js (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/sarissa.js Mon Oct 9 14:28:27 2006
@@ -0,0 +1,608 @@
+/*****************************************************************************
+ *
+ * Sarissa XML library version 0.9.6
+ * Copyright (c) 2003 Manos Batsis,
+ * mailto: mbatsis at users full stop sourceforge full stop net
+ * This software is distributed under the Kupu License. See
+ * LICENSE.txt for license text. See the Sarissa homepage at
+ * http://sarissa.sourceforge.net for more information.
+ *
+ *****************************************************************************
+
+ * ====================================================================
+ * About
+ * ====================================================================
+ * Sarissa cross browser XML library
+ * @version 0.9.6
+ * @author: Manos Batsis, mailto: mbatsis at users full stop sourceforge full stop net
+ *
+ * Sarissa is an ECMAScript library acting as a cross-browser wrapper for native XML APIs.
+ * The library supports Gecko based browsers like Mozilla and Firefox,
+ * Internet Explorer (5.5+ with MSXML3.0+) and, last but not least, KHTML based browsers like
+ * Konqueror and Safari.
+ *
+ */
+/**
+ * <p>Sarissa is a utility class. Provides static methods for DOMDocument and
+ * XMLHTTP objects, DOM Node serializatrion to XML strings and other goodies.</p>
+ * @constructor
+ */
+function Sarissa(){};
+/** @private */
+Sarissa.PARSED_OK = "Document contains no parsing errors";
+/**
+ * Tells you whether transformNode and transformNodeToObject are available. This functionality
+ * is contained in sarissa_ieemu_xslt.js and is deprecated. If you want to control XSLT transformations
+ * use the XSLTProcessor
+ * @deprecated
+ * @type boolean
+ */
+Sarissa.IS_ENABLED_TRANSFORM_NODE = false;
+/**
+ * tells you whether XMLHttpRequest (or equivalent) is available
+ * @type boolean
+ */
+Sarissa.IS_ENABLED_XMLHTTP = false;
+/**
+ * tells you whether selectNodes/selectSingleNode is available
+ * @type boolean
+ */
+Sarissa.IS_ENABLED_SELECT_NODES = false;
+var _sarissa_iNsCounter = 0;
+var _SARISSA_IEPREFIX4XSLPARAM = "";
+var _SARISSA_HAS_DOM_IMPLEMENTATION = document.implementation && true;
+var _SARISSA_HAS_DOM_CREATE_DOCUMENT = _SARISSA_HAS_DOM_IMPLEMENTATION && document.implementation.createDocument;
+var _SARISSA_HAS_DOM_FEATURE = _SARISSA_HAS_DOM_IMPLEMENTATION && document.implementation.hasFeature;
+var _SARISSA_IS_MOZ = _SARISSA_HAS_DOM_CREATE_DOCUMENT && _SARISSA_HAS_DOM_FEATURE;
+var _SARISSA_IS_SAFARI = navigator.userAgent.toLowerCase().indexOf("applewebkit") != -1;
+var _SARISSA_IS_IE = document.all && window.ActiveXObject && navigator.userAgent.toLowerCase().indexOf("msie") > -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1;
+
+if(!window.Node || !window.Node.ELEMENT_NODE){
+ var Node = {ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5, ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE: 12};
+};
+
+// IE initialization
+if(_SARISSA_IS_IE){
+ // for XSLT parameter names, prefix needed by IE
+ _SARISSA_IEPREFIX4XSLPARAM = "xsl:";
+ // used to store the most recent ProgID available out of the above
+ var _SARISSA_DOM_PROGID = "";
+ var _SARISSA_XMLHTTP_PROGID = "";
+ /**
+ * Called when the Sarissa_xx.js file is parsed, to pick most recent
+ * ProgIDs for IE, then gets destroyed.
+ * @param idList an array of MSXML PROGIDs from which the most recent will be picked for a given object
+ * @param enabledList an array of arrays where each array has two items; the index of the PROGID for which a certain feature is enabled
+ */
+ pickRecentProgID = function (idList, enabledList){
+ // found progID flag
+ var bFound = false;
+ for(var i=0; i < idList.length && !bFound; i++){
+ try{
+ var oDoc = new ActiveXObject(idList[i]);
+ o2Store = idList[i];
+ bFound = true;
+ for(var j=0;j<enabledList.length;j++)
+ if(i <= enabledList[j][1])
+ Sarissa["IS_ENABLED_"+enabledList[j][0]] = true;
+ }catch (objException){
+ // trap; try next progID
+ };
+ };
+ if (!bFound)
+ throw "Could not retreive a valid progID of Class: " + idList[idList.length-1]+". (original exception: "+e+")";
+ idList = null;
+ return o2Store;
+ };
+ // pick best available MSXML progIDs
+ _SARISSA_DOM_PROGID = pickRecentProgID(["Msxml2.DOMDocument.5.0", "Msxml2.DOMDocument.4.0", "Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"], [["SELECT_NODES", 2],["TRANSFORM_NODE", 2]]);
+ _SARISSA_XMLHTTP_PROGID = pickRecentProgID(["Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"], [["XMLHTTP", 4]]);
+ _SARISSA_THREADEDDOM_PROGID = pickRecentProgID(["Msxml2.FreeThreadedDOMDocument.5.0", "MSXML2.FreeThreadedDOMDocument.4.0", "MSXML2.FreeThreadedDOMDocument.3.0"]);
+ _SARISSA_XSLTEMPLATE_PROGID = pickRecentProgID(["Msxml2.XSLTemplate.5.0", "Msxml2.XSLTemplate.4.0", "MSXML2.XSLTemplate.3.0"], [["XSLTPROC", 2]]);
+ // we dont need this anymore
+ pickRecentProgID = null;
+ //============================================
+ // Factory methods (IE)
+ //============================================
+ // see non-IE version
+ Sarissa.getDomDocument = function(sUri, sName){
+ var oDoc = new ActiveXObject(_SARISSA_DOM_PROGID);
+ // if a root tag name was provided, we need to load it in the DOM
+ // object
+ if (sName){
+ // if needed, create an artifical namespace prefix the way Moz
+ // does
+ if (sUri){
+ oDoc.loadXML("<a" + _sarissa_iNsCounter + ":" + sName + " xmlns:a" + _sarissa_iNsCounter + "=\"" + sUri + "\" />");
+ // don't use the same prefix again
+ ++_sarissa_iNsCounter;
+ }
+ else
+ oDoc.loadXML("<" + sName + "/>");
+ };
+ return oDoc;
+ };
+ // see non-IE version
+ Sarissa.getParseErrorText = function (oDoc) {
+ var parseErrorText = Sarissa.PARSED_OK;
+ if(oDoc.parseError != 0){
+ parseErrorText = "XML Parsing Error: " + oDoc.parseError.reason +
+ "\nLocation: " + oDoc.parseError.url +
+ "\nLine Number " + oDoc.parseError.line + ", Column " +
+ oDoc.parseError.linepos +
+ ":\n" + oDoc.parseError.srcText +
+ "\n";
+ for(var i = 0; i < oDoc.parseError.linepos;i++){
+ parseErrorText += "-";
+ };
+ parseErrorText += "^\n";
+ };
+ return parseErrorText;
+ };
+ // see non-IE version
+ Sarissa.setXpathNamespaces = function(oDoc, sNsSet) {
+ oDoc.setProperty("SelectionLanguage", "XPath");
+ oDoc.setProperty("SelectionNamespaces", sNsSet);
+ };
+ /**
+ * Basic implementation of Mozilla's XSLTProcessor for IE.
+ * Reuses the same XSLT stylesheet for multiple transforms
+ * @constructor
+ */
+ XSLTProcessor = function(){
+ this.template = new ActiveXObject(_SARISSA_XSLTEMPLATE_PROGID);
+ this.processor = null;
+ };
+ /**
+ * Impoprts the given XSLT DOM and compiles it to a reusable transform
+ * @argument xslDoc The XSLT DOMDocument to import
+ */
+ XSLTProcessor.prototype.importStylesheet = function(xslDoc){
+ // convert stylesheet to free threaded
+ var converted = new ActiveXObject(_SARISSA_THREADEDDOM_PROGID);
+ converted.loadXML(xslDoc.xml);
+ this.template.stylesheet = converted;
+ this.processor = this.template.createProcessor();
+ // (re)set default param values
+ this.paramsSet = new Array();
+ };
+ /**
+ * Transform the given XML DOM
+ * @argument sourceDoc The XML DOMDocument to transform
+ * @return The transformation result as a DOM Document
+ */
+ XSLTProcessor.prototype.transformToDocument = function(sourceDoc){
+ this.processor.input = sourceDoc;
+ var outDoc = new ActiveXObject(_SARISSA_DOM_PROGID);
+ this.processor.output = outDoc;
+ this.processor.transform();
+ return outDoc;
+ };
+ /**
+ * Not sure if this works in IE. Maybe this will allow non-well-formed
+ * transformation results (i.e. with no single root element)
+ * @argument sourceDoc The XML DOMDocument to transform
+ * @return The transformation result as a DOM Fragment
+ */
+ XSLTProcessor.prototype.transformToFragment = function(sourceDoc, ownerDocument){
+ return this.transformToDocument(sourceDoc);
+ };
+ /**
+ * Set global XSLT parameter of the imported stylesheet
+ * @argument nsURI The parameter namespace URI
+ * @argument name The parameter base name
+ * @argument value The new parameter value
+ */
+ XSLTProcessor.prototype.setParameter = function(nsURI, name, value){
+ /* nsURI is optional but cannot be null */
+ if(nsURI){
+ this.processor.addParameter(name, value, nsURI);
+ }else{
+ this.processor.addParameter(name, value);
+ };
+ /* update updated params for getParameter */
+ if(!this.paramsSet[""+nsURI]){
+ this.paramsSet[""+nsURI] = new Array();
+ };
+ this.paramsSet[""+nsURI][name] = value;
+ };
+ /**
+ * Gets a parameter if previously set by setParameter. Returns null
+ * otherwise
+ * @argument name The parameter base name
+ * @argument value The new parameter value
+ * @return The parameter value if reviously set by setParameter, null otherwise
+ */
+ XSLTProcessor.prototype.getParameter = function(nsURI, name){
+ if(this.paramsSet[""+nsURI] && this.paramsSet[""+nsURI][name])
+ return this.paramsSet[""+nsURI][name];
+ else
+ return null;
+ };
+}
+else{ /* end IE initialization, try to deal with real browsers now ;-) */
+ if(_SARISSA_HAS_DOM_CREATE_DOCUMENT){
+ if(window.XMLDocument){
+ /**
+ * <p>Emulate IE's onreadystatechange attribute</p>
+ */
+ XMLDocument.prototype.onreadystatechange = null;
+ /**
+ * <p>Emulates IE's readyState property, which always gives an integer from 0 to 4:</p>
+ * <ul><li>1 == LOADING,</li>
+ * <li>2 == LOADED,</li>
+ * <li>3 == INTERACTIVE,</li>
+ * <li>4 == COMPLETED</li></ul>
+ */
+ XMLDocument.prototype.readyState = 0;
+ /**
+ * <p>Emulate IE's parseError attribute</p>
+ */
+ XMLDocument.prototype.parseError = 0;
+
+ // NOTE: setting async to false will only work with documents
+ // called over HTTP (meaning a server), not the local file system,
+ // unless you are using Moz 1.4+.
+ // BTW the try>catch block is for 1.4; I haven't found a way to check if
+ // the property is implemented without
+ // causing an error and I dont want to use user agent stuff for that...
+ var _SARISSA_SYNC_NON_IMPLEMENTED = false;
+ try{
+ /**
+ * <p>Emulates IE's async property for Moz versions prior to 1.4.
+ * It controls whether loading of remote XML files works
+ * synchronously or asynchronously.</p>
+ */
+ XMLDocument.prototype.async = true;
+ _SARISSA_SYNC_NON_IMPLEMENTED = true;
+ }catch(e){/* trap */};
+ /**
+ * <p>Keeps a handle to the original load() method. Internal use and only
+ * if Mozilla version is lower than 1.4</p>
+ * @private
+ */
+ XMLDocument.prototype._sarissa_load = XMLDocument.prototype.load;
+
+ /**
+ * <p>Overrides the original load method to provide synchronous loading for
+ * Mozilla versions prior to 1.4, using an XMLHttpRequest object (if
+ * async is set to false)</p>
+ * @returns the DOM Object as it was before the load() call (may be empty)
+ */
+ XMLDocument.prototype.load = function(sURI) {
+ var oDoc = document.implementation.createDocument("", "", null);
+ Sarissa.copyChildNodes(this, oDoc);
+ this.parseError = 0;
+ Sarissa.__setReadyState__(this, 1);
+ try {
+ if(this.async == false && _SARISSA_SYNC_NON_IMPLEMENTED) {
+ var tmp = new XMLHttpRequest();
+ tmp.open("GET", sURI, false);
+ tmp.send(null);
+ Sarissa.__setReadyState__(this, 2);
+ Sarissa.copyChildNodes(tmp.responseXML, this);
+ Sarissa.__setReadyState__(this, 3);
+ }
+ else {
+ this._sarissa_load(sURI);
+ };
+ }
+ catch (objException) {
+ this.parseError = -1;
+ }
+ finally {
+ if(this.async == false){
+ Sarissa.__handleLoad__(this);
+ };
+ };
+ return oDoc;
+ };
+ };//if(window.XMLDocument)
+
+ /**
+ * <p>Ensures the document was loaded correctly, otherwise sets the
+ * parseError to -1 to indicate something went wrong. Internal use</p>
+ * @private
+ */
+ Sarissa.__handleLoad__ = function(oDoc){
+ if (!oDoc.documentElement || oDoc.documentElement.tagName == "parsererror")
+ oDoc.parseError = -1;
+ Sarissa.__setReadyState__(oDoc, 4);
+ };
+
+ /**
+ * <p>Attached by an event handler to the load event. Internal use.</p>
+ * @private
+ */
+ _sarissa_XMLDocument_onload = function(){
+ Sarissa.__handleLoad__(this);
+ };
+
+ /**
+ * <p>Sets the readyState property of the given DOM Document object.
+ * Internal use.</p>
+ * @private
+ * @argument oDoc the DOM Document object to fire the
+ * readystatechange event
+ * @argument iReadyState the number to change the readystate property to
+ */
+ Sarissa.__setReadyState__ = function(oDoc, iReadyState){
+ oDoc.readyState = iReadyState;
+ if (oDoc.onreadystatechange != null && typeof oDoc.onreadystatechange == "function")
+ oDoc.onreadystatechange();
+ };
+ /**
+ * <p>Factory method to obtain a new DOM Document object</p>
+ * @argument sUri the namespace of the root node (if any)
+ * @argument sUri the local name of the root node (if any)
+ * @returns a new DOM Document
+ */
+ Sarissa.getDomDocument = function(sUri, sName){
+ var oDoc = document.implementation.createDocument(sUri?sUri:"", sName?sName:"", null);
+ oDoc.addEventListener("load", _sarissa_XMLDocument_onload, false);
+ return oDoc;
+ };
+ };//if(_SARISSA_HAS_DOM_CREATE_DOCUMENT)
+};
+//==========================================
+// Common stuff
+//==========================================
+if(!window.DOMParser){
+ /**
+ * DOMParser is a utility class, used to construct DOMDocuments from XML strings
+ * @constructor
+ */
+ DOMParser = function() {
+ };
+ /**
+ * Construct a new DOM Document from the given XMLstring
+ * @param sXml the given XML string
+ * @param contentType the content type of the document the given string represents (one of text/xml, application/xml, application/xhtml+xml).
+ * @return a new DOM Document from the given XML string
+ */
+ DOMParser.prototype.parseFromString = function(sXml, contentType){
+ var doc = Sarissa.getDomDocument();
+ doc.loadXML(sXml);
+ return doc;
+ };
+
+};
+
+if(window.XMLHttpRequest){
+ Sarissa.IS_ENABLED_XMLHTTP = true;
+}
+else if(_SARISSA_IS_IE){
+ /**
+ * Emulate XMLHttpRequest
+ * @constructor
+ */
+ XMLHttpRequest = function() {
+ return new ActiveXObject(_SARISSA_XMLHTTP_PROGID);
+ };
+ Sarissa.IS_ENABLED_XMLHTTP = true;
+};
+
+if(!window.document.importNode && _SARISSA_IS_IE){
+ try{
+ /**
+ * Implements importNode for the current window document in IE using innerHTML.
+ * Testing showed that DOM was multiple times slower than innerHTML for this,
+ * sorry folks. If you encounter trouble (who knows what IE does behind innerHTML)
+ * please gimme a call.
+ * @param oNode the Node to import
+ * @param bChildren whether to include the children of oNode
+ * @returns the imported node for further use
+ */
+ window.document.importNode = function(oNode, bChildren){
+ var importNode = document.createElement("div");
+ if(bChildren)
+ importNode.innerHTML = Sarissa.serialize(oNode);
+ else
+ importNode.innerHTML = Sarissa.serialize(oNode.cloneNode(false));
+ return importNode.firstChild;
+ };
+ }catch(e){};
+};
+if(!Sarissa.getParseErrorText){
+ /**
+ * <p>Returns a human readable description of the parsing error. Usefull
+ * for debugging. Tip: append the returned error string in a <pre>
+ * element if you want to render it.</p>
+ * <p>Many thanks to Christian Stocker for the initial patch.</p>
+ * @argument oDoc The target DOM document
+ * @returns The parsing error description of the target Document in
+ * human readable form (preformated text)
+ */
+ Sarissa.getParseErrorText = function (oDoc){
+ var parseErrorText = Sarissa.PARSED_OK;
+ if(oDoc.parseError != 0){
+ /*moz*/
+ if(oDoc.documentElement.tagName == "parsererror"){
+ parseErrorText = oDoc.documentElement.firstChild.data;
+ parseErrorText += "\n" + oDoc.documentElement.firstChild.nextSibling.firstChild.data;
+ }/*konq*/
+ else if(oDoc.documentElement.tagName == "html"){
+ parseErrorText = Sarissa.getText(oDoc.documentElement.getElementsByTagName("h1")[0], false) + "\n";
+ parseErrorText += Sarissa.getText(oDoc.documentElement.getElementsByTagName("body")[0], false) + "\n";
+ parseErrorText += Sarissa.getText(oDoc.documentElement.getElementsByTagName("pre")[0], false);
+ };
+ };
+ return parseErrorText;
+ };
+};
+Sarissa.getText = function(oNode, deep){
+ var s = "";
+ var nodes = oNode.childNodes;
+ for(var i=0; i < nodes.length; i++){
+ var node = nodes[i];
+ var nodeType = node.nodeType;
+ if(nodeType == Node.TEXT_NODE || nodeType == Node.CDATA_SECTION_NODE){
+ s += node.data;
+ }
+ else if(deep == true
+ && (nodeType == Node.ELEMENT_NODE
+ || nodeType == Node.DOCUMENT_NODE
+ || nodeType == Node.DOCUMENT_FRAGMENT_NODE)){
+ s += Sarissa.getText(node, true);
+ };
+ };
+ return s;
+};
+if(window.XMLSerializer){
+ /**
+ * <p>Factory method to obtain the serialization of a DOM Node</p>
+ * @returns the serialized Node as an XML string
+ */
+ Sarissa.serialize = function(oDoc){
+ return (new XMLSerializer()).serializeToString(oDoc);
+ };
+}else{
+ if((Sarissa.getDomDocument("","foo", null)).xml){
+ // see non-IE version
+ Sarissa.serialize = function(oDoc) {
+ // TODO: check for HTML document and return innerHTML instead
+ return oDoc.xml;
+ };
+ /**
+ * Utility class to serialize DOM Node objects to XML strings
+ * @constructor
+ */
+ XMLSerializer = function(){};
+ /**
+ * Serialize the given DOM Node to an XML string
+ * @param oNode the DOM Node to serialize
+ */
+ XMLSerializer.prototype.serializeToString = function(oNode) {
+ return oNode.xml;
+ };
+ };
+};
+
+/**
+ * strips tags from a markup string
+ */
+Sarissa.stripTags = function (s) {
+ return s.replace(/<[^>]+>/g,"");
+};
+/**
+ * <p>Deletes all child nodes of the given node</p>
+ * @argument oNode the Node to empty
+ */
+Sarissa.clearChildNodes = function(oNode) {
+ while(oNode.hasChildNodes()){
+ oNode.removeChild(oNode.firstChild);
+ };
+};
+/**
+ * <p> Copies the childNodes of nodeFrom to nodeTo</p>
+ * <p> <b>Note:</b> The second object's original content is deleted before
+ * the copy operation, unless you supply a true third parameter</p>
+ * @argument nodeFrom the Node to copy the childNodes from
+ * @argument nodeTo the Node to copy the childNodes to
+ * @argument bPreserveExisting whether to preserve the original content of nodeTo, default is false
+ */
+Sarissa.copyChildNodes = function(nodeFrom, nodeTo, bPreserveExisting) {
+ if(!bPreserveExisting){
+ Sarissa.clearChildNodes(nodeTo);
+ };
+ var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo : nodeTo.ownerDocument;
+ var nodes = nodeFrom.childNodes;
+ if(ownerDoc.importNode && (!_SARISSA_IS_IE)) {
+ for(var i=0;i < nodes.length;i++) {
+ nodeTo.appendChild(ownerDoc.importNode(nodes[i], true));
+ };
+ }
+ else{
+ for(var i=0;i < nodes.length;i++) {
+ nodeTo.appendChild(nodes[i].cloneNode(true));
+ };
+ };
+};
+
+/**
+ * <p> Moves the childNodes of nodeFrom to nodeTo</p>
+ * <p> <b>Note:</b> The second object's original content is deleted before
+ * the move operation, unless you supply a true third parameter</p>
+ * @argument nodeFrom the Node to copy the childNodes from
+ * @argument nodeTo the Node to copy the childNodes to
+ * @argument bPreserveExisting whether to preserve the original content of nodeTo, default is false
+ */
+Sarissa.moveChildNodes = function(nodeFrom, nodeTo, bPreserveExisting) {
+ if(!bPreserveExisting){
+ Sarissa.clearChildNodes(nodeTo);
+ };
+
+ var nodes = nodeFrom.childNodes;
+ // if within the same doc, just move, else copy and delete
+ if(nodeFrom.ownerDocument == nodeTo.ownerDocument){
+ nodeTo.appendChild(nodes[i]);
+ }else{
+ var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo : nodeTo.ownerDocument;
+ if(ownerDoc.importNode && (!_SARISSA_IS_IE)) {
+ for(var i=0;i < nodes.length;i++) {
+ nodeTo.appendChild(ownerDoc.importNode(nodes[i], true));
+ };
+ }
+ else{
+ for(var i=0;i < nodes.length;i++) {
+ nodeTo.appendChild(nodes[i].cloneNode(true));
+ };
+ };
+ Sarissa.clearChildNodes(nodeFrom);
+ };
+
+};
+
+/**
+ * <p>Serialize any object to an XML string. All properties are serialized using the property name
+ * as the XML element name. Array elements are rendered as <code>array-item</code> elements,
+ * using their index/key as the value of the <code>key</code> attribute.</p>
+ * @argument anyObject the object to serialize
+ * @argument objectName a name for that object
+ * @return the XML serializationj of the given object as a string
+ */
+Sarissa.xmlize = function(anyObject, objectName, indentSpace){
+ indentSpace = indentSpace?indentSpace:'';
+ var s = indentSpace + '<' + objectName + '>';
+ var isLeaf = false;
+ if(!(anyObject instanceof Object) || anyObject instanceof Number || anyObject instanceof String
+ || anyObject instanceof Boolean || anyObject instanceof Date){
+ s += Sarissa.escape(""+anyObject);
+ isLeaf = true;
+ }else{
+ s += "\n";
+ var itemKey = '';
+ var isArrayItem = anyObject instanceof Array;
+ for(var name in anyObject){
+ s += Sarissa.xmlize(anyObject[name], (isArrayItem?"array-item key=\""+name+"\"":name), indentSpace + " ");
+ };
+ s += indentSpace;
+ };
+ return s += (objectName.indexOf(' ')!=-1?"</array-item>\n":"</" + objectName + ">\n");
+};
+
+/**
+ * Escape the given string chacters that correspond to the five predefined XML entities
+ * @param sXml the string to escape
+ */
+Sarissa.escape = function(sXml){
+ return sXml.replace(/&/g, "&")
+ .replace(/</g, "<")
+ .replace(/>/g, ">")
+ .replace(/"/g, """)
+ .replace(/'/g, "'");
+};
+
+/**
+ * Unescape the given string. This turns the occurences of the predefined XML
+ * entities to become the characters they represent correspond to the five predefined XML entities
+ * @param sXml the string to unescape
+ */
+Sarissa.unescape = function(sXml){
+ return sXml.replace(/'/g,"'")
+ .replace(/"/g,"\"")
+ .replace(/>/g,">")
+ .replace(/</g,"<")
+ .replace(/&/g,"&");
+};
+// EOF
Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/sarissa_ieemu_xpath.js
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/sarissa_ieemu_xpath.js?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/sarissa_ieemu_xpath.js (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/sarissa_ieemu_xpath.js Mon Oct 9 14:28:27 2006
@@ -0,0 +1,183 @@
+/*****************************************************************************
+ *
+ * Sarissa XML library version 0.9.6
+ * Copyright (c) 2003 Manos Batsis,
+ * mailto: mbatsis at users full stop sourceforge full stop net
+ * This software is distributed under the Kupu License. See
+ * LICENSE.txt for license text. See the Sarissa homepage at
+ * http://sarissa.sourceforge.net for more information.
+ *
+ *****************************************************************************
+
+ * ====================================================================
+ * About
+ * ====================================================================
+ * Sarissa cross browser XML library - IE XPath Emulation
+ * @version 0.9.6
+ * @author: Manos Batsis, mailto: mbatsis at users full stop sourceforge full stop net
+ *
+ * This script emulates Internet Explorer's selectNodes and selectSingleNode
+ * for Mozilla. Associating namespace prefixes with URIs for your XPath queries
+ * is easy with IE's setProperty.
+ * USers may also map a namespace prefix to a default (unprefixed) namespace in the
+ * source document with Sarissa.setXpathNamespaces
+ *
+ */
+if(_SARISSA_HAS_DOM_FEATURE && document.implementation.hasFeature("XPath", "3.0")){
+ /**
+ * <p>SarissaNodeList behaves as a NodeList but is only used as a result to <code>selectNodes</code>,
+ * so it also has some properties IEs proprietery object features.</p>
+ * @private
+ * @constructor
+ * @argument i the (initial) list size
+ */
+ function SarissaNodeList(i){
+ this.length = i;
+ };
+ /** <p>Set an Array as the prototype object</p> */
+ SarissaNodeList.prototype = new Array(0);
+ /** <p>Inherit the Array constructor </p> */
+ SarissaNodeList.prototype.constructor = Array;
+ /**
+ * <p>Returns the node at the specified index or null if the given index
+ * is greater than the list size or less than zero </p>
+ * <p><b>Note</b> that in ECMAScript you can also use the square-bracket
+ * array notation instead of calling <code>item</code>
+ * @argument i the index of the member to return
+ * @returns the member corresponding to the given index
+ */
+ SarissaNodeList.prototype.item = function(i) {
+ return (i < 0 || i >= this.length)?null:this[i];
+ };
+ /**
+ * <p>Emulate IE's expr property
+ * (Here the SarissaNodeList object is given as the result of selectNodes).</p>
+ * @returns the XPath expression passed to selectNodes that resulted in
+ * this SarissaNodeList
+ */
+ SarissaNodeList.prototype.expr = "";
+ /** dummy, used to accept IE's stuff without throwing errors */
+ XMLDocument.prototype.setProperty = function(x,y){};
+ /**
+ * <p>Programmatically control namespace URI/prefix mappings for XPath
+ * queries.</p>
+ * <p>This method comes especially handy when used to apply XPath queries
+ * on XML documents with a default namespace, as there is no other way
+ * of mapping that to a prefix.</p>
+ * <p>Using no namespace prefix in DOM Level 3 XPath queries, implies you
+ * are looking for elements in the null namespace. If you need to look
+ * for nodes in the default namespace, you need to map a prefix to it
+ * first like:</p>
+ * <pre>Sarissa.setXpathNamespaces(oDoc, "xmlns:myprefix=&aposhttp://mynsURI&apos");</pre>
+ * <p><b>Note 1 </b>: Use this method only if the source document features
+ * a default namespace (without a prefix), otherwise just use IE's setProperty
+ * (moz will rezolve non-default namespaces by itself). You will need to map that
+ * namespace to a prefix for queries to work.</p>
+ * <p><b>Note 2 </b>: This method calls IE's setProperty method to set the
+ * appropriate namespace-prefix mappings, so you dont have to do that.</p>
+ * @param oDoc The target XMLDocument to set the namespace mappings for.
+ * @param sNsSet A whilespace-seperated list of namespace declarations as
+ * those would appear in an XML document. E.g.:
+ * <code>"xmlns:xhtml='http://www.w3.org/1999/xhtml'
+ * xmlns:'http://www.w3.org/1999/XSL/Transform'"</code>
+ * @throws An error if the format of the given namespace declarations is bad.
+ */
+ Sarissa.setXpathNamespaces = function(oDoc, sNsSet) {
+ //oDoc._sarissa_setXpathNamespaces(sNsSet);
+ oDoc._sarissa_useCustomResolver = true;
+ var namespaces = sNsSet.indexOf(" ")>-1?sNsSet.split(" "):new Array(sNsSet);
+ oDoc._sarissa_xpathNamespaces = new Array(namespaces.length);
+ for(var i=0;i < namespaces.length;i++){
+ var ns = namespaces[i];
+ var colonPos = ns.indexOf(":");
+ var assignPos = ns.indexOf("=");
+ if(colonPos == 5 && assignPos > colonPos+2){
+ var prefix = ns.substring(colonPos+1, assignPos);
+ var uri = ns.substring(assignPos+2, ns.length-1);
+ oDoc._sarissa_xpathNamespaces[prefix] = uri;
+ }else{
+ throw "Bad format on namespace declaration(s) given";
+ };
+ };
+ };
+ /**
+ * @private Flag to control whether a custom namespace resolver should
+ * be used, set to true by Sarissa.setXpathNamespaces
+ */
+ XMLDocument.prototype._sarissa_useCustomResolver = false;
+ /** @private */
+ XMLDocument.prototype._sarissa_xpathNamespaces = new Array();
+ /**
+ * <p>Extends the XMLDocument to emulate IE's selectNodes.</p>
+ * @argument sExpr the XPath expression to use
+ * @argument contextNode this is for internal use only by the same
+ * method when called on Elements
+ * @returns the result of the XPath search as a SarissaNodeList
+ * @throws An error if no namespace URI is found for the given prefix.
+ */
+ XMLDocument.prototype.selectNodes = function(sExpr, contextNode){
+ var nsDoc = this;
+ var nsresolver = this._sarissa_useCustomResolver
+ ? function(prefix){
+ var s = nsDoc._sarissa_xpathNamespaces[prefix];
+ if(s)return s;
+ else throw "No namespace URI found for prefix: '" + prefix+"'";
+ }
+ : this.createNSResolver(this.documentElement);
+ var oResult = this.evaluate(sExpr,
+ (contextNode?contextNode:this),
+ nsresolver,
+ XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ var nodeList = new SarissaNodeList(oResult.snapshotLength);
+ nodeList.expr = sExpr;
+ for(var i=0;i<nodeList.length;i++)
+ nodeList[i] = oResult.snapshotItem(i);
+ return nodeList;
+ };
+ /**
+ * <p>Extends the Element to emulate IE's selectNodes</p>
+ * @argument sExpr the XPath expression to use
+ * @returns the result of the XPath search as an (Sarissa)NodeList
+ * @throws An
+ * error if invoked on an HTML Element as this is only be
+ * available to XML Elements.
+ */
+ Element.prototype.selectNodes = function(sExpr){
+ var doc = this.ownerDocument;
+ if(doc.selectNodes)
+ return doc.selectNodes(sExpr, this);
+ else
+ throw "Method selectNodes is only supported by XML Elements";
+ };
+ /**
+ * <p>Extends the XMLDocument to emulate IE's selectSingleNodes.</p>
+ * @argument sExpr the XPath expression to use
+ * @argument contextNode this is for internal use only by the same
+ * method when called on Elements
+ * @returns the result of the XPath search as an (Sarissa)NodeList
+ */
+ XMLDocument.prototype.selectSingleNode = function(sExpr, contextNode){
+ var ctx = contextNode?contextNode:null;
+ sExpr = "("+sExpr+")[1]";
+ var nodeList = this.selectNodes(sExpr, ctx);
+ if(nodeList.length > 0)
+ return nodeList.item(0);
+ else
+ return null;
+ };
+ /**
+ * <p>Extends the Element to emulate IE's selectNodes.</p>
+ * @argument sExpr the XPath expression to use
+ * @returns the result of the XPath search as an (Sarissa)NodeList
+ * @throws An error if invoked on an HTML Element as this is only be
+ * available to XML Elements.
+ */
+ Element.prototype.selectSingleNode = function(sExpr){
+ var doc = this.ownerDocument;
+ if(doc.selectSingleNode)
+ return doc.selectSingleNode(sExpr, this);
+ else
+ throw "Method selectNodes is only supported by XML Elements";
+ };
+ Sarissa.IS_ENABLED_SELECT_NODES = true;
+};
Added: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/spellcheck.cgi
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/spellcheck.cgi?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/spellcheck.cgi (added)
+++ incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/spellcheck.cgi Mon Oct 9 14:28:27 2006
@@ -0,0 +1,26 @@
+#!/usr/bin/python
+
+"""SpellChecker for Kupu, CGI wrapper"""
+
+import os, sys
+os.chdir(os.path.abspath(os.path.dirname(__file__)))
+sys.path.append(os.path.abspath('../python'))
+
+from spellcheck import SpellChecker, format_result
+
+if __name__ == '__main__':
+ import cgi, cgitb
+ #cgitb.enable()
+ #result = repr(sys.stdin.read())
+ data = cgi.FieldStorage()
+ data = data['text'].value
+ c = SpellChecker()
+ result = c.check(data)
+ if result == None:
+ result = ''
+ else:
+ result = format_result(result)
+ print 'Content-Type: text/xml,charset=UTF-8'
+ print 'Content-Length: %s' % len(result)
+ print
+ print result
Propchange: incubator/graffito/trunk/applications/browser/src/webapp/kupu-1.3.5/spellcheck.cgi
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/graffito/trunk/jetspeed2-deploy/src/java/org/apache/portals/jetspeed/valve/GraffitoCleanUpContextValve.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jetspeed2-deploy/src/java/org/apache/portals/jetspeed/valve/GraffitoCleanUpContextValve.java?view=auto&rev=454522
==============================================================================
--- incubator/graffito/trunk/jetspeed2-deploy/src/java/org/apache/portals/jetspeed/valve/GraffitoCleanUpContextValve.java (added)
+++ incubator/graffito/trunk/jetspeed2-deploy/src/java/org/apache/portals/jetspeed/valve/GraffitoCleanUpContextValve.java Mon Oct 9 14:28:27 2006
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.portals.jetspeed.valve;
+
+import java.security.Principal;
+
+import javax.security.auth.Subject;
+
+import org.apache.jetspeed.pipeline.PipelineException;
+import org.apache.jetspeed.pipeline.valve.ValveContext;
+import org.apache.jetspeed.request.RequestContext;
+import org.apache.jetspeed.security.impl.AbstractSecurityValve;
+import org.apache.portals.graffito.context.CmsRequestContext;
+import org.apache.portals.graffito.context.CmsRequestContextManager;
+import org.apache.portals.graffito.context.impl.CmsRequestContextImpl;
+
+/**
+ * Jetspeed 2 valve used to initialise the Graffito request context with the current Subject
+ *
+ * @author <a href="mailto:christophe.lombart@sword-technologies.com">Lombart Christophe </a>
+ * @version $Id: Exp $
+ */
+public class GraffitoCleanUpContextValve extends AbstractSecurityValve
+{
+
+
+ private CmsRequestContextManager cmsRequestContextManager;
+
+ /**
+ * Constructor
+ *
+ * @param cmsRequestContextManager
+ */
+ public GraffitoCleanUpContextValve(CmsRequestContextManager cmsRequestContextManager)
+ {
+ this.cmsRequestContextManager = cmsRequestContextManager;
+ }
+
+ /**
+ * Initialize the valve before using in a pipeline.
+ */
+ public void initialize() throws PipelineException
+ {
+
+ }
+
+ /**
+ *
+ * @see org.apache.jetspeed.pipeline.valve.Valve#invoke(org.apache.jetspeed.request.RequestContext, org.apache.jetspeed.pipeline.valve.ValveContext)
+ */
+ public void invoke(RequestContext request, ValveContext context) throws PipelineException
+ {
+ cmsRequestContextManager.cleanupCmsRequestContent();
+ context.invokeNext(request);
+
+ }
+ protected Subject getSubject(RequestContext request)
+ {
+ try
+ {
+ return getSubjectFromSession(request);
+ }
+ catch(Exception e)
+ {
+ return null;
+ }
+ }
+ protected Principal getUserPrincipal(RequestContext context)
+ {
+ return getUserPrincipal(context);
+ }
+
+}