Files
karma/assets/static/config.js
2017-07-29 13:48:36 -07:00

134 lines
3.3 KiB
JavaScript

"use strict";
const $ = require("jquery");
const Cookies = require("js-cookie");
const Clipboard = require("clipboard");
const filters = require("./filters");
const Option = require("./option");
const unsee = require("./unsee");
const querystring = require("./querystring");
var options = {};
function newOption(params) {
var opt = new Option(params);
opt.Init();
options[opt.QueryParam] = opt;
}
function getOption(queryParam) {
return options[queryParam];
}
function loadFromCookies() {
$.each(options, function(name, option) {
var value = option.Load();
if (value !== undefined) {
option.Set(value);
}
});
}
function reset() {
// this is not part of options map
Cookies.remove("defaultFilter.v2");
$.each(options, function(name, option) {
Cookies.remove(option.Cookie);
});
}
function init(params) {
// copy current filter button action
new Clipboard(params.CopySelector, {
text: function(elem) {
var baseUrl = [ location.protocol, "//", location.host, location.pathname ].join("");
var query = [ "q=" + filters.getFilters().join(",") ];
$.each(options, function(name, option) {
query.push(option.QueryParam + "=" + option.Get().toString());
});
$(elem).finish().fadeOut(100).fadeIn(300);
return baseUrl + "?" + query.join("&");
}
});
// save settings button action
$(params.SaveSelector).on("click", function() {
var filter = filters.getFilters().join(",");
Cookies.set("defaultFilter.v2", filter, {
expires: 365,
path: ""
});
$(params.SaveSelector).finish().fadeOut(100).fadeIn(300);
});
// reset settings button action
$(params.ResetSelector).on("click", function() {
reset();
querystring.remove("q");
location.reload();
});
// https://github.com/twbs/bootstrap/issues/2097
$(document).on("click", ".dropdown-menu.dropdown-menu-form", function(e) {
e.stopPropagation();
});
newOption({
Cookie: "autoRefresh",
QueryParam: "autorefresh",
Selector: "#autorefresh",
Action: function(val) {
if (val) {
unsee.resume();
} else {
unsee.pause();
}
}
});
newOption({
Cookie: "refreshInterval",
QueryParam: "refresh",
Selector: "#refresh-interval",
Init: function() {
var elem = this;
$(this.Selector).on("change", function() {
var val = elem.Get();
elem.Save(val);
elem.Action(val);
});
},
Getter: function() {
return $(this.Selector).val();
},
Setter: function(val) {
$(this.Selector).val(parseInt(val));
},
Action: function(val) {
unsee.setRefreshRate(parseInt(val));
}
});
newOption({
Cookie: "showFlash",
QueryParam: "flash",
Selector: "#show-flash"
});
newOption({
Cookie: "appendTop",
QueryParam: "appendtop",
Selector: "#append-top"
});
}
exports.init = init;
exports.reset = reset;
exports.loadFromCookies = loadFromCookies;
exports.newOption = newOption;
exports.getOption = getOption;