diff --git a/Gruntfile.js b/Gruntfile.js --- a/Gruntfile.js +++ b/Gruntfile.js @@ -56,6 +56,7 @@ module.exports = function(grunt) { '<%= dirs.js.src %>/rhodecode/utils/colorgenerator.js', '<%= dirs.js.src %>/rhodecode/utils/ie.js', '<%= dirs.js.src %>/rhodecode/utils/os.js', + '<%= dirs.js.src %>/rhodecode/utils/topics.js', // Rhodecode widgets '<%= dirs.js.src %>/rhodecode/widgets/multiselect.js', diff --git a/rhodecode/public/js/src/rhodecode/utils/topics.js b/rhodecode/public/js/src/rhodecode/utils/topics.js new file mode 100644 --- /dev/null +++ b/rhodecode/public/js/src/rhodecode/utils/topics.js @@ -0,0 +1,50 @@ +// # Copyright (C) 2010-2016 RhodeCode GmbH +// # +// # This program is free software: you can redistribute it and/or modify +// # it under the terms of the GNU Affero General Public License, version 3 +// # (only), as published by the Free Software Foundation. +// # +// # This program is distributed in the hope that it will be useful, +// # but WITHOUT ANY WARRANTY; without even the implied warranty of +// # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// # GNU General Public License for more details. +// # +// # You should have received a copy of the GNU Affero General Public License +// # along with this program. If not, see . +// # +// # This program is dual-licensed. If you wish to learn more about the +// # RhodeCode Enterprise Edition, including its added features, Support services, +// # and proprietary license terms, please see https://rhodecode.com/licenses/ + + +var topics = {}; +jQuery.Topic = function (id) { + var callbacks, method, + topic = id && topics[id]; + + if (!topic) { + callbacks = jQuery.Callbacks(); + topic = { + unhandledData: [], + publish: callbacks.fire, + prepare: function(){ + for(var i=0; i< arguments.length; i++){ + this.unhandledData.push(arguments[i]); + } + }, + processPrepared: function(){ + var data = this.unhandledData; + this.unhandledData = []; + for(var i=0; i< data.length; i++){ + this.publish(data[i]); + } + }, + subscribe: callbacks.add, + unsubscribe: callbacks.remove + }; + if (id) { + topics[id] = topic; + } + } + return topic; +};