Daisuke Murase - CSS.Change-0.01
NAME
CSS.Change - Change Stylesheet to altenative one.
SYNOPSIS
// in HTML <head>
<link rel="stylesheet" type="text/css" href="style1.css" title="default" />
<link rel="alternate stylesheet" type="text/css" href="style2.css" title="style2" />
<link rel="alternate stylesheet" type="text/css" href="style3.css" title="style3" />
// in javascript
var css = new CSS.Change({
cookie_name : 'css',
cookie_expires : 0
});
// and in HTML
<a href="javascript:css.change('style2')">style2</a>
<a href="javascript:css.change('style3')">style3</a>
DESCRIPTION
CSS.Change is a class for changing main stylesheet to other altenate it.
SEE ALSO
HTTP.Cookies
AUTHOR
Daisuke Murase, <typester@cpan.org>
COPYRIGHT
Copyright 2005 Daisuke Murase. All rights reserved.
LICENSE
This library is free software; you can redistribute it and/or modify it under the terms of the "Artistic License": http://dev.perl.org/licenses/artistic.html.
if (!CSS) var CSS = {};
CSS.Change = function(settings) {
this._cookie = new HTTP.Cookies();
this._styles = [];
this._settings = {
cookie_name : 'css',
cookie_expire : 'now',
cookie_path : '/'
};
if (settings) this.setting(settings);
this._getStyles();
var cookie_name = this._cookie.read(this._settings.cookie_name);
if (cookie_name) this.change(cookie_name);
if (window.addEventListener && !window.opera) {
// event set for gecko css selecter
var self = this;
window.addEventListener('unload', function(e){ return self._onunload(e) }, true);
}
};
CSS.Change.VERSION = '0.01';
CSS.Change.prototype = {
setting : function(settings) {
for(var i in settings) {
this._settings[i] = settings[i];
}
},
_getStyles : function() {
var headnodes = document.getElementsByTagName('head')[0].childNodes;
for(var i in headnodes) {
var node = headnodes[i];
if(node.nodeName != 'LINK') continue;
if(node.rel != 'stylesheet' && node.rel != 'alternate stylesheet') continue;
if(node.title == '') continue;
this._styles.push(node);
}
},
change : function(style) {
var target;
for (var i in this._styles) {
if (this._styles[i].title == style) {
if (this._styles[i].disabled) this._setCookie(style);
for (var j in this._styles) {
this._styles[j].disabled = true;
}
this._styles[i].disabled = false;
break;
}
}
},
_setCookie : function(style) {
this._cookie.write(
this._settings.cookie_name,
style,
this._settings.cookie_expire,
this._settings.cookie_path
);
},
_onunload : function() {
for (var i in this._styles) {
if (!this._styles[i].disabled) {
this._setCookie(this._styles[i].title);
break;
}
}
}
};
/*
=head1 NAME
CSS.Change - Change Stylesheet to altenative one.
=head1 SYNOPSIS
// in HTML <head>
<link rel="stylesheet" type="text/css" href="style1.css" title="default" />
<link rel="alternate stylesheet" type="text/css" href="style2.css" title="style2" />
<link rel="alternate stylesheet" type="text/css" href="style3.css" title="style3" />
// in javascript
var css = new CSS.Change({
cookie_name : 'css',
cookie_expires : 0
});
// and in HTML
<a href="javascript:css.change('style2')">style2</a>
<a href="javascript:css.change('style3')">style3</a>
=head1 DESCRIPTION
CSS.Change is a class for changing main stylesheet to other altenate it.
=head1 SEE ALSO
HTTP.Cookies
=head1 AUTHOR
Daisuke Murase, E<lt>typesterE<64>cpan.orgE<gt>
=head1 COPYRIGHT
Copyright 2005 Daisuke Murase. All rights reserved.
=head1 LICENSE
This library is free software; you can redistribute it and/or modify
it under the terms of the "Artistic License":
L<http://dev.perl.org/licenses/artistic.html>.
=cut
*/