Compatibility updates for TinyMCE 3.5.7

3.5.7 seems to init before the DOMContentLoaded we were relying on
previously to add the init function gets called, so instead call a
fixed init function from the HTML that we insert before the load
from chrome.
This commit is contained in:
Dan Stillman 2012-10-30 04:10:29 -04:00
parent 87d90e59d9
commit d7ce389201
7 changed files with 93 additions and 58 deletions

View file

@ -362,7 +362,7 @@
var matchTo = null;
var listener = function(e) {
var win = self._iframe.contentWindow;
var SJOW = self._iframe.contentWindow.wrappedJSObject;
var SJOW = win.wrappedJSObject;
// only fire if the target matches, or _zoteroMatchTo, which we set last
// time the target matched, matches
@ -386,6 +386,49 @@
return;
}
if (!SJOW.zoteroInit) {
SJOW.zoteroInit = function(editor) {
self._editor = editor;
if (self._value) {
self.value = self._value;
}
if (self._focus) {
self._iframe.focus();
self._editor.focus();
self._focus = false;
}
// Add CSS rules to notes
if (self.mode == 'note') {
var css = "body#zotero-tinymce-note.mceContentBody, "
+ "body#zotero-tinymce-note.mceContentBody p, "
+ "body#zotero-tinymce-note.mceContentBody th, "
+ "body#zotero-tinymce-note.mceContentBody td, "
+ "body#zotero-tinymce-note.mceContentBody pre { "
+ "font-size: "
+ Zotero.Prefs.get('note.fontSize') + "px; "
+ "} "
+ "body#zotero-tinymce-note.mceContentBody, "
+ "body#zotero-tinymce-note.mceContentBody p { "
+ "font-family: "
+ Zotero.Prefs.get('note.fontFamily') + "; "
+ "}"
+ Zotero.Prefs.get('note.css');
var doc = editor.contentDocument;
var head = doc.getElementsByTagName("head")[0];
var style = doc.createElement("style");
style.innerHTML = css;
head.appendChild(style);
}
// Dispatch a tinymceInitialized event
var ev = document.createEvent('HTMLEvents');
ev.initEvent('tinymceInitialized', true, true);
self.dispatchEvent(ev);
};
}
var editor = SJOW.tinyMCE.get("tinymce");
if (!editor) {
Zotero.debug("editor not ready");
@ -405,59 +448,16 @@
self._iframe.removeEventListener("DOMContentLoaded", listener, false);
}
var onInitFunction = function() {
self._editor = editor;
if (self._value) {
self.value = self._value;
}
if (self._focus) {
self._iframe.focus();
self._editor.focus();
self._focus = false;
}
// Add CSS rules to notes
if (self.mode == 'note') {
var css = "body#zotero-tinymce-note.mceContentBody, "
+ "body#zotero-tinymce-note.mceContentBody p, "
+ "body#zotero-tinymce-note.mceContentBody th, "
+ "body#zotero-tinymce-note.mceContentBody td, "
+ "body#zotero-tinymce-note.mceContentBody pre { "
+ "font-size: "
+ Zotero.Prefs.get('note.fontSize') + "px; "
+ "} "
+ "body#zotero-tinymce-note.mceContentBody, "
+ "body#zotero-tinymce-note.mceContentBody p { "
+ "font-family: "
+ Zotero.Prefs.get('note.fontFamily') + "; "
+ "}"
+ Zotero.Prefs.get('note.css');
var doc = editor.contentDocument;
var head = doc.getElementsByTagName("head")[0];
var style = doc.createElement("style");
style.innerHTML = css;
head.appendChild(style);
}
// Dispatch a tinymceInitialized event
var ev = document.createEvent('HTMLEvents');
ev.initEvent('tinymceInitialized', true, true);
self.dispatchEvent(ev);
};
onInitFunction.__exposedProps__ = {"apply":"r"};
editor.onInit.add(onInitFunction);
if (self._eventHandler) {
self._iframe.contentWindow.wrappedJSObject.zoteroHandleEvent = self._eventHandler;
win.wrappedJSObject.zoteroHandleEvent = self._eventHandler;
}
// Run Cut/Copy/Paste with chrome privileges
self._iframe.contentWindow.wrappedJSObject.zoteroExecCommand = function (doc, command, ui, value) {
win.wrappedJSObject.zoteroExecCommand = function (doc, command, ui, value) {
return doc.execCommand(command, ui, value);
}
self._iframe.contentWindow.wrappedJSObject.zoteroFixWindow = function (win) {
win.wrappedJSObject.zoteroFixWindow = function (win) {
win.locationbar.visible = false;
win.statusbar.visible = false;
}

9
chrome/content/zotero/tinymce/note.html Executable file → Normal file
View file

@ -1,6 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="css/note-ui.css"/>
<script type="text/javascript;version=1.8" src="tiny_mce.js"></script>
<script type="text/javascript;version=1.8">
@ -20,11 +21,14 @@
},
onchange_callback : function () {
var event = { type: 'change' };
zoteroHandleEvent(event);
zoteroHandleEvent({ type: 'change' });
},
setup : function (ed) {
ed.onInit.add(function (ed) {
zoteroInit(ed);
});
var commands = ["Cut", "Copy", "Paste"];
for each(var command in commands) {
let cmd = command;
@ -44,6 +48,7 @@
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "none",
// More restrictive version of default set, with JS/etc. removed
valid_elements : "@[id|class|style|title|dir<ltr?rtl|lang|xml::lang],"

View file

@ -1,7 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>TinyMCE</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="css/note-ui.css"/>
<style>
table.mceLayout {
@ -28,7 +28,12 @@ table.mceLayout > tbody > tr.mceLast {
fix_list_elements : true,
fix_table_elements : true,
/*plugins : "xhtmlxtras",*/
setup : function (ed) {
ed.onInit.add(function (ed) {
zoteroInit(ed);
});
},
// Theme options
theme_advanced_buttons1 : "",
@ -36,6 +41,7 @@ table.mceLayout > tbody > tr.mceLast {
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "none",
// More restrictive version of default set, with JS/etc. removed
valid_elements : "@[id|class|style|title|dir<ltr?rtl|lang|xml::lang],"

View file

@ -1,6 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!-- Added by Dan S./Zotero -->
<title>{#advanced_dlg.colorpicker_title}</title>
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
<script type="text/javascript" src="../../utils/mctabs.js"></script>

View file

@ -1,6 +1,7 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!-- Added by Dan S./Zotero -->
<title>{#advanced_dlg.link_title}</title>
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
<script type="text/javascript" src="../../utils/mctabs.js"></script>

View file

@ -1,5 +1,6 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <!-- Added by Dan S./Zotero -->
<title>{#advanced_dlg.code_title}</title>
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
<script type="text/javascript" src="js/source_editor.js"></script>

View file

@ -1,4 +1,5 @@
// FILE IS GENERATED BY COMBINING THE SOURCES IN THE "classes" DIRECTORY SO DON'T MODIFY THIS FILE DIRECTLY
// Contains modifications by Dan S./Zotero
(function(win) {
var whiteSpaceRe = /^\s*|\s*$/g,
undef, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1';
@ -591,7 +592,11 @@ tinymce.create('tinymce.util.Dispatcher', {
t.source = u;
return;
}
// Added by Dan S./Zotero
u = u.replace("jar:file", "jarfile");
u = u.replace("zotero@chnm.gmu.edu", "zotero.chnm.gmu.edu");
// Absolute path with no host, fake host and protocol
if (u.indexOf('/') === 0 && u.indexOf('//') !== 0)
u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;
@ -599,9 +604,15 @@ tinymce.create('tinymce.util.Dispatcher', {
// Relative path http:// or protocol relative //path
if (!/^[\w\-]*:?\/\//.test(u)) {
base_url = s.base_uri ? s.base_uri.path : new tinymce.util.URI(location.href).directory;
u = ((s.base_uri && s.base_uri.protocol) || 'http') + '://mce_host' + t.toAbsPath(base_url, u);
// Modified by Dan S./Zotero
//u = ((s.base_uri && s.base_uri.protocol) || 'http') + '://mce_host' + t.toAbsPath(base_url, u);
u = s.base_uri.protocol + '://' + s.base_uri.path + '/' + u;
}
// Added by Dan S./Zotero
u = u.replace("jar:file", "jarfile");
u = u.replace("zotero@chnm.gmu.edu", "zotero.chnm.gmu.edu");
// Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)
u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something
u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);
@ -609,8 +620,13 @@ tinymce.create('tinymce.util.Dispatcher', {
var s = u[i];
// Zope 3 workaround, they use @@something
if (s)
if (s) {
s = s.replace(/\(mce_at\)/g, '@@');
// Modified by Dan S./Zotero
s = s.replace("jarfile", "jar:file");
s = s.replace("zotero.chnm.gmu.edu", "zotero@chnm.gmu.edu");
}
t[v] = s;
});
@ -966,7 +982,9 @@ tinymce.create('static tinymce.util.XHR', {
function ready() {
if (!o.async || x.readyState == 4 || c++ > 10000) {
if (o.success && c < 10000 && x.status == 200)
// Modified by Dan S./Zotero
//if (o.success && c < 10000 && x.status == 200)
if (o.success && c < 10000 && (x.status == 200 || x.status == 0))
o.success.call(o.success_scope, '' + x.responseText, x, o);
else if (o.error)
o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o);
@ -16309,7 +16327,10 @@ tinymce.ForceBlocks = function(editor) {
} catch (ex) {
// Ignore
}
// Added by Dan S./Zotero
zoteroFixWindow(w);
if (!w)
alert(t.editor.getLang('popup_blocked'));
},