mirror of https://github.com/calzoneman/sync.git
Work on channel settings
This commit is contained in:
parent
8aa92f73ec
commit
24781df78f
|
@ -954,7 +954,7 @@ Channel.prototype.sendChatFilters = function (users) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
u.socket.emit("chatFilters", f);
|
u.socket.emit("chatFilters", pkt);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2751,7 +2751,9 @@ Channel.prototype.search = function (query, callback) {
|
||||||
/**
|
/**
|
||||||
* Sends the result of readLog() to a user if the user has sufficient permission
|
* Sends the result of readLog() to a user if the user has sufficient permission
|
||||||
*/
|
*/
|
||||||
Channel.prototype.tryReadLog = function (user) {
|
Channel.prototype.handleReadLog = function (user) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
if (user.rank < 3) {
|
if (user.rank < 3) {
|
||||||
user.kick("Attempted readChanLog with insufficient permission");
|
user.kick("Attempted readChanLog with insufficient permission");
|
||||||
return;
|
return;
|
||||||
|
@ -2766,7 +2768,7 @@ Channel.prototype.tryReadLog = function (user) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var filterIp = user.global_rank < 255;
|
var filterIp = user.global_rank < 255;
|
||||||
this.readLog(filterIp, function (err, data) {
|
self.readLog(filterIp, function (err, data) {
|
||||||
if (err) {
|
if (err) {
|
||||||
user.socket.emit("readChanLog", {
|
user.socket.emit("readChanLog", {
|
||||||
success: false,
|
success: false,
|
||||||
|
|
|
@ -360,7 +360,7 @@ User.prototype.initChannelCallbacks = function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
wrapTypecheck("setMotd", function (data) {
|
wrapTypecheck("setMotd", function (data) {
|
||||||
self.channel.handleUpdateMotd(self, data);
|
self.channel.handleSetMotd(self, data);
|
||||||
});
|
});
|
||||||
|
|
||||||
wrapTypecheck("updateFilter", function (data) {
|
wrapTypecheck("updateFilter", function (data) {
|
||||||
|
@ -385,7 +385,7 @@ User.prototype.initChannelCallbacks = function () {
|
||||||
self.channel.sendChannelRanks([self]);
|
self.channel.sendChannelRanks([self]);
|
||||||
});
|
});
|
||||||
|
|
||||||
wrap("requestChatFilter", function () {
|
wrap("requestChatFilters", function () {
|
||||||
self.channel.sendChatFilters([self]);
|
self.channel.sendChatFilters([self]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -166,8 +166,10 @@ html(lang="en")
|
||||||
button.close(data-dismiss="modal", aria-hidden="true") ×
|
button.close(data-dismiss="modal", aria-hidden="true") ×
|
||||||
h4 Channel Settings
|
h4 Channel Settings
|
||||||
ul.nav.nav-tabs
|
ul.nav.nav-tabs
|
||||||
li: a(href="#cs-miscoptions" data-toggle="tab") General Settings
|
li: a(href="#cs-miscoptions", data-toggle="tab") General Settings
|
||||||
li: a(href="#cs-adminoptions" data-toggle="tab") Admin Settings
|
li: a(href="#cs-adminoptions", data-toggle="tab") Admin Settings
|
||||||
|
li: a(href="#cs-chanlog", data-toggle="tab", onclick="javascript:socket.emit('readChanLog')") Channel Log
|
||||||
|
li: a(href="#cs-chatfilters", data-toggle="tab", onclick="javascript:socket.emit('requestChatFilters')") Chat Filters
|
||||||
li.dropdown
|
li.dropdown
|
||||||
a#cs-edit-dd-toggle(href="#", data-toggle="dropdown") Edit
|
a#cs-edit-dd-toggle(href="#", data-toggle="dropdown") Edit
|
||||||
span.caret
|
span.caret
|
||||||
|
@ -188,6 +190,8 @@ html(lang="en")
|
||||||
mixin banlist()
|
mixin banlist()
|
||||||
mixin recentjoins()
|
mixin recentjoins()
|
||||||
mixin chanranks()
|
mixin chanranks()
|
||||||
|
mixin chatfilters()
|
||||||
|
mixin chanlog()
|
||||||
.modal-footer
|
.modal-footer
|
||||||
button.btn.btn-default(type="button", data-dismiss="modal") Close
|
button.btn.btn-default(type="button", data-dismiss="modal") Close
|
||||||
include footer
|
include footer
|
||||||
|
|
|
@ -30,9 +30,12 @@ mixin miscoptions
|
||||||
mixin textbox("cs-voteskip_ratio", "Voteskip ratio", "0.5")
|
mixin textbox("cs-voteskip_ratio", "Voteskip ratio", "0.5")
|
||||||
mixin textbox("cs-maxlength", "Max video length", "HH:MM:SS")
|
mixin textbox("cs-maxlength", "Max video length", "HH:MM:SS")
|
||||||
mixin textbox("cs-afk_timeout", "Auto-AFK Delay", "0 (disabled)")
|
mixin textbox("cs-afk_timeout", "Auto-AFK Delay", "0 (disabled)")
|
||||||
|
mixin rcheckbox("cs-chat_antiflood", "Throttle chat")
|
||||||
|
mixin textbox("cs-chat_antiflood_burst", "# of messages allowed before throttling")
|
||||||
|
mixin textbox("cs-chat_antiflood_sustained", "# of messages (after burst) allowed per second")
|
||||||
.form-group
|
.form-group
|
||||||
.col-sm-8.col-sm-offset-4
|
.col-sm-8.col-sm-offset-4
|
||||||
button.btn.btn-default#cs-miscoptionssubmit Save
|
span.text-info Changes are automatically saved.
|
||||||
|
|
||||||
mixin adminoptions
|
mixin adminoptions
|
||||||
#cs-adminoptions.tab-pane
|
#cs-adminoptions.tab-pane
|
||||||
|
@ -46,28 +49,28 @@ mixin adminoptions
|
||||||
mixin rcheckbox("cs-show_public", "List channel publicly")
|
mixin rcheckbox("cs-show_public", "List channel publicly")
|
||||||
.form-group
|
.form-group
|
||||||
.col-sm-8.col-sm-offset-4
|
.col-sm-8.col-sm-offset-4
|
||||||
button.btn.btn-default#cs-adminoptionssubmit Save
|
span.text-info Changes are automatically saved.
|
||||||
|
|
||||||
mixin motdeditor
|
mixin motdeditor
|
||||||
#cs-motdeditor.tab-pane
|
#cs-motdeditor.tab-pane
|
||||||
h4 MOTD editor
|
h4 MOTD editor
|
||||||
p The MOTD can be formatted using a subset of HTML. Tags which attempt to execute Javascript will be removed.
|
p The MOTD can be formatted using a subset of HTML. Tags which attempt to execute Javascript will be removed.
|
||||||
textarea.form-control#cs-motdtext(rows="10")
|
textarea.form-control#cs-motdtext(rows="10")
|
||||||
button.btn.btn-primary.pull-right#cs-motdsubmit Save MOTD
|
button.btn.btn-primary#cs-motdsubmit Save MOTD
|
||||||
|
|
||||||
mixin csseditor
|
mixin csseditor
|
||||||
#cs-csseditor.tab-pane
|
#cs-csseditor.tab-pane
|
||||||
h4 CSS editor
|
h4 CSS editor
|
||||||
p Maximum size 20KB. If more space is required, use the External CSS option under General Settings to link to an externally hosted stylesheet.
|
p Maximum size 20KB. If more space is required, use the External CSS option under General Settings to link to an externally hosted stylesheet.
|
||||||
textarea.form-control#cs-csstext(rows="10")
|
textarea.form-control#cs-csstext(rows="10")
|
||||||
button.btn.btn-primary.pull-right#cs-csssubmit Save CSS
|
button.btn.btn-primary#cs-csssubmit Save CSS
|
||||||
|
|
||||||
mixin jseditor
|
mixin jseditor
|
||||||
#cs-jseditor.tab-pane
|
#cs-jseditor.tab-pane
|
||||||
h4 JS editor
|
h4 JS editor
|
||||||
p Maximum size 20KB. If more space is required, use the External JS option under General Settings to link to an externally hosted stylesheet.
|
p Maximum size 20KB. If more space is required, use the External JS option under General Settings to link to an externally hosted stylesheet.
|
||||||
textarea.form-control#cs-jstext(rows="10")
|
textarea.form-control#cs-jstext(rows="10")
|
||||||
button.btn.btn-primary.pull-right#cs-jssubmit Save JS
|
button.btn.btn-primary#cs-jssubmit Save JS
|
||||||
|
|
||||||
mixin banlist
|
mixin banlist
|
||||||
#cs-banlist.tab-pane
|
#cs-banlist.tab-pane
|
||||||
|
@ -105,3 +108,42 @@ mixin chanranks
|
||||||
tr
|
tr
|
||||||
th Name
|
th Name
|
||||||
th Rank
|
th Rank
|
||||||
|
|
||||||
|
mixin chatfilters
|
||||||
|
#cs-chatfilters.tab-pane
|
||||||
|
h4 Chat Filters
|
||||||
|
table.table.table-striped.table-condensed
|
||||||
|
thead
|
||||||
|
tr
|
||||||
|
th Control
|
||||||
|
th Name
|
||||||
|
th Active
|
||||||
|
|
||||||
|
mixin chanlog
|
||||||
|
#cs-chanlog.tab-pane
|
||||||
|
h4 Channel Log
|
||||||
|
strong Filter Log:
|
||||||
|
form(role="form", action="javscript:void(0)")
|
||||||
|
.checkbox
|
||||||
|
label Everything
|
||||||
|
input#filter_all(type="checkbox", checked="checked")
|
||||||
|
.checkbox
|
||||||
|
label Chat
|
||||||
|
input#filter_chat(type="checkbox")
|
||||||
|
.checkbox
|
||||||
|
label Polls
|
||||||
|
input#filter_polls(type="checkbox")
|
||||||
|
.checkbox
|
||||||
|
label Playlist actions
|
||||||
|
input#filter_queue(type="checkbox")
|
||||||
|
.checkbox
|
||||||
|
label Bans
|
||||||
|
input#filter_bans(type="checkbox")
|
||||||
|
.checkbox
|
||||||
|
label Channel settings
|
||||||
|
input#filter_channelsettings(type="checkbox")
|
||||||
|
.checkbox
|
||||||
|
label Join/Quit messages
|
||||||
|
input#filter_joinquit(type="checkbox")
|
||||||
|
pre#chanlog_contents(style="max-height: 400px; overflow-y: scroll")
|
||||||
|
button.btn.btn-default#chanlog_refresh Refresh
|
||||||
|
|
|
@ -235,155 +235,9 @@ Callbacks = {
|
||||||
},
|
},
|
||||||
|
|
||||||
chatFilters: function(entries) {
|
chatFilters: function(entries) {
|
||||||
var tbl = $("#filteredit table");
|
var tbl = $("#cs-chatfilters table");
|
||||||
if(!tbl.hasClass("table")) {
|
tbl.data("entries", entries);
|
||||||
setTimeout(function() {
|
formatCSChatFilterList();
|
||||||
Callbacks.chatFilters(entries);
|
|
||||||
}, 100);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
tbl.find(".filter-row").remove();
|
|
||||||
for(var i = 0; i < entries.length; i++) {
|
|
||||||
var f = entries[i];
|
|
||||||
var tr = $("<tr/>").appendTo(tbl).addClass("filter-row");
|
|
||||||
var remove = $("<button/>").addClass("btn btn-xs btn-danger")
|
|
||||||
.appendTo($("<td/>").appendTo(tr));
|
|
||||||
$("<span/>").addClass("glyphicon glyphicon-trash").appendTo(remove);
|
|
||||||
var name = $("<code/>").text(f.name)
|
|
||||||
.appendTo($("<td/>").appendTo(tr));
|
|
||||||
var regex = $("<code/>").text(f.source)
|
|
||||||
.appendTo($("<td/>").appendTo(tr));
|
|
||||||
var flags = $("<code/>").text(f.flags)
|
|
||||||
.appendTo($("<td/>").appendTo(tr));
|
|
||||||
var replace = $("<code/>").text(f.replace)
|
|
||||||
.appendTo($("<td/>").appendTo(tr));
|
|
||||||
var linktd = $("<td/>").appendTo(tr);
|
|
||||||
var link = $("<input/>").attr("type", "checkbox")
|
|
||||||
.prop("checked", f.filterlinks).appendTo(linktd);
|
|
||||||
var activetd = $("<td/>").appendTo(tr);
|
|
||||||
var active = $("<input/>").attr("type", "checkbox")
|
|
||||||
.prop("checked", f.active).appendTo(activetd);
|
|
||||||
(function(f) {
|
|
||||||
regex.click(function() {
|
|
||||||
if(this.find(".filter-regex-edit").length > 0)
|
|
||||||
return;
|
|
||||||
var r = this.text();
|
|
||||||
this.text("");
|
|
||||||
var edit = $("<input/>").addClass("form-control filter-regex-edit")
|
|
||||||
.attr("type", "text")
|
|
||||||
.css("font-family", "Monospace")
|
|
||||||
.attr("placeholder", r)
|
|
||||||
.val(r)
|
|
||||||
.appendTo(this)
|
|
||||||
.focus();
|
|
||||||
|
|
||||||
function save() {
|
|
||||||
var r = this.val();
|
|
||||||
var r2 = r;
|
|
||||||
if(r.trim() == "")
|
|
||||||
r = this.attr("placeholder");
|
|
||||||
this.parent().text(r);
|
|
||||||
f.source = r;
|
|
||||||
socket.emit("updateFilter", f);
|
|
||||||
}
|
|
||||||
edit.blur(save.bind(edit));
|
|
||||||
edit.keydown(function(ev) {
|
|
||||||
if(ev.keyCode == 13)
|
|
||||||
save.bind(edit)();
|
|
||||||
});
|
|
||||||
}.bind(regex));
|
|
||||||
flags.click(function() {
|
|
||||||
if(this.find(".filter-flags-edit").length > 0)
|
|
||||||
return;
|
|
||||||
var r = this.text();
|
|
||||||
this.text("");
|
|
||||||
var edit = $("<input/>").attr("type", "text")
|
|
||||||
.css("font-family", "Monospace")
|
|
||||||
.attr("placeholder", r)
|
|
||||||
.val(r)
|
|
||||||
.addClass("form-control filter-flags-edit")
|
|
||||||
.appendTo(this)
|
|
||||||
.focus();
|
|
||||||
|
|
||||||
function save() {
|
|
||||||
var r = this.val();
|
|
||||||
var r2 = r;
|
|
||||||
if(r.trim() == "")
|
|
||||||
r = this.attr("placeholder");
|
|
||||||
this.parent().text(r);
|
|
||||||
f.flags = r;
|
|
||||||
socket.emit("updateFilter", f);
|
|
||||||
}
|
|
||||||
edit.blur(save.bind(edit));
|
|
||||||
edit.keydown(function(ev) {
|
|
||||||
if(ev.keyCode == 13)
|
|
||||||
save.bind(edit)();
|
|
||||||
});
|
|
||||||
}.bind(flags));
|
|
||||||
replace.click(function() {
|
|
||||||
if(this.find(".filter-replace-edit").length > 0)
|
|
||||||
return;
|
|
||||||
var r = this.text();
|
|
||||||
this.text("");
|
|
||||||
var edit = $("<input/>").attr("type", "text")
|
|
||||||
.css("font-family", "Monospace")
|
|
||||||
.attr("placeholder", r)
|
|
||||||
.val(r)
|
|
||||||
.addClass("form-control filter-replace-edit")
|
|
||||||
.appendTo(this)
|
|
||||||
.focus();
|
|
||||||
|
|
||||||
function save() {
|
|
||||||
var r = this.val();
|
|
||||||
var r2 = r;
|
|
||||||
if(r.trim() == "")
|
|
||||||
r = this.attr("placeholder");
|
|
||||||
this.parent().text(r);
|
|
||||||
f.replace = r;
|
|
||||||
socket.emit("updateFilter", f);
|
|
||||||
}
|
|
||||||
edit.blur(save.bind(edit));
|
|
||||||
edit.keydown(function(ev) {
|
|
||||||
if(ev.keyCode == 13)
|
|
||||||
save.bind(edit)();
|
|
||||||
});
|
|
||||||
}.bind(replace));
|
|
||||||
|
|
||||||
remove.click(function() {
|
|
||||||
socket.emit("removeFilter", f);
|
|
||||||
});
|
|
||||||
|
|
||||||
active.click(function() {
|
|
||||||
// Apparently when you check a checkbox, its value is changed
|
|
||||||
// before this callback. When you uncheck it, its value is not
|
|
||||||
// changed before this callback
|
|
||||||
// [](/amgic)
|
|
||||||
var enabled = active.prop("checked");
|
|
||||||
f.active = (f.active == enabled) ? !enabled : enabled;
|
|
||||||
socket.emit("updateFilter", f);
|
|
||||||
});
|
|
||||||
link.click(function() {
|
|
||||||
var enabled = link.prop("checked");
|
|
||||||
f.filterlinks = (f.filterlinks == enabled) ? !enabled : enabled;
|
|
||||||
socket.emit("updateFilter", f);
|
|
||||||
});
|
|
||||||
})(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
$(tbl.children()[1]).sortable({
|
|
||||||
start: function(ev, ui) {
|
|
||||||
FILTER_FROM = ui.item.prevAll().length;
|
|
||||||
},
|
|
||||||
update: function(ev, ui) {
|
|
||||||
FILTER_TO = ui.item.prevAll().length;
|
|
||||||
if(FILTER_TO != FILTER_FROM) {
|
|
||||||
socket.emit("moveFilter", {
|
|
||||||
from: FILTER_FROM,
|
|
||||||
to: FILTER_TO
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
channelOpts: function(opts) {
|
channelOpts: function(opts) {
|
||||||
|
|
|
@ -466,6 +466,8 @@ $("#cs-chanranks-owner").click(chanrankSubmit.bind(this, 4));
|
||||||
["#showmediaurl", "#showsearch", "#showcustomembed"].forEach(function (id) {
|
["#showmediaurl", "#showsearch", "#showcustomembed"].forEach(function (id) {
|
||||||
$(id).click(function () {
|
$(id).click(function () {
|
||||||
$(".plcontrol-collapse").collapse("hide");
|
$(".plcontrol-collapse").collapse("hide");
|
||||||
|
$("#plcontrol button").button("hide");
|
||||||
|
$(id).button("toggle");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
$(".plcontrol-collapse").collapse();
|
$(".plcontrol-collapse").collapse();
|
||||||
|
@ -493,7 +495,47 @@ $(".cs-textbox").keyup(function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = {};
|
var data = {};
|
||||||
data[key] = value;
|
if (key.match(/chat_antiflood_(burst|sustained)/)) {
|
||||||
|
data = {
|
||||||
|
chat_antiflood_params: {
|
||||||
|
burst: $("#cs-chat_antiflood_burst").val(),
|
||||||
|
sustained: $("#cs-chat_antiflood_sustained").val()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
data[key] = value;
|
||||||
|
}
|
||||||
socket.emit("setOptions", data);
|
socket.emit("setOptions", data);
|
||||||
}, 1000);
|
}, 1000);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#chanlog_refresh").click(function () {
|
||||||
|
socket.emit("readChanLog");
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#cs-chanlog input[type='checkbox']").change(function () {
|
||||||
|
var id = $(this).attr("id");
|
||||||
|
if (id !== "filter_all" && $(this).prop("checked")) {
|
||||||
|
$("#filter_all").prop("checked", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
filterChannelLog();
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#cs-motdsubmit").click(function () {
|
||||||
|
socket.emit("setMotd", {
|
||||||
|
motd: $("#cs-motdtext").val()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#cs-csssubmit").click(function () {
|
||||||
|
socket.emit("setChannelCSS", {
|
||||||
|
css: $("#cs-csstext").val()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#cs-jssubmit").click(function () {
|
||||||
|
socket.emit("setChannelJS", {
|
||||||
|
js: $("#cs-jstext").val()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -739,11 +739,10 @@ function handleModPermissions() {
|
||||||
$("#cs-externalcss").attr("disabled", CLIENT.rank < 3);
|
$("#cs-externalcss").attr("disabled", CLIENT.rank < 3);
|
||||||
$("#cs-externaljs").val(CHANNEL.opts.externaljs);
|
$("#cs-externaljs").val(CHANNEL.opts.externaljs);
|
||||||
$("#cs-externaljs").attr("disabled", CLIENT.rank < 3);
|
$("#cs-externaljs").attr("disabled", CLIENT.rank < 3);
|
||||||
/* TODO FIX */
|
$("#cs-chat_antiflood").prop("checked", CHANNEL.opts.chat_antiflood);
|
||||||
$("#opt_chat_antiflood").prop("checked", CHANNEL.opts.chat_antiflood);
|
|
||||||
if ("chat_antiflood_params" in CHANNEL.opts) {
|
if ("chat_antiflood_params" in CHANNEL.opts) {
|
||||||
$("#opt_chat_antiflood_burst").val(CHANNEL.opts.chat_antiflood_params.burst);
|
$("#cs-chat_antiflood_burst").val(CHANNEL.opts.chat_antiflood_params.burst);
|
||||||
$("#opt_chat_antiflood_sustained").val(CHANNEL.opts.chat_antiflood_params.sustained);
|
$("#cs-chat_antiflood_sustained").val(CHANNEL.opts.chat_antiflood_params.sustained);
|
||||||
}
|
}
|
||||||
$("#cs-show_public").prop("checked", CHANNEL.opts.show_public);
|
$("#cs-show_public").prop("checked", CHANNEL.opts.show_public);
|
||||||
$("#cs-show_public").attr("disabled", CLIENT.rank < 3);
|
$("#cs-show_public").attr("disabled", CLIENT.rank < 3);
|
||||||
|
@ -1814,3 +1813,71 @@ function formatCSBanlist() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function formatCSChatFilterList() {
|
||||||
|
var tbl = $("#cs-chatfilters table");
|
||||||
|
tbl.find("tbody").remove();
|
||||||
|
tbl.find(".ui-sortable").remove();
|
||||||
|
var entries = tbl.data("entries") || [];
|
||||||
|
entries.forEach(function (f) {
|
||||||
|
var tr = $("<tr/>").appendTo(tbl);
|
||||||
|
var control = $("<button/>").addClass("btn btn-xs btn-default")
|
||||||
|
.attr("title", "Edit this filter")
|
||||||
|
.appendTo($("<td/>").appendTo(tr));
|
||||||
|
$("<span/>").addClass("glyphicon glyphicon-list").appendTo(control);
|
||||||
|
var name = $("<code/>").text(f.name).appendTo($("<td/>").appendTo(tr));
|
||||||
|
var activetd = $("<td/>").appendTo(tr);
|
||||||
|
var active = $("<input/>").attr("type", "checkbox")
|
||||||
|
.prop("checked", f.active)
|
||||||
|
.appendTo(activetd)
|
||||||
|
.change(function () {
|
||||||
|
f.active = $(this).prop("checked");
|
||||||
|
socket.emit("updateFilter", f);
|
||||||
|
});
|
||||||
|
|
||||||
|
control.click(function () {
|
||||||
|
var tr2 = $("<tr/>").insertAfter(tr);
|
||||||
|
var wrap = $("<td/>").attr("colspan", "3").appendTo(tr2);
|
||||||
|
var form = $("<form/>").addClass("form-inline").attr("role", "form")
|
||||||
|
.attr("action", "javascript:void(0)")
|
||||||
|
.appendTo(wrap);
|
||||||
|
var addTextbox = function (placeholder) {
|
||||||
|
var div = $("<div/>").addClass("form-group").appendTo(form)
|
||||||
|
.css("margin-right", "10px")
|
||||||
|
.css("max-width", "25%");
|
||||||
|
var input = $("<input/>").addClass("form-control")
|
||||||
|
.attr("type", "text")
|
||||||
|
.attr("placeholder", placeholder)
|
||||||
|
.attr("title", placeholder)
|
||||||
|
.appendTo(div);
|
||||||
|
return input;
|
||||||
|
};
|
||||||
|
|
||||||
|
var regex = addTextbox("Filter regex").val(f.source);
|
||||||
|
var flags = addTextbox("Regex flags").val(f.flags);
|
||||||
|
var replace = addTextbox("Replacement text").val(f.replace);
|
||||||
|
|
||||||
|
var checkwrap = $("<div/>").addClass("checkbox").appendTo(form);
|
||||||
|
var checklbl = $("<label/>").text("Filter Links").appendTo(checkwrap);
|
||||||
|
$("<input/>").attr("type", "checkbox").prependTo(checklbl);
|
||||||
|
|
||||||
|
var save = $("<button/>").addClass("btn btn-xs btn-success")
|
||||||
|
.insertAfter(control);
|
||||||
|
$("<span/>").addClass("glyphicon glyphicon-save").appendTo(save);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
$(tbl.children()[1]).sortable({
|
||||||
|
start: function(ev, ui) {
|
||||||
|
FILTER_FROM = ui.item.prevAll().length;
|
||||||
|
},
|
||||||
|
update: function(ev, ui) {
|
||||||
|
FILTER_TO = ui.item.prevAll().length;
|
||||||
|
if(FILTER_TO != FILTER_FROM) {
|
||||||
|
socket.emit("moveFilter", {
|
||||||
|
from: FILTER_FROM,
|
||||||
|
to: FILTER_TO
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -484,6 +484,14 @@
|
||||||
font-family: Monospace;
|
font-family: Monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
#cs-csssubmit, #cs-motdsubmit, #cs-jssubmit {
|
#cs-csstext, #cs-jstext, #cs-motdtext {
|
||||||
margin: 10px 0;
|
font-family: Monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cs-csssubmit, #cs-motdsubmit, #cs-jssubmit {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cs-chatfilters input[type='text'] {
|
||||||
|
font-family: Monospace;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue