summaryrefslogtreecommitdiff
path: root/js/post-hover.js
diff options
context:
space:
mode:
authorMichael Save <savetheinternet@tinyboard.org>2012-03-31 10:59:20 +1100
committerMichael Save <savetheinternet@tinyboard.org>2012-03-31 10:59:20 +1100
commitfef9a3ca82144348924852f68aee35ff4bf6ca25 (patch)
tree2eb7dd277177fcbd572884d15ed3ce100aa61c7c /js/post-hover.js
parent52443d3da98e992953d8214b7848350f70d02336 (diff)
parent2df1ebd88c266d984cbaa6c26917c2ea89c2ae0e (diff)
Merge branch 'master' of github.com:savetheinternet/Tinyboard-Tools into tools
Conflicts: README.md
Diffstat (limited to 'js/post-hover.js')
-rw-r--r--js/post-hover.js117
1 files changed, 117 insertions, 0 deletions
diff --git a/js/post-hover.js b/js/post-hover.js
new file mode 100644
index 00000000..7e085e97
--- /dev/null
+++ b/js/post-hover.js
@@ -0,0 +1,117 @@
+/*
+ * post-hover.js
+ * https://github.com/savetheinternet/Tinyboard-Tools/blob/master/js/post-hover.js
+ *
+ * Released under the MIT license
+ * Copyright (c) 2012 Michael Save <savetheinternet@tinyboard.org>
+ *
+ * Usage:
+ * $config['additional_javascript'][] = 'js/jquery.min.js';
+ * $config['additional_javascript'][] = 'js/post-hover.js';
+ *
+ */
+
+$(document).ready(function(){
+ var dont_fetch_again = [];
+ var init_hover = function() {
+ var link = $(this);
+
+ var id;
+
+ if(id = $(link).text().match(/^>>(\d+)$/)) {
+ id = id[1];
+ }
+
+ var post = false;
+ var hovering = false;
+ var hovered_at;
+ $(link).hover(function(e) {
+ hovering = true;
+ hovered_at = {'x': e.pageX, 'y': e.pageY};
+
+ var start_hover = function(link) {
+ if(post.is(':visible') &&
+ post.offset().top + post.height() >= $(window).scrollTop() &&
+ post.offset().top <= $(window).scrollTop() + $(window).height()
+ ) {
+ // post is in view
+ post.attr('style', 'border-style: none dashed dashed none; background: ' + post.css('border-right-color'));
+ } else {
+ post.clone()
+ .attr('id', 'post-hover-' + id)
+ .addClass('post-hover')
+ .css('position', 'absolute')
+ .css('border-style', 'solid')
+ .css('box-shadow', '1px 1px 1px #999')
+ .css('display', 'block')
+ .insertAfter($(link).parent());
+ $(link).trigger('mousemove');
+ }
+ };
+
+ post = $('div.post#reply_' + id);
+ if(post.length > 0) {
+ start_hover(this);
+ } else {
+ var url = link.attr('href').replace(/#.*$/, '');
+
+ if($.inArray(url, dont_fetch_again) != -1) {
+ return;
+ }
+ dont_fetch_again.push(url);
+
+ $.ajax({
+ url: url,
+ context: document.body,
+ success: function(data) {
+ $(data).find('div.post.reply').each(function() {
+ if($('#' + $(this).attr('id')).length == 0)
+ $('div.post:first').prepend($(this).css('display', 'none').addClass('hidden'));
+
+ });
+
+ post = $('div.post#reply_' + id);
+ if(hovering && post.length > 0) {
+ start_hover(link);
+ }
+ }
+ });
+ }
+ }, function() {
+ hovering = false;
+ if(!post)
+ return;
+
+ post.attr('style', '');
+ if(post.hasClass('hidden'))
+ post.css('display', 'none');
+ $('.post-hover').remove();
+ }).mousemove(function(e) {
+ if(!post)
+ return;
+
+ var hover = $('#post-hover-' + id);
+ if(hover.length == 0)
+ return;
+
+ var top = (e.pageY ? e.pageY : hovered_at['y']) - 10;
+
+ if(e.pageY < $(window).scrollTop() + 15) {
+ top = $(window).scrollTop();
+ } else if(e.pageY > $(window).scrollTop() + $(window).height() - hover.height() - 15) {
+ top = $(window).scrollTop() + $(window).height() - hover.height() - 15;
+ }
+
+
+ hover.css('left', (e.pageX ? e.pageX : hovered_at['x'])).css('top', top);
+ });
+ };
+
+ $('p.body a:not([rel="nofollow"])').each(init_hover);
+
+ // allow to work with auto-reload.js, etc.
+ $(document).bind('new_post', function(e, post) {
+ $(post).find('p.body a:not([rel="nofollow"])').each(init_hover);
+ });
+});
+