Jagan
805ac2475b
settings: Redesign edit bot form.
...
This removes the weird edit-bot sidebar, replacing it with a modal,
matching our edit-user widget (and various similar ones).
Fixes #13644 by removing the buggy code.
2020-04-28 23:08:45 -07:00
Steve Howell
7ac5d0602b
minor: Rename function to get_active_humans().
...
Saying `human_persons` is a bit redundant (although
kind of an artifact of our legacy use of `person`
when we really mean `user`.)
2020-03-22 10:55:11 -07:00
Anders Kaseorg
336a279005
js: Convert _.find(a, …) to a.find(…).
...
And convert the corresponding function expressions to arrow style
while we’re here.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-02-10 14:08:12 -08:00
Anders Kaseorg
7b0dea0351
js: Convert jQuery.each to for…of.
...
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-02-10 14:08:12 -08:00
Anders Kaseorg
02511bff1c
js: Automatically convert _.each to for…of.
...
This commit was automatically generated by the following script,
followed by lint --fix and a few small manual lint-related cleanups.
import * as babelParser from "recast/parsers/babel";
import * as recast from "recast";
import * as tsParser from "recast/parsers/typescript";
import { builders as b, namedTypes as n } from "ast-types";
import { Context } from "ast-types/lib/path-visitor";
import K from "ast-types/gen/kinds";
import { NodePath } from "ast-types/lib/node-path";
import assert from "assert";
import fs from "fs";
import path from "path";
import process from "process";
const checkExpression = (node: n.Node): node is K.ExpressionKind =>
n.Expression.check(node);
const checkStatement = (node: n.Node): node is K.StatementKind =>
n.Statement.check(node);
for (const file of process.argv.slice(2)) {
console.log("Parsing", file);
const ast = recast.parse(fs.readFileSync(file, { encoding: "utf8" }), {
parser: path.extname(file) === ".ts" ? tsParser : babelParser,
});
let changed = false;
let inLoop = false;
let replaceReturn = false;
const visitLoop = (...args: string[]) =>
function(this: Context, path: NodePath) {
for (const arg of args) {
this.visit(path.get(arg));
}
const old = { inLoop };
inLoop = true;
this.visit(path.get("body"));
inLoop = old.inLoop;
return false;
};
recast.visit(ast, {
visitDoWhileStatement: visitLoop("test"),
visitExpressionStatement(path) {
const { expression, comments } = path.node;
let valueOnly;
if (
n.CallExpression.check(expression) &&
n.MemberExpression.check(expression.callee) &&
!expression.callee.computed &&
n.Identifier.check(expression.callee.object) &&
expression.callee.object.name === "_" &&
n.Identifier.check(expression.callee.property) &&
["each", "forEach"].includes(expression.callee.property.name) &&
[2, 3].includes(expression.arguments.length) &&
checkExpression(expression.arguments[0]) &&
(n.FunctionExpression.check(expression.arguments[1]) ||
n.ArrowFunctionExpression.check(expression.arguments[1])) &&
[1, 2].includes(expression.arguments[1].params.length) &&
n.Identifier.check(expression.arguments[1].params[0]) &&
((valueOnly = expression.arguments[1].params[1] === undefined) ||
n.Identifier.check(expression.arguments[1].params[1])) &&
(expression.arguments[2] === undefined ||
n.ThisExpression.check(expression.arguments[2]))
) {
const old = { inLoop, replaceReturn };
inLoop = false;
replaceReturn = true;
this.visit(
path
.get("expression")
.get("arguments")
.get(1)
.get("body")
);
inLoop = old.inLoop;
replaceReturn = old.replaceReturn;
const [right, { body, params }] = expression.arguments;
const loop = b.forOfStatement(
b.variableDeclaration("let", [
b.variableDeclarator(
valueOnly ? params[0] : b.arrayPattern([params[1], params[0]])
),
]),
valueOnly
? right
: b.callExpression(
b.memberExpression(right, b.identifier("entries")),
[]
),
checkStatement(body) ? body : b.expressionStatement(body)
);
loop.comments = comments;
path.replace(loop);
changed = true;
}
this.traverse(path);
},
visitForStatement: visitLoop("init", "test", "update"),
visitForInStatement: visitLoop("left", "right"),
visitForOfStatement: visitLoop("left", "right"),
visitFunction(path) {
this.visit(path.get("params"));
const old = { replaceReturn };
replaceReturn = false;
this.visit(path.get("body"));
replaceReturn = old.replaceReturn;
return false;
},
visitReturnStatement(path) {
if (replaceReturn) {
assert(!inLoop); // could use labeled continue if this ever fires
const { argument, comments } = path.node;
if (argument === null) {
const s = b.continueStatement();
s.comments = comments;
path.replace(s);
} else {
const s = b.expressionStatement(argument);
s.comments = comments;
path.replace(s, b.continueStatement());
}
return false;
}
this.traverse(path);
},
visitWhileStatement: visitLoop("test"),
});
if (changed) {
console.log("Writing", file);
fs.writeFileSync(file, recast.print(ast).code, { encoding: "utf8" });
}
}
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-02-07 14:09:47 -08:00
Tim Abbott
df6b90db3c
settings: Fix copy-from-clipboard behavior for bot tokens.
...
We do this by cleaning up the API for generate_zuliprc_content,
allowing us to deduplicate the previously incorrect code.
2020-01-31 15:11:20 -08:00
Anders Kaseorg
1a07f7b158
js: Clean up user_id type confusion.
...
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-01-16 13:23:47 -08:00
Anders Kaseorg
28f3dfa284
js: Automatically convert var to let and const in most files.
...
This commit was originally automatically generated using `tools/lint
--only=eslint --fix`. It was then modified by tabbott to contain only
changes to a set of files that are unlikely to result in significant
merge conflicts with any open pull request, excluding about 20 files.
His plan is to merge the remaining changes with more precise care,
potentially involving merging parts of conflicting pull requests
before running the `eslint --fix` operation.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2019-11-03 12:42:39 -08:00
Anders Kaseorg
4d37dfcf85
js: Convert vars declared separately and assigned once to const.
...
Because of the separate declarations, ESLint would convert them to
`let` and then trigger the `prefer-const` error.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2019-10-28 15:02:43 -07:00
Anders Kaseorg
d17b577d0c
js: Purge useless IIFEs.
...
With webpack, variables declared in each file are already file-local
(Global variables need to be explicitly exported), so these IIFEs are
no longer needed.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2019-10-25 13:51:21 -07:00
Anders Kaseorg
db0b33842c
templates: Replace templates.render with require calls.
...
This removes an unnecessary layer of indirection and allows webpack to
catch filename mistakes.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2019-07-12 21:11:14 -07:00
Anders Kaseorg
3c3471b720
templates: Rename *.handlebars ↦ *.hbs and - ↦ _.
...
Tweaked by tabbott to avoid accidentally disabling the linter for
handlebars templates.
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2019-07-12 21:11:03 -07:00
Anders Kaseorg
ebb9a9ea9e
templates: Fix wrong path to edit-outgoing-webhook-service template.
...
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2019-07-09 11:31:16 -07:00
Thomas Ip
3ffe78e483
templates: Fix wrong path to edit-embedded-bot-service template.
...
This bug is introduced in #12667 .
2019-07-03 13:40:01 -07:00
Rishi Gupta
799d6b9203
org settings: Standardize strings in Other permissions section.
...
Also, options are now ordered from most restrictive to least restrictive.
A standard style here will be easier to understand and maintain as we add
more settings here.
2019-06-12 17:02:04 -07:00
Rishi Gupta
37e00dce78
settings: Update organization permission strings to reflect guests.
2018-10-30 10:48:06 -07:00
Shubham Dhama
2bcd21aeca
org settings: Use people.get_active_human_persons to get active humans.
2018-07-30 13:48:36 -07:00
Anupam Dagar
88ddf2bf5d
settings UI: Add copy zuliprc button to bot information box.
...
Fixes : #9510
2018-07-10 15:19:05 +05:30
Armaan Ahluwalia
6d255efe4c
app: Prepare JS files for consumption by webpack.
...
This commit prepares the frontend code to be consumed by webpack.
It is a hack: In theory, modules should be declaring and importing the
modules they depend on and the globals they expose directly.
However, that requires significant per-module work, which we don't
really want to block moving our toolchain to webpack on.
So we expose the modules by setting window.varName = varName; as
needed in the js files.
2018-07-05 10:53:36 +02:00
Shubham Padia
17cbafe0e0
bot settings: Scroll to bottom after showing bot_error.
...
Fixes #9868 .
The error went unnoticed as the error remains hidden below due to
the scrollable div.
2018-07-03 06:02:49 -07:00
Steve Howell
d90d1a04bb
bot settings: Clean up error handling.
...
The error handling for delete/reactivate was broken.
The old code related to appending id_suffix to the ids of
the per-bot error divs did not have corresponding
selectors in the actual error handling.
Things still aren't great, but there's a bit more
encapsulation now, and you'll see errors for the
delete/reactivate cases.
2018-07-03 06:02:49 -07:00
Steve Howell
26b48b95dc
refactor: Export settings_bots.render_bots().
...
We also now call this explicitly when we need to
re-render (instead of triggering a custom event).
2018-07-03 06:02:49 -07:00
Yashashvi Dave
317a2fff2a
bots settings: Improve API for editing bot owners to refer to users by ID.
...
Fixes #9502
2018-06-23 12:47:50 -07:00
Shubham Dhama
417f01386d
bots: Hide UI for adding new bots for guest users.
2018-06-16 06:33:14 -07:00
Shubham Dhama
603139500a
settings_bots: Extract logic for ability to create bots.
...
This is a minor refactor/deduplication and renaming of
'admin_only_bot_creation' to 'can_create_new_bots'
2018-06-16 06:33:14 -07:00
Shubham Dhama
dcb6254a4e
eslint: Enable `no-extra-parens` rule.
...
Following sub-configuration is disabled:
"nestedBinaryExpressions": false,
2018-06-11 07:51:24 -04:00
Shubham Dhama
cc03f9fb8f
eslint: Enable space-infix-ops rule.
...
More about rule at https://eslint.org/docs/rules/space-infix-ops
2018-06-05 00:47:35 +05:30
Robert Hönig
5d9a8cf64f
bots: Add token to outgoing webhook zuliprc.
...
We want the Botserver to not only work with the
botserverrc, but also with a zuliprc of an outgoing
webhook. Because the Botserver uses the outgoing
webhook token for authentication, we need to include
it in the zuliprc for outgoing webhooks.
2018-06-04 08:39:24 -07:00
Robert Hönig
d08c701bb4
frontend: Use bot_data instead of HTML data to generate zuliprc.
...
It is better to retrieve all information about a bot from
the central bot data store, rather than relying on the
bot card's HTML attributes.
2018-06-04 08:39:11 -07:00
Robert Hönig
7e7583e9cd
frontend: bots: Extract encode_zuliprc_as_uri.
...
This is preparation for an upcoming refactoring where we pass a bot
ID, not the email/api_key, into the zuliprc generation functions in
the bots code path.
2018-06-04 08:38:14 -07:00
Shubham Dhama
0caf55f2f0
settings_bots: Move bot_creation_policy_values to top-level.
...
Since ensure_i18n is dead we don't need to explictly load them.
2018-05-30 23:25:02 +05:30
Robert Hönig
647c63050f
botserver: Add outgoing webhook tokens to botserverrc.
...
The tokens will be used to authorize the server when sending
messages to the Botserver.
2018-05-30 10:00:19 -04:00
Robert Hönig
04d68d2570
code: Rename flaskbotrc to botserverrc.
2018-05-29 10:19:17 +02:00
Robert Hönig
53891a9bed
bots: Don't name section headers in flaskbotrc.
...
The Botserver uses section headers in the flaskbotrc to
determine which bot to run. Silently setting the section
headers to a bot's username is confusing and makes it
harder for Botserver users to figure out how to get the
Botserver to run the bots they want. This commit empties
all flaskbotrc section headers and thus makes the assignment
of bots explicit and mandatory.
2018-05-25 10:33:40 -07:00
Yashashvi Dave
3b09dda879
edit bot: Fix UI element shows incorrect interface for outgoing webhook.
...
Dropdown element for outgoing interface type was not showing correct
value, cause the way default value was set to dropdown was incorrect
(it should have been setting the selected parameter on the selected
option if it were going to be selected via the template code).
Fixes #9419 .
2018-05-21 10:07:18 -07:00
Yashashvi Dave
4162e61f33
/json/users: Replace email with user_id in API to reactivate user.
2018-05-18 15:20:43 -07:00
Yashashvi Dave
b949d10592
/json/bots: Replace email with user_id in API to generate bot_api_key.
...
Fixes #3643 .
2018-05-15 16:37:06 -07:00
Yashashvi Dave
d6e2f9fc88
/json/bots: Replace email with user_id in API to update bots.
2018-05-15 16:34:17 -07:00
Yashashvi Dave
0554e68528
static/templates/edit_bot.handlebars: Fix undefined bot_id.
...
Template was rendering undefined value of `bot_id` instead of
`user_id`.
Fix this by replacing `bot_id` with `user_id` and changing
template data variable to `data-user-id` to avoid
future confusion.
2018-05-15 10:35:19 -07:00
Tim Abbott
955ef3b18c
bot settings: Fix spelling of data-user-id.
2018-04-28 10:23:46 -07:00
Shubham Dhama
efeee28b12
settings: Remove obsolete lines of code.
...
There don't exist any element with this classes and it seems they
are accidentally added during addition of `bot_creation_policy`.
2018-03-30 16:07:53 +05:30
Shubham Dhama
aca2364455
settings: Focus "Add a new bot" tab when there is no active bot.
...
Fixes : #8872 .
2018-03-30 16:07:01 +05:30
Shubham Dhama
0ef195ecc2
settings: Refactor code for focussing bot tabs.
2018-03-30 16:07:01 +05:30
Yago González
1237f819bb
settings: Fix typo.
2018-03-29 08:04:51 -07:00
Shubham Dhama
777b6de689
org settings: Add setting to prevent users from adding bots.
...
Fixes : #7908 .
2018-03-09 13:21:55 -08:00
Robert Hönig
35c7428490
frontend: Add create-bot loading indicator.
...
The former "the-bot-is-being-created" indicator was useless,
since it only edited the value attribute of the "create-bot" button;
that attribute only sets the text of a button when it is initially created.
This commit replaces the old code with a spinning loading indicator,
like the one used for editing bots.
2018-03-08 15:05:00 -08:00
Robert Hönig
695b3e48e8
frontend: Add embedded bot config data editing.
2018-03-01 08:25:43 -08:00
Robert Hönig
7b7f4cc62d
bot settings: Generate embedded bot selector in handlebars.
...
It's better to do stuff like this in HTML templates like
handlebars instead of JS.
2018-03-01 08:25:43 -08:00
Robert Hönig
3e1b817376
bot settings: Move config item generation from js to handlebars.
2018-02-09 12:30:24 -08:00
Robert Hönig
33322fed51
bot_settings.js: Narrow config item selector.
...
Needed to avoid selector conflicts with the future
config items in the edit sidebar.
2018-02-09 12:30:24 -08:00