Skip to content

Commit 82c891a

Browse files
Add proper paste support
Add paste="expression" to allow custom paste handling. Allow pasting in tagging mode when the tagging function is not defined. In IE use window.clipboardData so jQuery is not required. Fixes angular-ui#910, angular-ui#704, angular-ui#789, angular-ui#848, angular-ui#429
1 parent a7dc9d0 commit 82c891a

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

src/uiSelectController.js

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ uis.controller('uiSelectCtrl',
1616
ctrl.searchEnabled = uiSelectConfig.searchEnabled;
1717
ctrl.sortable = uiSelectConfig.sortable;
1818
ctrl.refreshDelay = uiSelectConfig.refreshDelay;
19+
ctrl.paste = uiSelectConfig.paste;
1920

2021
ctrl.removeSelected = false; //If selected item(s) should be removed from dropdown list
2122
ctrl.closeOnSelect = true; //Initialized inside uiSelect directive link function
@@ -491,18 +492,32 @@ uis.controller('uiSelectCtrl',
491492

492493
});
493494

494-
// If tagging try to split by tokens and add items
495495
ctrl.searchInput.on('paste', function (e) {
496-
var data = e.originalEvent.clipboardData.getData('text/plain');
497-
if (data && data.length > 0 && ctrl.taggingTokens.isActivated && ctrl.tagging.fct) {
498-
var items = data.split(ctrl.taggingTokens.tokens[0]); // split by first token only
499-
if (items && items.length > 0) {
500-
angular.forEach(items, function (item) {
501-
var newItem = ctrl.tagging.fct(item);
502-
if (newItem) {
503-
ctrl.select(newItem, true);
504-
}
505-
});
496+
var data;
497+
498+
if (window.clipboardData && window.clipboardData.getData) { // IE
499+
data = window.clipboardData.getData('Text');
500+
} else {
501+
data = (e.originalEvent || e).clipboardData.getData('text/plain');
502+
}
503+
504+
if (data && data.length > 0) {
505+
// If tagging try to split by tokens and add items
506+
if (ctrl.taggingTokens.isActivated) {
507+
var items = data.split(ctrl.taggingTokens.tokens[0]); // split by first token only
508+
if (items && items.length > 0) {
509+
$timeout(function () {
510+
angular.forEach(items, function (item) {
511+
var newItem = ctrl.tagging.fct ? ctrl.tagging.fct(item) : item;
512+
if (newItem) {
513+
ctrl.select(newItem, true);
514+
}
515+
});
516+
});
517+
e.stopPropagation();
518+
}
519+
} else if (ctrl.paste) {
520+
ctrl.paste(data);
506521
e.preventDefault();
507522
e.stopPropagation();
508523
}

src/uiSelectDirective.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ uis.directive('uiSelect',
8585
$select.resetSearchInput = resetSearchInput !== undefined ? resetSearchInput : true;
8686
});
8787

88+
attrs.$observe('paste', function() {
89+
$select.paste = scope.$eval(attrs.paste);
90+
});
91+
8892
attrs.$observe('tagging', function() {
8993
if(attrs.tagging !== undefined)
9094
{

0 commit comments

Comments
 (0)