Annotation of kupuMPIWG/plone/kupu_plone_layer/kupuploneeditor.js, revision 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)[^>]*>|\ )*<\/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>