diff --git a/src/popup/app/vault/vaultAddSiteController.js b/src/popup/app/vault/vaultAddSiteController.js index daf061e008..b1a98219c3 100644 --- a/src/popup/app/vault/vaultAddSiteController.js +++ b/src/popup/app/vault/vaultAddSiteController.js @@ -7,14 +7,7 @@ }; $('#name').focus(); - $('.list-section-item').click(function (e) { - e.preventDefault(); - $(this).find('input[type="text"], textarea, select').focus(); - var checkbox = $(this).find('input[type="checkbox"]'); - if (checkbox.length > 0) { - checkbox.prop('checked', !checkbox.is(':checked')); - } - }); + popupUtils.initListSectionItemListeners(); $scope.savePromise = null; $scope.save = function (model) { diff --git a/src/popup/index.html b/src/popup/index.html index 2d1d7113e8..77d8ffaf26 100644 --- a/src/popup/index.html +++ b/src/popup/index.html @@ -11,6 +11,7 @@ + diff --git a/src/popup/scripts/popup.js b/src/popup/scripts/popup.js new file mode 100644 index 0000000000..b22303e5b1 --- /dev/null +++ b/src/popup/scripts/popup.js @@ -0,0 +1,54 @@ +var popupUtils = function () { + var self = this; + + self.initListSectionItemListeners = function () { + $('.list-section-item').click(function (e) { + var text = $(this).find('input, textarea').not('input[type="checkbox"], input[type="radio"], input[type="hidden"]'); + var checkbox = $(this).find('input[type="checkbox"]'); + var select = $(this).find('select'); + + if (text.length > 0 && e.target === text[0]) { + return; + } + if (checkbox.length > 0 && e.target === checkbox[0]) { + return; + } + if (select.length > 0 && e.target === select[0]) { + return; + } + + e.preventDefault(); + + if (text.length > 0) { + text.focus(); + } + else if (checkbox.length > 0) { + checkbox.prop('checked', !checkbox.is(':checked')); + } + else if (select.length > 0) { + select.openSelect(); + } + }); + } + + return self; +}(); + + +// ref: http://stackoverflow.com/questions/19432610/jquery-open-select-by-button +(function ($) { + "use strict"; + $.fn.openSelect = function () { + return this.each(function (index, el) { + $(el).focus(); + if (document.createEvent) { + var event = document.createEvent("MouseEvents"); + event.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); + el.dispatchEvent(event); + } + else if (element.fireEvent) { + el.fireEvent("onmousedown"); + } + }); + } +}(jQuery));