Add (de)op/(de)voice/kick/ban options to nicklist menu
authorJack Allnutt <m2ys4u@gmail.com>
Wed, 3 Apr 2013 03:20:44 +0000 (04:20 +0100)
committerJack Allnutt <m2ys4u@gmail.com>
Wed, 3 Apr 2013 03:20:44 +0000 (04:20 +0100)
client/assets/dev/index.html.tmpl
client/assets/dev/model_channel.js
client/assets/dev/model_member.js
client/assets/dev/view.js

index b2caf936bfc42aacdfadfb56d975a1018c805420..3fb4616f6b8865c90cc97284c0190ca60f4b257d 100644 (file)
     \r
     <script type="text/html" id="tmpl_userbox">\r
         <div class="userbox">\r
+            <a class="if_op op"><i class="icon-star"></i>Op</a>\r
+            <a class="if_op deop"><i class="icon-star-empty"></i>De-op</a>\r
+            <a class="if_op voice"><i class="icon-volume-up"></i>Voice</a>\r
+            <a class="if_op devoice"><i class="icon-volume-off"></i>De-voice</a>\r
+            <a class="if_op kick"><i class="icon-remove"></i>Kick</a>\r
+            <a class="if_op ban"><i class="icon-ban-circle"></i>Ban</a>\r
+\r
             <a class="query"><i class="icon-comment"></i>Message</a>\r
             <a class="info"><i class="icon-info-sign"></i>Info</a>\r
             <a class="slap"><i class="icon-user-md"></i>Slap!</a>\r
index b6985648df65867c435ba31565fd8db07a878717..10669a50c7ad1f814b9023644bde4aee1780e674 100644 (file)
@@ -14,6 +14,7 @@ _kiwi.model.Channel = _kiwi.model.Panel.extend({
         }, {"silent": true});\r
 \r
         members = this.get("members");\r
+        members.channel = this;\r
         members.bind("add", function (member) {\r
             var show_message = _kiwi.global.settings.get('show_joins_parts');\r
             if (show_message === false) {\r
index 5d7f4783cbe35e909fc6a29255ac4f32d9c60f86..22fb2d6224264405a15dd51e7fea6162fb8d78f5 100644 (file)
@@ -31,6 +31,7 @@ _kiwi.model.Member = Backbone.Model.extend({
         modes = modes || [];\r
         this.sortModes(modes);\r
         this.set({"nick": nick, "modes": modes, "prefix": this.getPrefix(modes)}, {silent: true});\r
+        this.isOp();\r
     },\r
     addMode: function (mode) {\r
         var modes_to_add = mode.split(''),\r
@@ -43,6 +44,7 @@ _kiwi.model.Member = Backbone.Model.extend({
         \r
         modes = this.sortModes(modes);\r
         this.set({"prefix": this.getPrefix(modes), "modes": modes});\r
+        this.isOp();\r
     },\r
     removeMode: function (mode) {\r
         var modes_to_remove = mode.split(''),\r
@@ -54,6 +56,7 @@ _kiwi.model.Member = Backbone.Model.extend({
         });\r
 \r
         this.set({"prefix": this.getPrefix(modes), "modes": modes});\r
+        this.isOp();\r
     },\r
     getPrefix: function (modes) {\r
         var prefix = '';\r
@@ -93,5 +96,25 @@ _kiwi.model.Member = Backbone.Model.extend({
         }\r
 \r
         return display;\r
+    },\r
+    isOp: function () {\r
+        var user_prefixes = _kiwi.gateway.get('user_prefixes'),\r
+            modes = this.get('modes'),\r
+            o, max_mode;\r
+        if (modes.length > 0) {\r
+            o = _.indexOf(user_prefixes, _.find(user_prefixes, function (prefix) {\r
+                return prefix.mode === 'o';\r
+            }));\r
+            max_mode = _.indexOf(user_prefixes, _.find(user_prefixes, function (prefix) {\r
+                return prefix.mode === modes[0];\r
+            }));\r
+            if ((max_mode === -1) || (max_mode > o)) {\r
+                this.set({"is_op": false}, {silent: true});\r
+            } else {\r
+                this.set({"is_op": true}, {silent: true});\r
+            }\r
+        } else {\r
+            this.set({"is_op": false}, {silent: true});\r
+        }\r
     }\r
 });
\ No newline at end of file
index d9522a1e6783d561ff63d0b24efbe026a3721a9a..1ad4bfad5638d15457f70213c98f25299576bd68 100644 (file)
@@ -33,10 +33,14 @@ _kiwi.view.MemberList = Backbone.View.extend({
 \r
         userbox = new _kiwi.view.UserBox();\r
         userbox.member = member;\r
+        userbox.channel = this.model.channel;\r
 \r
         // Remove any existing userboxes\r
         $('.userbox', this.$el).remove();\r
 \r
+        if (!this.model.getByNick(_kiwi.gateway.get('nick')).get('is_op')) {\r
+            userbox.$el.children('.if_op').remove();\r
+        }\r
         $target.append(userbox.$el);\r
     },\r
     show: function () {\r
@@ -51,7 +55,13 @@ _kiwi.view.UserBox = Backbone.View.extend({
     events: {\r
         'click .query': 'queryClick',\r
         'click .info': 'infoClick',\r
-        'click .slap': 'slapClick'\r
+        'click .slap': 'slapClick',\r
+        'click .op': 'opClick',\r
+        'click .deop': 'deopClick',\r
+        'click .voice': 'voiceClick',\r
+        'click .devoice': 'devoiceClick',\r
+        'click .kick': 'kickClick',\r
+        'click .ban': 'banClick'\r
     },\r
 \r
     initialize: function () {\r
@@ -70,6 +80,32 @@ _kiwi.view.UserBox = Backbone.View.extend({
 \r
     slapClick: function (event) {\r
         _kiwi.app.controlbox.processInput('/slap ' + this.member.get('nick'));\r
+    },\r
+\r
+    opClick: function (event) {\r
+        _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' +o ' + this.member.get('nick'));\r
+    },\r
+\r
+    deopClick: function (event) {\r
+        _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' -o ' + this.member.get('nick'));\r
+    },\r
+\r
+    voiceClick: function (event) {\r
+        _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' +v ' + this.member.get('nick'));\r
+    },\r
+\r
+    devoiceClick: function (event) {\r
+        _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' -v ' + this.member.get('nick'));\r
+    },\r
+\r
+    kickClick: function (event) {\r
+        // TODO: Enable the use of a custom kick message\r
+        _kiwi.app.controlbox.processInput('/kick ' + this.member.get('nick') + ' Bye!');\r
+    },\r
+\r
+    banClick: function (event) {\r
+        // TODO: Set ban on host, not just on nick\r
+        _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' +b ' + this.member.get('nick') + '!*');\r
     }\r
 });\r
 \r