blob: 48cc17018fa020082ab416984f38eaccf23858b4 [file] [log] [blame]
<html>
<head>
<title>Quick Tag Editor</title>
<script type="text/javascript" src="../tag-lib.js"></script>
<script type="text/javascript" src="../../../popups/popup.js"></script>
<script type="text/javascript">
window.resizeTo(400, 180);
var QuickTag = window.opener.QuickTag;
var curTag = 'none';
var curTagOpt = false;
var CSSEdit = false;
var editor = null;
function Init() {
__dlg_translate("QuickTag");
__dlg_init();
var param = window.dialogArguments;
editor = param['editor'];
var selectext = param['selectedText']; // sem uso...
createDropdown("tags");
var to = document.getElementById('tagopen');
if (document.all)
to.attachEvent("onkeypress", function(e) { choice_dropdown(e) });
else
to.addEventListener("keypress", function(e) { choice_dropdown(e) }, true);
to.focus();
document.getElementById('bt_colors').style.display = 'none';
document.body.onkeypress = __dlg_key_press;
}
function onCancel() {
__dlg_close(null);
return false;
}
function quoteTest(val) {
var er = /^\w+\s*(\w+=\"[^\"]*\"\s*|\w+=\'[^\']*\'\s*)*$/;
return er.test(val);
}
function onOK() {
var el = document.getElementById('tagopen');
if(!el.value) {
alert(HTMLArea._lc("Enter the TAG you want to insert", "QuickTag"));
el.focus();
return false;
}
if(!quoteTest(el.value)) {
alert(HTMLArea._lc("There are some unclosed quote", "QuickTag"));
el.focus();
el.select();
return false;
}
var param = {};
var cleanTO = document.getElementById('tagopen').value.replace(/(<|>)/g,"");
param.tagopen = "<"+cleanTO+">";
param.tagclose = param.tagopen.replace(/^<(\w+) ?.*>/,"</$1>");
var subtag = subTagLib[curTag];
if(typeof subtag == 'object') {
param.tagopen = param.tagopen+subtag.op;
param.tagclose = subtag.cl+param.tagclose;
}
__dlg_close(param);
return false;
}
function __dlg_key_press(ev) {
ev || (ev = window.event);
switch(ev.keyCode) {
case 13:
document.getElementById('bt_ok').click();
break;
case 27:
__dlg_close();
return false;
}
return true;
}
function selchange() {
var toadd = document.getElementById('selectag').value;
var oldval = document.getElementById('tagopen').value;
var text = (oldval+toadd).replace(/^\s*(.+)\s*$/,"$1");
var atrib = /(\w+)=\"$/.test(toadd) ? toadd.replace(/(\w+)=\"$/, "$1") : null;
var showcolors = (/color\: ?$/.test(toadd)) ? true : false;
var noCSSclasses = false;
var obj = null;
curTag = text.replace(/(^\w+) ?.*$/, "$1");
curTagOpt = (tagLib[curTag] == true);
if(atrib) {
var atrer = eval('/'+atrib+'=/ig');
if(atrer.test(oldval) && !(/[^=]\"$/.test(toadd))) {
alert(HTMLArea._lc("This attribute already exists in the TAG", "QuickTag"));
return false;
}
switch(atrib) {
case 'style':
CSSEdit = true;
break;
case 'class':
if(captureClasses() == 0) noCSSclasses = true;
break;
case 'color': case 'bgcolor': case 'bordercolor':
case 'bordercolorlight': case 'bordercolordark':
showcolors = true;
break;
}
if(curTagOpt == true)
obj = eval('opAtt_'+curTag+'["'+atrib+'"]');
else
obj = opAtt_all[atrib];
}
else if(!CSSEdit && (/(^\w+$|\"$)/.test(toadd))) {
obj = 'all';
if(curTagOpt == true) obj = curTag;
toadd += ' ';
}
if(CSSEdit && quoteTest(text))
CSSEdit = false;
if(showcolors)
document.getElementById('bt_colors').style.display = '';
if(obj)
createDropdown(obj);
else if(!CSSEdit)
document.getElementById('showselect').style.visibility = 'hidden';
if(noCSSclasses) {
document.getElementById('showselect').innerHTML = HTMLArea._lc("No CSS class avaiable", "QuickTag");
document.getElementById('showselect').style.visibility = 'visible';
}
addchanges();
function addchanges() {
document.getElementById('tagopen').focus();
document.getElementById('tagopen').value += toadd;
}
}
function captureClasses() {
var cont = 0;
// If there is no '<HTML>' in the HTMLArea content, when using
// styleSheets[..].rule, IE generates an error.
// In this case, we lost the classes in external CSS files.
// If FullPage is loaded, there is no problem.
if(!(/<\s*html\s*>/i.test(editor.getHTML())) && document.all) {
var styles = editor._doc.getElementsByTagName("style");
for(var i in styles) {
var cont = styles[i].innerHTML;
if(typeof cont != 'undefined') {
var cls = cont.match(/\.\w+/ig,"");
for(j in cls) if(/^\.\w+$/.test(cls[j])) {
var classname = cls[j].replace(/\./,"")+'"';
opAtt_all['class'][cls[j]] = classname;
cont++;
}
}
}
return cont;
}
var styleSheet = null;
var styles = editor._doc.styleSheets;
for (var i = 0; i < styles.length; i++) {
styleSheet = styles[i];
if(document.all)
var _rules = styleSheet.rules;
else
var _rules = styleSheet.cssRules;
for (var j = 0; j < _rules.length; j++) {
rule = _rules[j];
if(/^\.\w+$/.test(rule.selectorText)) {
var classname = rule.selectorText.replace(/\./,"")+'"';
opAtt_all['class'][rule.selectorText] = classname;
cont++;
}
}
}
return cont;
}
function choice_dropdown(e) {
if (document.all) Key = e.keyCode;
else Key = e.charCode;
if(Key != 32) return;
var text = document.getElementById('tagopen').value.replace(/^\s*([^\s]+)\s*$/,"$1");
if(CSSEdit && quoteTest(text)) CSSEdit = false;
if(CSSEdit) return;
if(curTag == 'none') {
curTag = text.replace(/(^\w+) ?.*$/, "$1");
curTagOpt = tagLib[curTag];
}
if(!/\w/.test(text)) {
document.getElementById('tagopen').value = '';
createDropdown("tags");
return;
}
var att = 'all';
if(curTagOpt == true)
att = curTag;
createDropdown(att);
}
function createDropdown(type) {
var _div = document.getElementById('showselect');
while(_div.hasChildNodes())
_div.removeChild(_div.firstChild);
_div.style.visibility = 'visible';
var _sel = document.createElement("select");
_sel.id = "selectag";
_sel.onchange = function() { selchange(); };
if(typeof type == 'object') {
var obj = type;
forObj(HTMLArea._lc("OPTIONS", "QuickTag"));
_div.appendChild(_sel);
return;
}
if(type == 'tags') {
var obj = allTags;
forObj(HTMLArea._lc("TAGs", "QuickTag"));
_div.appendChild(_sel);
return;
}
type = type.replace(/^h[1-6]$/,"h");
var topt = eval('opTag_'+type);
if(typeof topt == 'object')
var obj = topt;
else
return;
forObj(HTMLArea._lc("ATTRIBUTES", "QuickTag"));
_div.appendChild(_sel);
function forObj(first) {
if(first) {
var _op = document.createElement("option");
_op.appendChild(document.createTextNode(first));
_sel.appendChild(_op);
}
for(i in obj) {
var opt = document.createElement("option");
opt.appendChild(document.createTextNode(i));
opt.value = obj[i];
_sel.appendChild(opt);
}
}
}
function colors() {
var colloc = window.location.toString().replace(/plugins.+$/,"") +
"popups/select_color.html";
window.open(colloc, 'colors', "toolbar=no,location=no,directories=no," +
"status=no,menubar=no,scrollbars=no,resizable=no,width=240,height=182");
}
// simulation of Dialog._return - select_color.html needs it.
var Dialog = new Object();
Dialog._return = function (val) {
if(val != null) {
if(CSSEdit)
val += '; ';
else
val += '"';
document.getElementById('tagopen').focus();
document.getElementById('tagopen').value += "#"+val;
document.getElementById('bt_colors').style.display = 'none';
}
};
</script>
<style type="text/css">
html, body {
background: ButtonFace;
color: ButtonText;
font: 11px Tahoma,Verdana,sans-serif;
margin: 0px;
padding: 0px;
border-width: 0px;
}
body { padding: 5px; }
table { font: 11px Tahoma,Verdana,sans-serif; }
select, input, button { font: 11px Tahoma,Verdana,sans-serif; }
button { width: 70px; }
.space { padding: 2px; }
.title {
background: #ddf;
color: #000;
font-weight: bold;
font-size: 120%;
padding: 3px 10px;
margin-bottom: 10px;
border-bottom: 1px solid black;
letter-spacing: 2px;
}
.buttons {
border-top: 1px solid #999;
padding: 5px;
text-align: right;
height: 20px;
}
form { padding: 0px; margin: 0px; }
</style>
</head>
<body class="dialog" onload="Init()">
<form action="" method="get">
<div class="title" style="width: 360px">Quick Tag Editor</div>
<div style="text-align: center;">
<table border="0" width="370">
<tbody>
<tr>
<td colspan="2" style="text-align: center;" style="padding: 3px; background-color: #e9e9e9;">
<strong style="font-size: 14px">&lt;</strong>
<input id="tagopen" type="text" style="background-color: #e9e9e9; width: 327px; border-width: 0px;">
<strong style="font-size: 14px">&gt;</strong>
</td>
</tr>
</tbody>
</table>
</div>
<div class="space"></div>
<div class="buttons">
<button type="button" id="bt_colors" onclick="colors();">Colors</button>
<button type="button" id="bt_ok" onclick="return onOK();">Ok</button>
<button type="button" onclick="return onCancel();">Cancel</button>
</div>
<div id="showselect" style="position:absolute; left:7px; top:75px; width:150px; z-index:100; visibility: visible; height: 13px; color: red;">
</div>
</form>
</body>
</html>