Project

General

Profile

Feature #22416 ยป rtehtmlarea_feature_14057.patch

Administrator Admin, 2010-04-10 22:04

View differences:

typo3/sysext/rtehtmlarea/extensions/Acronym/class.tx_rtehtmlarea_acronym.php (copie de travail)
$whereClause .= t3lib_BEfunc::deleteClause($tableB);
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($fields, $tableAB, $whereClause);
while ($acronymRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$item = array($GLOBALS['LANG']->csConvObj->utf8_encode($acronymRow['term'], $charset), $GLOBALS['LANG']->csConvObj->utf8_encode($acronymRow['acronym'], $charset), $GLOBALS['LANG']->csConvObj->utf8_encode(strtolower($acronymRow['lg_iso_2']), $charset) . ($acronymRow['lg_country_iso_2'] ? ('-' . $acronymRow['lg_country_iso_2']) : ''));
$item = array('term' => $GLOBALS['LANG']->csConvObj->utf8_encode($acronymRow['term'], $charset), 'abbr' => $GLOBALS['LANG']->csConvObj->utf8_encode($acronymRow['acronym'], $charset), 'language' => $GLOBALS['LANG']->csConvObj->utf8_encode(strtolower($acronymRow['lg_iso_2']), $charset) . ($acronymRow['lg_country_iso_2'] ? ('-' . $acronymRow['lg_country_iso_2']) : ''));
if ($acronymRow['type'] == 1) {
$acronymArray[] = $item;
} else if ($acronymRow['type'] == 2) {
......
}
$this->acronymIndex = count($acronymArray);
$this->abbreviationIndex = count($abbrArray);
return 'var acronyms = ' . json_encode($acronymArray) . ';' . 'var abbreviations = ' . json_encode($abbrArray) . ';';
return json_encode(array('abbr' => $abbrArray, 'acronym' => $acronymArray));
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/Acronym/class.tx_rtehtmlarea_acronym.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/Acronym/class.tx_rtehtmlarea_acronym.php']);
}
typo3/sysext/rtehtmlarea/extensions/Language/class.tx_rtehtmlarea_language.php (copie de travail)
$languages = array_flip(array_merge($languages, $this->getLanguages()));
$languagesJSArray = array();
foreach ($languages as $key => $value) {
$languagesJSArray[] = array($key, $value);
$languagesJSArray[] = array('text' => $key, 'value' => $value);
}
$languagesJSArray = 'var options = ' . json_encode($languagesJSArray) . ';';
$languagesJSArray = json_encode(array('options' => $languagesJSArray));
$registerRTEinJavascriptString .= '
RTEarea['.$RTEcounter.'].buttons.'. $button .'.dataUrl = "' . $this->htmlAreaRTE->writeTemporaryFile('', $button . '_' . $this->htmlAreaRTE->contentLanguageUid, 'js', $languagesJSArray) . '";';
}
return $registerRTEinJavascriptString;
}
/**
* Getting all languages into an array
* where the key is the ISO alpha-2 code of the language
......
}
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/Language/class.tx_rtehtmlarea_language.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/Language/class.tx_rtehtmlarea_language.php']);
}
?>
typo3/sysext/rtehtmlarea/extensions/SelectFont/class.tx_rtehtmlarea_selectfont.php (copie de travail)
}
// Setting the JS list of options
$itemsJSArray = array();
foreach ($items as $option) {
$itemsJSArray[] = $option;
foreach ($items as $name => $option) {
$itemsJSArray[] = array('text' => $option[0], 'value' => $option[1]);
}
$itemsJSArray = 'var options = ' . json_encode($itemsJSArray) . ';';
$itemsJSArray = json_encode(array('options' => $itemsJSArray));
// Adding to button JS configuration
if (!is_array( $this->thisConfig['buttons.']) || !is_array($this->thisConfig['buttons.'][$buttonId . '.'])) {
$configureRTEInJavascriptString .= '
......
RTEarea['.$RTEcounter.'].buttons.'. $buttonId . '.dataUrl = \'' . $this->htmlAreaRTE->writeTemporaryFile('', $buttonId . '_'. $this->htmlAreaRTE->contentLanguageUid, 'js', $itemsJSArray) . '\';';
return $configureRTEInJavascriptString;
}
} // end of class
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/SelectFont/class.tx_rtehtmlarea_selectfont.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/extensions/SelectFont/class.tx_rtehtmlarea_selectfont.php']);
}
typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js (copie de travail)
if (typeof(HTMLArea) == 'undefined') {
// Establish HTMLArea name space
Ext.namespace('HTMLArea.util.TYPO3', 'HTMLArea.util.Tips', 'HTMLArea.util.Color', 'Ext.ux.form', 'Ext.ux.menu', 'Ext.ux.Toolbar');
// Establish some constants
/***************************************************
* CONSTANTS
***************************************************/
Ext.apply(HTMLArea, {
// Browser identification
is_gecko : Ext.isGecko || Ext.isOpera || Ext.isWebKit,
......
HTMLArea._appendToLog("[HTMLArea::init]: Editor content skin CSS set to: " + HTMLArea.editedContentCSS);
};
/***************************************************
* SCRIPT LOADING
***************************************************/
/*
* Get a script using asynchronous XMLHttpRequest
*/
HTMLArea.MSXML_XMLHTTP_PROGIDS = new Array('Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP');
HTMLArea.XMLHTTPResponseHandler = function (request, url) {
return (function() {
if (request.readyState == 4) {
if (request.status == 200) {
try {
eval(request.responseText);
} catch (e) {
HTMLArea._appendToLog('ERROR [HTMLArea::getScript]: Unable to get script ' + url + ': ' + e);
}
} else {
HTMLArea._appendToLog('ERROR [HTMLArea::getScript]: Unable to get ' + url + ' . Server reported ' + request.status);
}
}
});
};
HTMLArea._getScript = function (i,asynchronous,url) {
if (typeof(asynchronous) == 'undefined') {
var asynchronous = true;
}
if (window.XMLHttpRequest) {
var request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
var success = false;
for (var k = 0; k < HTMLArea.MSXML_XMLHTTP_PROGIDS.length && !success; k++) {
try {
var request = new ActiveXObject(HTMLArea.MSXML_XMLHTTP_PROGIDS[k]);
success = true;
} catch (e) { }
}
if (!success) {
return false;
}
}
if (request) {
HTMLArea._appendToLog('[HTMLArea::getScript]: Requesting script ' + url);
request.open('GET', url, asynchronous);
if (asynchronous) {
request.onreadystatechange = HTMLArea.XMLHTTPResponseHandler(request, url);
}
if (window.XMLHttpRequest) {
request.send(null);
} else if (window.ActiveXObject) {
request.send();
}
if (!asynchronous) {
return (request.status == 200 ? request.responseText : '');
}
return true;
} else {
return false;
}
};
/***************************************************
* EDITOR CONFIGURATION
***************************************************/
HTMLArea.Config = function (editorId) {
......
submitValue: false,
forceSelection: true,
mode: 'local',
storeRoot: 'options',
storeFields: [ { name: 'text'}, { name: 'value'}],
valueField: 'value',
displayField: 'text',
......
// Set some additional properties
switch (config.xtype) {
case 'htmlareacombo':
// Create combo store
config.store = new Ext.data.ArrayStore({
autoDestroy: true,
fields: config.storeFields,
data: config.options
});
if (config.options) {
// Create combo array store
config.store = new Ext.data.ArrayStore({
autoDestroy: true,
fields: config.storeFields,
data: config.options
});
} else if (config.storeUrl) {
config.mode = 'remote';
// Create combo json store
config.store = new Ext.data.JsonStore({
autoDestroy: true,
autoLoad: true,
root: config.storeRoot,
fields: config.storeFields,
url: config.storeUrl
});
}
config.hideLabel = Ext.isEmpty(config.fieldLabel);
config.helpTitle = config.tooltip;
break;
......
}
});
Ext.reg('colorpalettefield', Ext.ux.form.ColorPaletteField);
/*
* Use XML HTTPRequest to post some data back to the server and do something
* with the response (asyncronously or syncronously); this is used by such things as the spellchecker update personal dict function
*/
HTMLArea._postback = function(url, data, handler, addParams, charset, asynchronous) {
if (typeof(charset) == "undefined") var charset = "utf-8";
if (typeof(asynchronous) == "undefined") {
var asynchronous = true;
}
var req = null;
if (window.XMLHttpRequest) req = new XMLHttpRequest();
else if (window.ActiveXObject) {
var success = false;
for (var k = 0; k < HTMLArea.MSXML_XMLHTTP_PROGIDS.length && !success; k++) {
try {
req = new ActiveXObject(HTMLArea.MSXML_XMLHTTP_PROGIDS[k]);
success = true;
} catch (e) { }
}
}
if(req) {
var content = '';
for (var i in data) {
content += (content.length ? '&' : '') + i + '=' + encodeURIComponent(data[i]);
}
content += (content.length ? '&' : '') + 'charset=' + charset;
if (typeof(addParams) != "undefined") content += addParams;
function callBack() {
if (req.readyState == 4) {
if (req.status == 200) {
if (typeof(handler) == "function") handler(req.responseText, req);
HTMLArea._appendToLog("[HTMLArea::_postback]: Server response: " + req.responseText);
} else {
HTMLArea._appendToLog("ERROR [HTMLArea::_postback]: Unable to post " + url + " . Server reported " + req.statusText);
}
}
}
if (asynchronous) {
req.onreadystatechange = callBack;
}
function sendRequest() {
HTMLArea._appendToLog("[HTMLArea::_postback]: Request: " + content);
req.send(content);
}
req.open('POST', url, asynchronous);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
if (!asynchronous) {
HTMLArea.pendingSynchronousXMLHttpRequest = true;
sendRequest();
if (req.status == 200) {
if (typeof(handler) == "function") {
handler(req.responseText, req);
}
HTMLArea._appendToLog("[HTMLArea::_postback]: Server response: " + req.responseText);
} else {
HTMLArea._appendToLog("ERROR [HTMLArea::_postback]: Unable to post " + url + " . Server reported " + req.statusText);
}
HTMLArea.pendingSynchronousXMLHttpRequest = false;
} else {
window.setTimeout(sendRequest, 500);
}
}
};
/**
* Internet Explorer returns an item having the _name_ equal to the given id, even if it's not having any id.
* This way it can return a different form field even if it's not a textarea. This works around the problem by
......
constructor : function(editor, pluginName) {
this.editor = editor;
this.editorNumber = editor.editorId;
this.editorId = editor.editorId;
this.editorConfiguration = editor.config;
this.name = pluginName;
try {
......
*/
onUpdateToolbar: Ext.emptyFn,
/**
* Deprecated as of TYPO3 4.4
***********************************************
* THIS FUNCTION IS DEPRECATED AS OF TYPO3 4.4 *
***********************************************
* Register the key handler to the editor keyMap in onGenerate function
* The keyPress event handler
* This function may be defined by the plugin subclass.
......
onGenerate: Ext.emptyFn,
/**
* Make function reference in order to avoid memory leakage in IE
***********************************************
* THIS FUNCTION IS DEPRECATED AS OF TYPO3 4.4 *
***********************************************
*
* @param string functionName: the name of the plugin function to be invoked
*
* @return function function definition invoking the specified function of the plugin
*/
makeFunctionReference : function (functionName) {
makeFunctionReference: function (functionName) {
var self = this;
return (function(arg1, arg2, arg3) {
return (self[functionName](arg1, arg2, arg3));});
......
*
* @return string the localization of the label
*/
localize : function (label) {
localize: function (label) {
return this.I18N[label] || HTMLArea.I18N.dialogs[label] || HTMLArea.I18N.tooltips[label] || HTMLArea.I18N.msg[label];
},
/**
* Load a Javascript file synchronously
* Load a Javascript file asynchronously
*
* @param string url: url of the file to load
* @param function callBack: the callBack function
*
* @return boolean true on success
* @return boolean true on success of the request submission
*/
getJavascriptFile : function (url, noEval) {
var script = HTMLArea._getScript(0, false, url);
if (script) {
if (noEval) {
return script;
} else {
try {
eval(script);
return true;
} catch(e) {
this.appendToLog("getJavascriptFile", "Error evaluating contents of Javascript file: " + url);
return false;
}
}
} else {
return false;
}
getJavascriptFile: function (url, callback) {
var success = false;
this.appendToLog('getJavascriptFile', 'Requesting script ' + url);
Ext.Ajax.request({
method: 'GET',
url: url,
callback: callback,
success: function (response) {
success = true;
},
failure: function (response) {
this.appendToLog('getJavascriptFile', 'Unable to get ' + url + ' . Server reported ' + response.status);
},
scope: this
});
return success;
},
/**
* Post data to the server
*
* @param string url: url to post data to
* @param object data: data to be posted
* @param function handler: function that will handle the response returned by the server
* @param boolean asynchronous: flag indicating if the request should processed asynchronously or not
* @param function callback: function that will handle the response returned by the server
*
* @return boolean true on success
*/
postData : function (url, data, handler, asynchronous) {
if (typeof(asynchronous) == "undefined") {
var asynchronous = true;
}
HTMLArea._postback(url, data, handler, this.editorConfiguration.RTEtsConfigParams, (this.editorConfiguration.typo3ContentCharset ? this.editorConfiguration.typo3ContentCharset : "utf-8"), asynchronous);
postData: function (url, data, callback) {
var success = false;
data.charset = this.editorConfiguration.typo3ContentCharset ? this.editorConfiguration.typo3ContentCharset : 'utf-8';
var params = '';
Ext.iterate(data, function (parameter, value) {
params += (params.length ? '&' : '') + parameter + '=' + encodeURIComponent(value);
});
params += this.editorConfiguration.RTEtsConfigParams;
this.appendToLog('postData', 'Posting to ' + url + '. Data: ' + params);
Ext.Ajax.request({
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
url: url,
params: params,
callback: Ext.isFunction(callback) ? callback: function (options, success, response) {
if (success) {
this.appendToLog('postData', 'Post request to ' + url + ' successful. Server response: ' + response.responseText);
} else {
this.appendToLog('postData', 'Post request to ' + url + ' failed. Server reported ' + response.status);
}
},
success: function (response) {
success = true;
},
failure: function (response) {
this.appendToLog('postData', 'Unable to post ' + url + ' . Server reported ' + response.status);
},
scope: this
});
return success;
},
/**
***********************************************
* THIS FUNCTION IS DEPRECATED AS OF TYPO3 4.4 *
typo3/sysext/rtehtmlarea/htmlarea/plugins/Acronym/acronym.js (copie de travail)
* TYPO3 SVN ID: $Id$
*/
Acronym = HTMLArea.Plugin.extend({
constructor : function(editor, pluginName) {
constructor: function(editor, pluginName) {
this.base(editor, pluginName);
},
/*
* This function gets called by the class constructor
*/
configurePlugin : function(editor) {
configurePlugin: function(editor) {
this.pageTSConfiguration = this.editorConfiguration.buttons.acronym;
this.acronymUrl = this.pageTSConfiguration.acronymUrl;
this.data = this.getJavascriptFile(this.acronymUrl, 'noEval');
if (this.data) {
eval(this.data);
};
this.data = {
acronym: acronyms,
abbr: abbreviations
};
/*
* Registering plugin "About" information
*/
......
itemId: 'termSelector',
helpTitle: this.localize('Select_a_term'),
tpl: '<tpl for="."><div ext:qtip="{abbr}" style="text-align:left;font-size:11px;" class="x-combo-list-item">{term}</div></tpl>',
store: new Ext.data.ArrayStore({
store: new Ext.data.JsonStore({
autoDestroy: true,
autoLoad: true,
root: type,
fields: [ { name: 'term'}, { name: 'abbr'}, { name: 'language'}],
data: this.data[type]
url: this.pageTSConfiguration.acronymUrl
}),
width: 350,
listeners: {
......
fieldLabel: this.localize('Abridged_term'),
itemId: 'abbrSelector',
helpTitle: this.localize('Select_an_' + type),
store: new Ext.data.ArrayStore({
store: new Ext.data.JsonStore({
autoDestroy: true,
autoLoad: true,
root: type,
fields: [ { name: 'term'}, { name: 'abbr'}, { name: 'language'}],
data: this.data[type]
url: this.pageTSConfiguration.acronymUrl
}),
width: 100,
listeners: {
......
}, this.configDefaults['combo']));
var languageObject = this.getPluginInstance('Language');
if (this.getButton('Language')) {
var languageStore = new Ext.data.ArrayStore({
var selectedLanguage = !Ext.isEmpty(element) ? languageObject.getLanguageAttribute(element) : 'none';
function initLanguageStore (store) {
if (selectedLanguage !== 'none') {
store.removeAt(0);
store.insert(0, new store.recordType({
text: languageObject.localize('Remove language mark'),
value: 'none'
}));
}
this.getButton('Language').setValue('none');
}
var languageStore = new Ext.data.JsonStore({
autoDestroy: true,
autoLoad: true,
root: 'options',
fields: [ { name: 'text'}, { name: 'value'} ],
data: this.getDropDownConfiguration('Language').options
url: this.getDropDownConfiguration('Language').dataUrl,
listeners: {
load: {
fn: initLanguageStore,
scope: this
}
}
});
var selectedLanguage = !Ext.isEmpty(element) ? languageObject.getLanguageAttribute(element) : 'none';
if (selectedLanguage !== 'none') {
languageStore.removeAt(0);
languageStore.insert(0, new languageStore.recordType({
text: languageObject.localize('Remove language mark'),
value: 'none'
}));
}
itemsConfig.push(Ext.apply({
xtype: 'combo',
fieldLabel: this.localize('Language'),
......
tpl: '<tpl for="."><div ext:qtip="{value}" style="text-align:left;font-size:11px;" class="x-combo-list-item">{text}</div></tpl>',
store: languageStore,
width: 200,
value: selectedLanguage
value: selectedLanguage,
listeners: {
render: {
fn: function (combo) {
// Load the language dropdown
combo.getStore().load({
callback: function () { combo.setValue(selectedLanguage); }
});
}
}
}
}, this.configDefaults['combo']));
}
return {
typo3/sysext/rtehtmlarea/htmlarea/plugins/BlockStyle/block-style.js (copie de travail)
* This function gets called on plugin generation, on toolbar update and on change mode
* Re-initiate the parsing of the style sheets, if not yet completed, and refresh our toolbar components
*/
generate : function(editor, dropDownId) {
if (this.cssLoaded && this.getEditorMode() === "wysiwyg" && this.editor.isEditable()) {
generate: function(editor, dropDownId) {
if (this.cssLoaded && this.getEditorMode() === 'wysiwyg' && this.editor.isEditable()) {
this.updateValue(dropDownId);
} else {
if (this.cssTimeout) {
window.clearTimeout(this.cssTimeout);
this.cssTimeout = null;
}
if (this.classesUrl && (typeof(HTMLArea.classesLabels) === "undefined")) {
this.getJavascriptFile(this.classesUrl);
if (this.classesUrl && (typeof(HTMLArea.classesLabels) === 'undefined')) {
this.getJavascriptFile(this.classesUrl, function (options, success, response) {
if (success) {
try {
if (typeof(HTMLArea.classesLabels) === 'undefined') {
eval(response.responseText);
this.appendToLog('generate', 'Javascript file successfully evaluated: ' + this.classesUrl);
}
} catch(e) {
this.appendToLog('generate', 'Error evaluating contents of Javascript file: ' + this.classesUrl);
}
}
this.buildCssArray(this.editor, dropDownId);
});
} else {
this.buildCssArray(this.editor, dropDownId);
}
this.buildCssArray(this.editor, dropDownId);
}
},
typo3/sysext/rtehtmlarea/htmlarea/plugins/CopyPaste/copy-paste.js (copie de travail)
if (InstallTrigger.enabled()) {
var mozillaXpi = new Object();
mozillaXpi["AllowClipboard Helper"] = this.buttonsConfiguration.paste.mozillaAllowClipboardURL;
var mozillaInstallCallback = this.makeFunctionReference("mozillaInstallCallback");
InstallTrigger.install(mozillaXpi, mozillaInstallCallback);
InstallTrigger.install(mozillaXpi, this.mozillaInstallCallback);
} else {
alert(this.localize("Mozilla-Org-Install-Not-Enabled"));
this.appendToLog("mozillaClipboardAccessException", "Mozilla install was not enabled.");
typo3/sysext/rtehtmlarea/htmlarea/plugins/Language/language.js (copie de travail)
*/
var buttonId = 'Language';
if (this.buttonsConfiguration[buttonId.toLowerCase()] && this.buttonsConfiguration[buttonId.toLowerCase()].dataUrl) {
// Load the options var
var optionsData = this.getJavascriptFile(this.buttonsConfiguration[buttonId.toLowerCase()].dataUrl, "noEval");
if (optionsData) {
eval(optionsData);
var dropDownConfiguration = {
id : buttonId,
tooltip : this.localize(buttonId + '-Tooltip'),
storeUrl : this.buttonsConfiguration[buttonId.toLowerCase()].dataUrl,
action : 'onChange'
};
if (this.buttonsConfiguration.language) {
dropDownConfiguration.width = this.buttonsConfiguration.language.width ? parseInt(this.buttonsConfiguration.language.width, 10) : 200;
if (this.buttonsConfiguration.language.listWidth) {
dropDownConfiguration.listWidth = parseInt(this.buttonsConfiguration.language.listWidth, 10);
}
if (this.buttonsConfiguration.language.maxHeight) {
dropDownConfiguration.maxHeight = parseInt(this.buttonsConfiguration.language.maxHeight, 10);
}
}
this.registerDropDown(dropDownConfiguration);
}
var dropDownConfiguration = {
id : buttonId,
tooltip : this.localize(buttonId + '-Tooltip'),
options : options,
action : 'onChange'
};
if (this.buttonsConfiguration.language) {
dropDownConfiguration.width = this.buttonsConfiguration.language.width ? parseInt(this.buttonsConfiguration.language.width, 10) : 200;
if (this.buttonsConfiguration.language.listWidth) {
dropDownConfiguration.listWidth = parseInt(this.buttonsConfiguration.language.listWidth, 10);
}
if (this.buttonsConfiguration.language.maxHeight) {
dropDownConfiguration.maxHeight = parseInt(this.buttonsConfiguration.language.maxHeight, 10);
}
}
this.registerDropDown(dropDownConfiguration);
return true;
},
/*
......
/*
* This function gets called when the editor is generated
*/
onGenerate : function () {
onGenerate: function () {
// Add rules to the stylesheet for language mark highlighting
// Model: body.htmlarea-show-language-marks *[lang=en]:before { content: "en: "; }
// Works in IE8, but not in earlier versions of IE
......
return true;
});
}
// Load the language dropdown
this.getButton('Language').getStore().load({
callback: function () { this.getButton('Language').setValue('none'); },
scope: this
});
},
/*
* This function gets called when a button was pressed.
*
typo3/sysext/rtehtmlarea/htmlarea/plugins/SelectFont/select-font.js (copie de travail)
* TYPO3 SVN ID: $Id$
*/
SelectFont = HTMLArea.Plugin.extend({
constructor : function(editor, pluginName) {
constructor: function(editor, pluginName) {
this.base(editor, pluginName);
},
/*
* This function gets called by the class constructor
*/
configurePlugin : function (editor) {
configurePlugin: function (editor) {
this.buttonsConfiguration = this.editorConfiguration.buttons;
this.disablePCexamples = this.editorConfiguration.disablePCexamples;
// Font formating will use the style attribute
if (this.getPluginInstance("TextStyle")) {
this.getPluginInstance("TextStyle").addAllowedAttribute("style");
......
*/
Ext.each(this.dropDownList, function (dropDown) {
var buttonId = dropDown[0];
// Load the options var
var options = [];
if (this.buttonsConfiguration[dropDown[2]] && this.buttonsConfiguration[dropDown[2]].dataUrl) {
var optionsData = this.getJavascriptFile(this.buttonsConfiguration[dropDown[2]].dataUrl, "noEval");
if (optionsData) {
eval(optionsData);
}
}
var dropDownConfiguration = {
id: buttonId,
tooltip: this.localize(buttonId.toLowerCase()),
options: options,
action: "onChange",
storeUrl: this.buttonsConfiguration[dropDown[2]].dataUrl,
action: 'onChange',
tpl: this.disablePCexamples ? '' : '<tpl for="."><div ext:qtip="{value}" style="' + dropDown[3] + '" class="x-combo-list-item">{text}</div></tpl>'
};
if (this.buttonsConfiguration[dropDown[2]]) {
......
}, this);
return true;
},
/*
* The list of buttons added by this plugin
*/
dropDownList : [
dropDownList: [
['FontName', null, 'fontstyle', 'font-family:{value};text-align:left;font-size:11px;'],
['FontSize', null, 'fontsize', 'text-align:left;font-size:{value};']
],
/*
* Conversion object: button name to corresponding style property name
*/
styleProperty : {
styleProperty: {
FontName : "fontFamily",
FontSize : "fontSize"
},
/*
* Conversion object: button name to corresponding css property name
*/
cssProperty : {
cssProperty: {
FontName : "font-family",
FontSize : "font-size"
},
/*
* This funcion is invoked by the editor when it is being generated
*/
onGenerate: function () {
// Load the dropdowns
Ext.each(this.dropDownList, function (dropDown) {
this.getButton(dropDown[0]).getStore().load({
callback: function () { this.getButton(dropDown[0]).setValue('none'); },
scope: this
})
}, this);
},
/*
* This function gets called when some font style or font size was selected from the dropdown lists
*/
onChange: function (editor, combo, record, index) {
......
*
* @return void
*/
setStyle : function (element, buttonId, value) {
setStyle: function (element, buttonId, value) {
element.style[this.styleProperty[buttonId]] = (value && value !== 'none') ? value : '';
// In IE, we need to remove the empty attribute in order to unset it
if (HTMLArea.is_ie && (!value || value == 'none')) {
......
}
}
},
/*
* This function gets called when the toolbar is updated
*/
......
var value = parentElement.style[this.styleProperty[select.itemId]];
if (!value) {
if (HTMLArea.is_gecko) {
if (editor._doc.defaultView.getComputedStyle(parentElement, null)) {
value = editor._doc.defaultView.getComputedStyle(parentElement, null).getPropertyValue(this.cssProperty[select.itemId]);
if (editor.document.defaultView.getComputedStyle(parentElement, null)) {
value = editor.document.defaultView.getComputedStyle(parentElement, null).getPropertyValue(this.cssProperty[select.itemId]);
}
} else {
value = parentElement.currentStyle[this.styleProperty[select.itemId]];
......
}
if (index != -1) {
select.setValue(store.getAt(index).get('value'));
} else {
} else if (store.getCount()) {
select.setValue('none');
}
select.setDisabled(!endPointsInSameBlock || (selectionEmpty && /^body$/i.test(parentElement.nodeName)));
typo3/sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-checker.js (copie de travail)
data['to_r_list[' + index + '][0]'] = replacement[0];
data['to_r_list[' + index + '][1]'] = replacement[1];
});
HTMLArea._postback(this.pageTSconfiguration.path, data);
this.postData(this.pageTSconfiguration.path, data);
}
this.close();
return false;
typo3/sysext/rtehtmlarea/htmlarea/plugins/TableOperations/table-operations.js (copie de travail)
*
* @return void
*/
reStyleTable : function (table) {
reStyleTable: function (table) {
if (table) {
if (this.classesUrl && (typeof(HTMLArea.classesAlternating) === "undefined" || typeof(HTMLArea.classesCounting) === "undefined")) {
this.getJavascriptFile(this.classesUrl);
}
var classNames = table.className.trim().split(" ");
for (var i = classNames.length; --i >= 0;) {
var classConfiguration = HTMLArea.classesAlternating[classNames[i]];
if (classConfiguration && classConfiguration.rows) {
if (classConfiguration.rows.oddClass && classConfiguration.rows.evenClass) {
this.alternateRows(table, classConfiguration);
if (this.classesUrl && (typeof(HTMLArea.classesAlternating) === 'undefined' || typeof(HTMLArea.classesCounting) === 'undefined')) {
this.getJavascriptFile(this.classesUrl, function (options, success, response) {
if (success) {
try {
if (typeof(HTMLArea.classesAlternating) === 'undefined' || typeof(HTMLArea.classesCounting) === 'undefined') {
eval(response.responseText);
this.appendToLog('reStyleTable', 'Javascript file successfully evaluated: ' + this.classesUrl);
}
this.reStyleTable(table);
} catch(e) {
this.appendToLog('reStyleTable', 'Error evaluating contents of Javascript file: ' + this.classesUrl);
}
}
}
if (classConfiguration && classConfiguration.columns) {
if (classConfiguration.columns.oddClass && classConfiguration.columns.evenClass) {
this.alternateColumns(table, classConfiguration);
});
} else {
var classNames = table.className.trim().split(' ');
for (var i = classNames.length; --i >= 0;) {
var classConfiguration = HTMLArea.classesAlternating[classNames[i]];
if (classConfiguration && classConfiguration.rows) {
if (classConfiguration.rows.oddClass && classConfiguration.rows.evenClass) {
this.alternateRows(table, classConfiguration);
}
}
}
classConfiguration = HTMLArea.classesCounting[classNames[i]];
if (classConfiguration && classConfiguration.rows) {
if (classConfiguration.rows.rowClass) {
this.countRows(table, classConfiguration);
if (classConfiguration && classConfiguration.columns) {
if (classConfiguration.columns.oddClass && classConfiguration.columns.evenClass) {
this.alternateColumns(table, classConfiguration);
}
}
}
if (classConfiguration && classConfiguration.columns) {
if (classConfiguration.columns.columnClass) {
this.countColumns(table, classConfiguration);
classConfiguration = HTMLArea.classesCounting[classNames[i]];
if (classConfiguration && classConfiguration.rows) {
if (classConfiguration.rows.rowClass) {
this.countRows(table, classConfiguration);
}
}
if (classConfiguration && classConfiguration.columns) {
if (classConfiguration.columns.columnClass) {
this.countColumns(table, classConfiguration);
}
}
}
}
}
......
*
* @return void
*/
removeAlternatingClasses : function (table, removeClass) {
removeAlternatingClasses: function (table, removeClass) {
if (table) {
if (this.classesUrl && typeof(HTMLArea.classesAlternating) === "undefined") {
this.getJavascriptFile(this.classesUrl);
}
var classConfiguration = HTMLArea.classesAlternating[removeClass];
if (classConfiguration) {
if (classConfiguration.rows && classConfiguration.rows.oddClass && classConfiguration.rows.evenClass) {
this.alternateRows(table, classConfiguration, true);
if (this.classesUrl && typeof(HTMLArea.classesAlternating) === 'undefined') {
this.getJavascriptFile(this.classesUrl, function (options, success, response) {
if (success) {
try {
if (typeof(HTMLArea.classesAlternating) === 'undefined') {
eval(response.responseText);
this.appendToLog('removeAlternatingClasses', 'Javascript file successfully evaluated: ' + this.classesUrl);
}
this.removeAlternatingClasses(table, removeClass);
} catch(e) {
this.appendToLog('removeAlternatingClasses', 'Error evaluating contents of Javascript file: ' + this.classesUrl);
}
}
});
} else {
var classConfiguration = HTMLArea.classesAlternating[removeClass];
if (classConfiguration) {
if (classConfiguration.rows && classConfiguration.rows.oddClass && classConfiguration.rows.evenClass) {
this.alternateRows(table, classConfiguration, true);
}
if (classConfiguration.columns && classConfiguration.columns.oddClass && classConfiguration.columns.evenClass) {
this.alternateColumns(table, classConfiguration, true);
}
}
if (classConfiguration.columns && classConfiguration.columns.oddClass && classConfiguration.columns.evenClass) {
this.alternateColumns(table, classConfiguration, true);
}
}
}
},
......
}
}
}
},
},
/*
* Removes from rows/cells the counting classes of an counting style scheme
*
......
*
* @return void
*/
removeCountingClasses : function (table, removeClass) {
removeCountingClasses: function (table, removeClass) {
if (table) {
if (this.classesUrl && typeof(HTMLArea.classesCounting) === "undefined") {
this.getJavascriptFile(this.classesUrl);
}
var classConfiguration = HTMLArea.classesCounting[removeClass];
if (classConfiguration) {
if (classConfiguration.rows && classConfiguration.rows.rowClass) {
this.countRows(table, classConfiguration, true);
if (this.classesUrl && typeof(HTMLArea.classesCounting) === 'undefined') {
this.getJavascriptFile(this.classesUrl, function (options, success, response) {
if (success) {
try {
if (typeof(HTMLArea.classesCounting) === 'undefined') {
eval(response.responseText);
this.appendToLog('removeCountingClasses', 'Javascript file successfully evaluated: ' + this.classesUrl);
}
this.removeCountingClasses(table, removeClass);
} catch(e) {
this.appendToLog('removeCountingClasses', 'Error evaluating contents of Javascript file: ' + this.classesUrl);
}
}
});
} else {
var classConfiguration = HTMLArea.classesCounting[removeClass];
if (classConfiguration) {
if (classConfiguration.rows && classConfiguration.rows.rowClass) {
this.countRows(table, classConfiguration, true);
}
if (classConfiguration.columns && classConfiguration.columns.columnClass) {
this.countColumns(table, classConfiguration, true);
}
}
if (classConfiguration.columns && classConfiguration.columns.columnClass) {
this.countColumns(table, classConfiguration, true);
}
}
}
},
......
var itemsConfig = [];
var languageObject = this.getPluginInstance('Language');
if (this.removedProperties.indexOf('language') == -1 && this.getButton('Language')) {
var languageStore = new Ext.data.ArrayStore({
var selectedLanguage = !Ext.isEmpty(element) ? languageObject.getLanguageAttribute(element) : 'none';
function initLanguageStore (store) {
if (selectedLanguage !== 'none') {
store.removeAt(0);
store.insert(0, new store.recordType({
text: languageObject.localize('Remove language mark'),
value: 'none'
}));
}
}
var languageStore = new Ext.data.JsonStore({
autoDestroy: true,
autoLoad: true,
root: 'options',
fields: [ { name: 'text'}, { name: 'value'} ],
data: this.getDropDownConfiguration('Language').options
url: this.getDropDownConfiguration('Language').dataUrl,
listeners: {
load: initLanguageStore
}
});
var selectedLanguage = !Ext.isEmpty(element) ? languageObject.getLanguageAttribute(element) : 'none';
if (selectedLanguage !== 'none') {
languageStore.removeAt(0);
languageStore.insert(0, new languageStore.recordType({
text: languageObject.localize('Remove language mark'),
value: 'none'
}));
}
itemsConfig.push(Ext.apply({
xtype: 'combo',
fieldLabel: this.localize('Language'),
typo3/sysext/rtehtmlarea/htmlarea/plugins/TextStyle/text-style.js (copie de travail)
* This function gets called on plugin generation, on toolbar update and on change mode
* Re-initiate the parsing of the style sheets, if not yet completed, and refresh our toolbar components
*/
generate : function(editor, dropDownId) {
generate: function (editor, dropDownId) {
if (this.cssLoaded) {
this.updateToolbar(dropDownId);
} else {
......
window.clearTimeout(this.cssTimeout);
this.cssTimeout = null;
}
if (this.classesUrl && (typeof(HTMLArea.classesLabels) === "undefined")) {
this.getJavascriptFile(this.classesUrl);
if (this.classesUrl && (typeof(HTMLArea.classesLabels) === 'undefined')) {
this.getJavascriptFile(this.classesUrl, function (options, success, response) {
if (success) {
try {
if (typeof(HTMLArea.classesLabels) === 'undefined') {
eval(response.responseText);
this.appendToLog('generate', 'Javascript file successfully evaluated: ' + this.classesUrl);
}
} catch(e) {
this.appendToLog('generate', 'Error evaluating contents of Javascript file: ' + this.classesUrl);
}
}
this.buildCssArray(this.editor, dropDownId);
});
} else {
this.buildCssArray(this.editor, dropDownId);
}
this.buildCssArray(editor, dropDownId);
}
},
typo3/sysext/rtehtmlarea/htmlarea/plugins/TYPO3HtmlParser/typo3html-parser.js (copie de travail)
editor.cleanAppleStyleSpans(editor._doc.body);
}
var bookmark = editor.getBookmark(editor._createRange(editor._getSelection()));
var url = this.parseHtmlModulePath;
var content = {
editorNo : this.editorNumber,
editorNo : this.editorId,
content : editor.getInnerHTML()
};
// Server-based synchronous pasted content cleaning
this.postData( this.parseHtmlModulePath,
// Server-based cleaning of pasted content
this.postData( url,
content,
function(response) {
editor.setHTML(response);
editor.selectRange(editor.moveToBookmark(bookmark));
},
false
function (options, success, response) {
if (success) {
editor.setHTML(response.responseText);
editor.selectRange(editor.moveToBookmark(bookmark));
this.appendToLog('clean', 'Post request to ' + url + ' successful. Server response: ' + response.responseText);
} else {
this.appendToLog('clean', 'Post request to ' + url + ' failed. Server reported ' + response.status);
}
}
);
},
/*
typo3/sysext/rtehtmlarea/htmlarea/plugins/TYPO3Link/typo3link.js (copie de travail)
['UnLink', 'a', false, false, 'unlink']
],
/*
* This function is invoked when the editor is being generated
*/
onGenerate: function () {
// Download the definition of special anchor classes if not yet done
if (this.classesAnchorUrl && (typeof(HTMLArea.classesAnchorSetup) === 'undefined')) {
this.getJavascriptFile(this.classesAnchorUrl, function (options, success, response) {
if (success) {
try {
if (typeof(HTMLArea.classesAnchorSetup) === 'undefined') {
eval(response.responseText);
this.appendToLog('ongenerate', 'Javascript file successfully evaluated: ' + this.classesAnchorUrl);
}
} catch(e) {
this.appendToLog('ongenerate', 'Error evaluating contents of Javascript file: ' + this.classesAnchorUrl);
}
}
});
}
},
/*
* This function gets called when the button was pressed
*
* @param object editor: the editor instance
......
// Could be a button or its hotkey
var buttonId = this.translateHotKey(id);
buttonId = buttonId ? buttonId : id;
// Download the definition of special anchor classes if not yet done
if (this.classesAnchorUrl && (typeof(HTMLArea.classesAnchorSetup) === "undefined")) {
this.getJavascriptFile(this.classesAnchorUrl);
}
if (buttonId === "UnLink") {
this.unLink();
return false;
}
var additionalParameter;
var node = this.editor.getParentElement();
var el = HTMLArea.getElementObject(node, "a");
if (el != null && /^a$/i.test(el.nodeName)) node = el;
if (node != null && /^a$/i.test(node.nodeName)) {
additionalParameter = "&curUrl[href]=" + encodeURIComponent(node.getAttribute("href"));
if (node.target) additionalParameter += "&curUrl[target]=" + encodeURIComponent(node.target);
if (node.className) additionalParameter += "&curUrl[class]=" + encodeURIComponent(node.className);
if (node.title) additionalParameter += "&curUrl[title]=" + encodeURIComponent(node.title);
if (this.pageTSConfiguration && this.pageTSConfiguration.additionalAttributes) {
var additionalAttributes = this.pageTSConfiguration.additionalAttributes.split(",");
for (var i = additionalAttributes.length; --i >= 0;) {
if (node.hasAttribute(additionalAttributes[i])) {
additionalParameter += "&curUrl[" + additionalAttributes[i] + "]=" + encodeURIComponent(node.getAttribute(additionalAttributes[i]));
if (this.classesAnchorUrl && (typeof(HTMLArea.classesAnchorSetup) === 'undefined')) {
this.getJavascriptFile(this.classesAnchorUrl, function (options, success, response) {
if (success) {
try {
if (typeof(HTMLArea.classesAnchorSetup) === 'undefined') {
eval(response.responseText);
this.appendToLog('onButtonPress', 'Javascript file successfully evaluated: ' + this.classesAnchorUrl);
}
this.onButtonPress(editor, id, target);
} catch(e) {
this.appendToLog('onButtonPress', 'Error evaluating contents of Javascript file: ' + this.classesAnchorUrl);
}
}
});
} else {
if (buttonId === "UnLink") {
this.unLink();
return false;
}
} else if (this.editor.hasSelectedText()) {
var text = this.editor.getSelectedHTML();
if (text && text != null) {
var offset = text.toLowerCase().indexOf("<a");
if (offset!=-1) {
var ATagContent = text.substring(offset+2);
offset = ATagContent.toUpperCase().indexOf(">");
ATagContent = ATagContent.substring(0,offset);
additionalParameter = "&curUrl[all]=" + encodeURIComponent(ATagContent);
var additionalParameter;
var node = this.editor.getParentElement();
var el = HTMLArea.getElementObject(node, "a");
if (el != null && /^a$/i.test(el.nodeName)) node = el;
if (node != null && /^a$/i.test(node.nodeName)) {
additionalParameter = "&curUrl[href]=" + encodeURIComponent(node.getAttribute("href"));
if (node.target) additionalParameter += "&curUrl[target]=" + encodeURIComponent(node.target);
if (node.className) additionalParameter += "&curUrl[class]=" + encodeURIComponent(node.className);
if (node.title) additionalParameter += "&curUrl[title]=" + encodeURIComponent(node.title);
if (this.pageTSConfiguration && this.pageTSConfiguration.additionalAttributes) {
var additionalAttributes = this.pageTSConfiguration.additionalAttributes.split(",");
for (var i = additionalAttributes.length; --i >= 0;) {
if (node.hasAttribute(additionalAttributes[i])) {
additionalParameter += "&curUrl[" + additionalAttributes[i] + "]=" + encodeURIComponent(node.getAttribute(additionalAttributes[i]));
}
}
}
} else if (this.editor.hasSelectedText()) {
var text = this.editor.getSelectedHTML();
if (text && text != null) {
var offset = text.toLowerCase().indexOf("<a");
if (offset!=-1) {
var ATagContent = text.substring(offset+2);
offset = ATagContent.toUpperCase().indexOf(">");
ATagContent = ATagContent.substring(0,offset);
additionalParameter = "&curUrl[all]=" + encodeURIComponent(ATagContent);
}
}
}
this.openContainerWindow(
buttonId,
buttonId.toLowerCase(),
this.getWindowDimensions(
{
width: 550,
height: 350
},
buttonId
),
this.makeUrlFromModulePath(this.modulePath, additionalParameter)
);
}
this.openContainerWindow(
buttonId,
buttonId.toLowerCase(),
this.getWindowDimensions(
{
width: 550,
height: 350
},
buttonId
),
this.makeUrlFromModulePath(this.modulePath, additionalParameter)
);
return false;
},
/*
typo3/sysext/rtehtmlarea/mod4/class.tx_rtehtmlarea_select_image.php (copie de travail)
if (classesImage) var styleSelector=\'<select id="iClass" name="iClass" style="width:140px;">' . $classesImageJSOptions . '</select>\';
var floatSelector=\'<select id="iFloat" name="iFloat"><option value="">' . $LANG->getLL('notSet') . '</option><option value="none">' . $LANG->getLL('nonFloating') . '</option><option value="left">' . $LANG->getLL('left') . '</option><option value="right">' . $LANG->getLL('right') . '</option></select>\';
if (plugin.getButton("Language")) {
var languageOptions = plugin.getDropDownConfiguration("Language").options;
var languageSelector = \'<select id="iLang" name="iLang">\';
Ext.each(languageOptions, function (option) {
languageSelector +=\'<option value="\' + option[1] + \'">\' + option[0] + \'</option>\';
plugin.getButton("Language").getStore().each(function (record) {
languageSelector +=\'<option value="\' + record.get("value") + \'">\' + record.get("text") + \'</option>\';
});
languageSelector += \'</select>\';
}
    (1-1/1)