diff options
Diffstat (limited to 'public/assets/js/lib')
| -rw-r--r-- | public/assets/js/lib/router.js | 41 | ||||
| -rw-r--r-- | public/assets/js/lib/views/details/comments.js | 2 | ||||
| -rw-r--r-- | public/assets/js/lib/views/details/files.js | 5 | ||||
| -rw-r--r-- | public/assets/js/lib/views/details/index.js | 16 | ||||
| -rw-r--r-- | public/assets/js/lib/views/details/settings.js | 95 | ||||
| -rw-r--r-- | public/assets/js/lib/views/login/signup.js | 49 |
6 files changed, 187 insertions, 21 deletions
diff --git a/public/assets/js/lib/router.js b/public/assets/js/lib/router.js index 5862503..f9850e8 100644 --- a/public/assets/js/lib/router.js +++ b/public/assets/js/lib/router.js @@ -3,21 +3,23 @@ var SiteRouter = Router.extend({ el: "body", routes: { - "/": 'login', - "/index/:keyword": 'index', - "/index": 'index', - "/login": 'login', - "/details/:id": 'details', - "/post": 'post', - "/post/:keyword": 'post', - "/search": 'search', - "/mail": 'mailbox', - "/mail/:mailbox": 'mailbox', - "/mail/compose": 'compose', - "/message/:id": 'message', - "/comment/:id/edit": 'editComment', - "/profile": 'profile', - "/profile/:username": 'profile', + "/": 'login', + "/index/:keyword": 'index', + "/index": 'index', + "/login": 'login', + "/signup": 'signup', + "/details/:id": 'details', + "/details/:id/settings": 'threadSettings', + "/post": 'post', + "/post/:keyword": 'post', + "/search": 'search', + "/mail": 'mailbox', + "/mail/:mailbox": 'mailbox', + "/mail/compose": 'compose', + "/message/:id": 'message', + "/comment/:id/edit": 'editComment', + "/profile": 'profile', + "/profile/:username": 'profile', }, initialize: function(){ @@ -32,10 +34,19 @@ var SiteRouter = Router.extend({ app.view = new LoginView () }, + signup: function(){ + app.view = new SignupView () + }, + details: function(id){ app.view = new DetailsView () app.view.load(id) }, + + threadSettings: function(id){ + app.view = new DetailsView ({ settings: true }) + app.view.load(id) + }, editComment: function(id){ app.view = new EditCommentForm () diff --git a/public/assets/js/lib/views/details/comments.js b/public/assets/js/lib/views/details/comments.js index c679d22..473fb22 100644 --- a/public/assets/js/lib/views/details/comments.js +++ b/public/assets/js/lib/views/details/comments.js @@ -19,7 +19,7 @@ var CommentsView = FormView.extend({ }, parse: function(comment){ - if (! comment.comment.length) return $('<div></div>') + if (! comment.comment.length) return $('') var datetime = verbose_date(comment.date, true) var t = this.template.replace(/{{username}}/g, comment.username) .replace(/{{id}}/g, comment.id) diff --git a/public/assets/js/lib/views/details/files.js b/public/assets/js/lib/views/details/files.js index ad2df85..e8832a7 100644 --- a/public/assets/js/lib/views/details/files.js +++ b/public/assets/js/lib/views/details/files.js @@ -50,16 +50,17 @@ var FilesView = FormView.extend({ .replace(/{{time}}/g, datetime[1]) .replace(/{{size_class}}/g, size[0]) .replace(/{{size}}/g, size[1]) + var $t = $(t) return t }, prependFile: function(file){ - var $el = $( this.parse(file) ) + var $el = this.parse(file) this.$el.prepend($el) }, appendFile: function(file){ - var $el = $( this.parse(file) ) + var $el = this.parse(file) this.$el.append($el) }, diff --git a/public/assets/js/lib/views/details/index.js b/public/assets/js/lib/views/details/index.js index 8dc92f6..5550173 100644 --- a/public/assets/js/lib/views/details/index.js +++ b/public/assets/js/lib/views/details/index.js @@ -12,6 +12,8 @@ var DetailsView = View.extend({ this.gallery = new GalleryView ({ parent: this }) this.form = new CommentForm ({ parent: this }) this.threadbox = new ThreadBox ({ parent: this }) + this.settings = new ThreadSettingsForm ({ parent: this }) + $(".settings_link").click(this.openSettings.bind(this)) }, load: function(id){ @@ -20,11 +22,15 @@ var DetailsView = View.extend({ }, populate: function(data){ + this.data = data + console.log(data) + set_background_color(data.thread.color || data.keyword.color) $("body").removeClass('loading') var thread = data.thread $("h1").html(sanitize(thread.title)) $("title").html(sanitize(thread.title)) - $(".subtitle").show().html("<a href='/'>< Home</a> | " + metadata(thread)) + $(".metadata").html(metadata(thread)) + $(".settings_link").attr("href", "/details/" + thread.id + "/settings") this.form.load(data.thread) this.comments.load(data.comments) this.files.load(data.files) @@ -32,14 +38,18 @@ var DetailsView = View.extend({ if (data.thread.keyword) { $.get(this.keywordAction + data.thread.keyword, this.populateKeyword.bind(this)) } + if (this.options.settings) { + this.openSettings() + } }, populateKeyword: function(data){ this.threadbox.load(data) }, - success: function(){ - window.location.href = "/index" + openSettings: function(e){ + e && e.preventDefault() + this.settings.show() }, }) diff --git a/public/assets/js/lib/views/details/settings.js b/public/assets/js/lib/views/details/settings.js new file mode 100644 index 0000000..6e6b0b2 --- /dev/null +++ b/public/assets/js/lib/views/details/settings.js @@ -0,0 +1,95 @@ +var ThreadSettingsForm = FormView.extend({ + + el: "#thread_settings", + + events: { + "click": "hide", + "click .inner": "stopPropagation", + "click .close_link": "hide" + }, + + action: "", + method: 'put', + + initialize: function(){ + this.__super__.initialize.call(this) + this.template = this.$(".template").html() + }, + + populate: function(){ + // this.action = "/api/thread/" + data.id + $("body").removeClass("loading") + + var data = this.options.parent.data + var keywords = data.keywords + var keyword = data.keyword + var thread = data.thread + var comments = data.comments + var files = data.files + var settings = thread.settings + var display = thread.display + + this.$(".close_link").attr("href", "/details/" + thread.id) + this.$(".metadata").html(metadata(thread)) + this.$("[name=title]").val(sanitize(thread.title)) + + var $color = this.$('[name=color]') + Object.keys(COLORS).forEach((color) => { + var option = document.createElement('option') + option.value = color + option.innerHTML = color + $color.append(option) + }) + $color.val(thread.color || keyword.color) + + $.get('/api/keywords', function(data){ + var $keyword = this.$('[name=keyword]') + data.keywords + .map( (a) => a.keyword) + .sort( (a,b) => a < b ? -1 : a === b ? 0 : 1 ) + .forEach((keyword) => { + var option = document.createElement('option') + option.value = keyword + option.innerHTML = keyword + $keyword.append(option) + }) + $keyword.val(thread.keyword) + }.bind(this)) + console.log(thread) + }, + + validate: function(){ + var errors = [] + var comment = $("[name=comment]").val() + if (! comment || ! comment.length) { + errors.push("Please enter a comment.") + } + return errors.length ? errors : null + }, + + success: function(data){ + window.location.href = "/details/" + data.comment.thread + }, + + visible: false, + + show: function(){ + this.visible = true + this.populate() + this.$el.addClass('visible') + app.router.pushState("/details/" + this.options.parent.data.thread.id + "/settings") + }, + + hide: function(e){ + e && e.preventDefault() + this.visible = false + this.$el.removeClass('visible') + app.router.pushState("/details/" + this.options.parent.data.thread.id) + }, + + toggle: function(){ + if (this.visible) this.hide() + else this.show() + }, + +})
\ No newline at end of file diff --git a/public/assets/js/lib/views/login/signup.js b/public/assets/js/lib/views/login/signup.js new file mode 100644 index 0000000..d3d407d --- /dev/null +++ b/public/assets/js/lib/views/login/signup.js @@ -0,0 +1,49 @@ +var SignupView = FormView.extend({ + + el: "#signup", + action: "/api/signup", + method: "put", + + initialize: function(opt){ + this.__super__.initialize.call(this) + $("body").removeClass("loading") + this.$("[name=username]").focus() + }, + + validate: function(){ + var errors = [] + if (! this.$("[name=username]").val().length) { + errors.push("Please enter a username") + } + if (! this.$("[name=password]").val().length) { + errors.push("Please enter a password") + } + if (this.$("[name=password]").val() !== this.$("[name=password2]").val()) { + errors.push("Passwords don't match") + } + return errors.length ? errors : null + }, + + showErrors: function(errors){ + $(".errors").show().css({ opacity: 1 }).html(errors.join("<br>")) + }, + + success: function(data){ + console.log("LOGGED IN?", data) + if (data.user) { + auth.set_user(data.user) + } + else { + this.showErrors() + return + } + if (data.returnTo) { + console.log(data.returnTo) + window.location.href = data.returnTo + } + else { + window.location.href = "/index" + } + }, + +}) |
