Bug 70605 - Event fixes for IE

git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1308 6955db30-a419-402b-8a0d-67ecbb4d7f56
master
vfilippov 2011-07-25 10:02:35 +00:00
parent 14ff6bb804
commit fa82659c5a
3 changed files with 14 additions and 419 deletions

View File

@ -72,421 +72,9 @@ function chart_copy_select(cp_id, new_id)
{
var s = document.createElement('select');
s.id = s.name = new_id;
s.innerHTML = document.getElementById(cp_id).innerHTML;
s.selectedIndex = 0;
return s;
}
// Add another term into chart when clicked on button with id=btnid
function chart_add(btnid)
{
var d, i, add_and, add_or, n;
d = document.getElementById(btnid.substr(0, btnid.length-4)); // chartN-btn
if (d.id == 'chartR')
add_and = d = chart_add_div(d, 'chart');
if (d.id.indexOf('-') < 0)
add_or = d = chart_add_div(d, d.id+'-');
var cn = d.id.substr(5);
for (i = 0; document.getElementById('field'+cn+'-'+i); i++);
cn = cn+'-'+i;
if (!add_or)
d.appendChild(document.createElement('br'));
// Append field-type-value inputs
d.appendChild(chart_copy_select('field0-0-0', 'field'+cn));
d.appendChild(chart_copy_select('type0-0-0', 'type'+cn));
s = document.createElement('input');
s.id = s.name = "value"+cn;
s.size = 40;
d.appendChild(s);
if (add_and)
{
chart_add_btn(add_and, 'AND');
// Add negate button
var n = add_and.id.substr(5);
var i = document.createElement('input');
i.type = 'button';
i.className = 'chart_not_u';
i.id = 'negate'+n+'-btn';
i.onclick = chart_neg_event;
i.value = 'NOT';
add_and.appendChild(i);
// Add hidden input for negate button
i = document.createElement('input');
i.type = 'hidden';
i.name = i.id = 'negate'+n;
document.getElementById('chartR').appendChild(i);
}
if (add_or)
chart_add_btn(add_or, 'OR');
}
function chart_neg(btn)
{
var n = btn.id.substr(6, btn.id.length-10); // negateN
var i = document.getElementById('negate'+n);
i.value = i.value ? '' : '1';
btn.className = 'chart_not_' + (i.value ? 'c' : 'u');
var c = document.getElementById('chart'+n);
if (i.value)
c.className += ' _neg';
else
c.className = c.className.replace(/ _neg/, '');
}
function chart_add_second_event()
{
chart_add_second(this);
}
function chart_neg_event()
{
chart_neg(this);
}
function chart_add_second(btn)
{
var n = btn.id.substr(5, btn.id.length-9);
// Transform <div> to <fieldset>
var d = document.getElementById('chart'+n);
d.id = 'divchart'+n; // prevent id collisions
btn.id = 'btnchart'+n; // prevent id collisions
var op = (n != 'R' && n.indexOf('-') < 0 ? 'and' : 'or');
// Create <fieldset>
var f = document.createElement('fieldset');
f.id = 'chart'+n;
f.className = 'chart _'+op;
var legend_html = op.toUpperCase()+' '+
'<input type="button" value="+" class="chart_add_button" id="chart'+n+'-btn" onclick="chart_add(this.id)" />';
if (op == 'and')
{
// Move [NOT] to the legend for 'AND' charts
var neg = document.getElementById('negate'+n);
legend_html +=
'<input type="button" value="NOT" class="chart_not_'+(neg.value ? 'c' : 'u')+'"'+
' style="font-size: 85%" id="negate'+n+'-btn" onclick="chart_neg(this)" />';
if (neg.value)
f.className += ' _neg';
neg = document.getElementById('negate'+n+'-btn');
neg.parentNode.removeChild(neg);
}
// Create <legend>
var l = document.createElement('legend');
l.className = '_'+op;
l.innerHTML = legend_html;
f.appendChild(l);
d.parentNode.insertBefore(f, d);
btn.parentNode.removeChild(btn);
d.parentNode.removeChild(d);
while (d.childNodes.length)
f.appendChild(d.childNodes[0]);
// Add an operand
chart_add('chart'+n+'-btn');
}
function chart_add_btn(d, s)
{
var i = document.createElement('input');
i.type = 'button';
i.id = d.id+'-btn';
i.onclick = chart_add_second_event;
i.value = s;
d.appendChild(document.createTextNode(' '));
d.appendChild(i);
}
// Find next available number for div with prefix 'n'
function chart_add_div(d, n)
{
var i, nd;
for (i = 0; document.getElementById(n+i); i++);
nd = document.createElement('div');
nd.id = n+i;
nd.className = 'chart';
d.appendChild(nd);
return nd;
}
// Copy 'fieldx-x-x' or 'typex-x-x' selectbox
function chart_copy_select(cp_id, new_id)
{
var s = document.createElement('select');
s.id = s.name = new_id;
s.innerHTML = document.getElementById(cp_id).innerHTML;
s.selectedIndex = 0;
return s;
}
// Add another term into chart when clicked on button with id=btnid
function chart_add(btnid)
{
var d, i, add_and, add_or, n;
d = document.getElementById(btnid.substr(0, btnid.length-4)); // chartN-btn
if (d.id == 'chartR')
add_and = d = chart_add_div(d, 'chart');
if (d.id.indexOf('-') < 0)
add_or = d = chart_add_div(d, d.id+'-');
var cn = d.id.substr(5);
for (i = 0; document.getElementById('field'+cn+'-'+i); i++);
cn = cn+'-'+i;
if (!add_or)
d.appendChild(document.createElement('br'));
// Append field-type-value inputs
d.appendChild(chart_copy_select('field0-0-0', 'field'+cn));
d.appendChild(chart_copy_select('type0-0-0', 'type'+cn));
s = document.createElement('input');
s.id = s.name = "value"+cn;
s.size = 40;
d.appendChild(s);
if (add_and)
{
chart_add_btn(add_and, 'AND');
// Add negate button
var n = add_and.id.substr(5);
var i = document.createElement('input');
i.type = 'button';
i.className = 'chart_not_u';
i.id = 'negate'+n+'-btn';
i.onclick = chart_neg_event;
i.value = 'NOT';
add_and.appendChild(i);
// Add hidden input for negate button
i = document.createElement('input');
i.type = 'hidden';
i.name = i.id = 'negate'+n;
document.getElementById('chartR').appendChild(i);
}
if (add_or)
chart_add_btn(add_or, 'OR');
}
function chart_neg(btn)
{
var n = btn.id.substr(6, btn.id.length-10); // negateN
var i = document.getElementById('negate'+n);
i.value = i.value ? '' : '1';
btn.className = 'chart_not_' + (i.value ? 'c' : 'u');
var c = document.getElementById('chart'+n);
if (i.value)
c.className += ' _neg';
else
c.className = c.className.replace(/ _neg/, '');
}
function chart_add_second_event()
{
chart_add_second(this);
}
function chart_neg_event()
{
chart_neg(this);
}
function chart_add_second(btn)
{
var n = btn.id.substr(5, btn.id.length-9);
// Transform <div> to <fieldset>
var d = document.getElementById('chart'+n);
d.id = 'divchart'+n; // prevent id collisions
btn.id = 'btnchart'+n; // prevent id collisions
var op = (n != 'R' && n.indexOf('-') < 0 ? 'and' : 'or');
// Create <fieldset>
var f = document.createElement('fieldset');
f.id = 'chart'+n;
f.className = 'chart _'+op;
var legend_html = op.toUpperCase()+' '+
'<input type="button" value="+" class="chart_add_button" id="chart'+n+'-btn" onclick="chart_add(this.id)" />';
if (op == 'and')
{
// Move [NOT] to the legend for 'AND' charts
var neg = document.getElementById('negate'+n);
legend_html +=
'<input type="button" value="NOT" class="chart_not_'+(neg.value ? 'c' : 'u')+'"'+
' style="font-size: 85%" id="negate'+n+'-btn" onclick="chart_neg(this)" />';
if (neg.value)
f.className += ' _neg';
neg = document.getElementById('negate'+n+'-btn');
neg.parentNode.removeChild(neg);
}
// Create <legend>
var l = document.createElement('legend');
l.className = '_'+op;
l.innerHTML = legend_html;
f.appendChild(l);
d.parentNode.insertBefore(f, d);
btn.parentNode.removeChild(btn);
d.parentNode.removeChild(d);
while (d.childNodes.length)
f.appendChild(d.childNodes[0]);
// Add an operand
chart_add('chart'+n+'-btn');
}
function chart_add_btn(d, s)
{
var i = document.createElement('input');
i.type = 'button';
i.id = d.id+'-btn';
i.onclick = chart_add_second_event;
i.value = s;
d.appendChild(document.createTextNode(' '));
d.appendChild(i);
}
// Find next available number for div with prefix 'n'
function chart_add_div(d, n)
{
var i, nd;
for (i = 0; document.getElementById(n+i); i++);
nd = document.createElement('div');
nd.id = n+i;
nd.className = 'chart';
d.appendChild(nd);
return nd;
}
// Copy 'fieldx-x-x' or 'typex-x-x' selectbox
function chart_copy_select(cp_id, new_id)
{
var s = document.createElement('select');
s.id = s.name = new_id;
s.innerHTML = document.getElementById(cp_id).innerHTML;
s.selectedIndex = 0;
return s;
}
// Add another term into chart when clicked on button with id=btnid
function chart_add(btnid)
{
var d, i, add_and, add_or, n;
d = document.getElementById(btnid.substr(0, btnid.length-4)); // chartN-btn
if (d.id == 'chartR')
add_and = d = chart_add_div(d, 'chart');
if (d.id.indexOf('-') < 0)
add_or = d = chart_add_div(d, d.id+'-');
var cn = d.id.substr(5);
for (i = 0; document.getElementById('field'+cn+'-'+i); i++);
cn = cn+'-'+i;
if (!add_or)
d.appendChild(document.createElement('br'));
// Append field-type-value inputs
d.appendChild(chart_copy_select('field0-0-0', 'field'+cn));
d.appendChild(chart_copy_select('type0-0-0', 'type'+cn));
s = document.createElement('input');
s.id = s.name = "value"+cn;
s.size = 40;
d.appendChild(s);
if (add_and)
{
chart_add_btn(add_and, 'AND');
// Add negate button
var n = add_and.id.substr(5);
var i = document.createElement('input');
i.type = 'button';
i.className = 'chart_not_u';
i.id = 'negate'+n+'-btn';
i.onclick = chart_neg_event;
i.value = 'NOT';
add_and.appendChild(i);
// Add hidden input for negate button
i = document.createElement('input');
i.type = 'hidden';
i.name = i.id = 'negate'+n;
document.getElementById('chartR').appendChild(i);
}
if (add_or)
chart_add_btn(add_or, 'OR');
}
function chart_neg(btn)
{
var n = btn.id.substr(6, btn.id.length-10); // negateN
var i = document.getElementById('negate'+n);
i.value = i.value ? '' : '1';
btn.className = 'chart_not_' + (i.value ? 'c' : 'u');
var c = document.getElementById('chart'+n);
if (i.value)
c.className += ' _neg';
else
c.className = c.className.replace(/ _neg/, '');
}
function chart_add_second_event()
{
chart_add_second(this);
}
function chart_neg_event()
{
chart_neg(this);
}
function chart_add_second(btn)
{
var n = btn.id.substr(5, btn.id.length-9);
// Transform <div> to <fieldset>
var d = document.getElementById('chart'+n);
d.id = 'divchart'+n; // prevent id collisions
btn.id = 'btnchart'+n; // prevent id collisions
var op = (n != 'R' && n.indexOf('-') < 0 ? 'and' : 'or');
// Create <fieldset>
var f = document.createElement('fieldset');
f.id = 'chart'+n;
f.className = 'chart _'+op;
var legend_html = op.toUpperCase()+' '+
'<input type="button" value="+" class="chart_add_button" id="chart'+n+'-btn" onclick="chart_add(this.id)" />';
if (op == 'and')
{
// Move [NOT] to the legend for 'AND' charts
var neg = document.getElementById('negate'+n);
legend_html +=
'<input type="button" value="NOT" class="chart_not_'+(neg.value ? 'c' : 'u')+'"'+
' style="font-size: 85%" id="negate'+n+'-btn" onclick="chart_neg(this)" />';
if (neg.value)
f.className += ' _neg';
neg = document.getElementById('negate'+n+'-btn');
neg.parentNode.removeChild(neg);
}
// Create <legend>
var l = document.createElement('legend');
l.className = '_'+op;
l.innerHTML = legend_html;
f.appendChild(l);
d.parentNode.insertBefore(f, d);
btn.parentNode.removeChild(btn);
d.parentNode.removeChild(d);
while (d.childNodes.length)
f.appendChild(d.childNodes[0]);
// Add an operand
chart_add('chart'+n+'-btn');
}
function chart_add_btn(d, s)
{
var i = document.createElement('input');
i.type = 'button';
i.id = d.id+'-btn';
i.onclick = chart_add_second_event;
i.value = s;
d.appendChild(document.createTextNode(' '));
d.appendChild(i);
}
// Find next available number for div with prefix 'n'
function chart_add_div(d, n)
{
var i, nd;
for (i = 0; document.getElementById(n+i); i++);
nd = document.createElement('div');
nd.id = n+i;
nd.className = 'chart';
d.appendChild(nd);
return nd;
}
// Copy 'fieldx-x-x' or 'typex-x-x' selectbox
function chart_copy_select(cp_id, new_id)
{
var s = document.createElement('select');
s.id = s.name = new_id;
s.innerHTML = document.getElementById(cp_id).innerHTML;
var o = document.getElementById(cp_id).options;
for (var i = 0; i < o.length; i++)
bz_createOptionInSelect(s, o[i].text, o[i].value);
s.selectedIndex = 0;
return s;
}

View File

@ -254,7 +254,11 @@ window.addListener = function(obj, event, handler)
if (obj.addEventListener)
obj.addEventListener(event, handler, false);
else if (obj.attachEvent)
obj.attachEvent('on'+event, handler);
{
obj._attached = obj._attached || {};
obj._attached[handler] = function() { handler.call(obj, window.event) };
obj.attachEvent('on'+event, obj._attached[handler]);
}
};
window.removeListener = function(obj, event, handler)
{
@ -264,8 +268,11 @@ window.removeListener = function(obj, event, handler)
return;
if (obj.addEventListener)
obj.removeEventListener(event, handler, false);
else if (obj.attachEvent)
obj.detachEvent('on'+event, handler);
else if (obj.attachEvent && obj._attached && obj._attached[handler])
{
obj.detachEvent('on'+event, obj._attached[handler]);
obj._attached[handler] = null;
}
};
window.eventTarget = function(ev)
{

View File

@ -592,7 +592,7 @@ filter:mask();
/* query form */
.chart_add_button { font-size: 85%; }
.chart { float: left; clear: left; }
fieldset.chart { margin-bottom: 8px; }
fieldset.chart { margin-bottom: 8px; padding: 0 8px 4px; }
.chart select { margin: 0 4px 4px 0; background-color: white; }
.chart._and, legend._and { background-color: #e0e0ff; }
.chart._or, legend._or { background-color: #ffffe0; }