Hiroyuki Ito
ZXB01****@nifty*****
2005年 4月 3日 (日) 22:09:27 JST
はじめまして。 伊東と申します。 閲覧者がテーマを選択できるようにするプラグインを作りました。 同じような物がありそうな気もするのですが、ちょっと探した範 囲では見当たらなかったので、こちらに投稿してみます。 Version 0.6.5 用です。 -------------- next part -------------- add_footer_proc { script } def script <<-EOF <script type="text/javascript"> window.onload = init; window.onunload = save_usr_theme; cur_theme = "#{$theme}"; function init(){ var select, link = null, links, i, option; links = document.getElementsByTagName('link'); if (links) { var s; s = cur_theme + "/" + cur_theme + ".css$"; for (i = 0; i < links.length; i++) { if (links[i].href && links[i].href.search(s) > 0) { link = links[i]; link.path = link.href.match("(.*)/[^/]+/[^/]+$")[1]; link.set_theme = function (theme) { this.href = this.path + "/" + theme + "/" + theme + ".css"; cur_theme = theme; } break; } } } cur_theme = get_cookie("theme"); if (link && cur_theme) { link.set_theme(cur_theme); } select = get_select("theme"); if (select) { select.target = link; select.onchange = function () { if (this.target) { this.target.set_theme(this.options[this.selectedIndex].value); } } for (i = 0; i < select.options.length; i++) { option = select.options[i]; if (option.value == cur_theme) { option.selected = true; } } } } function save_usr_theme() { if (cur_theme) { set_cookie("theme", cur_theme); } } function get_select(name) { var i; var nodes = document.getElementsByName(name); if (! nodes) { return null; } for (i = 0; i < nodes.length; i++) { if (nodes[i].nodeName == 'SELECT') { return nodes[i]; } } return null; } function set_cookie(key, val) { var today = new Date(); var date = new Date(today.getTime() + 1000 * 60 * 60 * 24 * 7); var expires = new RegExp("expires=[^;]+;"); var rex = new RegExp(key + "=[^;]+;"); var cookie = document.cookie; cookie.replace(rex, ""); cookie = key + "=" + val + ";" + cookie; cookie.replace(expires, ""); cookie += ";expires=" + date.toGMTString() + ";"; document.cookie = cookie; } function get_cookie(key) { var rex = new RegExp(key + "=([^;]+)") var val = rex.exec(document.cookie); if (val != null) { return val[1]; } else { return null; } } </script> EOF end def usr_theme s = '<select name="theme">' Dir::glob("#{$theme_path }/*/*.css").sort.each {|t| t = File::basename(t, '.css').escapeHTML s += %Q(\n<option value="#{t}") if $theme == t s += " selected" end s += ">#{t}" } s += "\n</select>" end