Project

General

Profile

Feature #22324 ยป rtehtmlarea_feature_13909.patch

Administrator Admin, 2010-03-24 21:06

View differences:

typo3/sysext/rtehtmlarea/htmlarea/htmlarea-gecko.js (copie de travail)
*/
HTMLArea.Editor.prototype.getSelectionType = function(selection) {
// By default set the type to "Text".
var type = "Text";
var type = 'Text';
if (!selection) {
var selection = this._getSelection();
}
// Check if the actual selection is a Control
if (selection && selection.rangeCount == 1) {
var range = selection.getRangeAt(0) ;
if (range.startContainer == range.endContainer
&& (range.endOffset - range.startOffset) == 1
&& range.startContainer.nodeType == 1
&& /^(img|hr|li|table|tr|td|embed|object|ol|ul)$/i.test(range.startContainer.childNodes[range.startOffset].nodeName)) {
type = "Control";
var range = selection.getRangeAt(0);
if (range.startContainer.nodeType == 1) {
if (
// Gecko
(range.startContainer == range.endContainer && (range.endOffset - range.startOffset) == 1) ||
// Opera and WebKit
(range.endContainer.nodeType == 3 && range.endOffset == 0 && range.startContainer.childNodes[range.startOffset].nextSibling == range.endContainer)
) {
if (/^(img|hr|li|table|tr|td|embed|object|ol|ul|dl)$/i.test(range.startContainer.childNodes[range.startOffset].nodeName)) {
type = 'Control';
}
}
}
}
return type;
typo3/sysext/rtehtmlarea/htmlarea/htmlarea.js (copie de travail)
saveSelection: function (event) {
var editor = this.getEditor();
if (editor.document.hasFocus()) {
this.bookmark = editor.getBookmark(editor._createRange(editor._getSelection()));
var selection = editor._getSelection();
switch (selection.type.toLowerCase()) {
case 'none':
case 'text':
this.bookmark = editor.getBookmark(editor._createRange(selection));
this.controlRange = null;
break;
case 'control':
this.controlRange = editor._createRange(selection);
this.bookmark = null;
break;
}
}
},
/*
......
restoreSelection: function (event) {
if (!Ext.isEmpty(this.bookmark) && this.triggered) {
var editor = this.getEditor();
editor.selectRange(editor.moveToBookmark(this.bookmark));
editor.selectRange(this.bookmark ? editor.moveToBookmark(this.bookmark) : this.controlRange);
this.triggered = false;
}
},
......
var editor = this.getEditor();
element.blur();
if (!Ext.isIE) {
editor.selectNodeContents(element.ancestor);
if (/^(img)$/i.test(element.ancestor.nodeName)) {
editor.selectNode(element.ancestor);
} else {
editor.selectNodeContents(element.ancestor);
}
} else {
var nodeName = element.ancestor.nodeName.toLowerCase();
if (nodeName == 'table' || nodeName == 'img') {
if (/^(img|table)$/i.test(element.ancestor.nodeName)) {
var range = editor.document.body.createControlRange();
range.addElement(element.ancestor);
range.select();
......
saveSelection: function () {
// If IE, save the current selection
if (Ext.isIE) {
this.bookmark = this.editor.getBookmark(this.editor._createRange(this.editor._getSelection()));
var selection = this.editor._getSelection();
switch (selection.type.toLowerCase()) {
case 'none':
case 'text':
this.bookmark = this.editor.getBookmark(this.editor._createRange(selection));
this.controlRange = null;
break;
case 'control':
this.controlRange = this.editor._createRange(selection);
this.bookmark = null;
break;
}
}
},
/*
......
restoreSelection: function () {
// If IE, restore the selection saved when the window was shown
if (Ext.isIE) {
this.editor.selectRange(this.editor.moveToBookmark(this.bookmark));
// Restoring the selection will not work if the inner html was replaced by the plugin
try {
this.editor.selectRange(this.bookmark ? this.editor.moveToBookmark(this.bookmark) : this.controlRange);
} catch (e) {}
}
},
/*
typo3/sysext/rtehtmlarea/htmlarea/plugins/DefaultImage/default-image.js (copie de travail)
/***************************************************************
* Copyright notice
*
* (c) 2008-2009 Stanislas Rolland <typo3(arobas)sjbr.ca>
* (c) 2008-2010 Stanislas Rolland <typo3(arobas)sjbr.ca>
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
......
* TYPO3 SVN ID: $Id$
*/
DefaultImage = 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.baseURL = this.editorConfiguration.baseURL;
this.pageTSConfiguration = this.editorConfiguration.buttons.image;
if (this.pageTSConfiguration && this.pageTSConfiguration.properties && this.pageTSConfiguration.properties.removeItems) {
this.removeItems = this.pageTSConfiguration.properties.removeItems.split(",");
var layout = 0;
var padding = 0;
for (var i = 0, length = this.removeItems.length; i < length; ++i) {
this.removeItems[i] = this.removeItems[i].replace(/(?:^\s+|\s+$)/g, "");
if (/^(align|border|float)$/i.test(this.removeItems[i])) ++layout;
if (/^(paddingTop|paddingRight|paddingBottom|paddingLeft)$/i.test(this.removeItems[i])) ++padding;
this.removeItems = this.pageTSConfiguration.properties.removeItems.split(',');
var layout = 0;
var padding = 0;
for (var i = 0, n = this.removeItems.length; i < n; ++i) {
this.removeItems[i] = this.removeItems[i].replace(/(?:^\s+|\s+$)/g, '');
if (/^(align|border|float)$/i.test(this.removeItems[i])) {
++layout;
}
if (layout == 3) this.removeItems[this.removeItems.length] = "layout";
if (layout == 4) this.removeItems[this.removeItems.length] = "padding";
if (/^(paddingTop|paddingRight|paddingBottom|paddingLeft)$/i.test(this.removeItems[i])) {
++padding;
}
}
if (layout == 3) {
this.removeItems.push('layout');
}
if (layout == 4) {
this.removeItems.push('padding');
}
this.removeItems = new RegExp( '^(' + this.removeItems.join('|') + ')$', 'i');
} else {
this.removeItems = new RegExp( '^(none)$', 'i');
}
/*
* Registering plugin "About" information
*/
var pluginInformation = {
version : "1.0",
developer : "Stanislas Rolland",
developerUrl : "http://www.ajbr.ca/",
copyrightOwner : "Stanislas Rolland",
sponsor : "SJBR",
sponsorUrl : "http://www.sjbr.ca/",
license : "GPL"
version : '2.0',
developer : 'Stanislas Rolland',
developerUrl : 'http://www.sjbr.ca/',
copyrightOwner : 'Stanislas Rolland',
sponsor : 'SJBR',
sponsorUrl : 'http://www.sjbr.ca/',
license : 'GPL'
};
this.registerPluginInformation(pluginInformation);
/*
* Registering the button
*/
var buttonId = "InsertImage";
var buttonId = 'InsertImage';
var buttonConfiguration = {
id : buttonId,
tooltip : this.localize("insertimage"),
action : "onButtonPress",
tooltip : this.localize('insertimage'),
action : 'onButtonPress',
hotKey : (this.pageTSConfiguration ? this.pageTSConfiguration.hotKey : null),
dialog : true
};
this.registerButton(buttonConfiguration);
return true;
},
/*
* Sets of default configuration values for dialogue form fields
*/
configDefaults: {
combo: {
editable: true,
typeAhead: true,
triggerAction: 'all',
forceSelection: true,
mode: 'local',
valueField: 'value',
displayField: 'text',
helpIcon: true,
tpl: '<tpl for="."><div ext:qtip="{value}" style="text-align:left;font-size:11px;" class="x-combo-list-item">{text}</div></tpl>'
}
},
/*
* This function gets called when the button was pressed.
*
* @param object editor: the editor instance
* @param string id: the button id or the key
* @param object target: the target element of the contextmenu event, when invoked from the context menu
*
* @return boolean false if action is completed
*/
onButtonPress : function(editor, id, target) {
onButtonPress: function(editor, id) {
// Could be a button or its hotkey
var buttonId = this.translateHotKey(id);
buttonId = buttonId ? buttonId : id;
var image, outparam = null;
this.editor.focusEditor();
if (typeof(target) !== "undefined") {
image = target;
} else {
image = this.editor.getParentElement();
this.editor.focus();
this.image = this.editor.getParentElement();
if (this.image && !/^img$/i.test(this.image.nodeName)) {
this.image = null;
}
if (image && !/^img$/i.test(image.nodeName)) {
image = null;
}
if (image) {
outparam = {
f_base : this.baseURL,
f_url : image.getAttribute("src"),
f_alt : image.alt,
f_border : isNaN(parseInt(image.style.borderWidth)) ? "" : parseInt(image.style.borderWidth),
f_align : image.style.verticalAlign,
f_top : isNaN(parseInt(image.style.paddingTop)) ? "" : parseInt(image.style.paddingTop),
f_right : isNaN(parseInt(image.style.paddingRight)) ? "" : parseInt(image.style.paddingRight),
f_bottom : isNaN(parseInt(image.style.paddingBottom)) ? "" : parseInt(image.style.paddingBottom),
f_left : isNaN(parseInt(image.style.paddingLeft)) ? "" : parseInt(image.style.paddingLeft),
f_float : HTMLArea.is_ie ? image.style.styleFloat : image.style.cssFloat
if (this.image) {
this.parameters = {
base: this.baseURL,
url: this.image.getAttribute('src'),
alt: this.image.alt,
border: isNaN(parseInt(this.image.style.borderWidth)) ? '' : parseInt(this.image.style.borderWidth),
align: this.image.style.verticalAlign ? this.image.style.verticalAlign : '',
paddingTop: isNaN(parseInt(this.image.style.paddingTop)) ? '' : parseInt(this.image.style.paddingTop),
paddingRight: isNaN(parseInt(this.image.style.paddingRight)) ? '' : parseInt(this.image.style.paddingRight),
paddingBottom: isNaN(parseInt(this.image.style.paddingBottom)) ? '' : parseInt(this.image.style.paddingBottom),
paddingLeft: isNaN(parseInt(this.image.style.paddingLeft)) ? '' : parseInt(this.image.style.paddingLeft),
cssFloat: Ext.isIE ? this.image.style.styleFloat : this.image.style.cssFloat
};
} else {
this.parameters = {
base: this.baseURL,
url: '',
alt: '',
border: '',
align: '',
paddingTop: '',
paddingRight: '',
paddingBottom: '',
paddingLeft: '',
cssFloat: ''
};
}
this.image = image;
this.dialog = this.openDialog("InsertImage", this.makeUrlFromPopupName("insert_image"), "insertImage", outparam, {width:600, height:610});
// Open dialogue window
this.openDialogue(
buttonId,
'Insert Image',
this.getWindowDimensions(
{
width: 460,
height:300
},
buttonId
),
this.buildTabItems()
);
return false;
},
/*
* Insert the image
* Open the dialogue window
*
* @param object param: the returned values
* @param string buttonId: the button id
* @param string title: the window title
* @param integer dimensions: the opening width of the window
* @param object tabItems: the configuration of the tabbed panel
*
* @return boolean false
* @return void
*/
insertImage : function(param) {
if (typeof(param) != "undefined" && typeof(param.f_url) != "undefined") {
this.editor.focusEditor();
var image = this.image;
if (!image) {
var selection = this.editor._getSelection();
var range = this.editor._createRange(selection);
this.editor._doc.execCommand("InsertImage", false, param.f_url);
if (HTMLArea.is_ie) {
image = range.parentElement();
if (!/^img$/i.test(image.nodeName)) {
image = image.previousSibling;
openDialogue: function (buttonId, title, dimensions, tabItems) {
this.dialog = new Ext.Window({
title: this.localize(title),
cls: 'htmlarea-window',
border: false,
width: dimensions.width,
height: 'auto',
// As of ExtJS 3.1, JS error with IE when the window is resizable
resizable: !Ext.isIE,
iconCls: buttonId,
listeners: {
close: {
fn: this.onClose,
scope: this
}
},
items: {
xtype: 'tabpanel',
itemId: 'tabpanel',
activeTab: 0,
defaults: {
xtype: 'container',
layout: 'form',
defaults: {
labelWidth: 100
}
} else {
var selection = this.editor._getSelection();
var range = this.editor._createRange(selection);
image = range.startContainer;
if (HTMLArea.is_opera) {
image = image.parentNode;
},
listeners: {
tabchange: {
fn: this.syncHeight,
scope: this
}
image = image.lastChild;
while(image && !/^img$/i.test(image.nodeName)) {
image = image.previousSibling;
}
}
} else {
image.src = param.f_url;
}
for (var field in param) {
if (param.hasOwnProperty(field)) {
var value = param[field];
switch (field) {
case "f_alt" :
image.alt = value;
break;
case "f_border" :
if (parseInt(value)) {
image.style.borderWidth = parseInt(value)+"px";
image.style.borderStyle = "solid";
} else {
image.style.borderWidth = "";
image.style.borderStyle = "none";
},
items: tabItems
},
buttons: [
this.buildButtonConfig('OK', this.onOK),
this.buildButtonConfig('Cancel', this.onCancel)
]
});
this.show();
},
/*
* Build the configuration of the the tab items
*
* @return array the configuration array of tab items
*/
buildTabItems: function () {
var tabItems = [];
// General tab
tabItems.push({
title: this.localize('General'),
items: [{
xtype: 'fieldset',
defaultType: 'textfield',
defaults: {
helpIcon: true,
width: 300,
labelSeparator: ''
},
items: [{
itemId: 'url',
fieldLabel: this.localize('Image URL:'),
value: this.parameters.url,
helpTitle: this.localize('Enter the image URL here')
},{
itemId: 'alt',
fieldLabel: this.localize('Alternate text:'),
value: this.parameters.alt,
helpTitle: this.localize('For browsers that dont support images')
}
]
},{
xtype: 'fieldset',
title: this.localize('Image Preview'),
items: [{
// The preview iframe
xtype: 'box',
itemId: 'image-preview',
autoEl: {
name: 'ipreview',
tag: 'iframe',
cls: 'image-preview',
src: this.parameters.url
}
break;
case "f_align" :
image.style.verticalAlign = value;
break;
case "f_top" :
if (parseInt(value)) {
image.style.paddingTop = parseInt(value)+"px";
} else {
image.style.paddingTop = "";
},{
xtype: 'button',
minWidth: 150,
text: this.localize('Preview'),
itemId: 'preview',
style: {
marginTop: '5px',
'float': 'right'
},
listeners: {
click: {
fn: this.onPreviewClick,
scope: this
}
}
break;
case "f_right" :
if (parseInt(value)) {
image.style.paddingRight = parseInt(value)+"px";
} else {
image.style.paddingRight = "";
}
]
}
]
});
// Layout tab
if (!this.removeItems.test('layout')) {
tabItems.push({
title: this.localize('Layout'),
items: [{
xtype: 'fieldset',
defaultType: 'textfield',
defaults: {
helpIcon: true,
width: 250,
labelSeparator: ''
},
items: [
Ext.apply({
xtype: 'combo',
fieldLabel: this.localize('Image alignment:'),
itemId: 'align',
value: this.parameters.align,
helpTitle: this.localize('Positioning of this image'),
store: new Ext.data.ArrayStore({
autoDestroy: true,
fields: [ { name: 'text'}, { name: 'value'}],
data: [
[this.localize('Not set'), ''],
[this.localize('Bottom'), 'bottom'],
[this.localize('Middle'), 'middle'],
[this.localize('Top'), 'top']
]
}),
hidden: this.removeItems.test('align'),
hideLabel: this.removeItems.test('align'),
}, this.configDefaults['combo'])
,{
itemId: 'border',
fieldLabel: this.localize('Border thickness:'),
width: 100,
value: this.parameters.border,
helpTitle: this.localize('Leave empty for no border'),
hidden: this.removeItems.test('border'),
hideLabel: this.removeItems.test('border')
},
Ext.apply({
xtype: 'combo',
fieldLabel: this.localize('Float:'),
itemId: 'cssFloat',
value: this.parameters.cssFloat,
helpTitle: this.localize('Where the image should float'),
store: new Ext.data.ArrayStore({
autoDestroy: true,
fields: [ { name: 'text'}, { name: 'value'}],
data: [
[this.localize('Not set'), ''],
[this.localize('Non-floating'), 'none'],
[this.localize('Left'), 'left'],
[this.localize('Right'), 'right']
]
}),
hidden: this.removeItems.test('float'),
hideLabel: this.removeItems.test('float')
}, this.configDefaults['combo'])
]
}]
});
}
// Padding tab
if (!this.removeItems.test('padding')) {
tabItems.push({
title: this.localize('Spacing and padding'),
items: [{
xtype: 'fieldset',
defaultType: 'textfield',
defaults: {
helpIcon: true,
width: 100,
labelSeparator: ''
},
items: [{
itemId: 'paddingTop',
fieldLabel: this.localize('Top:'),
value: this.parameters.paddingTop,
helpTitle: this.localize('Top padding'),
hidden: this.removeItems.test('paddingTop'),
hideLabel: this.removeItems.test('paddingTop')
},{
itemId: 'paddingRight',
fieldLabel: this.localize('Right:'),
value: this.parameters.paddingRight,
helpTitle: this.localize('Right padding'),
hidden: this.removeItems.test('paddingRight'),
hideLabel: this.removeItems.test('paddingRight')
},{
itemId: 'paddingBottom',
fieldLabel: this.localize('Bottom:'),
value: this.parameters.paddingBottom,
helpTitle: this.localize('Bottom padding'),
hidden: this.removeItems.test('paddingBottom'),
hideLabel: this.removeItems.test('paddingBottom')
},{
itemId: 'paddingLeft',
fieldLabel: this.localize('Left:'),
value: this.parameters.paddingLeft,
helpTitle: this.localize('Left padding'),
hidden: this.removeItems.test('paddingLeft'),
hideLabel: this.removeItems.test('paddingLeft')
}
break;
case "f_bottom" :
if (parseInt(value)) {
image.style.paddingBottom = parseInt(value)+"px";
} else {
image.style.paddingBottom = "";
}
break;
case "f_left" :
if (parseInt(value)) {
image.style.paddingLeft = parseInt(value)+"px";
} else {
image.style.paddingLeft = "";
}
break;
case "f_float" :
if (HTMLArea.is_ie) {
image.style.styleFloat = value;
} else {
image.style.cssFloat = value;
}
break;
}
]
}]
});
}
return tabItems;
},
/*
* Handler invoked when the Preview button is clicked
*/
onPreviewClick: function () {
var tabPanel = this.dialog.find('itemId', 'tabpanel')[0];
var urlField = this.dialog.find('itemId', 'url')[0];
var url = urlField.getValue().trim();
if (url) {
try {
window.ipreview.location.replace(url);
} catch (e) {
Ext.MessageBox.alert('', this.localize('image_url_invalid'), function () { tabPanel.setActiveTab(0); urlField.focus(); });
}
} else {
Ext.MessageBox.alert('', this.localize('image_url_first'), function () { tabPanel.setActiveTab(0); urlField.focus(); });
}
return false;
},
/*
* Handler invoked when the OK button is clicked
*/
onOK: function () {
var urlField = this.dialog.find('itemId', 'url')[0];
var url = urlField.getValue().trim();
if (url) {
var fieldNames = ['url', 'alt', 'align', 'border', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'cssFloat'];
Ext.each(fieldNames, function (fieldName) {
var field = this.dialog.find('itemId', fieldName)[0];
if (field && !field.hidden) {
this.parameters[fieldName] = field.getValue();
}
}, this);
this.insertImage();
this.close();
} else {
var tabPanel = this.dialog.find('itemId', 'tabpanel')[0];
Ext.MessageBox.alert('', this.localize('image_url_required'), function () { tabPanel.setActiveTab(0); urlField.focus(); });
}
return false;
},
/*
* Insert the image
*/
insertImage: function() {
this.editor.focus();
this.restoreSelection();
var image = this.image;
if (!image) {
var selection = this.editor._getSelection();
var range = this.editor._createRange(selection);
this.editor.document.execCommand('InsertImage', false, this.parameters.url);
if (Ext.isWebKit) {
this.editor.cleanAppleStyleSpans(this.editor.document.body);
}
this.dialog.close();
if (Ext.isIE) {
image = range.parentElement();
if (!/^img$/i.test(image.nodeName)) {
image = image.previousSibling;
}
this.editor.selectNode(image);
} else {
var selection = this.editor._getSelection();
var range = this.editor._createRange(selection);
image = range.startContainer;
image = image.lastChild;
while (image && !/^img$/i.test(image.nodeName)) {
image = image.previousSibling;
}
}
} else {
image.src = this.parameters.url;
}
return false;
if (/^img$/i.test(image.nodeName)) {
Ext.iterate(this.parameters, function (fieldName, value) {
switch (fieldName) {
case 'alt':
image.alt = value;
break;
case 'border':
if (parseInt(value)) {
image.style.borderWidth = parseInt(value) + 'px';
image.style.borderStyle = 'solid';
} else {
image.style.borderWidth = '';
image.style.borderStyle = 'none';
}
break;
case 'align':
image.style.verticalAlign = value;
break;
case 'paddingTop':
case 'paddingRight':
case 'paddingBottom':
case 'paddingLeft':
if (parseInt(value)) {
image.style[fieldName] = parseInt(value) + 'px';
} else {
image.style[fieldName] = '';
}
break;
case 'cssFloat':
if (Ext.isIE) {
image.style.styleFloat = value;
} else {
image.style.cssFloat = value;
}
break;
}
});
}
}
});
typo3/sysext/rtehtmlarea/htmlarea/plugins/DefaultImage/locallang.xml (copie de travail)
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!-- TYPO3 SVN ID: $Id:$ -->
<!-- TYPO3 SVN ID: $Id$ -->
<T3locallang>
<meta type="array">
<description>Labels for Image plugin of htmlArea RTE</description>
......
<label index="Top:">Top:</label>
<label index="Right:">Right:</label>
<label index="Bottom:">Bottom:</label>
<label index="Left:">Left:</label>
<label index="image_url_invalid">The url could not be accessed or is not a valid image.</label>
</languageKey>
</data>
<orig_hash type="array">
typo3/sysext/rtehtmlarea/htmlarea/plugins/DefaultImage/popups/insert_image.html (copie de travail)
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
/***************************************************************
* Copyright notice
*
* (c) 2002-2004 interactivetools.com, inc.
* (c) 2003-2004 dynarch.com
* (c) 2004-2008 Stanislas Rolland <typo3(arobas)sjbr.ca>
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
* A copy is found in the textfile GPL.txt and important notices to the license
* from the author is found in LICENSE.txt distributed with these scripts.
*
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This script is a modified version of a script published under the htmlArea License.
* A copy of the htmlArea License may be found in the textfile HTMLAREA_LICENSE.txt.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/*
* Insert Image window for TYPO3 htmlArea RTE
*
* TYPO3 SVN ID: $Id$
*/
-->
<html>
<head>
<title>Insert Image</title>
<meta http-equiv="Content-Style-Type" content="text/css" />
<script type="text/javascript">
/*<![CDATA[*/
<!--
var dialog = window.opener.HTMLArea.Dialog["DefaultImage"];
function Init() {
dialog.initialize(false, true);
if (dialog.plugin.removeItems) {
var items = dialog.plugin.removeItems;
for (var i = 0, length = items.length; i < length; ++i) {
if (document.getElementById(items[i])) document.getElementById(items[i]).style.display = "none";
}
}
var param = dialog.arguments;
if (param) {
document.getElementById("f_url").value = param["f_url"];
document.getElementById("f_alt").value = param["f_alt"];
document.getElementById("f_border").value = param["f_border"];
var select = document.getElementById("f_align");
for (var i = select.options.length; --i >= 0;) {
if (param["f_align"] == select.options[i].value) {
select.selectedIndex = i;
break;
}
}
document.getElementById("f_top").value = param["f_top"];
document.getElementById("f_right").value = param["f_right"];
document.getElementById("f_bottom").value = param["f_bottom"];
document.getElementById("f_left").value = param["f_left"];
var select = document.getElementById("f_float");
for (var i = select.options.length; --i >= 0;) {
if (param["f_float"] == select.options[i].value) {
select.selectedIndex = i;
break;
}
}
window.ipreview.location.replace(param.f_url);
}
dialog.resize();
document.getElementById("f_url").focus();
return false;
};
function onOK() {
var required = { "f_url": "image_url_required" };
for (var i in required) {
var el = document.getElementById(i);
if (!el.value) {
alert(dialog.plugin.localize(required[i]));
el.focus();
return false;
}
}
// pass data back to the calling window
var fields = ["f_url", "f_alt", "f_align", "f_border", "f_top", "f_right", "f_bottom", "f_left", "f_float"];
var param = new Object();
for (var i in fields) {
var id = fields[i];
var el = document.getElementById(id);
param[id] = el.value;
}
dialog.performAction(param);
return false;
};
function onCancel() {
dialog.close();
return false;
};
function onPreview() {
var f_url = document.getElementById("f_url");
var url = f_url.value;
if (!url) {
alert(dialog.plugin.localize("image_url_first"));
f_url.focus();
return false;
}
window.ipreview.location.replace(url);
return false;
};
// -->
/*]]>*/
</script>
</head>
<body class="popupwin htmlarea-default-image" onload="Init();">
<div id="content">
<div class="title">Insert Image</div>
<form action="" method="get">
<div id="image">
<label for="f_url" class="field">Image URL:</label>
<input type="text" id="f_url" name="url" size="45" title="Enter the image URL here" />
<button class="preview" name="preview" onclick="return onPreview();" title="Preview the image in a new window">Preview</button>
</div>
<div class="space"></div>
<div id="alt">
<label for="f_alt" class="field">Alternate text:</label>
<input type="text" name="alt" id="f_alt" size="55" title="For browsers that dont support images" />
</div>
<div class="space"></div>
<fieldset id="layout">
<legend>Layout</legend>
<ul>
<li id="align">
<label for="f_align" class="fl">Image alignment:</label>
<select class="alignment" size="1" name="align" id="f_align" title="Positioning of this image">
<option value="bottom">Bottom</option>
<option value="middle" selected="selected">Middle</option>
<option value="top">Top</option>
</select>
</li>
<li id="border">
<label for="f_border" class="fl">Border thickness:</label>
<input type="text" name="border" id="f_border" size="5" title="Leave empty for no border" />
</li>
<li id="float">
<label for="f_float" class="fl">Float:</label>
<select class="float" size="1" name="style" id="f_float" title="Where the image should float">
<option value="none">Non-floating</option>
<option value="left">Left</option>
<option value="right">Right</option>
</select>
</li>
</ul>
</fieldset>
<fieldset id="padding">
<legend>Spacing and padding</legend>
<ul>
<li id="paddingTop">
<label for="f_top" class="fl">Top:</label>
<input type="text" name="f_top" id="f_top" size="5" title="Top padding" />
</li>
<li id="paddingRight">
<label for="f_right" class="fl">Right:</label>
<input type="text" name="f_right" id="f_right" size="5" title="Right padding" />
</li>
<li id="paddingBottom">
<label for="f_bottom" class="fl">Bottom:</label>
<input type="text" name="f_bottom" id="f_bottom" size="5" title="Bottom padding" />
</li>
<li id="paddingLeft">
<label for="f_left" class="fl">Left:</label>
<input type="text" name="f_left" id="f_left" size="5" title="Left padding" />
</li>
</ul>
</fieldset>
<div class="space"></div>
<fieldset>
<legend>Image Preview</legend>
<div class="imagepreview">
<iframe name="ipreview" id="ipreview" frameborder="0" src="";></iframe>
</div>
</fieldset>
<div class="buttons">
<button type="button" name="ok" onclick="return onOK();">OK</button>
<button type="button" name="cancel" onclick="return onCancel();">Cancel</button>
</div>
<div class="space"></div>
</form>
</div>
</body>
</html>
typo3/sysext/rtehtmlarea/htmlarea/skins/default/htmlarea.css (copie de travail)
text-decoration: underline;
}
/* Selectors for dialogue windows */
.htmlarea-window ul.x-tab-strip {
list-style: none;
}
.htmlarea-window .x-tab-panel-body {
background-color: #EFEFF4;
}
......
margin: 3px;
}
.htmlarea-window .x-form-item-label {
font-size: 10px;
text-align: right;
margin: 0;
padding: 3px 5px 0 5px;
}
.htmlarea-window .x-btn-text {
......
.htmlarea-window .x-form-check-wrap {
padding-top: 3px;
}
.htmlarea-window iframe {
background-color: #FFF;
color: #000;
border: 1px solid #A2AAB8;
}
.htmlarea-window .show-color {
margin-top: 10px;
margin-left: 5px;
......
.htmlarea-custom-colors em span {
width: 100%;
}
.popupwin {
background-color:#e4e0db;color:ButtonText;
font:11px Tahoma,Verdana,sans-serif;
border-style:none;margin:5px;padding:0;
}
.popupwin .title {
clear:both;
background-color:#ddf;color:#000;
font-weight:bold;font-size:120%;letter-spacing:2px;
border-top:0px;border-bottom:1px solid black;margin-top:0px;margin-bottom:10px;padding:3px 10px;
}
.popupwin p {
margin: 0.5em 0;
}
.popupwin h1 {
font-weight: bold; font-size: 1.2em;
padding: .3em 0; border-bottom: 1px solid #999;
}
.popupwin a:link, .popupwin a:visited {
color: #00f;
}
.popupwin a:hover {
color: #f00;
}
.popupwin a:active {
color: #f80;
}
.popupwin #tabbar { position: relative; left: 10px; }
.popupwin .tab {
color: #454; background-color: #66f; cursor: pointer;
margin-left: -5px; float: left; position: relative; top: -3px; left: -2px; z-index: 0;
border: 1px solid black; border-top: none; padding: 2px 10px 3px 10px;
-moz-border-radius: 0px 0px 4px 4px;
border-radius: 0px 0px 4px 4px;
}
.popupwin .tab-current {
color: #000; background-color: #ddf;
top: -4px; z-index: 10;
padding: 3px 10px 4px 10px;
}
.popupwin .content, .popupwin #content {
border-style:none;
margin:0;padding:0;
}
.popupwin ul {
list-style-type:none;
border-style:none;margin:0;padding:0;
}
.popupwin li {
margin:4px 0;
}
.popupwin select {
display:inline;
}
.popupwin table {
border-collapse:collapse;border-style:none;margin:0;padding:0;
}
.popupwin thead {
font-weight: bold; background-color: #ddf;
}
.popupwin td {
padding: 0.2em;
}
.popupwin form {
background-color:#e4e0db;
border-style:none;margin:0;padding:0;
}
.popupwin form p {
margin-top:5px;margin-bottom:5px;
}
.popupwin fieldset {
display:block;
margin:5px 5px 0 5px;padding:0 5px 2px 5px;
}
.popupwin fieldset div {
margin:3px 0;
}
.popupwin .floating {
float:left;
}
.popupwin legend {
font-weight:bold;padding:0 3px;
}
.popupwin .field {
float:left;text-align:left;
margin-left:5px;padding:2px 5px;
}
.popupwin label {
text-align:left;
margin-left:5px;padding:2px 5px;
}
.popupwin fieldset table {
font-size:11px;font-family:Tahoma,Verdana,sans-serif;
border-style:none;margin:2px 0;padding:0;
}
.popupwin .buttons {
clear:both;text-align:right;
border-top:1px solid #999;margin-top:10px;padding:5px;
}
.popupwin span.colorButton {
float:left;
padding:2px 0;
}
.popupwin span.colorButtonNoFloat {
padding:2px 0;
}
.popupwin select, .popupwin input, .popupwin button, .popupwin textarea, .popupwin table, .popupwin label {
font:11px Tahoma,Verdana,sans-serif;
}
.popupwin button {
background-color:#e4e0db;
width:8em;
padding:0;
}
.popupwin dl, .popupwin dt, .popupwin dd {
display: block;
}
.popupwin dt, .popupwin dd {
margin:3px 0;
}
.popupwin button.long-button {
width:10em;
}
.popupwin .fl {
float:left;text-align:right;
width:15em;
padding:2px 5px;
}
.popupwin .fl-borderCollapse {
float:left;text-align:right;
width:13em;
margin-left:10px;padding:2px 5px;
}
.popupwin .fr {
float:left;text-align:right;
width:9em;
padding:2px 5px;
}
.popupwin .space {
clear:left;
padding:2px;
}
.popupwin .label {
text-align:right;
width:8em;
}
.popupwin .checkbox {
text-align:left;
padding:2px 5px;
}
.popupwin .postlabel {
text-align:left;
padding:2px 5px;
}
.popupwin input.value {
width:30em;
}
.popupwin input.shorter-value {
width:17em;
}
/* Selectors for the About dialogue */
.htmlarea-window .about-plugins .x-list-body dt {
overflow: auto;
white-space: normal;
}
/* Selectors for the Default Image dialogue */
.htmlarea-default-image #image, .htmlarea-default-image #alt {
white-space:nowrap;
/* Selectors for the default image dialogue */
.htmlarea-window .image-preview {
height: 300;
width: 99%;
float: right;
}
.htmlarea-default-image button.preview {
margin-left:5px;vertical-align:top;
white-space:normal;
}
.htmlarea-default-image div.imagepreview {
text-align:center;
}
.htmlarea-default-image div.imagepreview iframe {
width:300px;height:200px;
border:1px solid gray;margin:5px 0px;
}
/* Selectors for the InsertSmiley plugin */
.htmlarea-window .emoticon-array {
padding: 10px;
......
float: right;
height: 450px;
margin: 9px 0px;
background-color: #FFF;
color: #000;
border: 1px solid #A2AAB8;
}
/* Selectors for the ContextMenu plugin */
.htmlarea-context-menu {
......
font-family: Verdana, Helvetica, Geneva, Arial, sans-serif;
font-size:10px;
}
.htmlarea-context-menu ul {
list-style: none;
margin: 0;
}
.htmlarea-context-menu li {
margin: 0;
}
.htmlarea-context-menu a {
font-weight: normal;
}
.htmlarea-context-menu .button {
background-color:transparent;
background-repeat:no-repeat;
typo3/sysext/t3skin/rtehtmlarea/htmlarea.css (copie de travail)
text-decoration: underline;
}
/* Selectors for dialogue windows */
.htmlarea-window ul.x-tab-strip {
list-style: none;
}
.htmlarea-window .x-tab-panel-body {
background-color: #EFEFF4;
}
......
margin: 3px;
}
.htmlarea-window .x-form-item-label {
font-size: 10px;
text-align: right;
margin: 0;
padding: 3px 5px 0 5px;
}
.htmlarea-window .x-btn-text {
......
.htmlarea-window .x-form-check-wrap {
padding-top: 3px;
}
.htmlarea-window iframe {
background-color: #FFF;
color: #000;
border: 1px solid #A2AAB8;
}
.htmlarea-window .show-color {
margin-top: 10px;
margin-left: 5px;
......
.htmlarea-custom-colors em span {
width: 100%;
}
.popupwin {
color: #212424;background-color:#EFEFF4;
font-size:11px;font-family:Verdana, Helvetica, Geneva, Arial, sans-serif;
border-style:none;margin:5px;padding:0;
}
.popupwin .title {
clear:both;
color: #FFFFFF; background-color: #B8BEC9; background-image: url('alt_menu_mainitem_bg.gif'); background-position: top left; background-repeat: repeat-x;
font-weight:bold;font-size:120%;
border-top:0px;border-bottom:1px solid #A2AAB8;margin-top:0px;margin-bottom:10px;padding:3px 10px;
}
.popupwin p {
margin: 0.5em 0;
}
.popupwin h1 {
font-weight: bold; font-size: 1.1em;
padding: .3em 0; border-bottom: 1px solid #999;
}
.popupwin a:link, .popupwin a:visited {
color: #00f;
}
.popupwin a:hover {
color: #f00;
}
.popupwin a:active {
color: #f80;
}
.popupwin #tabbar { position: relative; left: 10px; }
.popupwin .tab {
color: #454; background-color: #66f; cursor: pointer;
margin-left: -5px; float: left; position: relative; top: -3px; left: -2px; z-index: 0;
border: 1px solid black; border-top: none; padding: 2px 10px 3px 10px;
}
.popupwin .tab-current {
color: #000; background-color: #ddf;
top: -4px; z-index: 10;
padding: 3px 10px 4px 10px;
}
.popupwin .content, .popupwin #content {
border-style:none;
margin:0;padding:0;
}
.popupwin ul {
list-style-type:none;
border-style:none;margin:0;padding:0;
}
.popupwin li {
margin:4px 0;
}
.popupwin select {
display:inline;
font-size:11px;font-family:Verdana, Helvetica, Geneva, Arial, sans-serif;
}
.popupwin table {
border-collapse:collapse;border-style:none;margin:0;padding:0;
width:100%;
}
.popupwin thead {
font-weight: bold; background-color: #ddf;
}
.popupwin td {
padding: 0.2em;
}
.popupwin form {
background-color:#EFEFF4;
border-style:none;margin:0;padding:0;
}
.popupwin form p {
margin-top:5px;margin-bottom:5px;
}
.popupwin fieldset {
display:block;
margin:5px 5px 0 5px;padding:0 5px 2px 5px;
}
.popupwin fieldset div {
margin:3px 0;
}
.popupwin .floating {
float:left;
}
.popupwin legend {
font-weight:bold;padding:0 3px;
}
.popupwin .field {
float:left;text-align:left;
margin-left:5px;padding:2px 5px;
}
.popupwin label {
text-align:left;
margin-left:5px;padding:2px 5px;
}
.popupwin fieldset table {
font-size:1.0em;
border-style:none;margin:2px 0px;padding:0;
}
.popupwin .buttons {
clear:both;text-align:right;
border-top:1px solid #999;margin-top:10px;padding:5px;
}
.popupwin span.colorButton {
float:left;
padding:2px 0px;
}
.popupwin select, .popupwin input, .popupwin button, .popupwin textarea, .popupwin table, .popupwin label {
font-size:1.0em;
padding: 3px 1px 1px 1px;
font-family:Verdana, Helvetica, Geneva, Arial, sans-serif;
}
.popupwin button {
width:8em;
vertical-align: middle;
text-align: center;
margin: 0px 3px 0px 0px;
padding: 1px;
}
.popupwin dl, .popupwin dt, .popupwin dd {
display: block;
}
.popupwin dt, .popupwin dd {
margin:3px 0;
}
.popupwin button.long-button {
width:10em;
}
.popupwin .fl {
float:left;text-align:right;
width:15em;
padding:2px 5px;
}
.popupwin .fl-borderCollapse {
float:left;text-align:right;
width:13em;
margin-left:10px;padding:2px 5px;
}
.popupwin .fr {
float:left;text-align:right;
width:13em;
padding:2px 5px;
}
.popupwin .space {
clear:left;
padding:2px;
}
.popupwin .label {
text-align:right;
width:8em;
}
.popupwin .checkbox {
text-align:left;
padding:2px 5px;
}
.popupwin .postlabel {
text-align:left;
padding:2px 5px;
}
.popupwin input.value {
width:30em;
}
.popupwin input.shorter-value {
width:17em;
}
/* Selectors for the About dialogue */
.htmlarea-window .about-plugins .x-list-body dt {
overflow: auto;
white-space: normal;
}
/* Selectors for the Default Image dialogue */
.htmlarea-default-image #image, .htmlarea-default-image #alt {
white-space:nowrap;
/* Selectors for the default image dialogue */
.htmlarea-window .image-preview {
height: 300;
width: 99%;
float: right;
}
.htmlarea-default-image button.preview {
margin-left:5px;vertical-align:top;
white-space:normal;
}
.htmlarea-default-image div.imagepreview {
text-align:center;
}
.htmlarea-default-image div.imagepreview iframe {
width:300px;height:200px;
border:1px solid gray;margin:5px 0px;
}
/* Selectors for the InsertSmiley plugin */
.htmlarea-window .emoticon-array {
padding: 10px;
......
float: right;
height: 450px;
margin: 9px 0px;
background-color: #FFF;
color: #000;
border: 1px solid #A2AAB8;
}
/* Selectors for the ContextMenu plugin */
.htmlarea-context-menu {
......
font-family: Verdana, Helvetica, Geneva, Arial, sans-serif;
font-size:10px;
}
.htmlarea-context-menu ul {
list-style: none;
margin: 0;
}
.htmlarea-context-menu li {
margin: 0;
}
.htmlarea-context-menu a {
font-weight: normal;
}
.htmlarea-context-menu .button {
background-color:transparent;
background-repeat:no-repeat;
    (1-1/1)