Annotation of kupuMPIWG/plone/kupu_plone_layer/kupuploneeditor.js, revision 1.1.1.1

1.1       dwinter     1: /*****************************************************************************
                      2:  *
                      3:  * Copyright (c) 2003-2005 Kupu Contributors. All rights reserved.
                      4:  *
                      5:  * This software is distributed under the terms of the Kupu
                      6:  * License. See LICENSE.txt for license text. For a list of Kupu
                      7:  * Contributors see CREDITS.txt.
                      8:  *
                      9:  *****************************************************************************/
                     10: 
                     11: KupuEditor.prototype._getBase = function(dom) {
                     12:     var base = dom.getElementsByTagName('base');
                     13:     if (base.length) {
                     14:         return base[0].getAttribute('href');
                     15:     } else {
                     16:         return '';
                     17:     }
                     18: }
                     19: 
                     20: // $Id: kupuploneeditor.js 9879 2005-03-18 12:04:00Z yuppie $
                     21: KupuEditor.prototype.makeLinksRelative = function(contents,base,debug) {
                     22:     // After extracting text from Internet Explorer, all the links in
                     23:     // the document are absolute.
                     24:     // we can't use the DOM to convert them to relative links, since
                     25:     // its the DOM that corrupts them to absolute to begin with.
                     26:     // Instead we can find the base from the DOM and do replace on the
                     27:     // text until all our links are relative.
                     28: 
                     29:     var href = base.replace(/\/[^\/]*$/, '/');
                     30:     var hrefparts = href.split('/');
                     31:     return contents.replace(/(<[^>]* (?:src|href)=")([^"]*)"/g,
                     32:         function(str, tag, url, offset, contents) {
                     33:             var resolveuid = url.indexOf('/resolveuid/');
                     34:             if (resolveuid != -1) {
                     35:                 str = tag + url.substr(resolveuid+1)+'"';
                     36:                 return str;
                     37:             }
                     38:             var urlparts = url.split('#');
                     39:             var anchor = urlparts[1] || '';
                     40:             url = urlparts[0];
                     41:             var urlparts = url.split('/');
                     42:             var common = 0;
                     43:             while (common < urlparts.length &&
                     44:                    common < hrefparts.length &&
                     45:                    urlparts[common]==hrefparts[common])
                     46:                 common++;
                     47:             var last = urlparts[common];
                     48:             if (common+1 == urlparts.length && last=='emptypage') {
                     49:                 urlparts[common] = '';
                     50:             }
                     51:             // The base and the url have 'common' parts in common.
                     52:             // First two are the protocol, so only do stuff if more
                     53:             // than two match.
                     54:             if (common > 2) {
                     55:                 var path = new Array();
                     56:                 var i = 0;
                     57:                 for (; i+common < hrefparts.length-1; i++) {
                     58:                     path[i] = '..';
                     59:                 };
                     60:                 while (common < urlparts.length) {
                     61:                     path[i++] = urlparts[common++];
                     62:                 };
                     63:                 if (i==0) {
                     64:                     path[i++] = '.';
                     65:                 }
                     66:                 str = path.join('/');
                     67:                 if (anchor) {
                     68:                     str = [str,anchor].join('#');
                     69:                 }
                     70:                 str = tag + str+'"';
                     71:             };
                     72:             return str;
                     73:         });
                     74: };
                     75: 
                     76: KupuEditor.prototype.saveDataToField = function(form, field) {
                     77:     var sourcetool = this.getTool('sourceedittool');
                     78:     if (sourcetool) {sourcetool.cancelSourceMode();};
                     79: 
                     80:     if (!this._initialized) {
                     81:         return;
                     82:     };
                     83:     this._initialized = false;
                     84: 
                     85:     // set the window status so people can see we're actually saving
                     86:     window.status= "Please wait while saving document...";
                     87: 
                     88:     // pass the content through the filters
                     89:     this.logMessage("Starting HTML cleanup");
                     90: 
                     91:     var transform = this._filterContent(this.getInnerDocument().documentElement);
                     92: 
                     93:     // We need to get the contents of the body node as xml, but we don't
                     94:     // want the body node itself, so we use a regex to remove it
                     95:     var contents = kupu.getXMLBody(transform);
                     96:     if (/^<body[^>]*>(<\/?(p|br)[^>]*>|\&nbsp;)*<\/body>$/.test(contents)) {
                     97:         contents = ''; /* Ignore nearly empty contents */
                     98:     }
                     99:     var base = this._getBase(transform);
                    100:     contents = this._fixupSingletons(contents);
                    101:     contents = this.makeLinksRelative(contents, base).replace(/<\/?body[^>]*>/g, "");
                    102:     this.logMessage("Cleanup done, sending document to server");
                    103: 
                    104:     // now create the form input
                    105:     var document = form.ownerDocument;
                    106: 
                    107:     field.value = contents;
                    108:     
                    109:     kupu.content_changed = false;
                    110: };

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>