allow linking directly to comments

This commit is contained in:
Sami Samhuri 2011-12-09 19:50:55 -08:00
parent 0bbb87c53c
commit fc3a270617
5 changed files with 261 additions and 77 deletions

View file

@ -11,10 +11,10 @@
, postCommentURL = function() { return server + 'comment' } , postCommentURL = function() { return server + 'comment' }
, countCommentsURL = function(post) { return server + 'count/' + post } , countCommentsURL = function(post) { return server + 'count/' + post }
function getComments() { function getComments(cb) {
SJS.request({uri: getCommentsURL(SJS.filename)}, function(err, request, body) { SJS.request({uri: getCommentsURL(SJS.filename)}, function(err, request, body) {
if (err) { if (err) {
$('#comments').text('derp') if (typeof cb === 'function') cb(err)
return return
} }
var data var data
@ -22,16 +22,34 @@
, h = '' , h = ''
try { try {
data = JSON.parse(body) data = JSON.parse(body)
} catch (e) { }
catch (e) {
console.log('not json -> ' + body) console.log('not json -> ' + body)
return
} }
comments = data.comments comments = data.comments
if (comments.length) { if (comments && comments.length) {
h = data.comments.map(function(c) { h = data.comments.map(function(c) {
return tmpl('comment_tmpl', c) return tmpl('comment_tmpl', c)
}).join('') }).join('')
}
$('#comments').html(h) $('#comments').html(h)
}
if (typeof cb === 'function') cb()
})
}
function showComments(cb) {
$('#sd-container').remove()
getComments(function(err) {
if (err) {
$('#comments').text('derp')
}
if (typeof cb === 'function') cb(err)
else {
$('#comment-stuff').slideDown(1.5, function() {
this.scrollIntoView(true)
})
}
}) })
} }
@ -45,18 +63,28 @@
, n , n
try { try {
data = JSON.parse(body) data = JSON.parse(body)
} catch (e) { }
catch (e) {
console.log('not json -> ' + body) console.log('not json -> ' + body)
return
} }
n = data.count n = data.count
$('#sd').text(n > 0 ? 'show the discussion (' + n + ')' : 'start the discussion') $('#sd').text(n > 0 ? 'show the discussion (' + n + ')' : 'start the discussion')
}) })
$('#sd').click(function() { // jump to comment if linked directly
$('#sd-container').remove() var hash = window.location.hash || ''
$('#comment-stuff').slideDown(1.5, function() { this.scrollIntoView(true) }) if (/^#comment-\d+/.test(hash)) {
getComments() alert(hash)
showComments(function (err) {
if (!err) {
window.location.hash = ''
window.location.hash = hash
}
}) })
}
$('#sd').click(showComments)
var showdown = new Showdown.converter() var showdown = new Showdown.converter()
@ -73,6 +101,7 @@
document.getElementById('thoughts').focus() document.getElementById('thoughts').focus()
return false return false
} }
comment.timestamp = +comment.timestamp
var options = { method: 'POST' var options = { method: 'POST'
, uri: postCommentURL() , uri: postCommentURL()

View file

@ -194,6 +194,9 @@ function commentServer(context) {
return return
} }
comments = context.db.get(post) || [] comments = context.db.get(post) || []
comments.forEach(function(c, i) {
c.id = c.id || (i + 1)
})
res.respond({comments: comments.map(function(c) { res.respond({comments: comments.map(function(c) {
delete c.email delete c.email
c.html = markdown.parse(c.body) c.html = markdown.parse(c.body)

View file

@ -3,7 +3,7 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>currentDocument</key> <key>currentDocument</key>
<string>.gitignore</string> <string>discussd/discussd.js</string>
<key>documents</key> <key>documents</key>
<array> <array>
<dict> <dict>
@ -15,8 +15,6 @@
<string>!(\.DS_Store|.*\.min\..*|.*\.tmproj)$</string> <string>!(\.DS_Store|.*\.min\..*|.*\.tmproj)$</string>
<key>regexFolderFilter</key> <key>regexFolderFilter</key>
<string>!.*/(\.[^/]*|public/blog|node_modules|CVS|_blog|public/proj|Chalk|json-diff|riak-js|f|node|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string> <string>!.*/(\.[^/]*|public/blog|node_modules|CVS|_blog|public/proj|Chalk|json-diff|riak-js|f|node|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
<key>selected</key>
<true/>
<key>sourceDirectory</key> <key>sourceDirectory</key>
<string></string> <string></string>
</dict> </dict>
@ -25,7 +23,205 @@
<integer>200</integer> <integer>200</integer>
<key>metaData</key> <key>metaData</key>
<dict> <dict>
<key>.gitignore</key> <key>Makefile</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>18</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>assets/css/blog.css</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>17</integer>
<key>line</key>
<integer>1</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>assets/css/mobile.css</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>59</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>10</integer>
</dict>
<key>assets/js/blog.js</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>110</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>78</integer>
</dict>
<key>bin/blog.rb</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>52</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>40</integer>
</dict>
<key>discussd/discuss.dirty</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>476</integer>
<key>line</key>
<integer>1</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>222</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>discussd/discussd.js</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>287</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>255</integer>
</dict>
<key>discussd/posts.json</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>517</integer>
<key>line</key>
<integer>0</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>public/discussions.html</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>13</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>templates/blog/index.html</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>37</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>26</integer>
</dict>
<key>templates/blog/link.mustache</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>2</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>templates/blog/link.rss.html</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>9</integer>
<key>line</key>
<integer>3</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>templates/blog/post.html</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>39</integer>
</dict>
<key>columnSelection</key>
<false/>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>16</integer>
<key>selectFrom</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>38</integer>
</dict>
<key>selectTo</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>39</integer>
</dict>
</dict>
<key>templates/blog/post.mustache</key>
<dict> <dict>
<key>caret</key> <key>caret</key>
<dict> <dict>
@ -39,70 +235,14 @@
<key>firstVisibleLine</key> <key>firstVisibleLine</key>
<integer>0</integer> <integer>0</integer>
</dict> </dict>
<key>Makefile</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>46</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>TODO</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>22</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>bin/blog.rb</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>0</integer>
<key>line</key>
<integer>119</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>91</integer>
</dict>
<key>public/js/iepngfix.htc</key>
<dict>
<key>caret</key>
<dict>
<key>column</key>
<integer>20</integer>
<key>line</key>
<integer>18</integer>
</dict>
<key>firstVisibleColumn</key>
<integer>0</integer>
<key>firstVisibleLine</key>
<integer>0</integer>
</dict>
<key>templates/proj/index.html</key> <key>templates/proj/index.html</key>
<dict> <dict>
<key>caret</key> <key>caret</key>
<dict> <dict>
<key>column</key> <key>column</key>
<integer>0</integer> <integer>19</integer>
<key>line</key> <key>line</key>
<integer>26</integer> <integer>73</integer>
</dict> </dict>
<key>firstVisibleColumn</key> <key>firstVisibleColumn</key>
<integer>0</integer> <integer>0</integer>
@ -113,14 +253,24 @@
<key>openDocuments</key> <key>openDocuments</key>
<array> <array>
<string>bin/blog.rb</string> <string>bin/blog.rb</string>
<string>TODO</string> <string>assets/css/blog.css</string>
<string>assets/css/mobile.css</string>
<string>discussd/discuss.dirty</string>
<string>assets/js/blog.js</string>
<string>public/discussions.html</string>
<string>discussd/discussd.js</string>
<string>discussd/posts.json</string>
<string>templates/blog/post.html</string>
<string>templates/blog/link.rss.html</string>
<string>templates/blog/link.mustache</string>
<string>templates/blog/post.mustache</string>
<string>templates/proj/index.html</string>
<string>templates/blog/index.html</string>
<string>Makefile</string> <string>Makefile</string>
<string>public/js/iepngfix.htc</string>
<string>.gitignore</string>
</array> </array>
<key>showFileHierarchyDrawer</key> <key>showFileHierarchyDrawer</key>
<false/> <false/>
<key>windowFrame</key> <key>windowFrame</key>
<string>{{840, 4}, {840, 1024}}</string> <string>{{0, 4}, {840, 1024}}</string>
</dict> </dict>
</plist> </plist>

View file

@ -35,6 +35,7 @@
</div> </div>
<script type="text/html" id="comment_tmpl"> <script type="text/html" id="comment_tmpl">
<div class="comment"> <div class="comment">
<a name="comment-<%= id %>" id="comment-<%= id %>">
<p> <p>
<% if (url) { %> <% if (url) { %>
<a href="<%= url %>"><%= name %></a> <a href="<%= url %>"><%= name %></a>

View file

@ -36,6 +36,7 @@
</div> </div>
<script type="text/html" id="comment_tmpl"> <script type="text/html" id="comment_tmpl">
<div class="comment"> <div class="comment">
<a name="comment-<%= id %>" id="comment-<%= id %>">
<p> <p>
<% if (url) { %> <% if (url) { %>
<a href="<%= url %>"><%= name %></a> <a href="<%= url %>"><%= name %></a>