diff options
| author | Jules Laplace <jules@okfoc.us> | 2017-05-11 02:58:40 +0200 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2017-05-11 02:58:40 +0200 |
| commit | 8003f1dc9e7ab23493b26eefbfd6cda314268264 (patch) | |
| tree | e90afd92059216c15d0459bd2fbaadce72e6d3b8 /public/assets/js/lib | |
init
Diffstat (limited to 'public/assets/js/lib')
| -rw-r--r-- | public/assets/js/lib/_router.js | 83 | ||||
| -rw-r--r-- | public/assets/js/lib/nav/DesktopNav.js | 49 | ||||
| -rw-r--r-- | public/assets/js/lib/nav/MobileNav.js | 32 | ||||
| -rw-r--r-- | public/assets/js/lib/view/HomeView.js | 27 | ||||
| -rw-r--r-- | public/assets/js/lib/view/ListView.js | 37 | ||||
| -rw-r--r-- | public/assets/js/lib/view/PageView.js | 43 | ||||
| -rw-r--r-- | public/assets/js/lib/view/PaintingView.js | 36 |
7 files changed, 307 insertions, 0 deletions
diff --git a/public/assets/js/lib/_router.js b/public/assets/js/lib/_router.js new file mode 100644 index 0000000..8d27b9c --- /dev/null +++ b/public/assets/js/lib/_router.js @@ -0,0 +1,83 @@ +var SiteRouter = Router.extend({ + + el: 'body', + routeByHash: false, + + routes: { + '/': 'home', + '/page/:id': 'pageById', + '/painting/:id': 'paintingById', + '/picture/:id': 'paintingById', + '/paintings': 'list', + '/pictures': 'list', + }, + + initialize: function(){ + var fn + for (var route in this.routes) { + fn = this.routes[route] + if (! this[fn]) { + this[fn] = this.default_view(fn) + } + } + }, + + initial_route: null, + launch: function(){ + if (this.initial_route) { + this.parseRoute( this.initial_route ) + } + else { + this.route() + } + this.initial_route = null + }, + + go: function(url){ + if (app.view && app.view.hide) { + app.view.hide() + } + this.pushState(url) + this.parseRoute(url) + }, + + default_view: function(name){ + var fn = function(){ + if (app.view != app.login && app.view != app.signin) { + app.last_view = app.view + } + if (app.view && app.view.hide) { + app.view.hide() + } + if (name.match(/\./)) { + var n = name.split(".") + app.view = app.views[n[0]][n[1]] + } + else { + app.view = app.views[name] + } + app.view.show() + }.bind(this) + return fn + }, + + paintingById: function(id){ + if (app.view && app.view.hide) { + app.view.hide() + } + app.view = app.views.painting + app.views.painting.show() + app.views.painting.load(id) + }, + + pageById: function(id){ + if (app.view && app.view.hide) { + app.view.hide() + } + app.view = app.views.page + app.views.page.show() + app.views.page.load(id) + } + +}) + diff --git a/public/assets/js/lib/nav/DesktopNav.js b/public/assets/js/lib/nav/DesktopNav.js new file mode 100644 index 0000000..0503b4a --- /dev/null +++ b/public/assets/js/lib/nav/DesktopNav.js @@ -0,0 +1,49 @@ +var NavView = View.extend({ + + el: "#mobile-nav", + + events: { + "click .pages a": "go", + "click .pages > span": "go_span", + }, + + initialize: function(){ + }, + + home: function(){ + app.router.go("/") + this.$headings.find(".active").removeClass("active") + if (app.mobile_nav && app.mobile_nav.state.open) { + app.mobile_nav.hamburger() + } + }, + + go: function(e){ + e.preventDefault() + e.stopPropagation() + var href = $(e.currentTarget).attr("href") + app.router.go(href) + console.log(href) + if (is_mobile) { + app.mobile_nav.hamburger() + } + this.after_go() + }, + + go_span: function(e){ + $("a", e.currentTarget).trigger("click") + }, + + after_go: function(){ + }, + + setActive: function(id){ + var href = '/' + id + var $el = $('[href="' + href + '"]') + this.$('.active').removeClass('active') + if ($el.length) { + $el.addClass('active') + } + }, + +}); diff --git a/public/assets/js/lib/nav/MobileNav.js b/public/assets/js/lib/nav/MobileNav.js new file mode 100644 index 0000000..5c0f253 --- /dev/null +++ b/public/assets/js/lib/nav/MobileNav.js @@ -0,0 +1,32 @@ +var MobileNav = View.extend({ + + el: '#mobile_nav', + + events: { + 'touchstart .logo': 'home', + 'touchstart .hamburger': 'hamburger' + }, + + initialize: function(options){ + options = options || {} + this.state = { + open: false + } + }, + + home: function (){ + app.nav.home() + }, + + hamburger: function (e){ + $('html').toggleClass('navopen') + app.mobile_nav.state.open = ! app.mobile_nav.state.open + if (app.mobile_nav.state.open) { + $("#rapper").on("click", app.mobile_nav.hamburger) + } + else { + $("#rapper").off("click", app.mobile_nav.hamburger) + } + }, + +}) diff --git a/public/assets/js/lib/view/HomeView.js b/public/assets/js/lib/view/HomeView.js new file mode 100644 index 0000000..3eac71e --- /dev/null +++ b/public/assets/js/lib/view/HomeView.js @@ -0,0 +1,27 @@ +var HomeView = View.extend({ + + el: "#home", + + // template: liquid($('#tmpl-home').html()), + + events: { + }, + + initialize: function(options){ + options = options || {} + var data = this.data = options.data + }, + + render: function(){ + if (this.rendered) return + this.rendered = true + }, + + show: function(){ + this.render(this.data) + }, + + hide: function(){ + }, + +}) diff --git a/public/assets/js/lib/view/ListView.js b/public/assets/js/lib/view/ListView.js new file mode 100644 index 0000000..5161a31 --- /dev/null +++ b/public/assets/js/lib/view/ListView.js @@ -0,0 +1,37 @@ +var ListView = View.extend({ + + el: "#list", + + events: { + "click div": "load", + }, + + initialize: function(options){ + options = options || {} + var data = this.data = options.data + }, + + render: function(){ + if (this.rendered) return + this.rendered = true + }, + + show: function(){ + this.render(this.data) + document.body.className = "listopen" + }, + + hide: function(){ + document.body.className = "" + $(".visible").removeClass("visible") + $("#nav a.active").removeClass('active') + }, + + load: function(e){ + var index = $(e.currentTarget).data("index") + $.fn.fullpage.moveTo(index+1) + console.log(index) + this.hide() + }, + +}) diff --git a/public/assets/js/lib/view/PageView.js b/public/assets/js/lib/view/PageView.js new file mode 100644 index 0000000..10f18d6 --- /dev/null +++ b/public/assets/js/lib/view/PageView.js @@ -0,0 +1,43 @@ +var PageView = View.extend({ + + el: "body", + + events: { + "click #close": "close", + }, + + initialize: function(options){ + options = options || {} + var data = this.data = options.data + }, + + render: function(){ + if (this.rendered) return + this.rendered = true + }, + + show: function(){ + this.render(this.data) + document.body.className = "pageopen" + MAKE_CONFETTI() + confetti_on = true + }, + + hide: function(){ + document.body.className = "" + confetti_on = false + $(".visible").removeClass("visible") + $("#nav a.active").removeClass('active') + }, + + close: function(){ + app.router.go("/") + }, + + load: function(id){ + $("#nav a[href='/page/" + id + "']").addClass('active') + this.$("#" + id).addClass("visible") + }, + + +}) diff --git a/public/assets/js/lib/view/PaintingView.js b/public/assets/js/lib/view/PaintingView.js new file mode 100644 index 0000000..5c4f3bd --- /dev/null +++ b/public/assets/js/lib/view/PaintingView.js @@ -0,0 +1,36 @@ +var PaintingView = View.extend({ + + el: "body", + + // template: liquid($('#tmpl-about').html()), + + events: { + }, + + initialize: function(options){ + options = options || {} + var data = this.data = options.data + }, + + render: function(){ + if (this.rendered) return + this.rendered = true + }, + + show: function(){ + this.render(this.data) + document.body.className = "painting" + }, + + hide: function(){ + // document.body.className = "about" + }, + + load: function(id){ + var index = this.data.paintings.map(function(p){ return p.id }).indexOf(id) + if (index) { + $.fn.fullpage.moveTo(index+1) + } + }, + +}) |
