Merge upstream pull request #320 from janza/client-plugins
Client plugins closes #14
This commit is contained in:
commit
04a2c9a659
|
@ -286,7 +286,15 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/libs.min.js"></script>
|
<script src="js/libs.min.js"></script>
|
||||||
|
<script>
|
||||||
|
var shoutPlugins = [];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<% plugins.forEach(function(file) { %>
|
||||||
|
<script src="plugins/<%= file %>"></script>
|
||||||
|
<% }) %>
|
||||||
|
|
||||||
<script src="js/shout.templates.js"></script>
|
<script src="js/shout.templates.js"></script>
|
||||||
<script src="js/shout.js"></script>
|
<script src="js/shout.js"></script>
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,9 @@ $(function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
function render(name, data) {
|
function render(name, data) {
|
||||||
return Handlebars.templates[name](data);
|
data = pluginHandle('onprerender', [name, data])[1];
|
||||||
|
var html = Handlebars.templates[name](data);
|
||||||
|
return pluginHandle('onpostrender', [name, html])[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
Handlebars.registerHelper(
|
Handlebars.registerHelper(
|
||||||
|
@ -197,6 +199,8 @@ $(function() {
|
||||||
var chan = chat.find(target);
|
var chan = chat.find(target);
|
||||||
var from = data.msg.from;
|
var from = data.msg.from;
|
||||||
|
|
||||||
|
data.msg = pluginHandle('onmessage', data.msg);
|
||||||
|
|
||||||
chan.find(".messages")
|
chan.find(".messages")
|
||||||
.append(render("msg", {messages: [data.msg]}))
|
.append(render("msg", {messages: [data.msg]}))
|
||||||
.trigger("msg", [
|
.trigger("msg", [
|
||||||
|
@ -416,6 +420,9 @@ $(function() {
|
||||||
clear();
|
clear();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
text = pluginHandle('oninput', text);
|
||||||
|
if (!text) return;
|
||||||
|
|
||||||
socket.emit("input", {
|
socket.emit("input", {
|
||||||
target: chat.data("id"),
|
target: chat.data("id"),
|
||||||
text: text
|
text: text
|
||||||
|
@ -751,6 +758,25 @@ $(function() {
|
||||||
});
|
});
|
||||||
}, 1000 * 10);
|
}, 1000 * 10);
|
||||||
|
|
||||||
|
$.each(shoutPlugins, function(i, plugin) {
|
||||||
|
if ($.isFunction(plugin)) { plugin(socket); }
|
||||||
|
});
|
||||||
|
|
||||||
|
function pluginHandle(action, data) {
|
||||||
|
var val = data;
|
||||||
|
|
||||||
|
$.each(shoutPlugins, function(i, plugin) {
|
||||||
|
if ($.isFunction(plugin[action])) {
|
||||||
|
var newVal = plugin[action].apply(plugin, (val && !val.length) ? [val] : val);
|
||||||
|
if (newVal !== null && newVal !== undefined) {
|
||||||
|
val = newVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
function clear() {
|
function clear() {
|
||||||
chat.find(".active .messages").empty();
|
chat.find(".active .messages").empty();
|
||||||
chat.find(".active .show-more").addClass("show");
|
chat.find(".active .show-more").addClass("show");
|
||||||
|
|
|
@ -13,12 +13,28 @@ var manager = new ClientManager();
|
||||||
|
|
||||||
module.exports = function(options) {
|
module.exports = function(options) {
|
||||||
config = Helper.getConfig();
|
config = Helper.getConfig();
|
||||||
config = _.extend(config, options);
|
config = _.extend(config, options, {
|
||||||
|
plugins: []
|
||||||
|
});
|
||||||
|
|
||||||
var app = express()
|
var app = express()
|
||||||
.use(index)
|
.use(index)
|
||||||
.use(express.static("client"));
|
.use(express.static("client"));
|
||||||
|
|
||||||
|
fs.readdir(Helper.HOME + '/plugins', function(err, files) {
|
||||||
|
if (err) {
|
||||||
|
if (err.code !== 'ENOENT') {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (files.length) {
|
||||||
|
config.plugins = files;
|
||||||
|
app.use('/plugins', express.static(Helper.HOME + '/plugins'));
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
app.enable("trust proxy");
|
app.enable("trust proxy");
|
||||||
|
|
||||||
var server = null;
|
var server = null;
|
||||||
|
|
Loading…
Reference in New Issue