diff options
| author | czaks <marcin@6irc.net> | 2014-04-19 00:24:52 +0200 |
|---|---|---|
| committer | czaks <marcin@6irc.net> | 2014-04-19 00:24:52 +0200 |
| commit | bfc4df8276f1f3577e8d40f300ed0f3f02613cd0 (patch) | |
| tree | ff3a2e0d49a9c3d8058aa46df600d2b6eac674f2 /js/webm-settings.js | |
| parent | 5b9b0abc54d2aa7f632909ecdfeb11862dffb9ae (diff) | |
| parent | bd498227f5faebad7058efeae1f7badc469d7a0e (diff) | |
Merge branch 'master' of github.com:vichan-devel/Tinyboard into br-integration
Diffstat (limited to 'js/webm-settings.js')
| -rw-r--r-- | js/webm-settings.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/js/webm-settings.js b/js/webm-settings.js new file mode 100644 index 00000000..cecf36d0 --- /dev/null +++ b/js/webm-settings.js @@ -0,0 +1,87 @@ +/* This file is dedicated to the public domain; you may do as you wish with it. */ + +if (typeof _ == 'undefined') { + var _ = function(a) { return a; }; +} + +// Default settings +var defaultSettings = { + "videoexpand": true, + "videohover": false, + "videovolume": 1.0 +}; + +// Non-persistent settings for when localStorage is absent/disabled +var tempSettings = {}; + +// Scripts obtain settings by calling this function +function setting(name) { + if (localStorage) { + if (localStorage[name] === undefined) return defaultSettings[name]; + return JSON.parse(localStorage[name]); + } else { + if (tempSettings[name] === undefined) return defaultSettings[name]; + return tempSettings[name]; + } +} + +// Settings should be changed with this function +function changeSetting(name, value) { + if (localStorage) { + localStorage[name] = JSON.stringify(value); + } else { + tempSettings[name] = value; + } +} + +// Create settings menu +var settingsMenu = document.createElement("div"); +settingsMenu.style.textAlign = "right"; +settingsMenu.style.background = "inherit"; + +settingsMenu.innerHTML = '<a class="unimportant" href="javascript:void(0)"><span>'+_('WebM Settings')+'</span></a>' + + '<div style="display: none; text-align: left; position: absolute; right: 1em; margin-left: -999em; margin-top: -1px; padding-top: 1px; background: inherit;">' + + '<label><input type="checkbox" name="videoexpand">'+_('Expand videos inline')+'</label><br>' + + '<label><input type="checkbox" name="videohover">'+_('Play videos on hover')+'</label><br>' + + '<label><input type="range" name="videovolume" min="0" max="1" step="0.01" style="width: 4em; height: 1ex; vertical-align: middle; margin: 0px;">'+_('Default volume')+'</label><br>' + + '</div>'; + +function refreshSettings() { + var settingsItems = settingsMenu.getElementsByTagName("input"); + for (var i = 0; i < settingsItems.length; i++) { + var control = settingsItems[i]; + if (control.type == "checkbox") { + control.checked = setting(control.name); + } else if (control.type == "range") { + control.value = setting(control.name); + } + } +} + +function setupControl(control) { + if (control.addEventListener) control.addEventListener("change", function(e) { + if (control.type == "checkbox") { + changeSetting(control.name, control.checked); + } else if (control.type == "range") { + changeSetting(control.name, control.value); + } + }, false); +} + +refreshSettings(); +var settingsItems = settingsMenu.getElementsByTagName("input"); +for (var i = 0; i < settingsItems.length; i++) { + setupControl(settingsItems[i]); +} + +if (settingsMenu.addEventListener) { + settingsMenu.addEventListener("mouseover", function(e) { + refreshSettings(); + settingsMenu.getElementsByTagName("span")[0].style.fontWeight = "bold"; + settingsMenu.getElementsByTagName("div")[0].style.display = "block"; + }, false); + settingsMenu.addEventListener("mouseout", function(e) { + settingsMenu.getElementsByTagName("span")[0].style.fontWeight = "normal"; + settingsMenu.getElementsByTagName("div")[0].style.display = "none"; + }, false); +} |
