annotate plugins/plugin/plugin.js @ 1020:3dec26654d06

man: misc fixes
author David Demelier <markand@malikania.fr>
date Tue, 23 Feb 2021 09:19:27 +0100
parents cf99df45cb84
children f06e9761cc90
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * plugin.js -- plugin inspector
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
1018
cf99df45cb84 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 1009
diff changeset
4 * Copyright (c) 2013-2021 David Demelier <markand@malikania.fr>
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
145
410f71eb9237 Plugin plugin: use new format section, #410
David Demelier <markand@malikania.fr>
parents: 64
diff changeset
19 // Plugin information.
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 info = {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
21 author: "David Demelier <markand@malikania.fr>",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
22 license: "ISC",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
23 summary: "A plugin to inspect plugins",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
24 version: "@IRCCD_VERSION@"
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 };
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
26
166
2380d476f987 Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
27 // Modules.
2380d476f987 Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
28 var Util = Irccd.Util;
2380d476f987 Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
29 var Plugin = Irccd.Plugin;
2380d476f987 Plugin plugin: add initial unit test
David Demelier <markand@malikania.fr>
parents: 145
diff changeset
30
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
31 Plugin.templates = {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
32 "usage": "#{nickname}, usage: #{command} list | info plugin",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
33 "info": "#{nickname}, #{name}: #{summary}, version #{version} by #{author} (#{license} license).",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
34 "not-found": "#{nickname}, plugin #{name} does not exist.",
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
35 "too-long": "#{nickname}, plugin list too long, ask in query for more details."
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
420
f1414576ceaa Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents: 397
diff changeset
38 Plugin.config = {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
39 "max-list-lines": 3,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
40 "max-list-columns": 80
420
f1414576ceaa Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents: 397
diff changeset
41 }
f1414576ceaa Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents: 397
diff changeset
42
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 var commands = {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
44 keywords: function (server, channel, origin)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
45 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
46 return {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
47 channel: channel,
995
0d71bfa6c97a tests: add plugin tests
David Demelier <markand@malikania.fr>
parents: 913
diff changeset
48 command: server.info().prefix + Plugin.info().name,
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
49 nickname: Util.splituser(origin),
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
50 origin: origin,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
51 plugin: Plugin.info().name,
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
52 server: server.toString()
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
53 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
54 },
397
da240b179e8b Plugin plugin: clean whitespace
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
55
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
56 list: function (server, origin, target, query)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
57 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
58 var kw = commands.keywords(server, target, origin);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
59 var plugins = Plugin.list();
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
60 var lines = [ "" ];
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
61 var maxl = parseInt(Plugin.config["max-list-lines"]);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
62 var maxc = parseInt(Plugin.config["max-list-columns"]);
397
da240b179e8b Plugin plugin: clean whitespace
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
63
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
64 if (isNaN(maxc)) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
65 maxc = 80;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
66 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
67 if (isNaN(maxl)) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
68 maxl = 3;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
69 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
70
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
71 for (var p = 0; p < plugins.length; ++p) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
72 var l = lines.length - 1;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
74 if (plugins[p].length + 1 + lines[l].length > maxc) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
75 lines.push("");
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
76 l++;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
77 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
78
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
79 lines[l] += plugins[p] + " ";
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
80 }
420
f1414576ceaa Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents: 397
diff changeset
81
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
82 if (!query && maxl > 0 && lines.length > maxl) {
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
83 server.message(target, Util.format(Plugin.templates["too-long"], kw));
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
84 } else {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
85 for (var i = 0; i < lines.length; ++i) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
86 server.message(target, lines[i]);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
87 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
88 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
89 },
420
f1414576ceaa Plugin plugin: enable configurable limits, closes #618
David Demelier <markand@malikania.fr>
parents: 397
diff changeset
90
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
91 info: function (server, origin, target, name)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
92 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
93 var kw = commands.keywords(server, target, origin);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
94 var info = Plugin.info(name);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
95 var str;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
96
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
97 kw.name = name;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
98
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
99 if (info) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
100 kw.author = info.author;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
101 kw.license = info.license;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
102 kw.summary = info.summary;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
103 kw.version = info.version;
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
104
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
105 str = Util.format(Plugin.templates["info"], kw);
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
106 } else
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
107 str = Util.format(Plugin.templates["not-found"], kw);
397
da240b179e8b Plugin plugin: clean whitespace
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
108
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
109 server.message(target, str);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
110 },
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
111
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
112 usage: function (server, origin, target)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
113 {
847
a23b7b574ed2 irccd: rename [format] section to [templates], closes #1671
David Demelier <markand@malikania.fr>
parents: 824
diff changeset
114 server.message(target, Util.format(Plugin.templates["usage"], commands.keywords(server, target, origin)));
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
115 },
397
da240b179e8b Plugin plugin: clean whitespace
David Demelier <markand@malikania.fr>
parents: 394
diff changeset
116
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
117 execute: function (server, origin, target, message, query)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
118 {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
119 if (message.length === 0) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
120 commands.usage(server, origin, target);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
121 return;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
122 }
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
123
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
124 var list = message.split(" ");
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
125
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
126 switch (list[0]) {
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
127 case "info":
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
128 if (list.length === 2)
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
129 commands.info(server, origin, target, list[1]);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
130 else
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
131 commands.usage(server, origin, target);
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
133 break;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
134 case "list":
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
135 commands.list(server, origin, target, query);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
136 break;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
137 default:
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
138 commands.usage(server, origin, target);
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
139 break;
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
140 }
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
141 }
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 };
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
143
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 function onCommand(server, origin, channel, message)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
145 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
146 commands.execute(server, origin, channel, message, false)
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 }
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
148
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 function onQueryCommand(server, origin, message)
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 {
773
8c44bbcbbab9 Misc: style, cleanup and update
David Demelier <markand@malikania.fr>
parents: 722
diff changeset
151 commands.execute(server, origin, origin, message, true)
0
1158cffe5a5e Initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 }