additional_plugins/serendipity_event_lightbox/lightbox_plus/spica.js
Garvin Hicking ab02bb4af4 Remove $Id$
2011-12-25 10:07:20 +01:00

186 lines
4.9 KiB
JavaScript

// spica javascript libraries - spica.js -- version 0.05
// == written by Takuya Otani <takuya.otani@gmail.com> ===
// == Copyright (C) 2006 SimpleBoxes/SerendipityNZ Ltd. ==
// === array ===
if (!Array.prototype.pop)
{
Array.prototype.pop = function()
{
if (!this.length) return null;
var last = this[this.length - 1];
--this.length;
return last;
}
}
if (!Array.prototype.push)
{
Array.prototype.push = function()
{
for (var i=0,n=arguments.length;i<n;i++)
this[this.length] = arguments[i];
return this.length;
}
}
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(value,idx)
{
if (typeof(idx) != 'number') idx = 0;
else if (idx < 0) idx = this.length + idx;
for (var i=idx,n=this.length;i<n;i++)
if (this[i] === value) return i;
return -1;
}
}
// === browser ===
function Browser()
{
this.name = navigator.userAgent;
this.isWinIE = this.isMacIE = false;
this.isGecko = this.name.match(/Gecko\//);
this.isSafari = this.name.match(/AppleWebKit/);
this.isKHTML = this.isSafari || navigator.appVersion.match(/Konqueror|KHTML/);
this.isOpera = window.opera;
this.hasNS = (document.documentElement) ? document.documentElement.namespaceURI : null;
if (document.all && !this.isGecko && !this.isSafari && !this.isOpera)
{
this.isWinIE = this.name.match(/Win/);
this.isMacIE = this.name.match(/Mac/);
}
}
var Browser = new Browser();
// === event ===
if (!window.Event) var Event = new Object;
Event = {
cache : false,
getEvent : function(evnt)
{
return (evnt) ? evnt : ((window.event) ? window.event : null);
},
getKey : function(evnt)
{
evnt = this.getEvent(evnt);
return (evnt.which) ? evnt.which : evnt.keyCode;
},
stop : function(evnt)
{
try{ evnt.stopPropagation() } catch(err){};
evnt.cancelBubble = true;
try{ evnt.preventDefault() } catch(err){};
return (evnt.returnValue = false);
},
register : function(object, type, handler)
{
if (type == 'keypress' && (Browser.isKHTML || object.attachEvent)) type = 'keydown';
if (type == 'mousewheel' && Browser.isGecko) type = 'DOMMouseScroll';
if (!this.cache) this.cache = [];
if (object.addEventListener)
{
this.cache.push([object,type,handler]);
object.addEventListener(type, handler, false);
}
else if (object.attachEvent)
{
this.cache.push([object,type,handler]);
object.attachEvent(['on',type].join(''),handler);
}
else
{
object[['on',type].join('')] = handler;
}
},
deregister : function(object, type, handler)
{
if (type == 'keypress' && (Browser.isKHTML || object.attachEvent)) type = 'keydown';
if (type == 'mousewheel' && Browser.isGecko) type = 'DOMMouseScroll';
if (object.removeEventListener)
object.removeEventListener(type, handler, false);
else if (object.detachEvent)
object.detachEvent(['on',type].join(''), handler);
else
object[['on',type].join('')] = null;
},
deregisterAll : function()
{
if (!Event.cache) return
for (var i=0,n=Event.cache.length;i<n;i++)
{
Event.deregister(Event.cache[i]);
Event.cache[i][0] = null;
}
Event.cache = false;
}
};
Event.register(window, 'unload', Event.deregisterAll);
// === dom ===
document.getElemetsByClassName = function(name,target)
{
var result = [];
var object = null;
var search = new RegExp(['(^|\\s)',name,'(\\s|$)'].join(''));
if (target && target.getElementsByTagName)
object = target.getElementsByTagName('*');
if (!object)
object = document.getElementsByTagName ? document.getElementsByTagName('*') : document.all;
for (var i=0,n=object.length;i<n;i++)
{
var check = object[i].getAttribute('class') || object[i].className;
if (check.match(search)) result.push(object[i]);
}
return result;
}
// === library ===
function Library()
{
this._path = '';
this._cache = [];
this.lang = '';
this.base = '';
return this._init();
}
Library.prototype = {
_init : function()
{
var rs_path = document.getElementsByName('X-Resource-Dir')[0];
var js_path = document.getElementsByName('X-Script-Dir')[0];
if (rs_path)
{
this.base = this._check_path(rs_path.getAttribute('content'));
if (!js_path) this._path = [this.base,'js/'].join('');
}
if (js_path)
this._path = this._check_path(js_path.getAttribute('content'));
return this;
},
_initLang : function()
{
var html = document.getElementsByTagName('html')[0];
if (!html) return;
this.lang = html.getAttribute('xml:lang') || html.getAttribute('lang');
},
_check_path : function(path)
{
if (!path) return '';
if (!path.match(/\/$/)) path = [path,'/'].join('');
return path;
},
require : function(libs)
{
var pre = '\n<script type="text/javascript" src="';
var post = '.js"></script>';
for (var i=0,n=libs.length;i<n;i++)
{
if (this._cache.indexOf(libs[i]) > -1) continue;
document.write([pre,this._path,libs[i],post].join(''));
this._cache.push(libs[i]);
}
},
path : function(path)
{
this._path = this._check_path(path);
}
}
var Library = new Library();
Event.register(window,'load',function() { Library._initLang() });