| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- function p5UI__dropdown(e, n, position, render) {// @position = ('right top', 'left top', 'left bottom', 'right bottom')
- // e.stopPropagation()
- // e.preventDefault()
- var btnNode = n
- var node = n.nextSibling
- node.classList.toggle('p5UI__dropdown-show')
- // console.log('>>> p5UI__dropdown...', {btnNode: btnNode, node: node, 'has show class': node.classList.contains('p5UI__dropdown-show')})
- var position = position
- if (node.classList.contains('p5UI__dropdown-show')) {
- switch (position) {
- case 'right top': node.style.bottom = '50px'; node.style.right = '100px'; break; // TODO ...
- case 'left top': node.style.top = 0; node.style.left = '100px'; break; // TODO ...
- case 'right bottom': node.style.left = '' + btnNode.offsetWidth + 'px'; node.style.top = 0; break; // TODO ...
- case 'left bottom': node.style.right = '' + btnNode.offsetWidth + 'px'; node.style.top = 0; break;
- }
- node.p5UI__onClickOutsideCallback = p5UI__dropdown__onClickOutsideCallback(node, btnNode)
- node.p5UI__unbindClickOutsideCallback = p5UI__dropdown__unbindClickOutsideCallback(node)
- if (!document.addEventListener && document.attachEvent) {
- document.attachEvent('onclick', node.p5UI__onClickOutsideCallback);
- // document.attachEvent('keydown', this._closeModalKorespInfoIfHitEscape);
- } else {
- document.addEventListener('click', node.p5UI__onClickOutsideCallback);
- // document.addEventListener('keydown', this._closeModalKorespInfoIfHitEscape);
- }
- if ('function' === typeof render) render(n, node)
- // node.firstChild.focus() // TODO: find input
- } else {
- if ('function' === typeof node.p5UI__unbindClickOutsideCallback) {
- node.p5UI__unbindClickOutsideCallback()
- delete node.p5UI__onClickOutsideCallback
- delete node.p5UI__unbindClickOutsideCallback
- }
- }
- }
- function p5UI__dropdown__unbindClickOutsideCallback(n) {
- var node = n
- return function __p5UI__dropdown__unbindClickOutsideCallback(e) {
- // console.log('p5UI__dropdown__unbindClickOutsideCallback', {
- // 'opened': node.classList.contains('p5UI__dropdown-show'),
- // 'node': node,
- // 'typeof node.p5UI__onClickOutsideCallback': typeof node.p5UI__onClickOutsideCallback
- // })
- // console.trace()
- if (!document.removeEventListener && document.detachEvent) {
- document.detachEvent('onclick', node.p5UI__onClickOutsideCallback)
- // document.detachEvent('keydown', this._closeModalKorespInfoIfHitEscape)
- } else {
- document.removeEventListener('click', node.p5UI__onClickOutsideCallback)
- // document.removeEventListener('keydown', this._closeModalKorespInfoIfHitEscape)
- }
- }
- }
- function p5UI__dropdown__onClickOutsideCallback(n, btn) {
- var node = n
- var btnNode = btn
- // console.log('define p5UI__dropdown__onClickOutsideCallback...')
- return function __p5UI__dropdown__onClickOutsideCallback(e) {
- // console.log('p5UI__dropdown__onClickOutsideCallback', {
- // 'opened': node.classList.contains('p5UI__dropdown-show'),
- // 'clickedOutside(node)': p5UI__clickedOutsideElement(node, e),
- // 'clickedOutside(btnNode)': p5UI__clickedOutsideElement(btnNode, e),
- // 'typeof node.p5UI__onClickOutsideCallback': typeof node.p5UI__onClickOutsideCallback,
- // 'typeof node.p5UI__unbindClickOutsideCallback': typeof node.p5UI__unbindClickOutsideCallback,
- // })
- if (!node.classList.contains('p5UI__dropdown-show')) return
- if (node.p5UI__unbindClickOutsideCallback && 'function' == typeof node.p5UI__unbindClickOutsideCallback) {
- if (p5UI__clickedOutsideElement(node, e) && p5UI__clickedOutsideElement(btnNode, e)) {
- node.classList.remove('p5UI__dropdown-show')
- node.p5UI__unbindClickOutsideCallback()
- }
- }
- }
- }
- global.p5UI__dropdown = p5UI__dropdown
- global.p5UI__dropdown__unbindClickOutsideCallback = p5UI__dropdown__unbindClickOutsideCallback
- global.p5UI__dropdown__onClickOutsideCallback = p5UI__dropdown__onClickOutsideCallback
|