diff options
| author | rr- | 2016-05-11 21:29:57 +0200 |
|---|---|---|
| committer | rr- | 2016-05-11 23:47:50 +0200 |
| commit | 2a4241641c80fec036143e7335eb2dad63fad476 (patch) | |
| tree | 389c49ded7faa6da98699618268ceb24c14bd456 /client/js/views | |
| parent | 09bc5f10f90a8b8666ed5df631261a87d3bbcb15 (diff) | |
client/events: improve event dispatching
This commit introduces timer-less retry system:
1. Any change to URL is going to stop listening to any messages.
2. If a message is sent and there's no handler that could pick it up,
the message gets enqueued.
3. The message is sent again to the first handler that attaches itself
to given event type.
While in theory this is full of holes (no control over the first
handler), in practice, it works quite well.
Additionally, views.listenToMessages was attaching to completely wrong
DOM node; this commit fixes this as well.
Diffstat (limited to 'client/js/views')
| -rw-r--r-- | client/js/views/empty_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/endless_page_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/help_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/home_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/login_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/manual_page_view.js | 4 | ||||
| -rw-r--r-- | client/js/views/password_reset_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/registration_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/settings_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/tag_categories_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/user_delete_view.js | 5 | ||||
| -rw-r--r-- | client/js/views/user_edit_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/user_summary_view.js | 2 | ||||
| -rw-r--r-- | client/js/views/user_view.js | 2 |
14 files changed, 17 insertions, 16 deletions
diff --git a/client/js/views/empty_view.js b/client/js/views/empty_view.js index d4e36b6..2142fb8 100644 --- a/client/js/views/empty_view.js +++ b/client/js/views/empty_view.js @@ -10,7 +10,7 @@ class EmptyView { render(ctx) { const target = document.getElementById('content-holder'); const source = this.template; - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/endless_page_view.js b/client/js/views/endless_page_view.js index d961a0f..784d58c 100644 --- a/client/js/views/endless_page_view.js +++ b/client/js/views/endless_page_view.js @@ -15,7 +15,7 @@ class EndlessPageView { const source = this.holderTemplate(); const pageHeaderHolder = source.querySelector('.page-header-holder'); const pagesHolder = source.querySelector('.pages-holder'); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); this.active = true; this.working = 0; diff --git a/client/js/views/help_view.js b/client/js/views/help_view.js index f43a1a6..b4ff278 100644 --- a/client/js/views/help_view.js +++ b/client/js/views/help_view.js @@ -61,7 +61,7 @@ class HelpView { } } - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); views.scrollToHash(); diff --git a/client/js/views/home_view.js b/client/js/views/home_view.js index b27fb14..c0d5df1 100644 --- a/client/js/views/home_view.js +++ b/client/js/views/home_view.js @@ -16,7 +16,7 @@ class HomeView { buildDate: config.meta.buildDate, }); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/login_view.js b/client/js/views/login_view.js index 10ba67a..112cdab 100644 --- a/client/js/views/login_view.js +++ b/client/js/views/login_view.js @@ -36,7 +36,7 @@ class LoginView { .always(() => { views.enableForm(form); }); }); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/manual_page_view.js b/client/js/views/manual_page_view.js index a74729c..53f0c4b 100644 --- a/client/js/views/manual_page_view.js +++ b/client/js/views/manual_page_view.js @@ -99,13 +99,13 @@ class ManualPageView { })); } - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); if (response.total <= (currentPage - 1) * response.pageSize) { events.notify(events.Info, 'No data to show'); } }, response => { - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); events.notify(events.Error, response.description); }); diff --git a/client/js/views/password_reset_view.js b/client/js/views/password_reset_view.js index 14f0737..67043c5 100644 --- a/client/js/views/password_reset_view.js +++ b/client/js/views/password_reset_view.js @@ -24,7 +24,7 @@ class PasswordResetView { .catch(() => { views.enableForm(form); }); }); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/registration_view.js b/client/js/views/registration_view.js index 4a3178f..bcd8c74 100644 --- a/client/js/views/registration_view.js +++ b/client/js/views/registration_view.js @@ -33,7 +33,7 @@ class RegistrationView { .always(() => { views.enableForm(form); }); }); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/settings_view.js b/client/js/views/settings_view.js index 19bf591..6809ee8 100644 --- a/client/js/views/settings_view.js +++ b/client/js/views/settings_view.js @@ -25,7 +25,7 @@ class SettingsView { }); }); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/tag_categories_view.js b/client/js/views/tag_categories_view.js index f00c86f..7dd7115 100644 --- a/client/js/views/tag_categories_view.js +++ b/client/js/views/tag_categories_view.js @@ -101,7 +101,7 @@ class TagListHeaderView { this._saveButtonClickHandler(e, ctx, target); }); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/user_delete_view.js b/client/js/views/user_delete_view.js index 740c205..c9e2be7 100644 --- a/client/js/views/user_delete_view.js +++ b/client/js/views/user_delete_view.js @@ -19,10 +19,11 @@ class UserDeleteView { e.preventDefault(); views.clearMessages(target); views.disableForm(form); - ctx.delete(); + ctx.delete() + .catch(() => { views.enableForm(form); }); }); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/user_edit_view.js b/client/js/views/user_edit_view.js index bb5eb9c..0f9d858 100644 --- a/client/js/views/user_edit_view.js +++ b/client/js/views/user_edit_view.js @@ -54,7 +54,7 @@ class UserEditView { .always(() => { views.enableForm(form); }); }); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/user_summary_view.js b/client/js/views/user_summary_view.js index 9369376..c740cce 100644 --- a/client/js/views/user_summary_view.js +++ b/client/js/views/user_summary_view.js @@ -10,7 +10,7 @@ class UserSummaryView { render(ctx) { const target = ctx.target; const source = this.template(ctx); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } diff --git a/client/js/views/user_view.js b/client/js/views/user_view.js index 7cc8533..aac2e08 100644 --- a/client/js/views/user_view.js +++ b/client/js/views/user_view.js @@ -38,7 +38,7 @@ class UserView { ctx.target = source.querySelector('#user-content-holder'); view.render(ctx); - views.listenToMessages(target); + views.listenToMessages(source); views.showView(target, source); } } |