From 03c2f9f3a1d3c66a35518b3f37b76d89c1fe2f8c Mon Sep 17 00:00:00 2001 From: j Date: Fri, 25 Jun 2021 19:58:37 +0100 Subject: [PATCH] Fix select file via MenuItem in Firefox instead of an inline FileButton, just use an unattached input element to trigger the select file dialog. --- source/UI/js/Menu/Menu.js | 8 ------ source/UI/js/Menu/MenuItem.js | 50 ++++++++++++++++++++++------------- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/source/UI/js/Menu/Menu.js b/source/UI/js/Menu/Menu.js index d3f5f439..cb60f2d1 100644 --- a/source/UI/js/Menu/Menu.js +++ b/source/UI/js/Menu/Menu.js @@ -463,10 +463,6 @@ Ox.Menu = function(options, self) { item = that.items[self.options.selected]; if (item) { item.removeClass('OxSelected'); - if (item.options('file')) { - item.$button.blurButton(); - that.bindEvent({key_enter: clickSelectedItem}) - } } /* disabled that.triggerEvent('deselect', { @@ -485,10 +481,6 @@ Ox.Menu = function(options, self) { }); item.options('items').length && that.submenus[item.options('id')].showMenu(); item.addClass('OxSelected'); - if (item.options('file')) { - item.$button.focusButton(); - that.unbindEvent('key_enter'); - } that.triggerEvent('select', { id: item.options('id'), title: Ox.isString(item.options('title')[0]) diff --git a/source/UI/js/Menu/MenuItem.js b/source/UI/js/Menu/MenuItem.js index 43db8d45..8d8479e1 100644 --- a/source/UI/js/Menu/MenuItem.js +++ b/source/UI/js/Menu/MenuItem.js @@ -51,9 +51,6 @@ Ox.MenuItem = function(options, self) { that[ self.options.disabled ? 'addClass' : 'removeClass' ]('OxDisabled'); - self.options.file && that.$button.options({ - disabled: self.options.disabled - }); }, keyboard: function() { self.options.keyboard = parseKeyboard(self.options.keyboard); @@ -77,6 +74,27 @@ Ox.MenuItem = function(options, self) { self.options.checked = false; } + if (self.options.file) { + self.$input = $('') + .attr( + Ox.extend({ + type: 'file' + }, self.options.file.multiple ? { + multiple: true + } : {}) + ) + .on({ + change: function(event) { + var filelist = this.files + var files = []; + Ox.loop(filelist.length, function(i) { + files.push(filelist.item(i)); + }); + self.options.menu.clickItem(self.options.position, files); + } + }) + } + that.append( that.$status = Ox.$('') .addClass('OxCell OxStatus') @@ -104,21 +122,17 @@ Ox.MenuItem = function(options, self) { : {} ) .html( - self.options.file - ? that.$button = Ox.FileButton(Ox.extend({ - disabled: self.options.disabled, - title: self.options.title[0] - }, self.options.file)).bindEvent({ - click: function(data) { - self.options.menu.clickItem(self.options.position, data.files); - } - }) - : ( - Ox.isString(self.options.title[0]) - ? self.options.title[0] - : Ox.$('
').html(self.options.title[0]).html() - ) - ) + Ox.isString(self.options.title[0]) + ? self.options.title[0] + : Ox.$('
').html(self.options.title[0]).html() + ).on({ + click: self.options.file ? function(event) { + !self.options.disabled && self.$input.click() + event.preventDefault() + event.stopPropagation() + } : null + + }) ) .append( that.$modifiers = Ox.$('')