summaryrefslogtreecommitdiff
path: root/js/webm-settings.js
diff options
context:
space:
mode:
authorczaks <marcin@6irc.net>2014-04-19 00:24:52 +0200
committerczaks <marcin@6irc.net>2014-04-19 00:24:52 +0200
commitbfc4df8276f1f3577e8d40f300ed0f3f02613cd0 (patch)
treeff3a2e0d49a9c3d8058aa46df600d2b6eac674f2 /js/webm-settings.js
parent5b9b0abc54d2aa7f632909ecdfeb11862dffb9ae (diff)
parentbd498227f5faebad7058efeae1f7badc469d7a0e (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.js87
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);
+}