From e8eccbfa3d64a75d48ddc347f522a6ee73d2822b Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Mon, 4 Dec 2017 12:34:06 +0100 Subject: [PATCH] Added paste support for comma-separated values --- .../files/js/WoltLabSuite/Core/Ui/ItemList.js | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/wcfsetup/install/files/js/WoltLabSuite/Core/Ui/ItemList.js b/wcfsetup/install/files/js/WoltLabSuite/Core/Ui/ItemList.js index b02838ab73..5b998454b7 100644 --- a/wcfsetup/install/files/js/WoltLabSuite/Core/Ui/ItemList.js +++ b/wcfsetup/install/files/js/WoltLabSuite/Core/Ui/ItemList.js @@ -16,6 +16,7 @@ define(['Core', 'Dictionary', 'Language', 'Dom/Traverse', 'EventKey', 'WoltLabSu var _callbackKeyDown = null; var _callbackKeyPress = null; var _callbackKeyUp = null; + var _callbackPaste = null; var _callbackRemoveItem = null; var _callbackBlur = null; @@ -207,6 +208,7 @@ define(['Core', 'Dictionary', 'Language', 'Dom/Traverse', 'EventKey', 'WoltLabSu _callbackKeyDown = this._keyDown.bind(this); _callbackKeyPress = this._keyPress.bind(this); _callbackKeyUp = this._keyUp.bind(this); + _callbackPaste = this._paste.bind(this); _callbackRemoveItem = this._removeItem.bind(this); _callbackBlur = this._blur.bind(this); }, @@ -236,6 +238,7 @@ define(['Core', 'Dictionary', 'Language', 'Dom/Traverse', 'EventKey', 'WoltLabSu element.addEventListener('keydown', _callbackKeyDown); element.addEventListener('keypress', _callbackKeyPress); element.addEventListener('keyup', _callbackKeyUp); + element.addEventListener('paste', _callbackPaste); element.addEventListener('blur', _callbackBlur); element.parentNode.insertBefore(list, element); @@ -342,7 +345,7 @@ define(['Core', 'Dictionary', 'Language', 'Dom/Traverse', 'EventKey', 'WoltLabSu /** * Handles the `[ENTER]` and `[,]` key to add an item to the list unless it is restricted. * - * @param {object} event event object + * @param {Event} event event object */ _keyPress: function(event) { if (EventKey.Enter(event) || EventKey.Comma(event)) { @@ -360,6 +363,32 @@ define(['Core', 'Dictionary', 'Language', 'Dom/Traverse', 'EventKey', 'WoltLabSu } }, + /** + * Splits comma-separated values being pasted into the input field. + * + * @param {Event} event + * @protected + */ + _paste: function (event) { + var text = ''; + if (typeof window.clipboardData === 'object') { + // IE11 + text = window.clipboardData.getData('Text'); + } + else { + text = event.clipboardData.getData('text/plain'); + } + + text.split(/,/).forEach((function(item) { + item = item.trim(); + if (item.length !== 0) { + this._addItem(event.currentTarget.id, { objectId: 0, value: item }); + } + }).bind(this)); + + event.preventDefault(); + }, + /** * Handles the keyup event to unmark an item for deletion. * -- 2.20.1