The menu should always be entirely visible on click.

This commit is contained in:
Nicolas Stepien 2012-06-26 21:20:49 +02:00
parent c8176435fb
commit 5f39f374c8
2 changed files with 40 additions and 23 deletions

View File

@ -1101,7 +1101,7 @@
return $.on(a, 'click', Menu.toggle);
},
toggle: function(e) {
var lastOpener, rect, s;
var lastOpener;
e.preventDefault();
e.stopPropagation();
if (Menu.el.parentNode) {
@ -1111,15 +1111,11 @@
return;
}
}
s = Menu.el.style;
rect = this.getBoundingClientRect();
s.top = d.documentElement.scrollTop + d.body.scrollTop + rect.top + rect.height + 2 + 'px';
s.left = d.documentElement.scrollLeft + d.body.scrollLeft + rect.left + 'px';
Menu.lastOpener = this;
return Menu.open(Main.preParse($.x('ancestor::div[contains(@class,"postContainer")][1]', this)));
return Menu.open(this, Main.preParse($.x('ancestor::div[contains(@class,"postContainer")][1]', this)));
},
open: function(post) {
var el, entry, _i, _len, _ref;
open: function(button, post) {
var bLeft, bRect, bTop, el, entry, mRect, _i, _len, _ref;
el = Menu.el;
el.setAttribute('data-id', post.ID);
el.setAttribute('data-rootid', post.root.id);
@ -1133,12 +1129,21 @@
$.add(el, entry.el);
}
}
$.on(d, 'click', Menu.close);
$.add(d.body, el);
return $.on(d, 'click', Menu.close);
mRect = el.getBoundingClientRect();
bRect = button.getBoundingClientRect();
bTop = d.documentElement.scrollTop + d.body.scrollTop + bRect.top;
bLeft = d.documentElement.scrollLeft + d.body.scrollLeft + bRect.left;
el.style.top = bRect.top + bRect.height + mRect.height < d.documentElement.clientHeight ? bTop + bRect.height + 2 + 'px' : bTop - mRect.height - 2 + 'px';
return el.style.left = bRect.left + mRect.width < d.documentElement.clientWidth ? bLeft + 'px' : bLeft + bRect.width - mRect.width + 'px';
},
close: function() {
$.rm(Menu.el);
Menu.el.innerHTML = null;
var el;
el = Menu.el;
$.rm(el);
el.innerHTML = null;
el.removeAttribute('style');
delete Menu.lastOpener;
return $.off(d, 'click', Menu.close);
},

View File

@ -845,16 +845,9 @@ Menu =
Menu.close()
return if lastOpener is @
# Position
s = Menu.el.style
# XXX prevent overflows
rect = @getBoundingClientRect()
s.top = d.documentElement.scrollTop + d.body.scrollTop + rect.top + rect.height + 2 + 'px'
s.left = d.documentElement.scrollLeft + d.body.scrollLeft + rect.left + 'px'
Menu.lastOpener = @
Menu.open Main.preParse $.x 'ancestor::div[contains(@class,"postContainer")][1]', @
open: (post) ->
Menu.open @, Main.preParse $.x 'ancestor::div[contains(@class,"postContainer")][1]', @
open: (button, post) ->
{el} = Menu
# XXX GM/Scriptish require setAttribute
el.setAttribute 'data-id', post.ID
@ -867,11 +860,30 @@ Menu =
if entry.requirement post
entry.open? post
$.add el, entry.el
$.add d.body, el
$.on d, 'click', Menu.close
$.add d.body, el
# Position
mRect = el.getBoundingClientRect()
bRect = button.getBoundingClientRect()
bTop = d.documentElement.scrollTop + d.body.scrollTop + bRect.top
bLeft = d.documentElement.scrollLeft + d.body.scrollLeft + bRect.left
el.style.top =
if bRect.top + bRect.height + mRect.height < d.documentElement.clientHeight
bTop + bRect.height + 2 + 'px'
else
bTop - mRect.height - 2 + 'px'
el.style.left =
if bRect.left + mRect.width < d.documentElement.clientWidth
bLeft + 'px'
else
bLeft + bRect.width - mRect.width + 'px'
close: ->
$.rm Menu.el
Menu.el.innerHTML = null
{el} = Menu
$.rm el
el.innerHTML = null
el.removeAttribute 'style'
delete Menu.lastOpener
$.off d, 'click', Menu.close