Daisuke Murase - CSS.Change-0.02
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.
try { JSAN.use('HTTP.Cookies'); } catch (e) { throw 'HTTP.Cookies requires JSAN to be loaded'; } 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 : '/index.html' }; 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.02'; 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 */