|
66 | 66 | var dragOverDelay = 1;
|
67 | 67 | var actualDragOverClass;
|
68 | 68 |
|
69 |
| - elem[0].addEventListener('dragover', function (evt) { |
| 69 | + scope.$on('$destroy', function () { |
| 70 | + elem[0].removeEventListener('dragover', onDragOver, false); |
| 71 | + elem[0].removeEventListener('dragenter', onDragEnter, false); |
| 72 | + elem[0].removeEventListener('dragleave', onDragLeave, false); |
| 73 | + elem[0].removeEventListener('drop', onDrop, false); |
| 74 | + elem[0].removeEventListener('paste', onPaste, false); |
| 75 | + |
| 76 | + if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1 && attrGetter('ngfEnableFirefoxPaste', scope)) { |
| 77 | + elem.off('keypress', onKeyPress); |
| 78 | + } |
| 79 | + }); |
| 80 | + |
| 81 | + elem[0].addEventListener('dragover', onDragOver, false); |
| 82 | + elem[0].addEventListener('dragenter', onDragEnter, false); |
| 83 | + elem[0].addEventListener('dragleave',onDragLeave, false); |
| 84 | + elem[0].addEventListener('drop', onDrop, false); |
| 85 | + elem[0].addEventListener('paste', onPaste, false); |
| 86 | + |
| 87 | + function onDragOver(evt) { |
70 | 88 | if (isDisabled() || !upload.shouldUpdateOn('drop', attr, scope)) return;
|
71 | 89 | evt.preventDefault();
|
72 | 90 | if (stopPropagation(scope)) evt.stopPropagation();
|
|
84 | 102 | attrGetter('ngfDrag', scope, {$isDragging: true, $class: actualDragOverClass, $event: evt});
|
85 | 103 | });
|
86 | 104 | }
|
87 |
| - }, false); |
88 |
| - elem[0].addEventListener('dragenter', function (evt) { |
| 105 | + } |
| 106 | + |
| 107 | + function onDragEnter(evt) { |
89 | 108 | if (isDisabled() || !upload.shouldUpdateOn('drop', attr, scope)) return;
|
90 | 109 | evt.preventDefault();
|
91 | 110 | if (stopPropagation(scope)) evt.stopPropagation();
|
92 |
| - }, false); |
93 |
| - elem[0].addEventListener('dragleave', function (evt) { |
| 111 | + } |
| 112 | + |
| 113 | + function onDragLeave(evt) { |
94 | 114 | if (isDisabled() || !upload.shouldUpdateOn('drop', attr, scope)) return;
|
95 | 115 | evt.preventDefault();
|
96 | 116 | if (stopPropagation(scope)) evt.stopPropagation();
|
|
99 | 119 | actualDragOverClass = null;
|
100 | 120 | attrGetter('ngfDrag', scope, {$isDragging: false, $event: evt});
|
101 | 121 | }, dragOverDelay || 100);
|
102 |
| - }, false); |
103 |
| - elem[0].addEventListener('drop', function (evt) { |
| 122 | + } |
| 123 | + |
| 124 | + function onDrop(evt) { |
104 | 125 | if (isDisabled() || !upload.shouldUpdateOn('drop', attr, scope)) return;
|
105 | 126 | evt.preventDefault();
|
106 | 127 | if (stopPropagation(scope)) evt.stopPropagation();
|
107 | 128 | if (actualDragOverClass) elem.removeClass(actualDragOverClass);
|
108 | 129 | actualDragOverClass = null;
|
109 | 130 | extractFilesAndUpdateModel(evt.dataTransfer, evt, 'dropUrl');
|
110 |
| - }, false); |
111 |
| - elem[0].addEventListener('paste', function (evt) { |
| 131 | + } |
| 132 | + |
| 133 | + function onPaste(evt) { |
112 | 134 | if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1 &&
|
113 | 135 | attrGetter('ngfEnableFirefoxPaste', scope)) {
|
114 | 136 | evt.preventDefault();
|
115 | 137 | }
|
116 | 138 | if (isDisabled() || !upload.shouldUpdateOn('paste', attr, scope)) return;
|
117 | 139 | extractFilesAndUpdateModel(evt.clipboardData || evt.originalEvent.clipboardData, evt, 'pasteUrl');
|
118 |
| - }, false); |
| 140 | + } |
| 141 | + |
| 142 | + function onKeyPress(e) { |
| 143 | + if (!e.metaKey && !e.ctrlKey) { |
| 144 | + e.preventDefault(); |
| 145 | + } |
| 146 | + } |
119 | 147 |
|
120 | 148 | if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1 &&
|
121 | 149 | attrGetter('ngfEnableFirefoxPaste', scope)) {
|
122 | 150 | elem.attr('contenteditable', true);
|
123 |
| - elem.on('keypress', function (e) { |
124 |
| - if (!e.metaKey && !e.ctrlKey) { |
125 |
| - e.preventDefault(); |
126 |
| - } |
127 |
| - }); |
| 151 | + elem.on('keypress', onKeyPress); |
128 | 152 | }
|
129 | 153 |
|
130 | 154 | function extractFilesAndUpdateModel(source, evt, updateOnType) {
|
|
0 commit comments