//----------------------------------------------------- // CSS 切り替えスクリプト( head 用) Ver.2.03 // Piro / outsider reflex (http://www.cc-net.or.jp/~piro/) // // 使用方法は http://www.cc-net.or.jp/~piro/tips/page/p0024.html を参照のこと // // 発想の基本は Dicros! の切り替えスクリプト、 // Cookie はとほほの WWW 入門と検索で見つけたサンプル( URI 失念)を // 参考にしました。 // 三日坊主++の部屋の情報もかなり参考にしてます。 //----------------------------------------------------- function Setting() { //----------------------------------------------------- // 基本設定 //----------------------------------------------------- StyleRt = 'http://www13.xdsl.ne.jp/~techle/'; // 規準ディレクトリ // シートの指定 Sheet('all','level0.css'); Sheet('1star','level1.css'); Sheet('2star','level2.css'); Sheet('3star','level3.css'); Sheet('6star','level6.css'); NN4Style = 'none'; // NN4.x 専用のシート(複数指定可) Xhtml = true; // XHTML の場合は「 true 」、それ以外は「 false 」 Fg.Alt = true; // 選択されなかったシートを代替シートとして出力する場合は「 true 」、出力しない場合は「 false 」 //----------------------------------------------------- //----------------------------------------------------- } // イニシャライズ var n, m, StyleRt, NN4Style, Xhtml, St = new Array(), Fg = new Array(), N = 0, DefN = 1, Param = unescape(location.search), N6 = (navigator.userAgent.indexOf('Netscape6') > -1); function Sheet(Name, Pth, Mda, DefFg, HideFg) { if (DefFg) DefN = N; St[N] = new Array(); St[N].name = Name; St[N].path = Pth; St[N].group = ''; St[N].label = Name; St[N].media = false; if (Mda) St[N].media = Mda; St[N].hidden = HideFg; if (Name.indexOf('@') > -1) { St[N].group = Name.split('@')[1]; St[N].label = Name.split('@')[0]; } N++; } Sheet('Non'); Setting(); var LastN = N, NN4n = N+1, XCls = ''; if (Xhtml) XCls = ' /'; N++; Sheet('With-Style',NN4Style); for (n = 0; n != N; n++) { Fg[n] = false; } // Cookie 取得(汎用:CkData['名前'] で各々の値を取得できる) var Ck = document.cookie, CkDat = new Array(), CkTmp = new Array(); CkTmp = Ck.split(';'); for (n = 0; n != CkTmp.length; n++) { CkDat[CkTmp[n].split('=')[0].match(/[^ ].*/)] = CkTmp[n].split('=')[1]; } function WrtCk(Name, Data, Days) { var CkDate = '', Today = new Date();; if (Days) { Today.setTime(Today.getTime()+1000*60*60*24*Days); CkDate = ';expires='+Today.toGMTString(); } document.cookie = Name+'='+Data+';path=/'+CkDate; } // 要素の生成(汎用:MkNode('要素名|attr1|value1|attr2|value2...','内容')) function MkNode(WParam, Content) { if (WParam == '') return(Content); var EName = WParam.split('|')[0], AttsStr = ''; if (WParam.indexOf('|') > -1) { var Atts = new Array(); Atts = WParam.split('|'); for (var AN = 1; AN < Atts.length; AN = AN+2) { AttsStr = AttsStr+' '+Atts[AN]+'="'+Atts[AN+1]+'"'; } } if (!Content) return('<'+EName+AttsStr+XCls+'>\n'); return('<'+EName+AttsStr+'>'+Content+'\n'); } // 選択スタイル情報の取得 var Sel = CkDat.Selected; if (!Sel || (!document.layers && Sel == St[NN4n].name)) Sel = St[DefN].name; for (n = 0; n != LastN; n++) { if (Param == '?'+St[n].name) { Sel = St[n].name; break; } if (Param == '?'+St[n].name+'-FORCE') { Sel = St[n].name; WrtCk('Selected',Sel,30); break; } } // link 要素の生成処理 function MLink(Cur, Name, Pths, Mda) { if (!Pths || Pths == '') return; var NameStr = ''; if (Name) NameStr = '|title|'+Name; if (!Mda) { Mda = 'all'; if (document.layers) Mda = 'screen'; } var LPth, Alt = 'alternate ', SplPths = new Array(); if (Cur) Alt = ''; SplPths = Pths.split(','); for (m = 0; m != SplPths.length; m++) { LPth = StyleRt+SplPths[m]; if (!(!Fg.Alt && !Cur)) document.write(MkNode('link|type|text/css|rel|'+Alt+'stylesheet|href|'+LPth+'|media|'+Mda+NameStr)); } } // 選択スタイルの判別処理 var NN4Mode = false; if (NN4Style && document.layers) { NN4Mode = true; if (NN4Style != 'none' && Sel != St[0].name) { Fg[NN4n] = true; MLink(true,St[NN4n].name,NN4Style); } else Fg[0] = true; } else { for (n = 0; Sel != St[n].name; n++) { if (!St[n].name || n == NN4n) { n = DefN; break; } } Fg[n] = true; for (n = 1; n != LastN; n++) { MLink(Fg[n],St[n].name,St[n].path,St[n].media); } }