From fa82659c5a7e0aaf4716dc8803dc6ede895d466a Mon Sep 17 00:00:00 2001 From: vfilippov Date: Mon, 25 Jul 2011 10:02:35 +0000 Subject: [PATCH] Bug 70605 - Event fixes for IE git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1308 6955db30-a419-402b-8a0d-67ecbb4d7f56 --- js/charts.js | 418 +------------------------------------- js/util.js | 13 +- skins/standard/global.css | 2 +- 3 files changed, 14 insertions(+), 419 deletions(-) diff --git a/js/charts.js b/js/charts.js index ade1ac808..fc3327998 100644 --- a/js/charts.js +++ b/js/charts.js @@ -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
to
- 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
- var f = document.createElement('fieldset'); - f.id = 'chart'+n; - f.className = 'chart _'+op; - var legend_html = op.toUpperCase()+' '+ - ''; - if (op == 'and') - { - // Move [NOT] to the legend for 'AND' charts - var neg = document.getElementById('negate'+n); - legend_html += - ''; - if (neg.value) - f.className += ' _neg'; - neg = document.getElementById('negate'+n+'-btn'); - neg.parentNode.removeChild(neg); - } - // Create - 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
to
- 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
- var f = document.createElement('fieldset'); - f.id = 'chart'+n; - f.className = 'chart _'+op; - var legend_html = op.toUpperCase()+' '+ - ''; - if (op == 'and') - { - // Move [NOT] to the legend for 'AND' charts - var neg = document.getElementById('negate'+n); - legend_html += - ''; - if (neg.value) - f.className += ' _neg'; - neg = document.getElementById('negate'+n+'-btn'); - neg.parentNode.removeChild(neg); - } - // Create - 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
to
- 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
- var f = document.createElement('fieldset'); - f.id = 'chart'+n; - f.className = 'chart _'+op; - var legend_html = op.toUpperCase()+' '+ - ''; - if (op == 'and') - { - // Move [NOT] to the legend for 'AND' charts - var neg = document.getElementById('negate'+n); - legend_html += - ''; - if (neg.value) - f.className += ' _neg'; - neg = document.getElementById('negate'+n+'-btn'); - neg.parentNode.removeChild(neg); - } - // Create - 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; } diff --git a/js/util.js b/js/util.js index cace42733..ce34daf31 100644 --- a/js/util.js +++ b/js/util.js @@ -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) { diff --git a/skins/standard/global.css b/skins/standard/global.css index b72871b9a..48017103f 100644 --- a/skins/standard/global.css +++ b/skins/standard/global.css @@ -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; }