From 50918ae65fff7189b4546ae7fb6f8fc3b15d533f Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Wed, 5 Jun 2013 22:13:31 -0700 Subject: [PATCH] all links are automatically handled through backbone router. no more page reload. --- UI/Calendar/CalendarItemTemplate.html | 2 +- UI/MainMenuView.js | 7 ---- UI/Mixins/backbone.modelbinder.mixin.js | 24 -------------- UI/RouteBinder.js | 44 +++++++++++++++++++++++++ UI/Routing.js | 3 +- UI/Settings/SettingsLayoutTemplate.html | 16 ++++----- 6 files changed, 55 insertions(+), 41 deletions(-) create mode 100644 UI/RouteBinder.js diff --git a/UI/Calendar/CalendarItemTemplate.html b/UI/Calendar/CalendarItemTemplate.html index 4a0062894..214584d2f 100644 --- a/UI/Calendar/CalendarItemTemplate.html +++ b/UI/Calendar/CalendarItemTemplate.html @@ -3,7 +3,7 @@

{{day}}

{{month}}

- +

{{series.title}}

{{startTime}} {{bestDateString}}{{seasonNumber}}x{{paddedEpisodeNumber}}
{{episodeTitle}}

diff --git a/UI/MainMenuView.js b/UI/MainMenuView.js index b9ff92f8c..28748dd86 100644 --- a/UI/MainMenuView.js +++ b/UI/MainMenuView.js @@ -24,13 +24,6 @@ define(['app'], function () { } else { this.setActive(event.target); } - - if (href && href.startsWith('http')) { - window.location.href = href; - } else { - NzbDrone.Router.navigate(href, { trigger: true }); - } - }, setActive: function (element) { diff --git a/UI/Mixins/backbone.modelbinder.mixin.js b/UI/Mixins/backbone.modelbinder.mixin.js index e7d28b70e..460756e26 100644 --- a/UI/Mixins/backbone.modelbinder.mixin.js +++ b/UI/Mixins/backbone.modelbinder.mixin.js @@ -21,29 +21,6 @@ Marionette.ItemView.prototype.self$ = function (selector) { return this.$(selector).not("[class*='iv-'] " + selector); }; - -Marionette.ItemView.prototype._handleRelativeLink = function (event) { - console.log('clikc'); - event.preventDefault(); - var $target = $(event.target); - - var href = event.target.getAttribute('href'); - - if (!href && $target.parent('a') && $target.parent('a')[0]) { - - var linkElement = $target.parent('a')[0]; - - href = linkElement.getAttribute('href'); - } - - if (!href) { - throw 'couldnt find route target'; - } - - NzbDrone.Router.navigate(href, { trigger: true }); -}; - - Marionette.ItemView.prototype.render = function () { var result = oldMarionetteItemViewRender.apply(this, arguments); @@ -64,7 +41,6 @@ Marionette.ItemView.prototype.render = function () { this._modelBinder.bind(this.model, this.el); } - this.$('a[href^="/"]').children().click(this._handleRelativeLink); this.$el.addClass('iv-' + this.viewName()); return result; diff --git a/UI/RouteBinder.js b/UI/RouteBinder.js new file mode 100644 index 000000000..7b5b1e108 --- /dev/null +++ b/UI/RouteBinder.js @@ -0,0 +1,44 @@ +"use strict"; +define(['app'], function () { + + //This module will automatically route all links through backbone router rather than + //causing links to reload pages. + + var routeBinder = { + + bind: function () { + $(document).on('click', 'a[href]', this._handleClick); + }, + + _handleClick: function (event) { + var $target = $(event.target); + + if ($target.hasClass('no-router')) { + return; + } + + console.log('click'); + event.preventDefault(); + + var href = event.target.getAttribute('href'); + + if (!href && $target.parent('a') && $target.parent('a')[0]) { + + var linkElement = $target.parent('a')[0]; + + href = linkElement.getAttribute('href'); + } + + if (!href) { + throw 'couldnt find route target'; + } + + + if (!href.startsWith('http')) { + NzbDrone.Router.navigate(href, { trigger: true }); + } + } + }; + + return routeBinder; +}); diff --git a/UI/Routing.js b/UI/Routing.js index 173b41fc8..f45ea2bbe 100644 --- a/UI/Routing.js +++ b/UI/Routing.js @@ -1,5 +1,5 @@ "use strict"; -require(['app', 'Controller'], function (app, controller) { +require(['app', 'Controller', 'RouteBinder'], function (app, controller, routeBinder) { NzbDrone.Router = Backbone.Marionette.AppRouter.extend({ @@ -27,6 +27,7 @@ require(['app', 'Controller'], function (app, controller) { NzbDrone.Router = new NzbDrone.Router(); Backbone.history.start({ pushState: true }); + routeBinder.bind(); }); }); diff --git a/UI/Settings/SettingsLayoutTemplate.html b/UI/Settings/SettingsLayoutTemplate.html index adbbfa740..dadc85908 100644 --- a/UI/Settings/SettingsLayoutTemplate.html +++ b/UI/Settings/SettingsLayoutTemplate.html @@ -1,11 +1,11 @@ 
@@ -18,4 +18,4 @@
Misc Settings
- \ No newline at end of file +