The menu should always be entirely visible on click.
This commit is contained in:
parent
c8176435fb
commit
5f39f374c8
@ -1101,7 +1101,7 @@
|
|||||||
return $.on(a, 'click', Menu.toggle);
|
return $.on(a, 'click', Menu.toggle);
|
||||||
},
|
},
|
||||||
toggle: function(e) {
|
toggle: function(e) {
|
||||||
var lastOpener, rect, s;
|
var lastOpener;
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
if (Menu.el.parentNode) {
|
if (Menu.el.parentNode) {
|
||||||
@ -1111,15 +1111,11 @@
|
|||||||
return;
|
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;
|
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) {
|
open: function(button, post) {
|
||||||
var el, entry, _i, _len, _ref;
|
var bLeft, bRect, bTop, el, entry, mRect, _i, _len, _ref;
|
||||||
el = Menu.el;
|
el = Menu.el;
|
||||||
el.setAttribute('data-id', post.ID);
|
el.setAttribute('data-id', post.ID);
|
||||||
el.setAttribute('data-rootid', post.root.id);
|
el.setAttribute('data-rootid', post.root.id);
|
||||||
@ -1133,12 +1129,21 @@
|
|||||||
$.add(el, entry.el);
|
$.add(el, entry.el);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
$.on(d, 'click', Menu.close);
|
||||||
$.add(d.body, el);
|
$.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() {
|
close: function() {
|
||||||
$.rm(Menu.el);
|
var el;
|
||||||
Menu.el.innerHTML = null;
|
el = Menu.el;
|
||||||
|
$.rm(el);
|
||||||
|
el.innerHTML = null;
|
||||||
|
el.removeAttribute('style');
|
||||||
delete Menu.lastOpener;
|
delete Menu.lastOpener;
|
||||||
return $.off(d, 'click', Menu.close);
|
return $.off(d, 'click', Menu.close);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -845,16 +845,9 @@ Menu =
|
|||||||
Menu.close()
|
Menu.close()
|
||||||
return if lastOpener is @
|
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.lastOpener = @
|
||||||
Menu.open Main.preParse $.x 'ancestor::div[contains(@class,"postContainer")][1]', @
|
Menu.open @, Main.preParse $.x 'ancestor::div[contains(@class,"postContainer")][1]', @
|
||||||
open: (post) ->
|
open: (button, post) ->
|
||||||
{el} = Menu
|
{el} = Menu
|
||||||
# XXX GM/Scriptish require setAttribute
|
# XXX GM/Scriptish require setAttribute
|
||||||
el.setAttribute 'data-id', post.ID
|
el.setAttribute 'data-id', post.ID
|
||||||
@ -867,11 +860,30 @@ Menu =
|
|||||||
if entry.requirement post
|
if entry.requirement post
|
||||||
entry.open? post
|
entry.open? post
|
||||||
$.add el, entry.el
|
$.add el, entry.el
|
||||||
$.add d.body, el
|
|
||||||
$.on d, 'click', Menu.close
|
$.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: ->
|
close: ->
|
||||||
$.rm Menu.el
|
{el} = Menu
|
||||||
Menu.el.innerHTML = null
|
$.rm el
|
||||||
|
el.innerHTML = null
|
||||||
|
el.removeAttribute 'style'
|
||||||
delete Menu.lastOpener
|
delete Menu.lastOpener
|
||||||
$.off d, 'click', Menu.close
|
$.off d, 'click', Menu.close
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user