##// END OF EJS Templates
Not showing post previews for posts that cannot be found on the page
neko259 -
r353:9e5cd53e default
parent child Browse files
Show More
@@ -1,198 +1,111 b''
1 function $X(path, root) {
1 function $X(path, root) {
2 return document.evaluate(path, root || document, null, 6, null);
2 return document.evaluate(path, root || document, null, 6, null);
3 }
3 }
4 function $x(path, root) {
4 function $x(path, root) {
5 return document.evaluate(path, root || document, null, 8, null).singleNodeValue;
5 return document.evaluate(path, root || document, null, 8, null).singleNodeValue;
6 }
6 }
7
7
8 function $del(el) {
8 function $del(el) {
9 if(el) el.parentNode.removeChild(el);
9 if(el) el.parentNode.removeChild(el);
10 }
10 }
11
11
12 function $each(list, fn) {
12 function $each(list, fn) {
13 if(!list) return;
13 if(!list) return;
14 var i = list.snapshotLength;
14 var i = list.snapshotLength;
15 if(i > 0) while(i--) fn(list.snapshotItem(i), i);
15 if(i > 0) while(i--) fn(list.snapshotItem(i), i);
16 }
16 }
17
17
18 function addRefLinkPreview(node) {
18 function addRefLinkPreview(node) {
19 $each($X('.//a[starts-with(text(),">>")]', node || document), function(link) {
19 $each($X('.//a[starts-with(text(),">>")]', node || document), function(link) {
20 link.addEventListener('mouseover', showPostPreview, false);
20 link.addEventListener('mouseover', showPostPreview, false);
21 link.addEventListener('mouseout', delPostPreview, false);
21 link.addEventListener('mouseout', delPostPreview, false);
22 });
22 });
23 }
23 }
24
24
25 function showPostPreview(e) {
25 function showPostPreview(e) {
26 var doc = document;
26 var doc = document;
27 //ref id
27 //ref id
28 var pNum = $(this).text().match(/\d+/);
28 var pNum = $(this).text().match(/\d+/);
29
29
30 //position
30 //position
31 //var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) - doc.documentElement.clientLeft + 1;
31 //var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) - doc.documentElement.clientLeft + 1;
32 //var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop) - doc.documentElement.clientTop;
32 //var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop) - doc.documentElement.clientTop;
33
33
34 var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) + 2;
34 var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) + 2;
35 var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop);
35 var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop);
36
36
37 var cln = doc.createElement('div');
37 var cln = doc.createElement('div');
38 cln.id = 'pstprev_' + pNum;
38 cln.id = 'pstprev_' + pNum;
39 cln.className = 'post_preview post';
39 cln.className = 'post_preview post';
40
40
41 cln.style.cssText = 'top:' + y + 'px;' + (x < doc.body.clientWidth/2 ? 'left:' + x + 'px' : 'right:' + parseInt(doc.body.clientWidth - x + 1) + 'px');
41 cln.style.cssText = 'top:' + y + 'px;' + (x < doc.body.clientWidth/2 ? 'left:' + x + 'px' : 'right:' + parseInt(doc.body.clientWidth - x + 1) + 'px');
42
42
43 cln.addEventListener('mouseout', delPostPreview, false);
43 cln.addEventListener('mouseout', delPostPreview, false);
44
44
45
45
46 var mkPreview = function(cln, html) {
46 var mkPreview = function(cln, html) {
47
47
48 cln.innerHTML = html;
48 cln.innerHTML = html;
49
49
50 addRefLinkPreview(cln);
50 addRefLinkPreview(cln);
51
51
52 //if(!$x('.//small', cln)) showRefMap(post, p_num, refMap)
52 //if(!$x('.//small', cln)) showRefMap(post, p_num, refMap)
53 };
53 };
54
54
55
55
56 cln.innerHTML = 'Загрузка...';
56 cln.innerHTML = 'Загрузка...';
57
57
58 var found = false;
59
58 //если пост найден в дереве.
60 //если пост найден в дереве.
59 if($('div[id='+pNum+']').length > 0) {
61 if($('div[id='+pNum+']').length > 0) {
60 var postdata = $('div[id='+pNum+']').html();
62 var postdata = $('div[id='+pNum+']').html();
61
63
62 //TODO: временно
64 //TODO: временно
63 //funcInit(postdata);
65 //funcInit(postdata);
64
66
65 //make preview
67 //make preview
66 mkPreview(cln, postdata);
68 mkPreview(cln, postdata);
69
70 found = true;
67 }
71 }
68 //ajax api
72 //ajax api
69 // else {
73 // else {
70 // $.getJSON(mayuri_cfg['board_url']+'api/single/'+pNum)
74 // $.getJSON(mayuri_cfg['board_url']+'api/single/'+pNum)
71 // .success(function(data) {
75 // .success(function(data) {
72 // //post templates
76 // //post templates
73 // var postdata = makeAjaxPost(data).html();
77 // var postdata = makeAjaxPost(data).html();
74 //
78 //
75 // //TODO: временно
79 // //TODO: временно
76 // //funcInit(postdata);
80 // //funcInit(postdata);
77 //
81 //
78 // //make preview
82 // //make preview
79 // mkPreview(cln, postdata);
83 // mkPreview(cln, postdata);
80 //
84 //
81 // })//if error
85 // })//if error
82 // .error(function() {
86 // .error(function() {
83 // cln.innerHTML = 'Пост не найден.';
87 // cln.innerHTML = 'Пост не найден.';
84 // });
88 // });
85 // }
89 // }
86
90
87 $del(doc.getElementById(cln.id));
91 $del(doc.getElementById(cln.id));
88
92
89 //add preview
93 if (found) {
90 $('body').append(cln);
94 //add preview
95 $('body').append(cln);
96 }
91 }
97 }
92
98
93 function delPostPreview(e) {
99 function delPostPreview(e) {
94 var el = $x('ancestor-or-self::*[starts-with(@id,"pstprev")]', e.relatedTarget);
100 var el = $x('ancestor-or-self::*[starts-with(@id,"pstprev")]', e.relatedTarget);
95 if(!el) $each($X('.//div[starts-with(@id,"pstprev")]'), function(clone) {
101 if(!el) $each($X('.//div[starts-with(@id,"pstprev")]'), function(clone) {
96 $del(clone)
102 $del(clone)
97 });
103 });
98 else while(el.nextSibling) $del(el.nextSibling);
104 else while(el.nextSibling) $del(el.nextSibling);
99 }
105 }
100
106
101
102
103
104
105
106 function addPreview() {
107 function addPreview() {
107 $('.post').find('a').each(function() {
108 $('.post').find('a').each(function() {
108 showPostPreview($(this));
109 showPostPreview($(this));
109 });
110 });
110 }
111 }
111
112 function showPreview(node) {
113 node.each(function() {
114 //reflink?
115 if($(this).text().indexOf('>>') == 0) {
116 //add mouseover event
117 $(this).on('mouseover', function(e) {
118 var ref = $(this);
119
120 var doc = document;
121 //ref id
122 var pNum = ref.text().match(/\d+/);
123
124 //position
125 var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) + 2;
126 var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop);
127
128 //create preview block
129 var cln = $('<div>', {
130 id: 'pstprev_' + pNum,
131 class: 'post_preview post'
132 })
133 .css('cssText', 'top:' + y + 'px;' + (x < doc.body.clientWidth/2 ? 'left:' + x + 'px' : 'right:' + parseInt(doc.body.clientWidth - x + 1)
134 + 'px'));
135
136
137 var mkPreview = function(cln, html) {
138
139 cln.html(html);
140
141 showPreview($(cln));
142 //if(!$x('.//small', cln)) showRefMap(post, p_num, refMap)
143 };
144
145 cln.html('Загрузка...');
146
147 //если пост найден в дереве.
148 if($('div[id='+pNum+']').length > 0) {
149 var postdata = $('div[id='+pNum+']').clone().html();
150 //TODO: лучше бы вынести в mkPreview
151 //if($.localStorage('addImgPreview') > 0) showImgPreview($(postdata));
152
153 //make preview
154 mkPreview(cln, postdata);
155 }
156 //ajax api
157 // else {
158 // $.getJSON(mayuri_cfg['board_url']+'api/single/'+pNum)
159 // .success(function(data) {
160 // //post templates
161 // var postdata = makeAjaxPost(data).html();
162 //
163 // //make preview
164 // mkPreview(cln, postdata);
165 //
166 // })//if error
167 // .error(function() {
168 // cln.html('Пост не найден.');
169 // });
170 // }
171
172 $del(doc.getElementById(cln.id));
173
174 //add preview
175 $('body').append(cln);
176 });
177
178 $(this).on('mouseout', function() {
179 delPreview($(this));
180 })
181 }
182 });
183
184 }
185
186 function delPreview(e) {
187 var el = e.relatedTarget;
188 if(!el) {
189 $(el).each(function(clone) {
190 $del(clone)
191 });
192 }
193 {
194 while(el.next())
195 $del(el.next());
196 }
197 }
198
General Comments 0
You need to be logged in to leave comments. Login now