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)[^>]*>|\ )*<\/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>