Use "DOM ready" event instead of window.onload

hinted-selects
Vitaliy Filippov 2014-09-11 16:38:48 +04:00
parent 811d30acbd
commit a7b98817a7
14 changed files with 116 additions and 45 deletions

View File

@ -3,7 +3,7 @@
* Author(s): Vitaliy Filippov <vitalif@mail.ru>
*/
addListener(window, 'load', initControlledFields);
onDomReady(initControlledFields);
function initControlledFields()
{

View File

@ -358,7 +358,7 @@ function search_filter_click(e)
this.href = new_href;
}
addListener(window, 'load', function()
onDomReady(function()
{
if (document.getElementById('form_bug_edit'))
{

View File

@ -169,7 +169,7 @@ function validateEntryForm(theform)
return true;
}
addListener(window, 'load', function()
onDomReady(function()
{
var f = document.getElementById('bug_status');
addListener(f, 'change', bug_status_change);

View File

@ -25,7 +25,7 @@ function hideEditableField( container, input, action, field_id, original_value )
addClass(input, 'bz_default_hidden');
addListener(action, 'click', function(ev) { return showEditableField(ev, [ container, input ]); });
if (field_id != "")
addListener(window, 'load', function(ev) {
onDomReady(function(ev) {
return checkForChangedFieldValues(ev, [ container, input, field_id, original_value ])
});
}
@ -114,9 +114,7 @@ function hideAliasAndSummary(short_desc_value, alias_value)
var bz_alias_check_array = [
'summary_alias_container', 'summary_alias_input', 'alias', alias_value
];
addListener(window, 'load',
function(ev) { return checkForChangedFieldValues(ev, bz_alias_check_array) }
);
onDomReady(function(ev) { return checkForChangedFieldValues(ev, bz_alias_check_array) });
}
function showPeopleOnChange(field_id_list)
@ -145,13 +143,16 @@ function assignToDefaultOnChange(field_id_list)
function initDefaultCheckbox(field_id)
{
addListener('set_default_'+field_id, 'change',
function(ev) { return boldOnChange(ev, 'set_default_'+field_id) });
addListener(window, 'load',
function(ev) { return checkForChangedFieldValues(ev, [
function(ev) { return boldOnChange(ev, 'set_default_'+field_id) }
);
onDomReady(function(ev)
{
checkForChangedFieldValues(ev, [
'bz_'+field_id+'_edit_container', 'bz_'+field_id+'_input',
'set_default_'+field_id, '1' ]) });
addListener(window, 'load',
function(ev) { return boldOnChange(ev, 'set_default_'+field_id) });
'set_default_'+field_id, '1' ]
);
boldOnChange(ev, 'set_default_'+field_id);
});
}
function showHideStatusItems(is_duplicate, initial_status)

View File

@ -82,4 +82,4 @@ function disableRequesteeFields()
}
}
addListener(window, "load", disableRequesteeFields);
onDomReady(disableRequesteeFields);

View File

@ -3,7 +3,7 @@
// Author(s): Vitaliy Filippov <vitalif@mail.ru>
// Requires global vars: queryform, checkwidths, userAutocomplete
addListener(window, 'load', function()
onDomReady(function()
{
document.forms[queryform].content.focus();
if (document.getElementById('deadlinefrom'))

View File

@ -37,7 +37,7 @@ respecting this "list of active IDs".
*/
addListener(window, 'load', initQueryformFields);
onDomReady(initQueryformFields);
function initQueryformFields()
{

View File

@ -455,11 +455,86 @@ function AjaxLoader(url, callback)
x.send(null);
}
function existElement(el_id) {
function existElement(el_id)
{
var el = document.getElementById(el_id);
if (typeof (el) != undefined && typeof (el) != null && typeof (el) != 'undefined' && el !== null) {
return true;
} else {
return false;
}
return (typeof (el) != undefined && typeof (el) != null && typeof (el) != 'undefined' && el !== null);
}
window.onDomReady = (function()
{
var readyBound = false;
var bindReady = function()
{
if (readyBound)
return;
readyBound = true;
if (document.addEventListener)
{
document.addEventListener("DOMContentLoaded", function()
{
document.removeEventListener("DOMContentLoaded", arguments.callee, false);
ready();
}, false);
}
else if (document.attachEvent)
{
document.attachEvent("onreadystatechange", function()
{
if (document.readyState === "complete")
{
document.detachEvent( "onreadystatechange", arguments.callee );
ready();
}
});
if (document.documentElement.doScroll && window == window.top)
{
(function()
{
if (isReady)
return;
try
{
document.documentElement.doScroll("left");
}
catch(error)
{
setTimeout(arguments.callee, 0);
return;
}
ready();
})();
}
}
if (window.addEventListener)
window.addEventListener('load', ready, false);
else if (window.attachEvent)
window.attachEvent('onload', ready);
else
window.onload = ready;
};
var isReady = false;
var readyList = [];
var ready = function()
{
if (!isReady)
{
isReady = true;
if (readyList)
{
var fn_temp = null;
while (fn_temp = readyList.shift())
fn_temp.call(document);
readyList = null;
}
}
};
return function(fn) {
bindReady();
if (isReady)
fn.call(document);
else
readyList.push(fn);
return this;
};
})();

View File

@ -86,7 +86,7 @@
"login" : "login",
"warning" : "You must set the login and password before logging in."
};
addListener(window, 'load', function() {
onDomReady(function() {
init_mini_login_form('_[% qs_suffix %]');
});
</script>

View File

@ -319,15 +319,13 @@ You are currently not watching any users.
</p>
<script type="text/javascript" language="JavaScript">
addListener(window, 'load', function() {
[%-# FIXME: remove hardcoded i18n message, also from js/field.js::userAutocomplete() %]
new SimpleAutocomplete("new_watchedusers",
function(h) { userAutocomplete(h, null); },
{ multipleDelimiter: ',', emptyText: 'No users found' });
new SimpleAutocomplete("new_watchers",
function(h) { userAutocomplete(h, null); },
{ multipleDelimiter: ',', emptyText: 'No users found' });
});
[%-# FIXME: remove hardcoded i18n message, also from js/field.js::userAutocomplete() %]
new SimpleAutocomplete("new_watchedusers",
function(h) { userAutocomplete(h, null); },
{ multipleDelimiter: ',', emptyText: 'No users found' });
new SimpleAutocomplete("new_watchers",
function(h) { userAutocomplete(h, null); },
{ multipleDelimiter: ',', emptyText: 'No users found' });
</script>
<hr />

View File

@ -189,7 +189,7 @@ var close_status_array = [
<td>
<input id="keywords" name="keywords" size="60" value="[% default.keywords | html %]">
<script type="text/javascript">
addListener(window, 'load', addKeywordsAutocomplete);
addKeywordsAutocomplete();
</script>
<div id="keywords_description_container"></div>
</td>

View File

@ -537,7 +537,7 @@ document.changeform = document.[% cfname %];
</td>
[% PROCESS input inputname => "keywords" size => 40 colspan => 2 %]
<script>
addListener(window, 'load', addKeywordsAutocomplete);
addKeywordsAutocomplete();
</script>
</tr>
[% END %]
@ -942,7 +942,7 @@ document.changeform = document.[% cfname %];
<input name="deadline" id="deadline" value="[% bug.deadline %]"
size="10" maxlength="10"><br />
<script type="text/javascript">
Calendar.set('deadline');
Calendar.set('deadline');
</script>
<small>(YYYY-MM-DD)</small>
</td>

View File

@ -29,11 +29,8 @@
[% IF style %] style="[% style | html %]" [% END %]
/>
<script language="JavaScript">
addListener(window, 'load', function() {
[%-# FIXME: remove hardcoded i18n message, also from js/field.js::userAutocomplete() %]
var emptyOptions = [% custom_userlist ? json(custom_userlist) : "null" %];
new SimpleAutocomplete("[% id | js %]",
function(h) { userAutocomplete(h, emptyOptions, [% Param('usemenuforusers') ? 1 : 0 %]); },
{ emptyText: 'No users found'[% ', multipleDelimiter: ","' IF multiple %] });
});
[%-# FIXME: remove hardcoded i18n message, also from js/field.js::userAutocomplete() %]
new SimpleAutocomplete("[% id | js %]",
function(h) { userAutocomplete(h, [% custom_userlist ? json(custom_userlist) : "null" %], [% Param('usemenuforusers') ? 1 : 0 %]); },
{ emptyText: 'No users found'[% ', multipleDelimiter: ","' IF multiple %] });
</script>

View File

@ -211,9 +211,6 @@ document.write(' <input type="button" name="check_all" value="Check All" onclick
[% IF use_keywords %]
<tr>
<th>
<script type="text/javascript">
addListener(window, 'load', addKeywordsAutocomplete);
</script>
<label for="keywords">
<a href="describekeywords.cgi">Keywords</a>:
</label>
@ -225,6 +222,9 @@ document.write(' <input type="button" name="check_all" value="Check All" onclick
<option value="delete">Delete these keywords</option>
<option value="makeexact">Make the keywords be exactly this list</option>
</select>
<script type="text/javascript">
addKeywordsAutocomplete();
</script>
</td>
</tr>
[% END %]