Fixes to the IE9 bugs in the Wysiwyg editor

This commit is contained in:
Gustavo Cruz
2013-01-07 17:11:55 -04:00
parent ea1ff0543b
commit 2d93201803
9 changed files with 119 additions and 19 deletions

View File

@@ -1946,8 +1946,8 @@ node=node.parent;}}},schema);rootNode=node=new Node(args.context||settings.root_
fixInvalidChildren(invalidChildren);else
args.invalid=true;}
if(rootBlockName&&rootNode.name=='body')
addRootBlocks();if(!args.invalid){for(name in matchedNodes){list=nodeFilters[name];nodes=matchedNodes[name];fi=nodes.length;while(fi--){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'){if(!nodes[fi].parent){nodes.splice(fi,1);}}}
for(i=0,l=list.length;i<l;i++){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'){list[i](nodes,name,args);}}}
addRootBlocks();if(!args.invalid){for(name in matchedNodes){list=nodeFilters[name];nodes=matchedNodes[name];fi=nodes.length;while(fi--){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'){if(!nodes[fi].parent){nodes.splice(fi,1);}}}
for(i=0,l=list.length;i<l;i++){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'){list[i](nodes,name,args);}}}
for(i=0,l=attributeFilters.length;i<l;i++){list=attributeFilters[i];if(list.name in matchedAttributes){nodes=matchedAttributes[list.name];fi=nodes.length;while(fi--){if(list.name!='toStr'&&list.name!='concat'&&list.name!='get_by_key'&&list.name!='expand'&&list.name!='setParent'&&list.name!='isset_key'){nodes.splice(fi,1);}}
for(fi=0,fl=list.callbacks.length;fi<fl;fi++){if(list.name!='toStr'&&list.name!='concat'&&list.name!='get_by_key'&&list.name!='expand'&&list.name!='setParent'&&list.name!='isset_key'){list.callbacks[fi](nodes,list.name,args);}}}}}
return rootNode;};if(settings.remove_trailing_brs){self.addNodeFilter('br',function(nodes,name){var i,l=nodes.length,node,blockElements=tinymce.extend({},schema.getBlockElements()),nonEmptyElements=schema.getNonEmptyElements(),parent,lastParent,prev,prevName;blockElements.body=1;for(i=0;i<l;i++){node=nodes[i];parent=node.parent;if(blockElements[node.parent.name]&&node===parent.lastChild){prev=node.prev;while(prev){prevName=prev.name;if(prevName!=="span"||prev.attr('data-mce-type')!=='bookmark'){if(prevName!=="br")
@@ -1977,8 +1977,8 @@ writer.end(name);}}else
handler(node);}
if(node.type==1&&!settings.inner)
walk(node);else
handlers[11](node);return writer.getContent();};}})(tinymce);tinymce.dom={};(function(namespace,expando){var w3cEventModel=!!document.addEventListener;function addEvent(target,name,callback,capture){if(target.addEventListener){target.addEventListener(name,callback,capture||false);}else if(target.attachEvent){target.attachEvent('on'+name,callback);}}
function removeEvent(target,name,callback,capture){if(target.removeEventListener){target.removeEventListener(name,callback,capture||false);}else if(target.detachEvent){target.detachEvent('on'+name,callback);}}
handlers[11](node);return writer.getContent();};}})(tinymce);tinymce.dom={};(function(namespace,expando){var w3cEventModel=!!document.addEventListener;function addEvent(target,name,callback,capture){if(target.addEventListener){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.addEventListener(name,callback,capture||false);}}else if(target.attachEvent){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.attachEvent('on'+name,callback);}}}
function removeEvent(target,name,callback,capture){if(target.removeEventListener){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.removeEventListener(name,callback,capture||false);}}else if(target.detachEvent){if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.detachEvent('on'+name,callback);}}}
function fix(original_event,data){var name,event=data||{};function returnFalse(){return false;}
function returnTrue(){return true;}
for(name in original_event){if(name!=="layerX"&&name!=="layerY"){event[name]=original_event[name];}}

View File

@@ -101,6 +101,6 @@ function updateEditorContent(serializedHTML){
* @param serializedHTML String the html code to be added.
*/
function insertFormVar(fieldName,serializedHTML){
tinyMCE.activeEditor.execCommand('mceInsertContent', false, serializedHTML);
tinyMCEPopup.execCommand('mceInsertContent', false, serializedHTML);
closePluginPopup();
}

View File

@@ -101,6 +101,6 @@ function updateEditorContent(serializedHTML){
* @param serializedHTML String the html code to be added.
*/
function insertFormVar(fieldName,serializedHTML){
tinyMCE.activeEditor.execCommand('mceInsertContent', false, serializedHTML);
tinyMCEPopup.execCommand('mceInsertContent', false, serializedHTML);
closePluginPopup();
}

View File

@@ -4207,7 +4207,7 @@ tinymce.html.Styles = function(settings, schema) {
fi = nodes.length;
while (fi--) {
// ProcessMaker: conditional statemets created in order to assure the compatibility with maborak
if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'){
if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'){
if (!nodes[fi].parent){
nodes.splice(fi, 1);
}
@@ -4217,7 +4217,7 @@ tinymce.html.Styles = function(settings, schema) {
for (i = 0, l = list.length; i < l; i++){
// ProcessMaker: conditional statemets created in order to assure the compatibility with maborak
if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'){
if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'){
list[i](nodes, name, args);
}
}
@@ -4580,20 +4580,29 @@ tinymce.dom = {};
(function(namespace, expando) {
var w3cEventModel = !!document.addEventListener;
function addEvent(target, name, callback, capture) {
if (target.addEventListener) {
//conditional statement in order to maintain compatibility with the maborak processmaker library
if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){
target.addEventListener(name, callback, capture || false);
}
} else if (target.attachEvent) {
//conditional statement in order to maintain compatibility with the maborak processmaker library
if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){
target.attachEvent('on' + name, callback);
}
}
}
function removeEvent(target, name, callback, capture) {
if (target.removeEventListener) {
if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){
target.removeEventListener(name, callback, capture || false);
}
} else if (target.detachEvent) {
if(name!='toStr'&&name!='concat'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){
target.detachEvent('on' + name, callback);
}
}
}
@@ -4783,7 +4792,7 @@ tinymce.dom = {};
names = names.split(' ');
i = names.length;
while (i--) {
name = names[i];
name = names[i];
nativeHandler = defaultNativeHandler;
fakeName = capture = false;
@@ -4865,7 +4874,7 @@ tinymce.dom = {};
// If it already has an native handler then just push the callback
callbackList.push({func: callback, scope: scope});
}
}
}
target = callbackList = 0; // Clean memory for IE
@@ -4890,7 +4899,7 @@ tinymce.dom = {};
names = names.split(' ');
i = names.length;
while (i--) {
name = names[i];
name = names[i];
callbackList = eventMap[name];
// Unbind the event if it exists in the map
@@ -4911,7 +4920,7 @@ tinymce.dom = {};
removeEvent(target, callbackList.fakeName || name, w3cEventModel ? callbackList.nativeHandler : callbackList.proxyHandler, callbackList.capture);
}
}
}
}
} else {
// All events for a specific element
for (name in eventMap) {

View File

@@ -81,6 +81,7 @@ class XmlForm_Field_WYSIWYG_EDITOR extends XmlForm_Field
case 'EMAIL_TEMPLATE':
$editorDefinition.= '
// is necessary the process uid variable in order to load the picker correctly
var actualCaretPositionBookmark;
var formProcessID = document.getElementById("form[pro_uid]").value;
tinyMCE.init({
theme : "advanced",
@@ -109,6 +110,14 @@ class XmlForm_Field_WYSIWYG_EDITOR extends XmlForm_Field
this.save();
}
return true;
},
setup: function (ed) {
ed.onKeyUp.add(function (ed, e) {
actualCaretPositionBookmark = tinyMCE.activeEditor.selection.getBookmark();
});
ed.onClick.add(function (ed, e) {
actualCaretPositionBookmark = tinyMCE.activeEditor.selection.getBookmark();
});
}
});
';
@@ -146,6 +155,7 @@ class XmlForm_Field_WYSIWYG_EDITOR extends XmlForm_Field
$editorDefinition.= '
var formProcessID = document.getElementById("form[PRO_UID]").value;
var formDynaformID = document.getElementById("form[DYN_UID]").value;
var actualCaretPositionBookmark;
tinyMCE.init({
theme : "advanced",
plugins : "advhr,advimage,advlink,advlist,autolink,autoresize,contextmenu,directionality,emotions,example,example_dependency,fullpage,fullscreen,iespell,inlinepopups,insertdatetime,layer,legacyoutput,lists,media,nonbreaking,noneditable,pagebreak,paste,preview,print,save,searchreplace,style,tabfocus,table,template,visualblocks,visualchars,wordcount,xhtmlxtras,style,table,noneditable,pmFieldPicker",
@@ -160,7 +170,7 @@ class XmlForm_Field_WYSIWYG_EDITOR extends XmlForm_Field
popup_css : "/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css",
skin : "o2k7",
skin_variant : "silver",
content_css : "/css/classic.css",
content_css : "/css/'.SYS_SKIN.'.css",
template_external_list_url : "js/template_list.js",
external_link_list_url : "js/link_list.js",
external_image_list_url : "js/image_list.js",
@@ -181,6 +191,14 @@ class XmlForm_Field_WYSIWYG_EDITOR extends XmlForm_Field
this.save();
}
return true;
},
setup: function (ed) {
ed.onKeyUp.add(function (ed, e) {
actualCaretPositionBookmark = tinyMCE.activeEditor.selection.getBookmark();
});
ed.onClick.add(function (ed, e) {
actualCaretPositionBookmark = tinyMCE.activeEditor.selection.getBookmark();
});
}
});

View File

@@ -1,14 +1,25 @@
var setVariablePickerJS = function(){
document.getElementById('_Var_Form_').addEventListener('dblclick', function(){
if (document.getElementById('_Var_Form_').addEventListener) // W3C DOM
document.getElementById('_Var_Form_').addEventListener('dblclick', function(){
if (this.getAttribute('displayOption')=='event'){
e.insertFormVar(this.value.substring(2), this.value.substring(2), 'dyn' );
} else {
insertFormVar(document.getElementById('selectedField').value, this.value);
}
});
/**
});
else if (document.getElementById('selectedField').attachEvent) { // IE DOM
var element = document.getElementById('_Var_Form_');
element.attachEvent("ondblclick", function(){
if (element.displayOption=='event'){
e.insertFormVar(element.value.substring(2), element.value.substring(2), 'dyn' );
} else {
insertFormVar(document.getElementById('selectedField').value, element.value);
}
});
}
/**
* Function getVariableList returns a list with all process variables
*
* @access public

View File

@@ -576,6 +576,7 @@ var dynaformEditor={
}
if ((response.error==0) && (this.htmlEditorLoaded))
{
alert("hi");
// window._editorHTML.doc.body.innerHTML=response.html;
// html_html2();
// html2_html();

View File

@@ -0,0 +1,53 @@
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
?>
<script src="/js/maborak/core/maborak.js"></script>
<!--<script src="/js/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script>-->
<script type="text/javascript">
tinyMCE.baseURL = "/js/tinymce/jscripts/tiny_mce";
tinyMCE.init({
// General options
mode : "textareas",
theme : "advanced",
plugins : "autolink,lists,spellchecker,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
// Theme options
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,spellchecker,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,blockquote,pagebreak,|,insertfile,insertimage",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
// Skin options
skin : "o2k7",
skin_variant : "silver",
// Example content CSS (should be your site CSS)
content_css : "css/example.css",
// Drop lists for link/image/media/template dialogs
template_external_list_url : "js/template_list.js",
external_link_list_url : "js/link_list.js",
external_image_list_url : "js/image_list.js",
media_external_list_url : "js/media_list.js",
// Replace values for the template plugin
template_replace_values : {
username : "Some User",
staffid : "991234"
}
});
</script>
<form method="post" action="somepage">
<textarea name="content" style="width:100%"></textarea>
</form>

View File

@@ -0,0 +1,8 @@
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
?>
<iframe src="http://gustavo.pmos.net/sysworkflow/en/classic/outputdocs/testTiny" width="100%" height="100%"/>