summaryrefslogtreecommitdiff
path: root/public/assets/js/lib
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/js/lib')
-rw-r--r--public/assets/js/lib/router.js41
-rw-r--r--public/assets/js/lib/views/details/comments.js2
-rw-r--r--public/assets/js/lib/views/details/files.js5
-rw-r--r--public/assets/js/lib/views/details/index.js16
-rw-r--r--public/assets/js/lib/views/details/settings.js95
-rw-r--r--public/assets/js/lib/views/login/signup.js49
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='/'>&lt; 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"
+ }
+ },
+
+})