comparison plugins/plugin/plugin.js @ 773:8c44bbcbbab9

Misc: style, cleanup and update
author David Demelier <markand@malikania.fr>
date Fri, 26 Oct 2018 13:01:00 +0200
parents 3e816cebed2c
children 06cc2f95f479
comparison
equal deleted inserted replaced
772:f5ccf65ae929 773:8c44bbcbbab9
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */ 17 */
18 18
19 // Plugin information. 19 // Plugin information.
20 info = { 20 info = {
21 name: "plugin", 21 name: "plugin",
22 author: "David Demelier <markand@malikania.fr>", 22 author: "David Demelier <markand@malikania.fr>",
23 license: "ISC", 23 license: "ISC",
24 summary: "A plugin to inspect plugins", 24 summary: "A plugin to inspect plugins",
25 version: "@IRCCD_VERSION@" 25 version: "@IRCCD_VERSION@"
26 }; 26 };
27 27
28 // Modules. 28 // Modules.
29 var Util = Irccd.Util; 29 var Util = Irccd.Util;
30 var Plugin = Irccd.Plugin; 30 var Plugin = Irccd.Plugin;
31 31
32 Plugin.format = { 32 Plugin.format = {
33 "usage": "#{nickname}, usage: #{command} list | info plugin", 33 "usage": "#{nickname}, usage: #{command} list | info plugin",
34 "info": "#{nickname}, #{name}: #{summary}, version #{version} by #{author} (#{license} license).", 34 "info": "#{nickname}, #{name}: #{summary}, version #{version} by #{author} (#{license} license).",
35 "not-found": "#{nickname}, plugin #{name} does not exist.", 35 "not-found": "#{nickname}, plugin #{name} does not exist.",
36 "too-long": "#{nickname}, plugin list too long, ask in query for more details." 36 "too-long": "#{nickname}, plugin list too long, ask in query for more details."
37 } 37 }
38 38
39 Plugin.config = { 39 Plugin.config = {
40 "max-list-lines": 3, 40 "max-list-lines": 3,
41 "max-list-columns": 80 41 "max-list-columns": 80
42 } 42 }
43 43
44 var commands = { 44 var commands = {
45 loadFormats: function () 45 keywords: function (server, channel, origin)
46 { 46 {
47 // --- DEPRECATED ----------------------------------- 47 return {
48 // 48 channel: channel,
49 // This code will be removed. 49 command: server.info().commandChar + Plugin.info().name,
50 // 50 nickname: Util.splituser(origin),
51 // Since: 2.1.0 51 origin: origin,
52 // Until: 3.0.0 52 plugin: Plugin.info().name,
53 // Reason: new [format] section replaces it. 53 server: server.toString()
54 // 54 }
55 // -------------------------------------------------- 55 },
56 for (var key in Plugin.format) {
57 var optname = "format-" + key;
58 56
59 if (typeof (Plugin.config[optname]) !== "string") 57 list: function (server, origin, target, query)
60 continue; 58 {
59 var kw = commands.keywords(server, target, origin);
60 var plugins = Plugin.list();
61 var lines = [ "" ];
62 var maxl = parseInt(Plugin.config["max-list-lines"]);
63 var maxc = parseInt(Plugin.config["max-list-columns"]);
61 64
62 if (Plugin.config[optname].length === 0) 65 if (isNaN(maxc)) {
63 Logger.warning("skipping empty '" + optname + "' format"); 66 maxc = 80;
64 else 67 }
65 Plugin.format[key] = Plugin.config[optname]; 68 if (isNaN(maxl)) {
66 } 69 maxl = 3;
67 }, 70 }
68 71
69 keywords: function (server, channel, origin) 72 for (var p = 0; p < plugins.length; ++p) {
70 { 73 var l = lines.length - 1;
71 return {
72 channel: channel,
73 command: server.info().commandChar + Plugin.info().name,
74 nickname: Util.splituser(origin),
75 origin: origin,
76 plugin: Plugin.info().name,
77 server: server.toString()
78 }
79 },
80 74
81 list: function (server, origin, target, query) 75 if (plugins[p].length + 1 + lines[l].length > maxc) {
82 { 76 lines.push("");
83 var kw = commands.keywords(server, target, origin); 77 l++;
84 var plugins = Plugin.list(); 78 }
85 var lines = [ "" ];
86 var maxl = parseInt(Plugin.config["max-list-lines"]);
87 var maxc = parseInt(Plugin.config["max-list-columns"]);
88 79
89 if (isNaN(maxc)) { 80 lines[l] += plugins[p] + " ";
90 maxc = 80; 81 }
91 }
92 if (isNaN(maxl)) {
93 maxl = 3;
94 }
95 82
96 for (var p = 0; p < plugins.length; ++p) { 83 if (!query && maxl > 0 && lines.length > maxl) {
97 var l = lines.length - 1; 84 server.message(target, Util.format(Plugin.format["too-long"], kw));
85 } else {
86 for (var i = 0; i < lines.length; ++i) {
87 server.message(target, lines[i]);
88 }
89 }
90 },
98 91
99 if (plugins[p].length + 1 + lines[l].length > maxc) { 92 info: function (server, origin, target, name)
100 lines.push(""); 93 {
101 l++; 94 var kw = commands.keywords(server, target, origin);
102 } 95 var info = Plugin.info(name);
96 var str;
103 97
104 lines[l] += plugins[p] + " "; 98 kw.name = name;
105 }
106 99
107 if (!query && maxl > 0 && lines.length > maxl) { 100 if (info) {
108 server.message(target, Util.format(Plugin.format["too-long"], kw)); 101 kw.author = info.author;
109 } else { 102 kw.license = info.license;
110 for (var i = 0; i < lines.length; ++i) { 103 kw.summary = info.summary;
111 server.message(target, lines[i]); 104 kw.version = info.version;
112 }
113 }
114 },
115 105
116 info: function (server, origin, target, name) 106 str = Util.format(Plugin.format["info"], kw);
117 { 107 } else
118 var kw = commands.keywords(server, target, origin); 108 str = Util.format(Plugin.format["not-found"], kw);
119 var info = Plugin.info(name);
120 var str;
121 109
122 kw.name = name; 110 server.message(target, str);
111 },
123 112
124 if (info) { 113 usage: function (server, origin, target)
125 kw.author = info.author; 114 {
126 kw.license = info.license; 115 server.message(target, Util.format(Plugin.format["usage"], commands.keywords(server, target, origin)));
127 kw.summary = info.summary; 116 },
128 kw.version = info.version;
129 117
130 str = Util.format(Plugin.format["info"], kw); 118 execute: function (server, origin, target, message, query)
131 } else 119 {
132 str = Util.format(Plugin.format["not-found"], kw); 120 if (message.length === 0) {
121 commands.usage(server, origin, target);
122 return;
123 }
133 124
134 server.message(target, str); 125 var list = message.split(" ");
135 },
136 126
137 usage: function (server, origin, target) 127 switch (list[0]) {
138 { 128 case "info":
139 server.message(target, Util.format(Plugin.format["usage"], commands.keywords(server, target, origin))); 129 if (list.length === 2)
140 }, 130 commands.info(server, origin, target, list[1]);
131 else
132 commands.usage(server, origin, target);
141 133
142 execute: function (server, origin, target, message, query) 134 break;
143 { 135 case "list":
144 if (message.length === 0) { 136 commands.list(server, origin, target, query);
145 commands.usage(server, origin, target); 137 break;
146 return; 138 default:
147 } 139 commands.usage(server, origin, target);
148 140 break;
149 var list = message.split(" "); 141 }
150 142 }
151 switch (list[0]) {
152 case "info":
153 if (list.length === 2)
154 commands.info(server, origin, target, list[1]);
155 else
156 commands.usage(server, origin, target);
157
158 break;
159 case "list":
160 commands.list(server, origin, target, query);
161 break;
162 default:
163 commands.usage(server, origin, target);
164 break;
165 }
166 }
167 }; 143 };
168 144
169 function onCommand(server, origin, channel, message) 145 function onCommand(server, origin, channel, message)
170 { 146 {
171 commands.execute(server, origin, channel, message, false) 147 commands.execute(server, origin, channel, message, false)
172 }
173
174 function onLoad()
175 {
176 commands.loadFormats();
177 } 148 }
178 149
179 function onQueryCommand(server, origin, message) 150 function onQueryCommand(server, origin, message)
180 { 151 {
181 commands.execute(server, origin, origin, message, true) 152 commands.execute(server, origin, origin, message, true)
182 } 153 }
183
184 function onReload()
185 {
186 commands.loadFormats();
187 }