discourse-legacysite-perl/site/slowtwitch.com/www/articles/static/utils.js
2024-06-17 22:27:49 +10:00

141 lines
4.0 KiB
JavaScript

/*
* =================================================================
* Gossamer Links - enhanced directory management system
*
* Website : http://gossamer-threads.com/
* Support : http://gossamer-threads.com/scripts/support/
* Revision : $Id: utils.js,v 1.3 2006/07/18 03:32:55 brewt Exp $
*
* Copyright (c) 2005 Gossamer Threads Inc. All Rights Reserved.
* Redistribution in part or in whole strictly prohibited. Please
* see LICENSE file for full details.
* =================================================================
*/
/*
Event Handler
=============
Description:
A simple cross-browser event handler replacement.
Usage:
registerEvent(<html_object>, <event>, <handler>);
unregisterEvent(<html_object>, <event>, <handler>);
Example:
registerEvent(window, 'onload', myhandler);
Notes:
html_object is a html object that you wish to register the event on.
event is a string containing the event you wish to register, eg. 'onload'.
handler is a function reference for the code you wish to run when the
event is fired.
*/
function registerEvent(object, event, handler) {
if (!(object && event && handler))
return;
var events = object[event + 'Events'];
if (!events) {
object[event + 'Events'] = object[event] ? [object[event], handler] : [handler];
object[event] = _eventHandler;
}
else
object[event + 'Events'][events.length] = handler;
}
function unregisterEvent(object, event, handler) {
if (!(object && event && handler))
return;
var events = object[event + 'Events'];
if (!events)
return;
for (var i = 0; i < events.length; i++)
if (object[event + 'Events'][i] == handler)
return object[event + 'Events'].splice(i, 1);
}
function _eventHandler(event) {
if (!event) event = window.event;
var events = this['on' + event.type + 'Events'];
if (!events)
return;
for (var i = 0; i < events.length; i++) {
this.eventMethod = events[i];
if (this.eventMethod(event) == false) {
this.eventMethod = null;
return false;
}
this.eventMethod = null;
}
}
/*
Check All Checkbox
==================
Description:
Code to implement a check all checkbox.
Usage:
checkAllInit(<form_id>, <checkbox_name>, <checkall_id>);
Example:
registerEvent(window, 'onload', function () { checkAllInit('my_form', 'ID', 'checkall') });
*/
function checkAllInit(form, checkBoxes, checkAllBox) {
var oForm, oCheckBoxes, oCheckAllBox;
if (!(form && checkBoxes && checkAllBox &&
(oForm = document.getElementById(form)) &&
(oCheckBoxes = oForm.elements[checkBoxes]) &&
(oCheckAllBox = document.getElementById(checkAllBox))))
return;
oCheckAllBox.checkBoxes = oCheckBoxes;
registerEvent(oCheckAllBox, 'onclick', _checkAllBoxes);
for (var i = 0; i < oCheckBoxes.length; i++) {
oCheckBoxes[i].checkAllBox = oCheckAllBox;
registerEvent(oCheckBoxes[i], 'onclick', _updateAllBoxes);
}
}
function _checkAllBoxes() {
var checkBoxes = this.checkBoxes;
for (var i = 0; i < checkBoxes.length; i++)
checkBoxes[i].checked = this.checked;
}
function _updateAllBoxes() {
var checkBoxes = this.form.elements[this.name];
var allChecked = true;
for (var i = 0; i < checkBoxes.length; i++) {
if (!checkBoxes[i].checked) {
allChecked = false;
break;
}
}
this.checkAllBox.checked = allChecked;
}
/*
Hide Objects
============
Description:
Hide a list of html objects using the display = 'none' style.
Usage:
hideObjects(<id>[, <id>]*);
Example:
hideObjects('foo', 'bar', 'baz');
Notes:
id is the id of the html object you want to hide.
*/
function hideObjects() {
var args = hideObjects.arguments;
for (var i = 0; i < args.length; i++) {
var obj = document.getElementById(args[i]);
if (obj)
obj.style.display = 'none';
}
}