diff options
| author | Shyam Sunder | 2020-06-05 18:03:37 -0400 |
|---|---|---|
| committer | Shyam Sunder | 2020-06-06 08:58:23 -0400 |
| commit | 57193b57157b7a42896c887a2d5930493ac7b290 (patch) | |
| tree | 9555453a944caae64d8a00e4b073482d9e7fb244 /client/js/controllers | |
| parent | c06aaa63af977e64ef08bfba7829214f0f0ed38e (diff) | |
client+server: implement code autoformatting using prettier and black
Diffstat (limited to 'client/js/controllers')
25 files changed, 1345 insertions, 1039 deletions
diff --git a/client/js/controllers/auth_controller.js b/client/js/controllers/auth_controller.js index a6ec97d..e01fb9b 100644 --- a/client/js/controllers/auth_controller.js +++ b/client/js/controllers/auth_controller.js @@ -1,38 +1,40 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const tags = require('../tags.js'); -const pools = require('../pools.js'); -const uri = require('../util/uri.js'); -const topNavigation = require('../models/top_navigation.js'); -const LoginView = require('../views/login_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const tags = require("../tags.js"); +const pools = require("../pools.js"); +const uri = require("../util/uri.js"); +const topNavigation = require("../models/top_navigation.js"); +const LoginView = require("../views/login_view.js"); class LoginController { constructor() { api.forget(); - topNavigation.activate('login'); - topNavigation.setTitle('Login'); + topNavigation.activate("login"); + topNavigation.setTitle("Login"); this._loginView = new LoginView(); - this._loginView.addEventListener('submit', e => this._evtLogin(e)); + this._loginView.addEventListener("submit", (e) => this._evtLogin(e)); } _evtLogin(e) { this._loginView.clearMessages(); this._loginView.disableForm(); api.forget(); - api.login(e.detail.name, e.detail.password, e.detail.remember) - .then(() => { + api.login(e.detail.name, e.detail.password, e.detail.remember).then( + () => { const ctx = router.show(uri.formatClientLink()); - ctx.controller.showSuccess('Logged in'); + ctx.controller.showSuccess("Logged in"); // reload tag category color map, this is required when `tag_categories:list` has a permission other than anonymous tags.refreshCategoryColorMap(); pools.refreshCategoryColorMap(); - }, error => { + }, + (error) => { this._loginView.showError(error.message); this._loginView.enableForm(); - }); + } + ); } } @@ -41,15 +43,15 @@ class LogoutController { api.forget(); api.logout(); const ctx = router.show(uri.formatClientLink()); - ctx.controller.showSuccess('Logged out'); + ctx.controller.showSuccess("Logged out"); } } -module.exports = router => { - router.enter(['login'], (ctx, next) => { +module.exports = (router) => { + router.enter(["login"], (ctx, next) => { ctx.controller = new LoginController(); }); - router.enter(['logout'], (ctx, next) => { + router.enter(["logout"], (ctx, next) => { ctx.controller = new LogoutController(); }); }; diff --git a/client/js/controllers/base_post_controller.js b/client/js/controllers/base_post_controller.js index b86aea7..7a21449 100644 --- a/client/js/controllers/base_post_controller.js +++ b/client/js/controllers/base_post_controller.js @@ -1,19 +1,19 @@ -'use strict'; +"use strict"; -const api = require('../api.js'); -const topNavigation = require('../models/top_navigation.js'); -const EmptyView = require('../views/empty_view.js'); +const api = require("../api.js"); +const topNavigation = require("../models/top_navigation.js"); +const EmptyView = require("../views/empty_view.js"); class BasePostController { constructor(ctx) { - if (!api.hasPrivilege('posts:view')) { + if (!api.hasPrivilege("posts:view")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to view posts.'); + this._view.showError("You don't have privileges to view posts."); return; } - topNavigation.activate('posts'); - topNavigation.setTitle('Post #' + ctx.parameters.id.toString()); + topNavigation.activate("posts"); + topNavigation.setTitle("Post #" + ctx.parameters.id.toString()); } } diff --git a/client/js/controllers/comments_controller.js b/client/js/controllers/comments_controller.js index 67e44ac..d54059e 100644 --- a/client/js/controllers/comments_controller.js +++ b/client/js/controllers/comments_controller.js @@ -1,51 +1,55 @@ -'use strict'; +"use strict"; -const api = require('../api.js'); -const uri = require('../util/uri.js'); -const PostList = require('../models/post_list.js'); -const topNavigation = require('../models/top_navigation.js'); -const PageController = require('../controllers/page_controller.js'); -const CommentsPageView = require('../views/comments_page_view.js'); -const EmptyView = require('../views/empty_view.js'); +const api = require("../api.js"); +const uri = require("../util/uri.js"); +const PostList = require("../models/post_list.js"); +const topNavigation = require("../models/top_navigation.js"); +const PageController = require("../controllers/page_controller.js"); +const CommentsPageView = require("../views/comments_page_view.js"); +const EmptyView = require("../views/empty_view.js"); -const fields = ['id', 'comments', 'commentCount', 'thumbnailUrl']; +const fields = ["id", "comments", "commentCount", "thumbnailUrl"]; class CommentsController { constructor(ctx) { - if (!api.hasPrivilege('comments:list')) { + if (!api.hasPrivilege("comments:list")) { this._view = new EmptyView(); this._view.showError( - 'You don\'t have privileges to view comments.'); + "You don't have privileges to view comments." + ); return; } - topNavigation.activate('comments'); - topNavigation.setTitle('Listing comments'); + topNavigation.activate("comments"); + topNavigation.setTitle("Listing comments"); this._pageController = new PageController(); this._pageController.run({ parameters: ctx.parameters, defaultLimit: 10, getClientUrlForPage: (offset, limit) => { - const parameters = Object.assign( - {}, ctx.parameters, {offset: offset, limit: limit}); - return uri.formatClientLink('comments', parameters); + const parameters = Object.assign({}, ctx.parameters, { + offset: offset, + limit: limit, + }); + return uri.formatClientLink("comments", parameters); }, requestPage: (offset, limit) => { return PostList.search( - 'sort:comment-date comment-count-min:1', + "sort:comment-date comment-count-min:1", offset, limit, - fields); + fields + ); }, - pageRenderer: pageCtx => { + pageRenderer: (pageCtx) => { Object.assign(pageCtx, { - canViewPosts: api.hasPrivilege('posts:view'), + canViewPosts: api.hasPrivilege("posts:view"), }); const view = new CommentsPageView(pageCtx); - view.addEventListener('submit', e => this._evtUpdate(e)); - view.addEventListener('score', e => this._evtScore(e)); - view.addEventListener('delete', e => this._evtDelete(e)); + view.addEventListener("submit", (e) => this._evtUpdate(e)); + view.addEventListener("score", (e) => this._evtScore(e)); + view.addEventListener("delete", (e) => this._evtDelete(e)); return view; }, }); @@ -54,26 +58,27 @@ class CommentsController { _evtUpdate(e) { // TODO: disable form e.detail.comment.text = e.detail.text; - e.detail.comment.save() - .catch(error => { - e.detail.target.showError(error.message); - // TODO: enable form - }); + e.detail.comment.save().catch((error) => { + e.detail.target.showError(error.message); + // TODO: enable form + }); } _evtScore(e) { - e.detail.comment.setScore(e.detail.score) - .catch(error => window.alert(error.message)); + e.detail.comment + .setScore(e.detail.score) + .catch((error) => window.alert(error.message)); } _evtDelete(e) { - e.detail.comment.delete() - .catch(error => window.alert(error.message)); + e.detail.comment + .delete() + .catch((error) => window.alert(error.message)); } } -module.exports = router => { - router.enter(['comments'], (ctx, next) => { +module.exports = (router) => { + router.enter(["comments"], (ctx, next) => { new CommentsController(ctx); }); -} +}; diff --git a/client/js/controllers/help_controller.js b/client/js/controllers/help_controller.js index 8e65346..c290a6b 100644 --- a/client/js/controllers/help_controller.js +++ b/client/js/controllers/help_controller.js @@ -1,24 +1,24 @@ -'use strict'; +"use strict"; -const topNavigation = require('../models/top_navigation.js'); -const HelpView = require('../views/help_view.js'); +const topNavigation = require("../models/top_navigation.js"); +const HelpView = require("../views/help_view.js"); class HelpController { constructor(section, subsection) { - topNavigation.activate('help'); - topNavigation.setTitle('Help'); + topNavigation.activate("help"); + topNavigation.setTitle("Help"); this._helpView = new HelpView(section, subsection); } } -module.exports = router => { - router.enter(['help'], (ctx, next) => { +module.exports = (router) => { + router.enter(["help"], (ctx, next) => { new HelpController(); }); - router.enter(['help', ':section'], (ctx, next) => { + router.enter(["help", ":section"], (ctx, next) => { new HelpController(ctx.parameters.section); }); - router.enter(['help', ':section', ':subsection'], (ctx, next) => { + router.enter(["help", ":section", ":subsection"], (ctx, next) => { new HelpController(ctx.parameters.section, ctx.parameters.subsection); }); }; diff --git a/client/js/controllers/home_controller.js b/client/js/controllers/home_controller.js index 590da67..cf56e27 100644 --- a/client/js/controllers/home_controller.js +++ b/client/js/controllers/home_controller.js @@ -1,26 +1,26 @@ -'use strict'; +"use strict"; -const api = require('../api.js'); -const config = require('../config.js'); -const Info = require('../models/info.js'); -const topNavigation = require('../models/top_navigation.js'); -const HomeView = require('../views/home_view.js'); +const api = require("../api.js"); +const config = require("../config.js"); +const Info = require("../models/info.js"); +const topNavigation = require("../models/top_navigation.js"); +const HomeView = require("../views/home_view.js"); class HomeController { constructor() { - topNavigation.activate('home'); - topNavigation.setTitle('Home'); + topNavigation.activate("home"); + topNavigation.setTitle("Home"); this._homeView = new HomeView({ name: api.getName(), version: config.meta.version, buildDate: config.meta.buildDate, - canListSnapshots: api.hasPrivilege('snapshots:list'), - canListPosts: api.hasPrivilege('posts:list'), + canListSnapshots: api.hasPrivilege("snapshots:list"), + canListPosts: api.hasPrivilege("posts:list"), }); - Info.get() - .then(info => { + Info.get().then( + (info) => { this._homeView.setStats({ diskUsage: info.diskUsage, postCount: info.postCount, @@ -31,7 +31,8 @@ class HomeController { featuringTime: info.featuringTime, }); }, - error => this._homeView.showError(error.message)); + (error) => this._homeView.showError(error.message) + ); } showSuccess(message) { @@ -43,8 +44,8 @@ class HomeController { } } -module.exports = router => { +module.exports = (router) => { router.enter([], (ctx, next) => { ctx.controller = new HomeController(); }); -} +}; diff --git a/client/js/controllers/not_found_controller.js b/client/js/controllers/not_found_controller.js index 8ceeef0..c99e308 100644 --- a/client/js/controllers/not_found_controller.js +++ b/client/js/controllers/not_found_controller.js @@ -1,18 +1,18 @@ -'use strict'; +"use strict"; -const topNavigation = require('../models/top_navigation.js'); -const NotFoundView = require('../views/not_found_view.js'); +const topNavigation = require("../models/top_navigation.js"); +const NotFoundView = require("../views/not_found_view.js"); class NotFoundController { constructor(path) { - topNavigation.activate(''); - topNavigation.setTitle('Not found'); + topNavigation.activate(""); + topNavigation.setTitle("Not found"); this._notFoundView = new NotFoundView(path); } } -module.exports = router => { +module.exports = (router) => { router.enter(null, (ctx, next) => { ctx.controller = new NotFoundController(ctx.canonicalPath); }); -} +}; diff --git a/client/js/controllers/page_controller.js b/client/js/controllers/page_controller.js index ae55804..d3ee7e9 100644 --- a/client/js/controllers/page_controller.js +++ b/client/js/controllers/page_controller.js @@ -1,8 +1,8 @@ -'use strict'; +"use strict"; -const settings = require('../models/settings.js'); -const EndlessPageView = require('../views/endless_page_view.js'); -const ManualPageView = require('../views/manual_page_view.js'); +const settings = require("../models/settings.js"); +const EndlessPageView = require("../views/endless_page_view.js"); +const ManualPageView = require("../views/manual_page_view.js"); class PageController { constructor(ctx) { diff --git a/client/js/controllers/password_reset_controller.js b/client/js/controllers/password_reset_controller.js index e0a9801..aa66c03 100644 --- a/client/js/controllers/password_reset_controller.js +++ b/client/js/controllers/password_reset_controller.js @@ -1,19 +1,20 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const uri = require('../util/uri.js'); -const topNavigation = require('../models/top_navigation.js'); -const PasswordResetView = require('../views/password_reset_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const uri = require("../util/uri.js"); +const topNavigation = require("../models/top_navigation.js"); +const PasswordResetView = require("../views/password_reset_view.js"); class PasswordResetController { constructor() { - topNavigation.activate('login'); - topNavigation.setTitle('Password reminder'); + topNavigation.activate("login"); + topNavigation.setTitle("Password reminder"); this._passwordResetView = new PasswordResetView(); - this._passwordResetView.addEventListener( - 'submit', e => this._evtReset(e)); + this._passwordResetView.addEventListener("submit", (e) => + this._evtReset(e) + ); } _evtReset(e) { @@ -21,15 +22,20 @@ class PasswordResetController { this._passwordResetView.disableForm(); api.forget(); api.logout(); - api.get(uri.formatApiLink('password-reset', e.detail.userNameOrEmail)) - .then(() => { + api.get( + uri.formatApiLink("password-reset", e.detail.userNameOrEmail) + ).then( + () => { this._passwordResetView.showSuccess( - 'E-mail has been sent. To finish the procedure, ' + - 'please click the link it contains.'); - }, error => { + "E-mail has been sent. To finish the procedure, " + + "please click the link it contains." + ); + }, + (error) => { this._passwordResetView.showError(error.message); this._passwordResetView.enableForm(); - }); + } + ); } } @@ -38,26 +44,30 @@ class PasswordResetFinishController { api.forget(); api.logout(); let password = null; - api.post(uri.formatApiLink('password-reset', name), {token: token}) - .then(response => { + api.post(uri.formatApiLink("password-reset", name), { token: token }) + .then((response) => { password = response.password; return api.login(name, password, false); - }).then(() => { - const ctx = router.show(uri.formatClientLink()); - ctx.controller.showSuccess('New password: ' + password); - }, error => { - const ctx = router.show(uri.formatClientLink()); - ctx.controller.showError(error.message); - }); + }) + .then( + () => { + const ctx = router.show(uri.formatClientLink()); + ctx.controller.showSuccess("New password: " + password); + }, + (error) => { + const ctx = router.show(uri.formatClientLink()); + ctx.controller.showError(error.message); + } + ); } } -module.exports = router => { - router.enter(['password-reset'], (ctx, next) => { +module.exports = (router) => { + router.enter(["password-reset"], (ctx, next) => { ctx.controller = new PasswordResetController(); }); - router.enter(['password-reset', ':descriptor'], (ctx, next) => { - const [name, token] = ctx.parameters.descriptor.split(':', 2); + router.enter(["password-reset", ":descriptor"], (ctx, next) => { + const [name, token] = ctx.parameters.descriptor.split(":", 2); ctx.controller = new PasswordResetFinishController(name, token); }); }; diff --git a/client/js/controllers/pool_categories_controller.js b/client/js/controllers/pool_categories_controller.js index 4c2c3b7..4db725c 100644 --- a/client/js/controllers/pool_categories_controller.js +++ b/client/js/controllers/pool_categories_controller.js @@ -1,57 +1,69 @@ -'use strict'; +"use strict"; -const api = require('../api.js'); -const pools = require('../pools.js'); -const PoolCategoryList = require('../models/pool_category_list.js'); -const topNavigation = require('../models/top_navigation.js'); -const PoolCategoriesView = require('../views/pool_categories_view.js'); -const EmptyView = require('../views/empty_view.js'); +const api = require("../api.js"); +const pools = require("../pools.js"); +const PoolCategoryList = require("../models/pool_category_list.js"); +const topNavigation = require("../models/top_navigation.js"); +const PoolCategoriesView = require("../views/pool_categories_view.js"); +const EmptyView = require("../views/empty_view.js"); class PoolCategoriesController { constructor() { - if (!api.hasPrivilege('poolCategories:list')) { + if (!api.hasPrivilege("poolCategories:list")) { this._view = new EmptyView(); this._view.showError( - 'You don\'t have privileges to view pool categories.'); + "You don't have privileges to view pool categories." + ); return; } - topNavigation.activate('pools'); - topNavigation.setTitle('Listing pools'); - PoolCategoryList.get().then(response => { - this._poolCategories = response.results; - this._view = new PoolCategoriesView({ - poolCategories: this._poolCategories, - canEditName: api.hasPrivilege('poolCategories:edit:name'), - canEditColor: api.hasPrivilege('poolCategories:edit:color'), - canDelete: api.hasPrivilege('poolCategories:delete'), - canCreate: api.hasPrivilege('poolCategories:create'), - canSetDefault: api.hasPrivilege('poolCategories:setDefault'), - }); - this._view.addEventListener('submit', e => this._evtSubmit(e)); - }, error => { - this._view = new EmptyView(); - this._view.showError(error.message); - }); + topNavigation.activate("pools"); + topNavigation.setTitle("Listing pools"); + PoolCategoryList.get().then( + (response) => { + this._poolCategories = response.results; + this._view = new PoolCategoriesView({ + poolCategories: this._poolCategories, + canEditName: api.hasPrivilege("poolCategories:edit:name"), + canEditColor: api.hasPrivilege( + "poolCategories:edit:color" + ), + canDelete: api.hasPrivilege("poolCategories:delete"), + canCreate: api.hasPrivilege("poolCategories:create"), + canSetDefault: api.hasPrivilege( + "poolCategories:setDefault" + ), + }); + this._view.addEventListener("submit", (e) => + this._evtSubmit(e) + ); + }, + (error) => { + this._view = new EmptyView(); + this._view.showError(error.message); + } + ); } _evtSubmit(e) { this._view.clearMessages(); this._view.disableForm(); - this._poolCategories.save() - .then(() => { + this._poolCategories.save().then( + () => { pools.refreshCategoryColorMap(); this._view.enableForm(); - this._view.showSuccess('Changes saved.'); - }, error => { + this._view.showSuccess("Changes saved."); + }, + (error) => { this._view.enableForm(); this._view.showError(error.message); - }); + } + ); } } -module.exports = router => { - router.enter(['pool-categories'], (ctx, next) => { +module.exports = (router) => { + router.enter(["pool-categories"], (ctx, next) => { ctx.controller = new PoolCategoriesController(ctx, next); }); }; diff --git a/client/js/controllers/pool_controller.js b/client/js/controllers/pool_controller.js index a06ba5c..6844171 100644 --- a/client/js/controllers/pool_controller.js +++ b/client/js/controllers/pool_controller.js @@ -1,63 +1,76 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const misc = require('../util/misc.js'); -const uri = require('../util/uri.js'); -const Pool = require('../models/pool.js'); -const Post = require('../models/post.js'); -const PoolCategoryList = require('../models/pool_category_list.js'); -const topNavigation = require('../models/top_navigation.js'); -const PoolView = require('../views/pool_view.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const misc = require("../util/misc.js"); +const uri = require("../util/uri.js"); +const Pool = require("../models/pool.js"); +const Post = require("../models/post.js"); +const PoolCategoryList = require("../models/pool_category_list.js"); +const topNavigation = require("../models/top_navigation.js"); +const PoolView = require("../views/pool_view.js"); +const EmptyView = require("../views/empty_view.js"); class PoolController { constructor(ctx, section) { - if (!api.hasPrivilege('pools:view')) { + if (!api.hasPrivilege("pools:view")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to view pools.'); + this._view.showError("You don't have privileges to view pools."); return; } Promise.all([ PoolCategoryList.get(), - Pool.get(ctx.parameters.id) - ]).then(responses => { - const [poolCategoriesResponse, pool] = responses; + Pool.get(ctx.parameters.id), + ]).then( + (responses) => { + const [poolCategoriesResponse, pool] = responses; - topNavigation.activate('pools'); - topNavigation.setTitle('Pool #' + pool.names[0]); + topNavigation.activate("pools"); + topNavigation.setTitle("Pool #" + pool.names[0]); - this._name = ctx.parameters.name; - pool.addEventListener('change', e => this._evtSaved(e, section)); + this._name = ctx.parameters.name; + pool.addEventListener("change", (e) => + this._evtSaved(e, section) + ); - const categories = {}; - for (let category of poolCategoriesResponse.results) { - categories[category.name] = category.name; - } + const categories = {}; + for (let category of poolCategoriesResponse.results) { + categories[category.name] = category.name; + } - this._view = new PoolView({ - pool: pool, - section: section, - canEditAnything: api.hasPrivilege('pools:edit'), - canEditNames: api.hasPrivilege('pools:edit:names'), - canEditCategory: api.hasPrivilege('pools:edit:category'), - canEditDescription: api.hasPrivilege('pools:edit:description'), - canEditPosts: api.hasPrivilege('pools:edit:posts'), - canMerge: api.hasPrivilege('pools:merge'), - canDelete: api.hasPrivilege('pools:delete'), - categories: categories, - escapeColons: uri.escapeColons, - }); + this._view = new PoolView({ + pool: pool, + section: section, + canEditAnything: api.hasPrivilege("pools:edit"), + canEditNames: api.hasPrivilege("pools:edit:names"), + canEditCategory: api.hasPrivilege("pools:edit:category"), + canEditDescription: api.hasPrivilege( + "pools:edit:description" + ), + canEditPosts: api.hasPrivilege("pools:edit:posts"), + canMerge: api.hasPrivilege("pools:merge"), + canDelete: api.hasPrivilege("pools:delete"), + categories: categories, + escapeColons: uri.escapeColons, + }); - this._view.addEventListener('change', e => this._evtChange(e)); - this._view.addEventListener('submit', e => this._evtUpdate(e)); - this._view.addEventListener('merge', e => this._evtMerge(e)); - this._view.addEventListener('delete', e => this._evtDelete(e)); - }, error => { - this._view = new EmptyView(); - this._view.showError(error.message); - }); + this._view.addEventListener("change", (e) => + this._evtChange(e) + ); + this._view.addEventListener("submit", (e) => + this._evtUpdate(e) + ); + this._view.addEventListener("merge", (e) => this._evtMerge(e)); + this._view.addEventListener("delete", (e) => + this._evtDelete(e) + ); + }, + (error) => { + this._view = new EmptyView(); + this._view.showError(error.message); + } + ); } _evtChange(e) { @@ -67,7 +80,11 @@ class PoolController { _evtSaved(e, section) { misc.disableExitConfirmation(); if (this._name !== e.detail.pool.names[0]) { - router.replace(uri.formatClientLink('pool', e.detail.pool.id, section), null, false); + router.replace( + uri.formatClientLink("pool", e.detail.pool.id, section), + null, + false + ); } } @@ -86,62 +103,74 @@ class PoolController { if (e.detail.posts !== undefined) { e.detail.pool.posts.clear(); for (let postId of e.detail.posts) { - e.detail.pool.posts.add(Post.fromResponse({id: parseInt(postId)})); + e.detail.pool.posts.add( + Post.fromResponse({ id: parseInt(postId) }) + ); } } - e.detail.pool.save().then(() => { - this._view.showSuccess('Pool saved.'); - this._view.enableForm(); - }, error => { - this._view.showError(error.message); - this._view.enableForm(); - }); + e.detail.pool.save().then( + () => { + this._view.showSuccess("Pool saved."); + this._view.enableForm(); + }, + (error) => { + this._view.showError(error.message); + this._view.enableForm(); + } + ); } _evtMerge(e) { this._view.clearMessages(); this._view.disableForm(); - e.detail.pool - .merge(e.detail.targetPoolId, e.detail.addAlias) - .then(() => { - this._view.showSuccess('Pool merged.'); + e.detail.pool.merge(e.detail.targetPoolId, e.detail.addAlias).then( + () => { + this._view.showSuccess("Pool merged."); this._view.enableForm(); router.replace( uri.formatClientLink( - 'pool', e.detail.targetPoolId, 'merge'), + "pool", + e.detail.targetPoolId, + "merge" + ), null, - false); - }, error => { + false + ); + }, + (error) => { this._view.showError(error.message); this._view.enableForm(); - }); + } + ); } _evtDelete(e) { this._view.clearMessages(); this._view.disableForm(); - e.detail.pool.delete() - .then(() => { - const ctx = router.show(uri.formatClientLink('pools')); - ctx.controller.showSuccess('Pool deleted.'); - }, error => { + e.detail.pool.delete().then( + () => { + const ctx = router.show(uri.formatClientLink("pools")); + ctx.controller.showSuccess("Pool deleted."); + }, + (error) => { this._view.showError(error.message); this._view.enableForm(); - }); + } + ); } } -module.exports = router => { - router.enter(['pool', ':id', 'edit'], (ctx, next) => { - ctx.controller = new PoolController(ctx, 'edit'); +module.exports = (router) => { + router.enter(["pool", ":id", "edit"], (ctx, next) => { + ctx.controller = new PoolController(ctx, "edit"); }); - router.enter(['pool', ':id', 'merge'], (ctx, next) => { - ctx.controller = new PoolController(ctx, 'merge'); + router.enter(["pool", ":id", "merge"], (ctx, next) => { + ctx.controller = new PoolController(ctx, "merge"); }); - router.enter(['pool', ':id', 'delete'], (ctx, next) => { - ctx.controller = new PoolController(ctx, 'delete'); + router.enter(["pool", ":id", "delete"], (ctx, next) => { + ctx.controller = new PoolController(ctx, "delete"); }); - router.enter(['pool', ':id'], (ctx, next) => { - ctx.controller = new PoolController(ctx, 'summary'); + router.enter(["pool", ":id"], (ctx, next) => { + ctx.controller = new PoolController(ctx, "summary"); }); }; diff --git a/client/js/controllers/pool_create_controller.js b/client/js/controllers/pool_create_controller.js index 2b8e7e6..7140aac 100644 --- a/client/js/controllers/pool_create_controller.js +++ b/client/js/controllers/pool_create_controller.js @@ -1,58 +1,65 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const misc = require('../util/misc.js'); -const uri = require('../util/uri.js'); -const PoolCategoryList = require('../models/pool_category_list.js'); -const PoolCreateView = require('../views/pool_create_view.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const misc = require("../util/misc.js"); +const uri = require("../util/uri.js"); +const PoolCategoryList = require("../models/pool_category_list.js"); +const PoolCreateView = require("../views/pool_create_view.js"); +const EmptyView = require("../views/empty_view.js"); class PoolCreateController { constructor(ctx) { - if (!api.hasPrivilege('pools:create')) { + if (!api.hasPrivilege("pools:create")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to create pools.'); + this._view.showError("You don't have privileges to create pools."); return; } - PoolCategoryList.get().then(poolCategoriesResponse => { - const categories = {}; - for (let category of poolCategoriesResponse.results) { - categories[category.name] = category.name; - } + PoolCategoryList.get().then( + (poolCategoriesResponse) => { + const categories = {}; + for (let category of poolCategoriesResponse.results) { + categories[category.name] = category.name; + } - this._view = new PoolCreateView({ - canCreate: api.hasPrivilege('pools:create'), - categories: categories, - escapeColons: uri.escapeColons, - }); + this._view = new PoolCreateView({ + canCreate: api.hasPrivilege("pools:create"), + categories: categories, + escapeColons: uri.escapeColons, + }); - this._view.addEventListener('submit', e => this._evtCreate(e)); - }, error => { - this._view = new EmptyView(); - this._view.showError(error.message); - }); + this._view.addEventListener("submit", (e) => + this._evtCreate(e) + ); + }, + (error) => { + this._view = new EmptyView(); + this._view.showError(error.message); + } + ); } _evtCreate(e) { this._view.clearMessages(); this._view.disableForm(); - api.post(uri.formatApiLink('pool'), e.detail) - .then(() => { + api.post(uri.formatApiLink("pool"), e.detail).then( + () => { this._view.clearMessages(); misc.disableExitConfirmation(); - const ctx = router.show(uri.formatClientLink('pools')); - ctx.controller.showSuccess('Pool created.'); - }, error => { + const ctx = router.show(uri.formatClientLink("pools")); + ctx.controller.showSuccess("Pool created."); + }, + (error) => { this._view.showError(error.message); this._view.enableForm(); - }); + } + ); } } -module.exports = router => { - router.enter(['pool', 'create'], (ctx, next) => { - ctx.controller = new PoolCreateController(ctx, 'create'); +module.exports = (router) => { + router.enter(["pool", "create"], (ctx, next) => { + ctx.controller = new PoolCreateController(ctx, "create"); }); }; diff --git a/client/js/controllers/pool_list_controller.js b/client/js/controllers/pool_list_controller.js index dff649f..91d655c 100644 --- a/client/js/controllers/pool_list_controller.js +++ b/client/js/controllers/pool_list_controller.js @@ -1,47 +1,51 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const uri = require('../util/uri.js'); -const PoolList = require('../models/pool_list.js'); -const topNavigation = require('../models/top_navigation.js'); -const PageController = require('../controllers/page_controller.js'); -const PoolsHeaderView = require('../views/pools_header_view.js'); -const PoolsPageView = require('../views/pools_page_view.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const uri = require("../util/uri.js"); +const PoolList = require("../models/pool_list.js"); +const topNavigation = require("../models/top_navigation.js"); +const PageController = require("../controllers/page_controller.js"); +const PoolsHeaderView = require("../views/pools_header_view.js"); +const PoolsPageView = require("../views/pools_page_view.js"); +const EmptyView = require("../views/empty_view.js"); const fields = [ - 'id', - 'names', - 'posts', - 'creationTime', - 'postCount', - 'category' + "id", + "names", + "posts", + "creationTime", + "postCount", + "category", ]; class PoolListController { constructor(ctx) { this._pageController = new PageController(); - if (!api.hasPrivilege('pools:list')) { + if (!api.hasPrivilege("pools:list")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to view pools.'); + this._view.showError("You don't have privileges to view pools."); return; } this._ctx = ctx; - topNavigation.activate('pools'); - topNavigation.setTitle('Listing pools'); + topNavigation.activate("pools"); + topNavigation.setTitle("Listing pools"); this._headerView = new PoolsHeaderView({ hostNode: this._pageController.view.pageHeaderHolderNode, parameters: ctx.parameters, - canCreate: api.hasPrivilege('pools:create'), - canEditPoolCategories: api.hasPrivilege('poolCategories:edit'), + canCreate: api.hasPrivilege("pools:create"), + canEditPoolCategories: api.hasPrivilege("poolCategories:edit"), }); this._headerView.addEventListener( - 'submit', e => this._evtSubmit(e), 'navigate', e => this._evtNavigate(e)); + "submit", + (e) => this._evtSubmit(e), + "navigate", + (e) => this._evtNavigate(e) + ); this._syncPageController(); } @@ -57,24 +61,27 @@ class PoolListController { _evtSubmit(e) { this._view.clearMessages(); this._view.disableForm(); - e.detail.pool.save() - .then(() => { - this._installView(e.detail.pool, 'edit'); - this._view.showSuccess('Pool created.'); + e.detail.pool.save().then( + () => { + this._installView(e.detail.pool, "edit"); + this._view.showSuccess("Pool created."); router.replace( - uri.formatClientLink( - 'pool', e.detail.pool.id, 'edit'), + uri.formatClientLink("pool", e.detail.pool.id, "edit"), null, - false); - }, error => { + false + ); + }, + (error) => { this._view.showError(error.message); this._view.enableForm(); - }); + } + ); } _evtNavigate(e) { router.showNoDispatch( - uri.formatClientLink('pools', e.detail.parameters)); + uri.formatClientLink("pools", e.detail.parameters) + ); Object.assign(this._ctx.parameters, e.detail.parameters); this._syncPageController(); } @@ -84,25 +91,29 @@ class PoolListController { parameters: this._ctx.parameters, defaultLimit: 50, getClientUrlForPage: (offset, limit) => { - const parameters = Object.assign( - {}, this._ctx.parameters, {offset: offset, limit: limit}); - return uri.formatClientLink('pools', parameters); + const parameters = Object.assign({}, this._ctx.parameters, { + offset: offset, + limit: limit, + }); + return uri.formatClientLink("pools", parameters); }, requestPage: (offset, limit) => { return PoolList.search( - this._ctx.parameters.query, offset, limit, fields); + this._ctx.parameters.query, + offset, + limit, + fields + ); }, - pageRenderer: pageCtx => { + pageRenderer: (pageCtx) => { return new PoolsPageView(pageCtx); }, }); } } -module.exports = router => { - router.enter( - ['pools'], - (ctx, next) => { - ctx.controller = new PoolListController(ctx); - }); +module.exports = (router) => { + router.enter(["pools"], (ctx, next) => { + ctx.controller = new PoolListController(ctx); + }); }; diff --git a/client/js/controllers/post_detail_controller.js b/client/js/controllers/post_detail_controller.js index bd9c2e6..9bab1ce 100644 --- a/client/js/controllers/post_detail_controller.js +++ b/client/js/controllers/post_detail_controller.js @@ -1,28 +1,33 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const misc = require('../util/misc.js'); -const uri = require('../util/uri.js'); -const settings = require('../models/settings.js'); -const Post = require('../models/post.js'); -const PostList = require('../models/post_list.js'); -const PostDetailView = require('../views/post_detail_view.js'); -const BasePostController = require('./base_post_controller.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const misc = require("../util/misc.js"); +const uri = require("../util/uri.js"); +const settings = require("../models/settings.js"); +const Post = require("../models/post.js"); +const PostList = require("../models/post_list.js"); +const PostDetailView = require("../views/post_detail_view.js"); +const BasePostController = require("./base_post_controller.js"); +const EmptyView = require("../views/empty_view.js"); class PostDetailController extends BasePostController { constructor(ctx, section) { super(ctx); - Post.get(ctx.parameters.id).then(post => { - this._id = ctx.parameters.id; - post.addEventListener('change', e => this._evtSaved(e, section)); - this._installView(post, section); - }, error => { - this._view = new EmptyView(); - this._view.showError(error.message); - }); + Post.get(ctx.parameters.id).then( + (post) => { + this._id = ctx.parameters.id; + post.addEventListener("change", (e) => + this._evtSaved(e, section) + ); + this._installView(post, section); + }, + (error) => { + this._view = new EmptyView(); + this._view.showError(error.message); + } + ); } showSuccess(message) { @@ -33,58 +38,68 @@ class PostDetailController extends BasePostController { this._view = new PostDetailView({ post: post, section: section, - canMerge: api.hasPrivilege('posts:merge'), + canMerge: api.hasPrivilege("posts:merge"), }); - this._view.addEventListener('select', e => this._evtSelect(e)); - this._view.addEventListener('merge', e => this._evtMerge(e)); + this._view.addEventListener("select", (e) => this._evtSelect(e)); + this._view.addEventListener("merge", (e) => this._evtMerge(e)); } _evtSelect(e) { this._view.clearMessages(); this._view.disableForm(); - Post.get(e.detail.postId).then(post => { - this._view.selectPost(post); - this._view.enableForm(); - }, error => { - this._view.showError(error.message); - this._view.enableForm(); - }); + Post.get(e.detail.postId).then( + (post) => { + this._view.selectPost(post); + this._view.enableForm(); + }, + (error) => { + this._view.showError(error.message); + this._view.enableForm(); + } + ); } _evtSaved(e, section) { misc.disableExitConfirmation(); if (this._id !== e.detail.post.id) { router.replace( - uri.formatClientLink('post', e.detail.post.id, section), + uri.formatClientLink("post", e.detail.post.id, section), null, - false); + false + ); } } _evtMerge(e) { this._view.clearMessages(); this._view.disableForm(); - e.detail.post.merge(e.detail.targetPost.id, e.detail.useOldContent) - .then(() => { - this._installView(e.detail.post, 'merge'); - this._view.showSuccess('Post merged.'); - router.replace( - uri.formatClientLink( - 'post', e.detail.targetPost.id, 'merge'), - null, - false); - }, error => { - this._view.showError(error.message); - this._view.enableForm(); - }); + e.detail.post + .merge(e.detail.targetPost.id, e.detail.useOldContent) + .then( + () => { + this._installView(e.detail.post, "merge"); + this._view.showSuccess("Post merged."); + router.replace( + uri.formatClientLink( + "post", + e.detail.targetPost.id, + "merge" + ), + null, + false + ); + }, + (error) => { + this._view.showError(error.message); + this._view.enableForm(); + } + ); } } -module.exports = router => { - router.enter( - ['post', ':id', 'merge'], - (ctx, next) => { - ctx.controller = new PostDetailController(ctx, 'merge'); - }); +module.exports = (router) => { + router.enter(["post", ":id", "merge"], (ctx, next) => { + ctx.controller = new PostDetailController(ctx, "merge"); + }); }; diff --git a/client/js/controllers/post_list_controller.js b/client/js/controllers/post_list_controller.js index 357386c..941ea9d 100644 --- a/client/js/controllers/post_list_controller.js +++ b/client/js/controllers/post_list_controller.js @@ -1,48 +1,56 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const settings = require('../models/settings.js'); -const uri = require('../util/uri.js'); -const PostList = require('../models/post_list.js'); -const topNavigation = require('../models/top_navigation.js'); -const PageController = require('../controllers/page_controller.js'); -const PostsHeaderView = require('../views/posts_header_view.js'); -const PostsPageView = require('../views/posts_page_view.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const settings = require("../models/settings.js"); +const uri = require("../util/uri.js"); +const PostList = require("../models/post_list.js"); +const topNavigation = require("../models/top_navigation.js"); +const PageController = require("../controllers/page_controller.js"); +const PostsHeaderView = require("../views/posts_header_view.js"); +const PostsPageView = require("../views/posts_page_view.js"); +const EmptyView = require("../views/empty_view.js"); const fields = [ - 'id', 'thumbnailUrl', 'type', 'safety', - 'score', 'favoriteCount', 'commentCount', 'tags', 'version' + "id", + "thumbnailUrl", + "type", + "safety", + "score", + "favoriteCount", + "commentCount", + "tags", + "version", ]; class PostListController { constructor(ctx) { this._pageController = new PageController(); - if (!api.hasPrivilege('posts:list')) { + if (!api.hasPrivilege("posts:list")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to view posts.'); + this._view.showError("You don't have privileges to view posts."); return; } this._ctx = ctx; - topNavigation.activate('posts'); - topNavigation.setTitle('Listing posts'); + topNavigation.activate("posts"); + topNavigation.setTitle("Listing posts"); this._headerView = new PostsHeaderView({ hostNode: this._pageController.view.pageHeaderHolderNode, parameters: ctx.parameters, enableSafety: api.safetyEnabled(), - canBulkEditTags: api.hasPrivilege('posts:bulk-edit:tags'), - canBulkEditSafety: api.hasPrivilege('posts:bulk-edit:safety'), + canBulkEditTags: api.hasPrivilege("posts:bulk-edit:tags"), + canBulkEditSafety: api.hasPrivilege("posts:bulk-edit:safety"), bulkEdit: { - tags: this._bulkEditTags + tags: this._bulkEditTags, }, }); - this._headerView.addEventListener( - 'navigate', e => this._evtNavigate(e)); + this._headerView.addEventListener("navigate", (e) => + this._evtNavigate(e) + ); this._syncPageController(); } @@ -52,33 +60,35 @@ class PostListController { } get _bulkEditTags() { - return (this._ctx.parameters.tag || '').split(/\s+/).filter(s => s); + return (this._ctx.parameters.tag || "").split(/\s+/).filter((s) => s); } _evtNavigate(e) { router.showNoDispatch( - uri.formatClientLink('posts', e.detail.parameters)); + uri.formatClientLink("posts", e.detail.parameters) + ); Object.assign(this._ctx.parameters, e.detail.parameters); this._syncPageController(); } _evtTag(e) { Promise.all( - this._bulkEditTags.map(tag => e.detail.post.tags.addByName(tag))) + this._bulkEditTags.map((tag) => e.detail.post.tags.addByName(tag)) + ) .then(e.detail.post.save()) - .catch(error => window.alert(error.message)); + .catch((error) => window.alert(error.message)); } _evtUntag(e) { for (let tag of this._bulkEditTags) { e.detail.post.tags.removeByName(tag); } - e.detail.post.save().catch(error => window.alert(error.message)); + e.detail.post.save().catch((error) => window.alert(error.message)); } _evtChangeSafety(e) { e.detail.post.safety = e.detail.safety; - e.detail.post.save().catch(error => window.alert(error.message)); + e.detail.post.save().catch((error) => window.alert(error.message)); } _syncPageController() { @@ -86,39 +96,45 @@ class PostListController { parameters: this._ctx.parameters, defaultLimit: parseInt(settings.get().postsPerPage), getClientUrlForPage: (offset, limit) => { - const parameters = Object.assign( - {}, this._ctx.parameters, {offset: offset, limit: limit}); - return uri.formatClientLink('posts', parameters); + const parameters = Object.assign({}, this._ctx.parameters, { + offset: offset, + limit: limit, + }); + return uri.formatClientLink("posts", parameters); }, requestPage: (offset, limit) => { return PostList.search( - this._ctx.parameters.query, offset, limit, fields); + this._ctx.parameters.query, + offset, + limit, + fields + ); }, - pageRenderer: pageCtx => { + pageRenderer: (pageCtx) => { Object.assign(pageCtx, { - canViewPosts: api.hasPrivilege('posts:view'), - canBulkEditTags: api.hasPrivilege('posts:bulk-edit:tags'), - canBulkEditSafety: - api.hasPrivilege('posts:bulk-edit:safety'), + canViewPosts: api.hasPrivilege("posts:view"), + canBulkEditTags: api.hasPrivilege("posts:bulk-edit:tags"), + canBulkEditSafety: api.hasPrivilege( + "posts:bulk-edit:safety" + ), bulkEdit: { tags: this._bulkEditTags, }, }); const view = new PostsPageView(pageCtx); - view.addEventListener('tag', e => this._evtTag(e)); - view.addEventListener('untag', e => this._evtUntag(e)); - view.addEventListener( - 'changeSafety', e => this._evtChangeSafety(e)); + view.addEventListener("tag", (e) => this._evtTag(e)); + view.addEventListener("untag", (e) => this._evtUntag(e)); + view.addEventListener("changeSafety", (e) => + this._evtChangeSafety(e) + ); return view; }, }); } } -module.exports = router => { - router.enter( - ['posts'], - (ctx, next) => { - ctx.controller = new PostListController(ctx); - }); +module.exports = (router) => { + router.enter(["posts"], (ctx, next) => { + ctx.controller = new PostListController(ctx); + }); }; diff --git a/client/js/controllers/post_main_controller.js b/client/js/controllers/post_main_controller.js index 924e918..95cfdb5 100644 --- a/client/js/controllers/post_main_controller.js +++ b/client/js/controllers/post_main_controller.js @@ -1,16 +1,16 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const uri = require('../util/uri.js'); -const misc = require('../util/misc.js'); -const settings = require('../models/settings.js'); -const Comment = require('../models/comment.js'); -const Post = require('../models/post.js'); -const PostList = require('../models/post_list.js'); -const PostMainView = require('../views/post_main_view.js'); -const BasePostController = require('./base_post_controller.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const uri = require("../util/uri.js"); +const misc = require("../util/misc.js"); +const settings = require("../models/settings.js"); +const Comment = require("../models/comment.js"); +const Post = require("../models/post.js"); +const PostList = require("../models/post_list.js"); +const PostMainView = require("../views/post_main_view.js"); +const BasePostController = require("./base_post_controller.js"); +const EmptyView = require("../views/empty_view.js"); class PostMainController extends BasePostController { constructor(ctx, editMode) { @@ -21,74 +21,107 @@ class PostMainController extends BasePostController { Post.get(ctx.parameters.id), PostList.getAround( ctx.parameters.id, - parameters ? parameters.query : null), - ]).then(responses => { - const [post, aroundResponse] = responses; + parameters ? parameters.query : null + ), + ]).then( + (responses) => { + const [post, aroundResponse] = responses; - // remove junk from query, but save it into history so that it can - // be still accessed after history navigation / page refresh - if (parameters.query) { - ctx.state.parameters = parameters; - const url = editMode ? - uri.formatClientLink('post', ctx.parameters.id, 'edit') : - uri.formatClientLink('post', ctx.parameters.id); - router.replace(url, ctx.state, false); - } + // remove junk from query, but save it into history so that it can + // be still accessed after history navigation / page refresh + if (parameters.query) { + ctx.state.parameters = parameters; + const url = editMode + ? uri.formatClientLink( + "post", + ctx.parameters.id, + "edit" + ) + : uri.formatClientLink("post", ctx.parameters.id); + router.replace(url, ctx.state, false); + } - this._post = post; - this._view = new PostMainView({ - post: post, - editMode: editMode, - prevPostId: aroundResponse.prev ? aroundResponse.prev.id : null, - nextPostId: aroundResponse.next ? aroundResponse.next.id : null, - canEditPosts: api.hasPrivilege('posts:edit'), - canDeletePosts: api.hasPrivilege('posts:delete'), - canFeaturePosts: api.hasPrivilege('posts:feature'), - canListComments: api.hasPrivilege('comments:list'), - canCreateComments: api.hasPrivilege('comments:create'), - parameters: parameters, - }); + this._post = post; + this._view = new PostMainView({ + post: post, + editMode: editMode, + prevPostId: aroundResponse.prev + ? aroundResponse.prev.id + : null, + nextPostId: aroundResponse.next + ? aroundResponse.next.id + : null, + canEditPosts: api.hasPrivilege("posts:edit"), + canDeletePosts: api.hasPrivilege("posts:delete"), + canFeaturePosts: api.hasPrivilege("posts:feature"), + canListComments: api.hasPrivilege("comments:list"), + canCreateComments: api.hasPrivilege("comments:create"), + parameters: parameters, + }); - if (this._view.sidebarControl) { - this._view.sidebarControl.addEventListener( - 'favorite', e => this._evtFavoritePost(e)); - this._view.sidebarControl.addEventListener( - 'unfavorite', e => this._evtUnfavoritePost(e)); - this._view.sidebarControl.addEventListener( - 'score', e => this._evtScorePost(e)); - this._view.sidebarControl.addEventListener( - 'fitModeChange', e => this._evtFitModeChange(e)); - this._view.sidebarControl.addEventListener( - 'change', e => this._evtPostChange(e)); - this._view.sidebarControl.addEventListener( - 'submit', e => this._evtUpdatePost(e)); - this._view.sidebarControl.addEventListener( - 'feature', e => this._evtFeaturePost(e)); - this._view.sidebarControl.addEventListener( - 'delete', e => this._evtDeletePost(e)); - this._view.sidebarControl.addEventListener( - 'merge', e => this._evtMergePost(e)); - } + if (this._view.sidebarControl) { + this._view.sidebarControl.addEventListener( + "favorite", + (e) => this._evtFavoritePost(e) + ); + this._view.sidebarControl.addEventListener( + "unfavorite", + (e) => this._evtUnfavoritePost(e) + ); + this._view.sidebarControl.addEventListener("score", (e) => + this._evtScorePost(e) + ); + this._view.sidebarControl.addEventListener( + "fitModeChange", + (e) => this._evtFitModeChange(e) + ); + this._view.sidebarControl.addEventListener("change", (e) => + this._evtPostChange(e) + ); + this._view.sidebarControl.addEventListener("submit", (e) => + this._evtUpdatePost(e) + ); + this._view.sidebarControl.addEventListener( + "feature", + (e) => this._evtFeaturePost(e) + ); + this._view.sidebarControl.addEventListener("delete", (e) => + this._evtDeletePost(e) + ); + this._view.sidebarControl.addEventListener("merge", (e) => + this._evtMergePost(e) + ); + } - if (this._view.commentControl) { - this._view.commentControl.addEventListener( - 'change', e => this._evtCommentChange(e)); - this._view.commentControl.addEventListener( - 'submit', e => this._evtCreateComment(e)); - } + if (this._view.commentControl) { + this._view.commentControl.addEventListener("change", (e) => + this._evtCommentChange(e) + ); + this._view.commentControl.addEventListener("submit", (e) => + this._evtCreateComment(e) + ); + } - if (this._view.commentListControl) { - this._view.commentListControl.addEventListener( - 'submit', e => this._evtUpdateComment(e)); - this._view.commentListControl.addEventListener( - 'score', e => this._evtScoreComment(e)); - this._view.commentListControl.addEventListener( - 'delete', e => this._evtDeleteComment(e)); + if (this._view.commentListControl) { + this._view.commentListControl.addEventListener( + "submit", + (e) => this._evtUpdateComment(e) + ); + this._view.commentListControl.addEventListener( + "score", + (e) => this._evtScoreComment(e) + ); + this._view.commentListControl.addEventListener( + "delete", + (e) => this._evtDeleteComment(e) + ); + } + }, + (error) => { + this._view = new EmptyView(); + this._view.showError(error.message); } - }, error => { - this._view = new EmptyView(); - this._view.showError(error.message); - }); + ); } _evtFitModeChange(e) { @@ -100,32 +133,36 @@ class PostMainController extends BasePostController { _evtFeaturePost(e) { this._view.sidebarControl.disableForm(); this._view.sidebarControl.clearMessages(); - e.detail.post.feature() - .then(() => { - this._view.sidebarControl.showSuccess('Post featured.'); + e.detail.post.feature().then( + () => { + this._view.sidebarControl.showSuccess("Post featured."); this._view.sidebarControl.enableForm(); - }, error => { + }, + (error) => { this._view.sidebarControl.showError(error.message); this._view.sidebarControl.enableForm(); - }); + } + ); } _evtMergePost(e) { - router.show(uri.formatClientLink('post', e.detail.post.id, 'merge')); + router.show(uri.formatClientLink("post", e.detail.post.id, "merge")); } _evtDeletePost(e) { this._view.sidebarControl.disableForm(); this._view.sidebarControl.clearMessages(); - e.detail.post.delete() - .then(() => { + e.detail.post.delete().then( + () => { misc.disableExitConfirmation(); - const ctx = router.show(uri.formatClientLink('posts')); - ctx.controller.showSuccess('Post deleted.'); - }, error => { + const ctx = router.show(uri.formatClientLink("posts")); + ctx.controller.showSuccess("Post deleted."); + }, + (error) => { this._view.sidebarControl.showError(error.message); this._view.sidebarControl.enableForm(); - }); + } + ); } _evtUpdatePost(e) { @@ -150,15 +187,17 @@ class PostMainController extends BasePostController { if (e.detail.source !== undefined) { post.source = e.detail.source; } - post.save() - .then(() => { - this._view.sidebarControl.showSuccess('Post saved.'); + post.save().then( + () => { + this._view.sidebarControl.showSuccess("Post saved."); this._view.sidebarControl.enableForm(); misc.disableExitConfirmation(); - }, error => { + }, + (error) => { this._view.sidebarControl.showError(error.message); this._view.sidebarControl.enableForm(); - }); + } + ); } _evtPostChange(e) { @@ -173,79 +212,82 @@ class PostMainController extends BasePostController { this._view.commentControl.disableForm(); const comment = Comment.create(this._post.id); comment.text = e.detail.text; - comment.save() - .then(() => { + comment.save().then( + () => { this._post.comments.add(comment); this._view.commentControl.exitEditMode(); this._view.commentControl.enableForm(); misc.disableExitConfirmation(); - }, error => { + }, + (error) => { this._view.commentControl.showError(error.message); this._view.commentControl.enableForm(); - }); + } + ); } _evtUpdateComment(e) { // TODO: disable form e.detail.comment.text = e.detail.text; - e.detail.comment.save() - .catch(error => { - e.detail.target.showError(error.message); - // TODO: enable form - }); + e.detail.comment.save().catch((error) => { + e.detail.target.showError(error.message); + // TODO: enable form + }); } _evtScoreComment(e) { - e.detail.comment.setScore(e.detail.score) - .catch(error => window.alert(error.message)); + e.detail.comment + .setScore(e.detail.score) + .catch((error) => window.alert(error.message)); } _evtDeleteComment(e) { - e.detail.comment.delete() - .catch(error => window.alert(error.message)); + e.detail.comment + .delete() + .catch((error) => window.alert(error.message)); } _evtScorePost(e) { - if (!api.hasPrivilege('posts:score')) { + if (!api.hasPrivilege("posts:score")) { return; } - e.detail.post.setScore(e.detail.score) - .catch(error => window.alert(error.message)); + e.detail.post + .setScore(e.detail.score) + .catch((error) => window.alert(error.message)); } _evtFavoritePost(e) { - if (!api.hasPrivilege('posts:favorite')) { + if (!api.hasPrivilege("posts:favorite")) { return; } - e.detail.post.addToFavorites() - .catch(error => window.alert(error.message)); + e.detail.post + .addToFavorites() + .catch((error) => window.alert(error.message)); } _evtUnfavoritePost(e) { - if (!api.hasPrivilege('posts:favorite')) { + if (!api.hasPrivilege("posts:favorite")) { return; } - e.detail.post.removeFromFavorites() - .catch(error => window.alert(error.message)); + e.detail.post + .removeFromFavorites() + .catch((error) => window.alert(error.message)); } } -module.exports = router => { - router.enter(['post', ':id', 'edit'], - (ctx, next) => { - // restore parameters from history state - if (ctx.state.parameters) { - Object.assign(ctx.parameters, ctx.state.parameters); - } - ctx.controller = new PostMainController(ctx, true); - }); - router.enter( - ['post', ':id'], - (ctx, next) => { - // restore parameters from history state - if (ctx.state.parameters) { - Object.assign(ctx.parameters, ctx.state.parameters); - } - ctx.controller = new PostMainController(ctx, false); - }); +module.exports = (router) => { + router.enter(["post", ":id", "edit"], (ctx, next) => { + // restore parameters from history state + if (ctx.state.parameters) { + Object.assign(ctx.parameters, ctx.state.parameters); + } + ctx.controller = new PostMainController(ctx, true); + }); + router.enter(["post", ":id"], (ctx, next) => { + // restore parameters from history state + if (ctx.state.parameters) { + Object.assign(ctx.parameters, ctx.state.parameters); + } + ctx.controller = new PostMainController(ctx, false); + }); }; diff --git a/client/js/controllers/post_upload_controller.js b/client/js/controllers/post_upload_controller.js index f16aaf0..d317be5 100644 --- a/client/js/controllers/post_upload_controller.js +++ b/client/js/controllers/post_upload_controller.js @@ -1,40 +1,40 @@ -'use strict'; +"use strict"; -const api = require('../api.js'); -const router = require('../router.js'); -const uri = require('../util/uri.js'); -const misc = require('../util/misc.js'); -const progress = require('../util/progress.js'); -const topNavigation = require('../models/top_navigation.js'); -const Post = require('../models/post.js'); -const Tag = require('../models/tag.js'); -const PostUploadView = require('../views/post_upload_view.js'); -const EmptyView = require('../views/empty_view.js'); +const api = require("../api.js"); +const router = require("../router.js"); +const uri = require("../util/uri.js"); +const misc = require("../util/misc.js"); +const progress = require("../util/progress.js"); +const topNavigation = require("../models/top_navigation.js"); +const Post = require("../models/post.js"); +const Tag = require("../models/tag.js"); +const PostUploadView = require("../views/post_upload_view.js"); +const EmptyView = require("../views/empty_view.js"); const genericErrorMessage = - 'One of the posts needs your attention; ' + + "One of the posts needs your attention; " + 'click "resume upload" when you\'re ready.'; class PostUploadController { constructor() { this._lastCancellablePromise = null; - if (!api.hasPrivilege('posts:create')) { + if (!api.hasPrivilege("posts:create")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to upload posts.'); + this._view.showError("You don't have privileges to upload posts."); return; } - topNavigation.activate('upload'); - topNavigation.setTitle('Upload'); + topNavigation.activate("upload"); + topNavigation.setTitle("Upload"); this._view = new PostUploadView({ - canUploadAnonymously: api.hasPrivilege('posts:create:anonymous'), - canViewPosts: api.hasPrivilege('posts:view'), + canUploadAnonymously: api.hasPrivilege("posts:create:anonymous"), + canViewPosts: api.hasPrivilege("posts:view"), enableSafety: api.safetyEnabled(), }); - this._view.addEventListener('change', e => this._evtChange(e)); - this._view.addEventListener('submit', e => this._evtSubmit(e)); - this._view.addEventListener('cancel', e => this._evtCancel(e)); + this._view.addEventListener("change", (e) => this._evtChange(e)); + this._view.addEventListener("submit", (e) => this._evtSubmit(e)); + this._view.addEventListener("cancel", (e) => this._evtCancel(e)); } _evtChange(e) { @@ -56,87 +56,109 @@ class PostUploadController { this._view.disableForm(); this._view.clearMessages(); - e.detail.uploadables.reduce( - (promise, uploadable) => promise.then(() => this._uploadSinglePost( - uploadable, e.detail.skipDuplicates)), - Promise.resolve()) - .then(() => { - this._view.clearMessages(); - misc.disableExitConfirmation(); - const ctx = router.show(uri.formatClientLink('posts')); - ctx.controller.showSuccess('Posts uploaded.'); - }, error => { - if (error.uploadable) { - if (error.similarPosts) { - error.uploadable.lookalikes = error.similarPosts; - this._view.updateUploadable(error.uploadable); - this._view.showInfo(genericErrorMessage); - this._view.showInfo( - error.message, error.uploadable); + e.detail.uploadables + .reduce( + (promise, uploadable) => + promise.then(() => + this._uploadSinglePost( + uploadable, + e.detail.skipDuplicates + ) + ), + Promise.resolve() + ) + .then( + () => { + this._view.clearMessages(); + misc.disableExitConfirmation(); + const ctx = router.show(uri.formatClientLink("posts")); + ctx.controller.showSuccess("Posts uploaded."); + }, + (error) => { + if (error.uploadable) { + if (error.similarPosts) { + error.uploadable.lookalikes = error.similarPosts; + this._view.updateUploadable(error.uploadable); + this._view.showInfo(genericErrorMessage); + this._view.showInfo( + error.message, + error.uploadable + ); + } else { + this._view.showError(genericErrorMessage); + this._view.showError( + error.message, + error.uploadable + ); + } } else { - this._view.showError(genericErrorMessage); - this._view.showError( - error.message, error.uploadable); + this._view.showError(error.message); } - } else { - this._view.showError(error.message); + this._view.enableForm(); } - this._view.enableForm(); - }); + ); } _uploadSinglePost(uploadable, skipDuplicates) { progress.start(); let reverseSearchPromise = Promise.resolve(); if (!uploadable.lookalikesConfirmed) { - reverseSearchPromise = - Post.reverseSearch(uploadable.url || uploadable.file); + reverseSearchPromise = Post.reverseSearch( + uploadable.url || uploadable.file + ); } this._lastCancellablePromise = reverseSearchPromise; - return reverseSearchPromise.then(searchResult => { - if (searchResult) { - // notify about exact duplicate - if (searchResult.exactPost) { - if (skipDuplicates) { - this._view.removeUploadable(uploadable); - return Promise.resolve(); - } else { - let error = new Error('Post already uploaded ' + - `(@${searchResult.exactPost.id})`); + return reverseSearchPromise + .then((searchResult) => { + if (searchResult) { + // notify about exact duplicate + if (searchResult.exactPost) { + if (skipDuplicates) { + this._view.removeUploadable(uploadable); + return Promise.resolve(); + } else { + let error = new Error( + "Post already uploaded " + + `(@${searchResult.exactPost.id})` + ); + error.uploadable = uploadable; + return Promise.reject(error); + } + } + + // notify about similar posts + if (searchResult.similarPosts.length) { + let error = new Error( + `Found ${searchResult.similarPosts.length} similar ` + + "posts.\nYou can resume or discard this upload." + ); error.uploadable = uploadable; + error.similarPosts = searchResult.similarPosts; return Promise.reject(error); } } - // notify about similar posts - if (searchResult.similarPosts.length) { - let error = new Error( - `Found ${searchResult.similarPosts.length} similar ` + - 'posts.\nYou can resume or discard this upload.'); - error.uploadable = uploadable; - error.similarPosts = searchResult.similarPosts; - return Promise.reject(error); - } - } - - // no duplicates, proceed with saving - let post = this._uploadableToPost(uploadable); - let savePromise = post.save(uploadable.anonymous) - .then(() => { + // no duplicates, proceed with saving + let post = this._uploadableToPost(uploadable); + let savePromise = post.save(uploadable.anonymous).then(() => { this._view.removeUploadable(uploadable); return Promise.resolve(); }); - this._lastCancellablePromise = savePromise; - return savePromise; - }).then(result => { - progress.done(); - return Promise.resolve(result); - }, error => { - error.uploadable = uploadable; - progress.done(); - return Promise.reject(error); - }); + this._lastCancellablePromise = savePromise; + return savePromise; + }) + .then( + (result) => { + progress.done(); + return Promise.resolve(result); + }, + (error) => { + error.uploadable = uploadable; + progress.done(); + return Promise.reject(error); + } + ); } _uploadableToPost(uploadable) { @@ -159,8 +181,8 @@ class PostUploadController { } } -module.exports = router => { - router.enter(['upload'], (ctx, next) => { +module.exports = (router) => { + router.enter(["upload"], (ctx, next) => { ctx.controller = new PostUploadController(); }); }; diff --git a/client/js/controllers/settings_controller.js b/client/js/controllers/settings_controller.js index 7765143..8cf2c1c 100644 --- a/client/js/controllers/settings_controller.js +++ b/client/js/controllers/settings_controller.js @@ -1,28 +1,28 @@ -'use strict'; +"use strict"; -const settings = require('../models/settings.js'); -const topNavigation = require('../models/top_navigation.js'); -const SettingsView = require('../views/settings_view.js'); +const settings = require("../models/settings.js"); +const topNavigation = require("../models/top_navigation.js"); +const SettingsView = require("../views/settings_view.js"); class SettingsController { constructor() { - topNavigation.activate('settings'); - topNavigation.setTitle('Browsing settings'); + topNavigation.activate("settings"); + topNavigation.setTitle("Browsing settings"); this._view = new SettingsView({ settings: settings.get(), }); - this._view.addEventListener('submit', e => this._evtSubmit(e)); + this._view.addEventListener("submit", (e) => this._evtSubmit(e)); } _evtSubmit(e) { this._view.clearMessages(); settings.save(e.detail); - this._view.showSuccess('Settings saved.'); + this._view.showSuccess("Settings saved."); } } -module.exports = router => { - router.enter(['settings'], (ctx, next) => { +module.exports = (router) => { + router.enter(["settings"], (ctx, next) => { ctx.controller = new SettingsController(); }); }; diff --git a/client/js/controllers/snapshots_controller.js b/client/js/controllers/snapshots_controller.js index 0e9b773..120b6cb 100644 --- a/client/js/controllers/snapshots_controller.js +++ b/client/js/controllers/snapshots_controller.js @@ -1,41 +1,43 @@ -'use strict'; +"use strict"; -const api = require('../api.js'); -const uri = require('../util/uri.js'); -const SnapshotList = require('../models/snapshot_list.js'); -const PageController = require('../controllers/page_controller.js'); -const topNavigation = require('../models/top_navigation.js'); -const SnapshotsPageView = require('../views/snapshots_page_view.js'); -const EmptyView = require('../views/empty_view.js'); +const api = require("../api.js"); +const uri = require("../util/uri.js"); +const SnapshotList = require("../models/snapshot_list.js"); +const PageController = require("../controllers/page_controller.js"); +const topNavigation = require("../models/top_navigation.js"); +const SnapshotsPageView = require("../views/snapshots_page_view.js"); +const EmptyView = require("../views/empty_view.js"); class SnapshotsController { constructor(ctx) { - if (!api.hasPrivilege('snapshots:list')) { + if (!api.hasPrivilege("snapshots:list")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to view history.'); + this._view.showError("You don't have privileges to view history."); return; } - topNavigation.activate(''); - topNavigation.setTitle('History'); + topNavigation.activate(""); + topNavigation.setTitle("History"); this._pageController = new PageController(); this._pageController.run({ parameters: ctx.parameters, defaultLimit: 25, getClientUrlForPage: (offset, limit) => { - const parameters = Object.assign( - {}, ctx.parameters, {offset: offset, limit: limit}); - return uri.formatClientLink('history', parameters); + const parameters = Object.assign({}, ctx.parameters, { + offset: offset, + limit: limit, + }); + return uri.formatClientLink("history", parameters); }, requestPage: (offset, limit) => { - return SnapshotList.search('', offset, limit); + return SnapshotList.search("", offset, limit); }, - pageRenderer: pageCtx => { + pageRenderer: (pageCtx) => { Object.assign(pageCtx, { - canViewPosts: api.hasPrivilege('posts:view'), - canViewUsers: api.hasPrivilege('users:view'), - canViewTags: api.hasPrivilege('tags:view'), + canViewPosts: api.hasPrivilege("posts:view"), + canViewUsers: api.hasPrivilege("users:view"), + canViewTags: api.hasPrivilege("tags:view"), }); return new SnapshotsPageView(pageCtx); }, @@ -43,9 +45,8 @@ class SnapshotsController { } } -module.exports = router => { - router.enter(['history'], - (ctx, next) => { - ctx.controller = new SnapshotsController(ctx); - }); +module.exports = (router) => { + router.enter(["history"], (ctx, next) => { + ctx.controller = new SnapshotsController(ctx); + }); }; diff --git a/client/js/controllers/tag_categories_controller.js b/client/js/controllers/tag_categories_controller.js index 49600cf..2470edb 100644 --- a/client/js/controllers/tag_categories_controller.js +++ b/client/js/controllers/tag_categories_controller.js @@ -1,57 +1,67 @@ -'use strict'; +"use strict"; -const api = require('../api.js'); -const tags = require('../tags.js'); -const TagCategoryList = require('../models/tag_category_list.js'); -const topNavigation = require('../models/top_navigation.js'); -const TagCategoriesView = require('../views/tag_categories_view.js'); -const EmptyView = require('../views/empty_view.js'); +const api = require("../api.js"); +const tags = require("../tags.js"); +const TagCategoryList = require("../models/tag_category_list.js"); +const topNavigation = require("../models/top_navigation.js"); +const TagCategoriesView = require("../views/tag_categories_view.js"); +const EmptyView = require("../views/empty_view.js"); class TagCategoriesController { constructor() { - if (!api.hasPrivilege('tagCategories:list')) { + if (!api.hasPrivilege("tagCategories:list")) { this._view = new EmptyView(); this._view.showError( - 'You don\'t have privileges to view tag categories.'); + "You don't have privileges to view tag categories." + ); return; } - topNavigation.activate('tags'); - topNavigation.setTitle('Listing tags'); - TagCategoryList.get().then(response => { - this._tagCategories = response.results; - this._view = new TagCategoriesView({ - tagCategories: this._tagCategories, - canEditName: api.hasPrivilege('tagCategories:edit:name'), - canEditColor: api.hasPrivilege('tagCategories:edit:color'), - canDelete: api.hasPrivilege('tagCategories:delete'), - canCreate: api.hasPrivilege('tagCategories:create'), - canSetDefault: api.hasPrivilege('tagCategories:setDefault'), - }); - this._view.addEventListener('submit', e => this._evtSubmit(e)); - }, error => { - this._view = new EmptyView(); - this._view.showError(error.message); - }); + topNavigation.activate("tags"); + topNavigation.setTitle("Listing tags"); + TagCategoryList.get().then( + (response) => { + this._tagCategories = response.results; + this._view = new TagCategoriesView({ + tagCategories: this._tagCategories, + canEditName: api.hasPrivilege("tagCategories:edit:name"), + canEditColor: api.hasPrivilege("tagCategories:edit:color"), + canDelete: api.hasPrivilege("tagCategories:delete"), + canCreate: api.hasPrivilege("tagCategories:create"), + canSetDefault: api.hasPrivilege( + "tagCategories:setDefault" + ), + }); + this._view.addEventListener("submit", (e) => + this._evtSubmit(e) + ); + }, + (error) => { + this._view = new EmptyView(); + this._view.showError(error.message); + } + ); } _evtSubmit(e) { this._view.clearMessages(); this._view.disableForm(); - this._tagCategories.save() - .then(() => { + this._tagCategories.save().then( + () => { tags.refreshCategoryColorMap(); this._view.enableForm(); - this._view.showSuccess('Changes saved.'); - }, error => { + this._view.showSuccess("Changes saved."); + }, + (error) => { this._view.enableForm(); this._view.showError(error.message); - }); + } + ); } } -module.exports = router => { - router.enter(['tag-categories'], (ctx, next) => { +module.exports = (router) => { + router.enter(["tag-categories"], (ctx, next) => { ctx.controller = new TagCategoriesController(ctx, next); }); }; diff --git a/client/js/controllers/tag_controller.js b/client/js/controllers/tag_controller.js index 71405dc..0928b3f 100644 --- a/client/js/controllers/tag_controller.js +++ b/client/js/controllers/tag_controller.js @@ -1,63 +1,80 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const misc = require('../util/misc.js'); -const uri = require('../util/uri.js'); -const Tag = require('../models/tag.js'); -const TagCategoryList = require('../models/tag_category_list.js'); -const topNavigation = require('../models/top_navigation.js'); -const TagView = require('../views/tag_view.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const misc = require("../util/misc.js"); +const uri = require("../util/uri.js"); +const Tag = require("../models/tag.js"); +const TagCategoryList = require("../models/tag_category_list.js"); +const topNavigation = require("../models/top_navigation.js"); +const TagView = require("../views/tag_view.js"); +const EmptyView = require("../views/empty_view.js"); class TagController { constructor(ctx, section) { - if (!api.hasPrivilege('tags:view')) { + if (!api.hasPrivilege("tags:view")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to view tags.'); + this._view.showError("You don't have privileges to view tags."); return; } Promise.all([ TagCategoryList.get(), Tag.get(ctx.parameters.name), - ]).then(responses => { - const [tagCategoriesResponse, tag] = responses; + ]).then( + (responses) => { + const [tagCategoriesResponse, tag] = responses; - topNavigation.activate('tags'); - topNavigation.setTitle('Tag #' + tag.names[0]); + topNavigation.activate("tags"); + topNavigation.setTitle("Tag #" + tag.names[0]); - this._name = ctx.parameters.name; - tag.addEventListener('change', e => this._evtSaved(e, section)); + this._name = ctx.parameters.name; + tag.addEventListener("change", (e) => + this._evtSaved(e, section) + ); - const categories = {}; - for (let category of tagCategoriesResponse.results) { - categories[category.name] = category.name; - } + const categories = {}; + for (let category of tagCategoriesResponse.results) { + categories[category.name] = category.name; + } - this._view = new TagView({ - tag: tag, - section: section, - canEditAnything: api.hasPrivilege('tags:edit'), - canEditNames: api.hasPrivilege('tags:edit:names'), - canEditCategory: api.hasPrivilege('tags:edit:category'), - canEditImplications: api.hasPrivilege('tags:edit:implications'), - canEditSuggestions: api.hasPrivilege('tags:edit:suggestions'), - canEditDescription: api.hasPrivilege('tags:edit:description'), - canMerge: api.hasPrivilege('tags:merge'), - canDelete: api.hasPrivilege('tags:delete'), - categories: categories, - escapeColons: uri.escapeColons, - }); + this._view = new TagView({ + tag: tag, + section: section, + canEditAnything: api.hasPrivilege("tags:edit"), + canEditNames: api.hasPrivilege("tags:edit:names"), + canEditCategory: api.hasPrivilege("tags:edit:category"), + canEditImplications: api.hasPrivilege( + "tags:edit:implications" + ), + canEditSuggestions: api.hasPrivilege( + "tags:edit:suggestions" + ), + canEditDescription: api.hasPrivilege( + "tags:edit:description" + ), + canMerge: api.hasPrivilege("tags:merge"), + canDelete: api.hasPrivilege("tags:delete"), + categories: categories, + escapeColons: uri.escapeColons, + }); - this._view.addEventListener('change', e => this._evtChange(e)); - this._view.addEventListener('submit', e => this._evtUpdate(e)); - this._view.addEventListener('merge', e => this._evtMerge(e)); - this._view.addEventListener('delete', e => this._evtDelete(e)); - }, error => { - this._view = new EmptyView(); - this._view.showError(error.message); - }); + this._view.addEventListener("change", (e) => + this._evtChange(e) + ); + this._view.addEventListener("submit", (e) => + this._evtUpdate(e) + ); + this._view.addEventListener("merge", (e) => this._evtMerge(e)); + this._view.addEventListener("delete", (e) => + this._evtDelete(e) + ); + }, + (error) => { + this._view = new EmptyView(); + this._view.showError(error.message); + } + ); } _evtChange(e) { @@ -68,9 +85,10 @@ class TagController { misc.disableExitConfirmation(); if (this._name !== e.detail.tag.names[0]) { router.replace( - uri.formatClientLink('tag', e.detail.tag.names[0], section), + uri.formatClientLink("tag", e.detail.tag.names[0], section), null, - false); + false + ); } } @@ -86,59 +104,69 @@ class TagController { if (e.detail.description !== undefined) { e.detail.tag.description = e.detail.description; } - e.detail.tag.save().then(() => { - this._view.showSuccess('Tag saved.'); - this._view.enableForm(); - }, error => { - this._view.showError(error.message); - this._view.enableForm(); - }); + e.detail.tag.save().then( + () => { + this._view.showSuccess("Tag saved."); + this._view.enableForm(); + }, + (error) => { + this._view.showError(error.message); + this._view.enableForm(); + } + ); } _evtMerge(e) { this._view.clearMessages(); this._view.disableForm(); - e.detail.tag - .merge(e.detail.targetTagName, e.detail.addAlias) - .then(() => { - this._view.showSuccess('Tag merged.'); + e.detail.tag.merge(e.detail.targetTagName, e.detail.addAlias).then( + () => { + this._view.showSuccess("Tag merged."); this._view.enableForm(); router.replace( uri.formatClientLink( - 'tag', e.detail.targetTagName, 'merge'), + "tag", + e.detail.targetTagName, + "merge" + ), null, - false); - }, error => { + false + ); + }, + (error) => { this._view.showError(error.message); this._view.enableForm(); - }); + } + ); } _evtDelete(e) { this._view.clearMessages(); this._view.disableForm(); - e.detail.tag.delete() - .then(() => { - const ctx = router.show(uri.formatClientLink('tags')); - ctx.controller.showSuccess('Tag deleted.'); - }, error => { + e.detail.tag.delete().then( + () => { + const ctx = router.show(uri.formatClientLink("tags")); + ctx.controller.showSuccess("Tag deleted."); + }, + (error) => { this._view.showError(error.message); this._view.enableForm(); - }); + } + ); } } -module.exports = router => { - router.enter(['tag', ':name', 'edit'], (ctx, next) => { - ctx.controller = new TagController(ctx, 'edit'); +module.exports = (router) => { + router.enter(["tag", ":name", "edit"], (ctx, next) => { + ctx.controller = new TagController(ctx, "edit"); }); - router.enter(['tag', ':name', 'merge'], (ctx, next) => { - ctx.controller = new TagController(ctx, 'merge'); + router.enter(["tag", ":name", "merge"], (ctx, next) => { + ctx.controller = new TagController(ctx, "merge"); }); - router.enter(['tag', ':name', 'delete'], (ctx, next) => { - ctx.controller = new TagController(ctx, 'delete'); + router.enter(["tag", ":name", "delete"], (ctx, next) => { + ctx.controller = new TagController(ctx, "delete"); }); - router.enter(['tag', ':name'], (ctx, next) => { - ctx.controller = new TagController(ctx, 'summary'); + router.enter(["tag", ":name"], (ctx, next) => { + ctx.controller = new TagController(ctx, "summary"); }); }; diff --git a/client/js/controllers/tag_list_controller.js b/client/js/controllers/tag_list_controller.js index 34ff8b2..010c556 100644 --- a/client/js/controllers/tag_list_controller.js +++ b/client/js/controllers/tag_list_controller.js @@ -1,46 +1,47 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const uri = require('../util/uri.js'); -const TagList = require('../models/tag_list.js'); -const topNavigation = require('../models/top_navigation.js'); -const PageController = require('../controllers/page_controller.js'); -const TagsHeaderView = require('../views/tags_header_view.js'); -const TagsPageView = require('../views/tags_page_view.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const uri = require("../util/uri.js"); +const TagList = require("../models/tag_list.js"); +const topNavigation = require("../models/top_navigation.js"); +const PageController = require("../controllers/page_controller.js"); +const TagsHeaderView = require("../views/tags_header_view.js"); +const TagsPageView = require("../views/tags_page_view.js"); +const EmptyView = require("../views/empty_view.js"); const fields = [ - 'names', - 'suggestions', - 'implications', - 'creationTime', - 'usages', - 'category' + "names", + "suggestions", + "implications", + "creationTime", + "usages", + "category", ]; class TagListController { constructor(ctx) { this._pageController = new PageController(); - if (!api.hasPrivilege('tags:list')) { + if (!api.hasPrivilege("tags:list")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to view tags.'); + this._view.showError("You don't have privileges to view tags."); return; } this._ctx = ctx; - topNavigation.activate('tags'); - topNavigation.setTitle('Listing tags'); + topNavigation.activate("tags"); + topNavigation.setTitle("Listing tags"); this._headerView = new TagsHeaderView({ hostNode: this._pageController.view.pageHeaderHolderNode, parameters: ctx.parameters, - canEditTagCategories: api.hasPrivilege('tagCategories:edit'), + canEditTagCategories: api.hasPrivilege("tagCategories:edit"), }); - this._headerView.addEventListener( - 'navigate', e => this._evtNavigate(e)); + this._headerView.addEventListener("navigate", (e) => + this._evtNavigate(e) + ); this._syncPageController(); } @@ -55,7 +56,8 @@ class TagListController { _evtNavigate(e) { router.showNoDispatch( - uri.formatClientLink('tags', e.detail.parameters)); + uri.formatClientLink("tags", e.detail.parameters) + ); Object.assign(this._ctx.parameters, e.detail.parameters); this._syncPageController(); } @@ -65,25 +67,29 @@ class TagListController { parameters: this._ctx.parameters, defaultLimit: 50, getClientUrlForPage: (offset, limit) => { - const parameters = Object.assign( - {}, this._ctx.parameters, {offset: offset, limit: limit}); - return uri.formatClientLink('tags', parameters); + const parameters = Object.assign({}, this._ctx.parameters, { + offset: offset, + limit: limit, + }); + return uri.formatClientLink("tags", parameters); }, requestPage: (offset, limit) => { return TagList.search( - this._ctx.parameters.query, offset, limit, fields); + this._ctx.parameters.query, + offset, + limit, + fields + ); }, - pageRenderer: pageCtx => { + pageRenderer: (pageCtx) => { return new TagsPageView(pageCtx); }, }); } } -module.exports = router => { - router.enter( - ['tags'], - (ctx, next) => { - ctx.controller = new TagListController(ctx); - }); +module.exports = (router) => { + router.enter(["tags"], (ctx, next) => { + ctx.controller = new TagListController(ctx); + }); }; diff --git a/client/js/controllers/top_navigation_controller.js b/client/js/controllers/top_navigation_controller.js index 9cd70c1..d9bb276 100644 --- a/client/js/controllers/top_navigation_controller.js +++ b/client/js/controllers/top_navigation_controller.js @@ -1,19 +1,20 @@ -'use strict'; +"use strict"; -const api = require('../api.js'); -const topNavigation = require('../models/top_navigation.js'); -const TopNavigationView = require('../views/top_navigation_view.js'); +const api = require("../api.js"); +const topNavigation = require("../models/top_navigation.js"); +const TopNavigationView = require("../views/top_navigation_view.js"); class TopNavigationController { constructor() { api.fetchConfig().then(() => { this._topNavigationView = new TopNavigationView(); - topNavigation.addEventListener( - 'activate', e => this._evtActivate(e)); + topNavigation.addEventListener("activate", (e) => + this._evtActivate(e) + ); - api.addEventListener('login', e => this._evtAuthChange(e)); - api.addEventListener('logout', e => this._evtAuthChange(e)); + api.addEventListener("login", (e) => this._evtAuthChange(e)); + api.addEventListener("logout", (e) => this._evtAuthChange(e)); this._render(); }); @@ -28,37 +29,38 @@ class TopNavigationController { } _updateNavigationFromPrivileges() { - topNavigation.get('account').url = 'user/' + api.userName; - topNavigation.get('account').imageUrl = - api.user ? api.user.avatarUrl : null; + topNavigation.get("account").url = "user/" + api.userName; + topNavigation.get("account").imageUrl = api.user + ? api.user.avatarUrl + : null; topNavigation.showAll(); - if (!api.hasPrivilege('posts:list')) { - topNavigation.hide('posts'); + if (!api.hasPrivilege("posts:list")) { + topNavigation.hide("posts"); } - if (!api.hasPrivilege('posts:create')) { - topNavigation.hide('upload'); + if (!api.hasPrivilege("posts:create")) { + topNavigation.hide("upload"); } - if (!api.hasPrivilege('comments:list')) { - topNavigation.hide('comments'); + if (!api.hasPrivilege("comments:list")) { + topNavigation.hide("comments"); } - if (!api.hasPrivilege('tags:list')) { - topNavigation.hide('tags'); + if (!api.hasPrivilege("tags:list")) { + topNavigation.hide("tags"); } - if (!api.hasPrivilege('users:list')) { - topNavigation.hide('users'); + if (!api.hasPrivilege("users:list")) { + topNavigation.hide("users"); } if (api.isLoggedIn()) { - if (!api.hasPrivilege('users:create:any')) { - topNavigation.hide('register'); + if (!api.hasPrivilege("users:create:any")) { + topNavigation.hide("register"); } - topNavigation.hide('login'); + topNavigation.hide("login"); } else { - if (!api.hasPrivilege('users:create:self')) { - topNavigation.hide('register'); + if (!api.hasPrivilege("users:create:self")) { + topNavigation.hide("register"); } - topNavigation.hide('account'); - topNavigation.hide('logout'); + topNavigation.hide("account"); + topNavigation.hide("logout"); } } @@ -66,10 +68,11 @@ class TopNavigationController { this._updateNavigationFromPrivileges(); this._topNavigationView.render({ items: topNavigation.getAll(), - name: api.getName() + name: api.getName(), }); this._topNavigationView.activate( - topNavigation.activeItem ? topNavigation.activeItem.key : ''); + topNavigation.activeItem ? topNavigation.activeItem.key : "" + ); } } diff --git a/client/js/controllers/user_controller.js b/client/js/controllers/user_controller.js index e192d87..326736b 100644 --- a/client/js/controllers/user_controller.js +++ b/client/js/controllers/user_controller.js @@ -1,23 +1,25 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const uri = require('../util/uri.js'); -const misc = require('../util/misc.js'); -const views = require('../util/views.js'); -const User = require('../models/user.js'); -const UserToken = require('../models/user_token.js'); -const topNavigation = require('../models/top_navigation.js'); -const UserView = require('../views/user_view.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const uri = require("../util/uri.js"); +const misc = require("../util/misc.js"); +const views = require("../util/views.js"); +const User = require("../models/user.js"); +const UserToken = require("../models/user_token.js"); +const topNavigation = require("../models/top_navigation.js"); +const UserView = require("../views/user_view.js"); +const EmptyView = require("../views/empty_view.js"); class UserController { constructor(ctx, section) { const userName = ctx.parameters.name; - if (!api.hasPrivilege('users:view') && - !api.isLoggedIn({name: userName})) { + if ( + !api.hasPrivilege("users:view") && + !api.isLoggedIn({ name: userName }) + ) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to view users.'); + this._view.showError("You don't have privileges to view users."); return; } @@ -25,100 +27,129 @@ class UserController { this._errorMessages = []; let userTokenPromise = Promise.resolve([]); - if (section === 'list-tokens') { - userTokenPromise = UserToken.get(userName) - .then(userTokens => { - return userTokens.map(token => { - token.isCurrentAuthToken = api.isCurrentAuthToken(token); + if (section === "list-tokens") { + userTokenPromise = UserToken.get(userName).then( + (userTokens) => { + return userTokens.map((token) => { + token.isCurrentAuthToken = api.isCurrentAuthToken( + token + ); return token; }); - }, error => { + }, + (error) => { return []; - }); + } + ); } - topNavigation.setTitle('User ' + userName); - Promise.all([ - userTokenPromise, - User.get(userName) - ]).then(responses => { - const [userTokens, user] = responses; - const isLoggedIn = api.isLoggedIn(user); - const infix = isLoggedIn ? 'self' : 'any'; + topNavigation.setTitle("User " + userName); + Promise.all([userTokenPromise, User.get(userName)]).then( + (responses) => { + const [userTokens, user] = responses; + const isLoggedIn = api.isLoggedIn(user); + const infix = isLoggedIn ? "self" : "any"; - this._name = userName; - user.addEventListener('change', e => this._evtSaved(e, section)); + this._name = userName; + user.addEventListener("change", (e) => + this._evtSaved(e, section) + ); - const myRankIndex = api.user ? - api.allRanks.indexOf(api.user.rank) : - 0; - let ranks = {}; - for (let [rankIdx, rankIdentifier] of api.allRanks.entries()) { - if (rankIdentifier === 'anonymous') { - continue; + const myRankIndex = api.user + ? api.allRanks.indexOf(api.user.rank) + : 0; + let ranks = {}; + for (let [rankIdx, rankIdentifier] of api.allRanks.entries()) { + if (rankIdentifier === "anonymous") { + continue; + } + if (rankIdx > myRankIndex) { + continue; + } + ranks[rankIdentifier] = api.rankNames.get(rankIdentifier); } - if (rankIdx > myRankIndex) { - continue; - } - ranks[rankIdentifier] = api.rankNames.get(rankIdentifier); - } - if (isLoggedIn) { - topNavigation.activate('account'); - } else { - topNavigation.activate('users'); - } + if (isLoggedIn) { + topNavigation.activate("account"); + } else { + topNavigation.activate("users"); + } - this._view = new UserView({ - user: user, - section: section, - isLoggedIn: isLoggedIn, - canEditName: api.hasPrivilege(`users:edit:${infix}:name`), - canEditPassword: api.hasPrivilege(`users:edit:${infix}:pass`), - canEditEmail: api.hasPrivilege(`users:edit:${infix}:email`), - canEditRank: api.hasPrivilege(`users:edit:${infix}:rank`), - canEditAvatar: api.hasPrivilege(`users:edit:${infix}:avatar`), - canEditAnything: api.hasPrivilege(`users:edit:${infix}`), - canListTokens: api.hasPrivilege(`userTokens:list:${infix}`), - canCreateToken: api.hasPrivilege(`userTokens:create:${infix}`), - canEditToken: api.hasPrivilege(`userTokens:edit:${infix}`), - canDeleteToken: api.hasPrivilege(`userTokens:delete:${infix}`), - canDelete: api.hasPrivilege(`users:delete:${infix}`), - ranks: ranks, - tokens: userTokens, - }); - this._view.addEventListener('change', e => this._evtChange(e)); - this._view.addEventListener('submit', e => this._evtUpdate(e)); - this._view.addEventListener('delete', e => this._evtDelete(e)); - this._view.addEventListener('create-token', e => this._evtCreateToken(e)); - this._view.addEventListener('delete-token', e => this._evtDeleteToken(e)); - this._view.addEventListener('update-token', e => this._evtUpdateToken(e)); + this._view = new UserView({ + user: user, + section: section, + isLoggedIn: isLoggedIn, + canEditName: api.hasPrivilege(`users:edit:${infix}:name`), + canEditPassword: api.hasPrivilege( + `users:edit:${infix}:pass` + ), + canEditEmail: api.hasPrivilege( + `users:edit:${infix}:email` + ), + canEditRank: api.hasPrivilege(`users:edit:${infix}:rank`), + canEditAvatar: api.hasPrivilege( + `users:edit:${infix}:avatar` + ), + canEditAnything: api.hasPrivilege(`users:edit:${infix}`), + canListTokens: api.hasPrivilege( + `userTokens:list:${infix}` + ), + canCreateToken: api.hasPrivilege( + `userTokens:create:${infix}` + ), + canEditToken: api.hasPrivilege(`userTokens:edit:${infix}`), + canDeleteToken: api.hasPrivilege( + `userTokens:delete:${infix}` + ), + canDelete: api.hasPrivilege(`users:delete:${infix}`), + ranks: ranks, + tokens: userTokens, + }); + this._view.addEventListener("change", (e) => + this._evtChange(e) + ); + this._view.addEventListener("submit", (e) => + this._evtUpdate(e) + ); + this._view.addEventListener("delete", (e) => + this._evtDelete(e) + ); + this._view.addEventListener("create-token", (e) => + this._evtCreateToken(e) + ); + this._view.addEventListener("delete-token", (e) => + this._evtDeleteToken(e) + ); + this._view.addEventListener("update-token", (e) => + this._evtUpdateToken(e) + ); - for (let message of this._successMessages) { - this.showSuccess(message); - } + for (let message of this._successMessages) { + this.showSuccess(message); + } - for (let message of this._errorMessages) { - this.showError(message); + for (let message of this._errorMessages) { + this.showError(message); + } + }, + (error) => { + this._view = new EmptyView(); + this._view.showError(error.message); } - - }, error => { - this._view = new EmptyView(); - this._view.showError(error.message); - }); + ); } showSuccess(message) { - if (typeof this._view === 'undefined') { - this._successMessages.push(message) + if (typeof this._view === "undefined") { + this._successMessages.push(message); } else { this._view.showSuccess(message); } } showError(message) { - if (typeof this._view === 'undefined') { - this._errorMessages.push(message) + if (typeof this._view === "undefined") { + this._errorMessages.push(message); } else { this._view.showError(message); } @@ -132,9 +163,10 @@ class UserController { misc.disableExitConfirmation(); if (this._name !== e.detail.user.name) { router.replace( - uri.formatClientLink('user', e.detail.user.name, section), + uri.formatClientLink("user", e.detail.user.name, section), null, - false); + false + ); } } @@ -142,7 +174,7 @@ class UserController { this._view.clearMessages(); this._view.disableForm(); const isLoggedIn = api.isLoggedIn(e.detail.user); - const infix = isLoggedIn ? 'self' : 'any'; + const infix = isLoggedIn ? "self" : "any"; if (e.detail.name !== undefined) { e.detail.user.name = e.detail.name; @@ -165,72 +197,105 @@ class UserController { } } - e.detail.user.save().then(() => { - return isLoggedIn ? - api.login( - e.detail.name || api.userName, - e.detail.password || api.userPassword, - false) : - Promise.resolve(); - }).then(() => { - this._view.showSuccess('Settings updated.'); - this._view.enableForm(); - }, error => { - this._view.showError(error.message); - this._view.enableForm(); - }); + e.detail.user + .save() + .then(() => { + return isLoggedIn + ? api.login( + e.detail.name || api.userName, + e.detail.password || api.userPassword, + false + ) + : Promise.resolve(); + }) + .then( + () => { + this._view.showSuccess("Settings updated."); + this._view.enableForm(); + }, + (error) => { + this._view.showError(error.message); + this._view.enableForm(); + } + ); } _evtDelete(e) { this._view.clearMessages(); this._view.disableForm(); const isLoggedIn = api.isLoggedIn(e.detail.user); - e.detail.user.delete() - .then(() => { + e.detail.user.delete().then( + () => { if (isLoggedIn) { api.forget(); api.logout(); } - if (api.hasPrivilege('users:list')) { - const ctx = router.show(uri.formatClientLink('users')); - ctx.controller.showSuccess('Account deleted.'); + if (api.hasPrivilege("users:list")) { + const ctx = router.show(uri.formatClientLink("users")); + ctx.controller.showSuccess("Account deleted."); } else { const ctx = router.show(uri.formatClientLink()); - ctx.controller.showSuccess('Account deleted.'); + ctx.controller.showSuccess("Account deleted."); } - }, error => { + }, + (error) => { this._view.showError(error.message); this._view.enableForm(); - }); + } + ); } _evtCreateToken(e) { this._view.clearMessages(); this._view.disableForm(); - UserToken.create(e.detail.user.name, e.detail.note, e.detail.expirationTime) - .then(response => { - const ctx = router.show(uri.formatClientLink('user', e.detail.user.name, 'list-tokens')); - ctx.controller.showSuccess('Token ' + response.token + ' created.'); - }, error => { + UserToken.create( + e.detail.user.name, + e.detail.note, + e.detail.expirationTime + ).then( + (response) => { + const ctx = router.show( + uri.formatClientLink( + "user", + e.detail.user.name, + "list-tokens" + ) + ); + ctx.controller.showSuccess( + "Token " + response.token + " created." + ); + }, + (error) => { this._view.showError(error.message); this._view.enableForm(); - }); + } + ); } _evtDeleteToken(e) { this._view.clearMessages(); this._view.disableForm(); if (api.isCurrentAuthToken(e.detail.userToken)) { - router.show(uri.formatClientLink('logout')); + router.show(uri.formatClientLink("logout")); } else { - e.detail.userToken.delete(e.detail.user.name) - .then(() => { - const ctx = router.show(uri.formatClientLink('user', e.detail.user.name, 'list-tokens')); - ctx.controller.showSuccess('Token ' + e.detail.userToken.token + ' deleted.'); - }, error => { + e.detail.userToken.delete(e.detail.user.name).then( + () => { + const ctx = router.show( + uri.formatClientLink( + "user", + e.detail.user.name, + "list-tokens" + ) + ); + ctx.controller.showSuccess( + "Token " + e.detail.userToken.token + " deleted." + ); + }, + (error) => { this._view.showError(error.message); this._view.enableForm(); - }); + } + ); } } @@ -242,27 +307,38 @@ class UserController { e.detail.userToken.note = e.detail.note; } - e.detail.userToken.save(e.detail.user.name).then(response => { - const ctx = router.show(uri.formatClientLink('user', e.detail.user.name, 'list-tokens')); - ctx.controller.showSuccess('Token ' + response.token + ' updated.'); - }, error => { - this._view.showError(error.message); - this._view.enableForm(); - }); + e.detail.userToken.save(e.detail.user.name).then( + (response) => { + const ctx = router.show( + uri.formatClientLink( + "user", + e.detail.user.name, + "list-tokens" + ) + ); + ctx.controller.showSuccess( + "Token " + response.token + " updated." + ); + }, + (error) => { + this._view.showError(error.message); + this._view.enableForm(); + } + ); } } -module.exports = router => { - router.enter(['user', ':name'], (ctx, next) => { - ctx.controller = new UserController(ctx, 'summary'); +module.exports = (router) => { + router.enter(["user", ":name"], (ctx, next) => { + ctx.controller = new UserController(ctx, "summary"); }); - router.enter(['user', ':name', 'edit'], (ctx, next) => { - ctx.controller = new UserController(ctx, 'edit'); + router.enter(["user", ":name", "edit"], (ctx, next) => { + ctx.controller = new UserController(ctx, "edit"); }); - router.enter(['user', ':name', 'list-tokens'], (ctx, next) => { - ctx.controller = new UserController(ctx, 'list-tokens'); + router.enter(["user", ":name", "list-tokens"], (ctx, next) => { + ctx.controller = new UserController(ctx, "list-tokens"); }); - router.enter(['user', ':name', 'delete'], (ctx, next) => { - ctx.controller = new UserController(ctx, 'delete'); + router.enter(["user", ":name", "delete"], (ctx, next) => { + ctx.controller = new UserController(ctx, "delete"); }); }; diff --git a/client/js/controllers/user_list_controller.js b/client/js/controllers/user_list_controller.js index 9860de4..d6c4fe5 100644 --- a/client/js/controllers/user_list_controller.js +++ b/client/js/controllers/user_list_controller.js @@ -1,27 +1,27 @@ -'use strict'; +"use strict"; -const api = require('../api.js'); -const router = require('../router.js'); -const uri = require('../util/uri.js'); -const UserList = require('../models/user_list.js'); -const topNavigation = require('../models/top_navigation.js'); -const PageController = require('../controllers/page_controller.js'); -const UsersHeaderView = require('../views/users_header_view.js'); -const UsersPageView = require('../views/users_page_view.js'); -const EmptyView = require('../views/empty_view.js'); +const api = require("../api.js"); +const router = require("../router.js"); +const uri = require("../util/uri.js"); +const UserList = require("../models/user_list.js"); +const topNavigation = require("../models/top_navigation.js"); +const PageController = require("../controllers/page_controller.js"); +const UsersHeaderView = require("../views/users_header_view.js"); +const UsersPageView = require("../views/users_page_view.js"); +const EmptyView = require("../views/empty_view.js"); class UserListController { constructor(ctx) { this._pageController = new PageController(); - if (!api.hasPrivilege('users:list')) { + if (!api.hasPrivilege("users:list")) { this._view = new EmptyView(); - this._view.showError('You don\'t have privileges to view users.'); + this._view.showError("You don't have privileges to view users."); return; } - topNavigation.activate('users'); - topNavigation.setTitle('Listing users'); + topNavigation.activate("users"); + topNavigation.setTitle("Listing users"); this._ctx = ctx; @@ -29,8 +29,9 @@ class UserListController { hostNode: this._pageController.view.pageHeaderHolderNode, parameters: ctx.parameters, }); - this._headerView.addEventListener( - 'navigate', e => this._evtNavigate(e)); + this._headerView.addEventListener("navigate", (e) => + this._evtNavigate(e) + ); this._syncPageController(); } @@ -41,7 +42,8 @@ class UserListController { _evtNavigate(e) { router.showNoDispatch( - uri.formatClientLink('users', e.detail.parameters)); + uri.formatClientLink("users", e.detail.parameters) + ); Object.assign(this._ctx.parameters, e.detail.parameters); this._syncPageController(); } @@ -51,17 +53,22 @@ class UserListController { parameters: this._ctx.parameters, defaultLimit: 30, getClientUrlForPage: (offset, limit) => { - const parameters = Object.assign( - {}, this._ctx.parameters, {offset: offset, limit: limit}); - return uri.formatClientLink('users', parameters); + const parameters = Object.assign({}, this._ctx.parameters, { + offset: offset, + limit: limit, + }); + return uri.formatClientLink("users", parameters); }, requestPage: (offset, limit) => { return UserList.search( - this._ctx.parameters.query, offset, limit); + this._ctx.parameters.query, + offset, + limit + ); }, - pageRenderer: pageCtx => { + pageRenderer: (pageCtx) => { Object.assign(pageCtx, { - canViewUsers: api.hasPrivilege('users:view'), + canViewUsers: api.hasPrivilege("users:view"), }); return new UsersPageView(pageCtx); }, @@ -69,10 +76,8 @@ class UserListController { } } -module.exports = router => { - router.enter( - ['users'], - (ctx, next) => { - ctx.controller = new UserListController(ctx); - }); +module.exports = (router) => { + router.enter(["users"], (ctx, next) => { + ctx.controller = new UserListController(ctx); + }); }; diff --git a/client/js/controllers/user_registration_controller.js b/client/js/controllers/user_registration_controller.js index 78b9402..89cfd8c 100644 --- a/client/js/controllers/user_registration_controller.js +++ b/client/js/controllers/user_registration_controller.js @@ -1,25 +1,25 @@ -'use strict'; +"use strict"; -const router = require('../router.js'); -const api = require('../api.js'); -const uri = require('../util/uri.js'); -const User = require('../models/user.js'); -const topNavigation = require('../models/top_navigation.js'); -const RegistrationView = require('../views/registration_view.js'); -const EmptyView = require('../views/empty_view.js'); +const router = require("../router.js"); +const api = require("../api.js"); +const uri = require("../util/uri.js"); +const User = require("../models/user.js"); +const topNavigation = require("../models/top_navigation.js"); +const RegistrationView = require("../views/registration_view.js"); +const EmptyView = require("../views/empty_view.js"); class UserRegistrationController { constructor() { - if (!api.hasPrivilege('users:create:self')) { + if (!api.hasPrivilege("users:create:self")) { this._view = new EmptyView(); - this._view.showError('Registration is closed.'); + this._view.showError("Registration is closed."); return; } - topNavigation.activate('register'); - topNavigation.setTitle('Registration'); + topNavigation.activate("register"); + topNavigation.setTitle("Registration"); this._view = new RegistrationView(); - this._view.addEventListener('submit', e => this._evtRegister(e)); + this._view.addEventListener("submit", (e) => this._evtRegister(e)); } _evtRegister(e) { @@ -30,30 +30,35 @@ class UserRegistrationController { user.email = e.detail.email; user.password = e.detail.password; const isLoggedIn = api.isLoggedIn(); - user.save().then(() => { - if (isLoggedIn) { - return Promise.resolve(); - } else { - api.forget(); - return api.login(e.detail.name, e.detail.password, false); - } - }).then(() => { - if (isLoggedIn) { - const ctx = router.show(uri.formatClientLink('users')); - ctx.controller.showSuccess('User added!'); - } else { - const ctx = router.show(uri.formatClientLink()); - ctx.controller.showSuccess('Welcome aboard!'); - } - }, error => { - this._view.showError(error.message); - this._view.enableForm(); - }); + user.save() + .then(() => { + if (isLoggedIn) { + return Promise.resolve(); + } else { + api.forget(); + return api.login(e.detail.name, e.detail.password, false); + } + }) + .then( + () => { + if (isLoggedIn) { + const ctx = router.show(uri.formatClientLink("users")); + ctx.controller.showSuccess("User added!"); + } else { + const ctx = router.show(uri.formatClientLink()); + ctx.controller.showSuccess("Welcome aboard!"); + } + }, + (error) => { + this._view.showError(error.message); + this._view.enableForm(); + } + ); } } -module.exports = router => { - router.enter(['register'], (ctx, next) => { +module.exports = (router) => { + router.enter(["register"], (ctx, next) => { new UserRegistrationController(); }); }; |