easy-file-system 1.5.18 → 1.5.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/example.js +245 -261
- package/lib/button/name.js +3 -5
- package/lib/example/view.js +4 -4
- package/lib/explorer.js +13 -4
- package/lib/item/entry/drag/directoryName.js +6 -4
- package/lib/item/entry/drag.js +16 -49
- package/lib/item/entry.js +3 -3
- package/lib/mixins/explorer.js +92 -0
- package/lib/mixins/rubbishBin.js +36 -0
- package/lib/rubbishBin.js +4 -29
- package/lib/styles.js +5 -5
- package/lib/utilities/pathMap.js +14 -14
- package/package.json +1 -1
- package/src/button/name.js +2 -6
- package/src/example/view.js +4 -3
- package/src/explorer.js +17 -7
- package/src/item/entry/drag/directoryName.js +8 -3
- package/src/item/entry/drag.js +22 -69
- package/src/item/entry.js +4 -3
- package/src/mixins/{event.js → explorer.js} +7 -17
- package/src/mixins/rubbishBin.js +42 -0
- package/src/rubbishBin.js +5 -35
- package/src/styles.js +1 -1
- package/src/utilities/pathMap.js +13 -11
- package/lib/mixins/event.js +0 -99
package/src/item/entry/drag.js
CHANGED
|
@@ -32,17 +32,11 @@ class DragEntryItem extends EntryItem {
|
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
explorer = this.getExplorer();
|
|
41
|
-
|
|
42
|
-
explorer.callPathChangeHandlersAsync(pathMap, (success) => {
|
|
43
|
-
success ?
|
|
44
|
-
this.update() :
|
|
45
|
-
this.cancel();
|
|
35
|
+
const explorer = this.getExplorer(),
|
|
36
|
+
dragEntryItem = this; ///
|
|
37
|
+
|
|
38
|
+
explorer.renameDragEntryItem(dragEntryItem, () => {
|
|
39
|
+
this.cancel();
|
|
46
40
|
});
|
|
47
41
|
}
|
|
48
42
|
|
|
@@ -83,56 +77,33 @@ class DragEntryItem extends EntryItem {
|
|
|
83
77
|
markerEntryItemExplorer.dropDragEntryItem(dragEntryItem, done);
|
|
84
78
|
}
|
|
85
79
|
|
|
86
|
-
|
|
87
|
-
const nameButtonName = this.getNameButtonName(),
|
|
88
|
-
name = nameButtonName; ///
|
|
89
|
-
|
|
90
|
-
return name;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
getOldName() {
|
|
94
|
-
const nameButtonName = this.getNameButtonName(),
|
|
95
|
-
oldName = nameButtonName; ///
|
|
96
|
-
|
|
97
|
-
return oldName;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
getNewName() {
|
|
80
|
+
getInputName() {
|
|
101
81
|
const nameInputName = this.getNameInputName(),
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return oldName;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
getOldPath() {
|
|
108
|
-
const path = this.getPath(),
|
|
109
|
-
oldName = this.getOldName(),
|
|
110
|
-
pathWithoutBottommostName = pathWithoutBottommostNameFromPath(path),
|
|
111
|
-
oldPath = (pathWithoutBottommostName === null) ?
|
|
112
|
-
oldName :
|
|
113
|
-
concatenatePaths(pathWithoutBottommostName, oldName);
|
|
82
|
+
inputName = nameInputName; ///
|
|
114
83
|
|
|
115
|
-
return
|
|
84
|
+
return inputName;
|
|
116
85
|
}
|
|
117
86
|
|
|
118
|
-
|
|
87
|
+
getInputPath() {
|
|
119
88
|
const path = this.getPath(),
|
|
120
|
-
|
|
89
|
+
inputName = this.getInputName(),
|
|
121
90
|
pathWithoutBottommostName = pathWithoutBottommostNameFromPath(path),
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
91
|
+
inputPath = (pathWithoutBottommostName === null) ?
|
|
92
|
+
inputName :
|
|
93
|
+
concatenatePaths(pathWithoutBottommostName, inputName);
|
|
125
94
|
|
|
126
|
-
return
|
|
95
|
+
return inputPath;
|
|
127
96
|
}
|
|
128
97
|
|
|
129
98
|
getPathMap(sourceEntryPath, targetEntryPath) {
|
|
130
99
|
const name = this.getName(),
|
|
131
100
|
collapsed = this.isCollapsed(),
|
|
101
|
+
nameInputName = this.getNameInputName(),
|
|
132
102
|
entryDirectory = this.isEntryDirectory();
|
|
133
103
|
|
|
134
104
|
sourceEntryPath = adjustSourceEntryPath(sourceEntryPath, name); ///
|
|
135
|
-
|
|
105
|
+
|
|
106
|
+
targetEntryPath = adjustTargetEntryPath(targetEntryPath, nameInputName); ///
|
|
136
107
|
|
|
137
108
|
const pathMap = {
|
|
138
109
|
collapsed,
|
|
@@ -155,9 +126,9 @@ class DragEntryItem extends EntryItem {
|
|
|
155
126
|
}
|
|
156
127
|
|
|
157
128
|
hasNameChanged() {
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
nameChanged = (
|
|
129
|
+
const name = this.getName(),
|
|
130
|
+
inputName = this.getInputName(),
|
|
131
|
+
nameChanged = (inputName !== name);
|
|
161
132
|
|
|
162
133
|
return nameChanged;
|
|
163
134
|
}
|
|
@@ -188,8 +159,8 @@ class DragEntryItem extends EntryItem {
|
|
|
188
159
|
}
|
|
189
160
|
|
|
190
161
|
cancel() {
|
|
191
|
-
const
|
|
192
|
-
nameInputName =
|
|
162
|
+
const name = this.getName(),
|
|
163
|
+
nameInputName = name; ///
|
|
193
164
|
|
|
194
165
|
this.setNameInputName(nameInputName);
|
|
195
166
|
|
|
@@ -197,24 +168,6 @@ class DragEntryItem extends EntryItem {
|
|
|
197
168
|
this.hideNameInput();
|
|
198
169
|
}
|
|
199
170
|
|
|
200
|
-
update() {
|
|
201
|
-
const nameInputName = this.getNameInputName(),
|
|
202
|
-
nameButtonName = nameInputName; ///
|
|
203
|
-
|
|
204
|
-
this.setNameButtonName(nameButtonName);
|
|
205
|
-
|
|
206
|
-
this.showNameButton();
|
|
207
|
-
this.hideNameInput();
|
|
208
|
-
|
|
209
|
-
const parentElement = this.getParentElement(),
|
|
210
|
-
entriesList = parentElement, ///
|
|
211
|
-
entryItem = this; ///
|
|
212
|
-
|
|
213
|
-
entriesList.removeEntryItem(entryItem);
|
|
214
|
-
|
|
215
|
-
entriesList.addEntryItem(entryItem);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
171
|
didMount() {
|
|
219
172
|
this.hideNameInput();
|
|
220
173
|
|
package/src/item/entry.js
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
import withStyle from "easy-with-style"; ///
|
|
4
4
|
|
|
5
|
-
import { arrayUtilities } from "necessary";
|
|
5
|
+
import { pathUtilities, arrayUtilities } from "necessary";
|
|
6
6
|
|
|
7
7
|
import { Element } from "easy";
|
|
8
8
|
|
|
9
|
-
const { first } = arrayUtilities
|
|
9
|
+
const { first } = arrayUtilities,
|
|
10
|
+
{ concatenatePaths } = pathUtilities;
|
|
10
11
|
|
|
11
12
|
class EntryItem extends Element {
|
|
12
13
|
getParentDirectoryNameDragEntryItem() {
|
|
@@ -36,7 +37,7 @@ class EntryItem extends Element {
|
|
|
36
37
|
} else {
|
|
37
38
|
const parentDirectoryNameDragEntryItemPath = parentDirectoryNameDragEntryItem.getPath();
|
|
38
39
|
|
|
39
|
-
path =
|
|
40
|
+
path = concatenatePaths(parentDirectoryNameDragEntryItemPath, name);
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
return path;
|
|
@@ -92,33 +92,23 @@ function callMoveHandlersAsync(pathMaps, done) {
|
|
|
92
92
|
|
|
93
93
|
forEach(eventListeners, (eventListener, next) => {
|
|
94
94
|
const { handler, element } = eventListener,
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
moveHandler = handler, ///
|
|
96
|
+
done = next; ///
|
|
97
97
|
|
|
98
98
|
moveHandler.call(element, pathMaps, done);
|
|
99
99
|
}, done);
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
function callPathChangeHandlersAsync(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const done = () => {
|
|
106
|
-
const success = !notSuccess;
|
|
107
|
-
|
|
108
|
-
callback(success);
|
|
109
|
-
},
|
|
110
|
-
eventType = PATH_CHANGE_EVENT_TYPE,
|
|
102
|
+
function callPathChangeHandlersAsync(pathMaps, done) {
|
|
103
|
+
const eventType = PATH_CHANGE_EVENT_TYPE,
|
|
111
104
|
eventListeners = this.findEventListeners(eventType);
|
|
112
105
|
|
|
113
106
|
forEach(eventListeners, (eventListener, next) => {
|
|
114
107
|
const { handler, element } = eventListener,
|
|
115
|
-
pathChangeHandler = handler
|
|
116
|
-
|
|
117
|
-
pathChangeHandler.call(element, pathMap, (success) => {
|
|
118
|
-
notSuccess = !success;
|
|
108
|
+
pathChangeHandler = handler, ///
|
|
109
|
+
done = next; ///
|
|
119
110
|
|
|
120
|
-
|
|
121
|
-
});
|
|
111
|
+
pathChangeHandler.call(element, pathMaps, done);
|
|
122
112
|
}, done);
|
|
123
113
|
}
|
|
124
114
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { asynchronousUtilities } from "necessary";
|
|
4
|
+
|
|
5
|
+
import { REMOVE_EVENT_TYPE } from "../eventTypes";
|
|
6
|
+
|
|
7
|
+
const { forEach } = asynchronousUtilities;
|
|
8
|
+
|
|
9
|
+
function onRemove(removeHandler, element) {
|
|
10
|
+
const eventType = REMOVE_EVENT_TYPE,
|
|
11
|
+
handler = removeHandler; ///
|
|
12
|
+
|
|
13
|
+
this.addEventListener(eventType, handler, element);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function offRemove(removeHandler, element) {
|
|
17
|
+
const eventType = REMOVE_EVENT_TYPE,
|
|
18
|
+
handler = removeHandler; ///
|
|
19
|
+
|
|
20
|
+
this.removeEventListener(eventType, handler, element);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function callRemoveHandlersAsync(pathMaps, done) {
|
|
24
|
+
const eventType = REMOVE_EVENT_TYPE,
|
|
25
|
+
eventListeners = this.findEventListeners(eventType);
|
|
26
|
+
|
|
27
|
+
forEach(eventListeners, (eventListener, next) => {
|
|
28
|
+
const { handler, element } = eventListener,
|
|
29
|
+
removeHandler = handler, ///
|
|
30
|
+
done = next; ///
|
|
31
|
+
|
|
32
|
+
removeHandler.call(element, pathMaps, done);
|
|
33
|
+
}, done);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const rubbishBinMixins = {
|
|
37
|
+
onRemove,
|
|
38
|
+
offRemove,
|
|
39
|
+
callRemoveHandlersAsync
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export default rubbishBinMixins;
|
package/src/rubbishBin.js
CHANGED
|
@@ -4,21 +4,18 @@ import withStyle from "easy-with-style"; ///
|
|
|
4
4
|
|
|
5
5
|
import { Element } from "easy";
|
|
6
6
|
import { dropMixins } from "easy-drag-and-drop";
|
|
7
|
-
import { asynchronousUtilities } from "necessary";
|
|
8
7
|
|
|
9
8
|
import DragEntryItem from "./item/entry/drag";
|
|
9
|
+
import rubbishBinMixins from "./mixins/rubbishBin";
|
|
10
10
|
import OpenRubbishBinSVG from "./svg/rubbishBin/open";
|
|
11
11
|
import ClosedRubbishBinSVG from "./svg/rubbishBin/closed";
|
|
12
12
|
import FileNameMarkerEntryItem from "./item/entry/marker/fileName";
|
|
13
13
|
import DirectoryNameMarkerEntryItem from "./item/entry/marker/directoryName";
|
|
14
14
|
|
|
15
|
-
import { REMOVE_EVENT_TYPE } from "./eventTypes";
|
|
16
15
|
import { nonNullPathFromName } from "./utilities/pathMap";
|
|
17
|
-
import {
|
|
16
|
+
import { sourceEntryPathFromEntryItem } from "./utilities/pathMap";
|
|
18
17
|
import { DIRECTORY_NAME_DRAG_ENTRY_TYPE, FILE_NAME_DRAG_ENTRY_TYPE } from "./entryTypes";
|
|
19
18
|
|
|
20
|
-
const { forEach } = asynchronousUtilities;
|
|
21
|
-
|
|
22
19
|
class RubbishBin extends Element {
|
|
23
20
|
dropHandler = (dragElement, aborted, element, done) => {
|
|
24
21
|
const dragElementDragEntryItem = (dragElement instanceof DragEntryItem);
|
|
@@ -161,24 +158,9 @@ class RubbishBin extends Element {
|
|
|
161
158
|
});
|
|
162
159
|
}
|
|
163
160
|
|
|
164
|
-
onRemove(removeHandler, element) {
|
|
165
|
-
const eventType = REMOVE_EVENT_TYPE,
|
|
166
|
-
handler = removeHandler; ///
|
|
167
|
-
|
|
168
|
-
this.addEventListener(eventType, handler, element);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
offRemove(removeHandler, element) {
|
|
172
|
-
const eventType = REMOVE_EVENT_TYPE,
|
|
173
|
-
handler = removeHandler; ///
|
|
174
|
-
|
|
175
|
-
this.removeEventListener(eventType, handler, element);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
161
|
dropDragEntryItem(dragEntryItem, done) {
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
sourceEntryPath = sourceEntryPathFromDragEntryItemPath(dragEntryItemPath),
|
|
162
|
+
const dragEntryItemExplorer = dragEntryItem.getExplorer(),
|
|
163
|
+
sourceEntryPath = sourceEntryPathFromEntryItem(dragEntryItem),
|
|
182
164
|
targetEntryPath = null,
|
|
183
165
|
pathMaps = dragEntryItem.getPathMaps(sourceEntryPath, targetEntryPath),
|
|
184
166
|
explorer = dragEntryItemExplorer; ///
|
|
@@ -230,19 +212,6 @@ class RubbishBin extends Element {
|
|
|
230
212
|
explorer.removeDirectoryPath(directoryPath);
|
|
231
213
|
}
|
|
232
214
|
|
|
233
|
-
callRemoveHandlersAsync(pathMaps, done) {
|
|
234
|
-
const eventType = REMOVE_EVENT_TYPE,
|
|
235
|
-
eventListeners = this.findEventListeners(eventType);
|
|
236
|
-
|
|
237
|
-
forEach(eventListeners, (eventListener, next) => {
|
|
238
|
-
const { handler, element } = eventListener,
|
|
239
|
-
removeHandler = handler, ///
|
|
240
|
-
done = next; ///
|
|
241
|
-
|
|
242
|
-
removeHandler.call(element, pathMaps, done);
|
|
243
|
-
}, done);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
215
|
open() {
|
|
247
216
|
this.showOpenRubbishBinSVG();
|
|
248
217
|
this.hideClosedRubbishBinSVG();
|
|
@@ -347,6 +316,7 @@ class RubbishBin extends Element {
|
|
|
347
316
|
}
|
|
348
317
|
|
|
349
318
|
Object.assign(RubbishBin.prototype, dropMixins);
|
|
319
|
+
Object.assign(RubbishBin.prototype, rubbishBinMixins);
|
|
350
320
|
|
|
351
321
|
export default withStyle(RubbishBin)`
|
|
352
322
|
|
package/src/styles.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export const markerSVGHeight = "2rem";
|
|
4
3
|
export const explorerPadding = "2rem";
|
|
4
|
+
export const markerSVGHeight = "2rem";
|
|
5
5
|
export const toggleSVGHeight = "2rem";
|
|
6
6
|
export const fileNameSVGHeight = "2rem";
|
|
7
7
|
export const rubbishBinSVGHeight = "4rem";
|
package/src/utilities/pathMap.js
CHANGED
|
@@ -4,18 +4,20 @@ import { pathUtilities } from "necessary";
|
|
|
4
4
|
|
|
5
5
|
import { EMPTY_STRING } from "../constants";
|
|
6
6
|
|
|
7
|
-
const { pathWithoutBottommostNameFromPath } = pathUtilities;
|
|
7
|
+
const { concatenatePaths, pathWithoutBottommostNameFromPath } = pathUtilities;
|
|
8
8
|
|
|
9
|
-
export function
|
|
10
|
-
const
|
|
11
|
-
|
|
9
|
+
export function sourceEntryPathFromEntryItem(entryItem) {
|
|
10
|
+
const entryItemPath = entryItem.getPath(),
|
|
11
|
+
entryItemPathWithoutBottommostName = pathWithoutBottommostNameFromPath(entryItemPath),
|
|
12
|
+
sourceEntryPath = nonNullPathFromName(entryItemPathWithoutBottommostName); ///
|
|
12
13
|
|
|
13
14
|
return sourceEntryPath;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
export function
|
|
17
|
-
const
|
|
18
|
-
|
|
17
|
+
export function targetEntryPathFromEntryItem(entryItem) {
|
|
18
|
+
const entryItemPath = entryItem.getPath(),
|
|
19
|
+
entryItemPathWithoutBottommostName = pathWithoutBottommostNameFromPath(entryItemPath),
|
|
20
|
+
targetEntryPath = nonNullPathFromName(entryItemPathWithoutBottommostName); ///
|
|
19
21
|
|
|
20
22
|
return targetEntryPath;
|
|
21
23
|
}
|
|
@@ -26,21 +28,21 @@ export function adjustSourceEntryPath(sourceEntryPath, name) {
|
|
|
26
28
|
} else if (sourceEntryPath === EMPTY_STRING) {
|
|
27
29
|
sourceEntryPath = name; ///
|
|
28
30
|
} else {
|
|
29
|
-
sourceEntryPath =
|
|
31
|
+
sourceEntryPath = concatenatePaths(sourceEntryPath, name);
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
return sourceEntryPath;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
export function adjustTargetEntryPath(targetEntryPath,
|
|
37
|
+
export function adjustTargetEntryPath(targetEntryPath, nameInputName) {
|
|
36
38
|
if (false) {
|
|
37
39
|
///
|
|
38
40
|
} else if (targetEntryPath === null) {
|
|
39
41
|
targetEntryPath = null;
|
|
40
42
|
} else if (targetEntryPath === EMPTY_STRING) {
|
|
41
|
-
targetEntryPath =
|
|
43
|
+
targetEntryPath = nameInputName; ///
|
|
42
44
|
} else {
|
|
43
|
-
targetEntryPath =
|
|
45
|
+
targetEntryPath = concatenatePaths(targetEntryPath, nameInputName);
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
return targetEntryPath;
|
package/lib/mixins/event.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _necessary = require("necessary");
|
|
12
|
-
var _eventTypes = require("../eventTypes");
|
|
13
|
-
var forEach = _necessary.asynchronousUtilities.forEach;
|
|
14
|
-
function onMove(moveHandler, element) {
|
|
15
|
-
var eventType = _eventTypes.MOVE_EVENT_TYPE, handler = moveHandler; ///
|
|
16
|
-
this.addEventListener(eventType, handler, element);
|
|
17
|
-
}
|
|
18
|
-
function offMove(moveHandler, element) {
|
|
19
|
-
var eventType = _eventTypes.MOVE_EVENT_TYPE, handler = moveHandler; ///
|
|
20
|
-
this.removeEventListener(eventType, handler, element);
|
|
21
|
-
}
|
|
22
|
-
function onOpen(openHandler, element) {
|
|
23
|
-
var eventType = _eventTypes.OPEN_EVENT_TYPE, handler = openHandler; ///
|
|
24
|
-
this.addEventListener(eventType, handler, element);
|
|
25
|
-
}
|
|
26
|
-
function offOpen(openHandler, element) {
|
|
27
|
-
var eventType = _eventTypes.OPEN_EVENT_TYPE, handler = openHandler; ///
|
|
28
|
-
this.removeEventListener(eventType, handler, element);
|
|
29
|
-
}
|
|
30
|
-
function onSelect(selectHandler, element) {
|
|
31
|
-
var eventType = _eventTypes.SELECT_EVENT_TYPE, handler = selectHandler; ///
|
|
32
|
-
this.addEventListener(eventType, handler, element);
|
|
33
|
-
}
|
|
34
|
-
function offSelect(selectHandler, element) {
|
|
35
|
-
var eventType = _eventTypes.SELECT_EVENT_TYPE, handler = selectHandler; ///
|
|
36
|
-
this.removeEventListener(eventType, handler, element);
|
|
37
|
-
}
|
|
38
|
-
function onPathChange(pathChangeHandler, element) {
|
|
39
|
-
var eventType = _eventTypes.PATH_CHANGE_EVENT_TYPE, handler = pathChangeHandler; ///
|
|
40
|
-
this.addEventListener(eventType, handler, element);
|
|
41
|
-
}
|
|
42
|
-
function offPathChange(pathChangeHandler, element) {
|
|
43
|
-
var eventType = _eventTypes.PATH_CHANGE_EVENT_TYPE, handler = pathChangeHandler; ///
|
|
44
|
-
this.removeEventListener(eventType, handler, element);
|
|
45
|
-
}
|
|
46
|
-
function callOpenHandlers(filePath) {
|
|
47
|
-
var _this = this;
|
|
48
|
-
var eventType = _eventTypes.OPEN_EVENT_TYPE, eventListeners = this.findEventListeners(eventType);
|
|
49
|
-
eventListeners.forEach(function(eventListener) {
|
|
50
|
-
var handler = eventListener.handler, element = eventListener.element, openHandler = handler; ///
|
|
51
|
-
openHandler.call(element, filePath, _this); ///
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
function callSelectHandlers(path, selected) {
|
|
55
|
-
var _this = this;
|
|
56
|
-
var eventType = _eventTypes.SELECT_EVENT_TYPE, eventListeners = this.findEventListeners(eventType);
|
|
57
|
-
eventListeners.forEach(function(eventListener) {
|
|
58
|
-
var handler = eventListener.handler, element = eventListener.element, selectHandler = handler; ///
|
|
59
|
-
selectHandler.call(element, path, selected, _this); ///
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
function callMoveHandlersAsync(pathMaps, done) {
|
|
63
|
-
var eventType = _eventTypes.MOVE_EVENT_TYPE, eventListeners = this.findEventListeners(eventType);
|
|
64
|
-
forEach(eventListeners, function(eventListener, next) {
|
|
65
|
-
var handler = eventListener.handler, element = eventListener.element, moveHandler = handler, _$done = next; ///
|
|
66
|
-
moveHandler.call(element, pathMaps, _$done);
|
|
67
|
-
}, done);
|
|
68
|
-
}
|
|
69
|
-
function callPathChangeHandlersAsync(pathMap, callback) {
|
|
70
|
-
var notSuccess = false;
|
|
71
|
-
var done = function() {
|
|
72
|
-
var success = !notSuccess;
|
|
73
|
-
callback(success);
|
|
74
|
-
}, eventType = _eventTypes.PATH_CHANGE_EVENT_TYPE, eventListeners = this.findEventListeners(eventType);
|
|
75
|
-
forEach(eventListeners, function(eventListener, next) {
|
|
76
|
-
var handler = eventListener.handler, element = eventListener.element, pathChangeHandler = handler; ///
|
|
77
|
-
pathChangeHandler.call(element, pathMap, function(success) {
|
|
78
|
-
notSuccess = !success;
|
|
79
|
-
next();
|
|
80
|
-
});
|
|
81
|
-
}, done);
|
|
82
|
-
}
|
|
83
|
-
var eventMixins = {
|
|
84
|
-
onMove: onMove,
|
|
85
|
-
offMove: offMove,
|
|
86
|
-
onOpen: onOpen,
|
|
87
|
-
offOpen: offOpen,
|
|
88
|
-
onSelect: onSelect,
|
|
89
|
-
offSelect: offSelect,
|
|
90
|
-
onPathChange: onPathChange,
|
|
91
|
-
offPathChange: offPathChange,
|
|
92
|
-
callOpenHandlers: callOpenHandlers,
|
|
93
|
-
callSelectHandlers: callSelectHandlers,
|
|
94
|
-
callMoveHandlersAsync: callMoveHandlersAsync,
|
|
95
|
-
callPathChangeHandlersAsync: callPathChangeHandlersAsync
|
|
96
|
-
};
|
|
97
|
-
var _default = eventMixins;
|
|
98
|
-
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taXhpbnMvZXZlbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IHsgTU9WRV9FVkVOVF9UWVBFLCBPUEVOX0VWRU5UX1RZUEUsIFBBVEhfQ0hBTkdFX0VWRU5UX1RZUEUsIFNFTEVDVF9FVkVOVF9UWVBFIH0gZnJvbSBcIi4uL2V2ZW50VHlwZXNcIjtcblxuY29uc3QgeyBmb3JFYWNoIH0gPSBhc3luY2hyb25vdXNVdGlsaXRpZXM7XG5cbmZ1bmN0aW9uIG9uTW92ZShtb3ZlSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBNT1ZFX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBtb3ZlSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZNb3ZlKG1vdmVIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IE1PVkVfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IG1vdmVIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uT3BlbihvcGVuSGFuZGxlciwgZWxlbWVudCkge1xuICBjb25zdCBldmVudFR5cGUgPSBPUEVOX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBvcGVuSGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvZmZPcGVuKG9wZW5IYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IE9QRU5fRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IG9wZW5IYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9uU2VsZWN0KHNlbGVjdEhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gU0VMRUNUX0VWRU5UX1RZUEUsXG4gICAgICAgIGhhbmRsZXIgPSBzZWxlY3RIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZlNlbGVjdChzZWxlY3RIYW5kbGVyLCBlbGVtZW50KSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IFNFTEVDVF9FVkVOVF9UWVBFLFxuICAgICAgICBoYW5kbGVyID0gc2VsZWN0SGFuZGxlcjsgIC8vL1xuXG4gIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBvblBhdGhDaGFuZ2UocGF0aENoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gUEFUSF9DSEFOR0VfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IHBhdGhDaGFuZ2VIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIG9mZlBhdGhDaGFuZ2UocGF0aENoYW5nZUhhbmRsZXIsIGVsZW1lbnQpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gUEFUSF9DSEFOR0VfRVZFTlRfVFlQRSxcbiAgICAgICAgaGFuZGxlciA9IHBhdGhDaGFuZ2VIYW5kbGVyOyAgLy8vXG5cbiAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGNhbGxPcGVuSGFuZGxlcnMoZmlsZVBhdGgpIHtcbiAgY29uc3QgZXZlbnRUeXBlID0gT1BFTl9FVkVOVF9UWVBFLFxuICAgICAgICBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgb3BlbkhhbmRsZXIgPSBoYW5kbGVyOyAgLy8vXG5cbiAgICBvcGVuSGFuZGxlci5jYWxsKGVsZW1lbnQsIGZpbGVQYXRoLCB0aGlzKTsgIC8vL1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY2FsbFNlbGVjdEhhbmRsZXJzKHBhdGgsIHNlbGVjdGVkKSB7XG4gIGNvbnN0IGV2ZW50VHlwZSA9IFNFTEVDVF9FVkVOVF9UWVBFLFxuICAgICAgICBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XG5cbiAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgc2VsZWN0SGFuZGxlciA9IGhhbmRsZXI7ICAvLy9cblxuICAgIHNlbGVjdEhhbmRsZXIuY2FsbChlbGVtZW50LCBwYXRoLCBzZWxlY3RlZCwgdGhpcyk7ICAvLy9cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxNb3ZlSGFuZGxlcnNBc3luYyhwYXRoTWFwcywgZG9uZSkge1xuICBjb25zdCBldmVudFR5cGUgPSBNT1ZFX0VWRU5UX1RZUEUsXG4gICAgICAgIGV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKTtcblxuICBmb3JFYWNoKGV2ZW50TGlzdGVuZXJzLCAoZXZlbnRMaXN0ZW5lciwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgbW92ZUhhbmRsZXIgPSBoYW5kbGVyLCAgLy8vXG4gICAgICAgIGRvbmUgPSBuZXh0OyAgLy8vXG5cbiAgICBtb3ZlSGFuZGxlci5jYWxsKGVsZW1lbnQsIHBhdGhNYXBzLCBkb25lKTtcbiAgfSwgZG9uZSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxQYXRoQ2hhbmdlSGFuZGxlcnNBc3luYyhwYXRoTWFwLCBjYWxsYmFjaykge1xuICBsZXQgbm90U3VjY2VzcyA9IGZhbHNlO1xuXG4gIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VjY2VzcyA9ICFub3RTdWNjZXNzO1xuXG4gICAgICAgICAgY2FsbGJhY2soc3VjY2Vzcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHlwZSA9IFBBVEhfQ0hBTkdFX0VWRU5UX1RZUEUsXG4gICAgICAgIGV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKTtcblxuICBmb3JFYWNoKGV2ZW50TGlzdGVuZXJzLCAoZXZlbnRMaXN0ZW5lciwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHsgaGFuZGxlciwgZWxlbWVudCB9ID0gZXZlbnRMaXN0ZW5lcixcbiAgICAgICAgICBwYXRoQ2hhbmdlSGFuZGxlciA9IGhhbmRsZXI7ICAvLy9cblxuICAgIHBhdGhDaGFuZ2VIYW5kbGVyLmNhbGwoZWxlbWVudCwgcGF0aE1hcCwgKHN1Y2Nlc3MpID0+IHtcbiAgICAgIG5vdFN1Y2Nlc3MgPSAhc3VjY2VzcztcblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCBkb25lKTtcbn1cblxuY29uc3QgZXZlbnRNaXhpbnMgPSB7XG4gIG9uTW92ZSxcbiAgb2ZmTW92ZSxcbiAgb25PcGVuLFxuICBvZmZPcGVuLFxuICBvblNlbGVjdCxcbiAgb2ZmU2VsZWN0LFxuICBvblBhdGhDaGFuZ2UsXG4gIG9mZlBhdGhDaGFuZ2UsXG4gIGNhbGxPcGVuSGFuZGxlcnMsXG4gIGNhbGxTZWxlY3RIYW5kbGVycyxcbiAgY2FsbE1vdmVIYW5kbGVyc0FzeW5jLFxuICBjYWxsUGF0aENoYW5nZUhhbmRsZXJzQXN5bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZW50TWl4aW5zO1xuIl0sIm5hbWVzIjpbImZvckVhY2giLCJhc3luY2hyb25vdXNVdGlsaXRpZXMiLCJvbk1vdmUiLCJtb3ZlSGFuZGxlciIsImVsZW1lbnQiLCJldmVudFR5cGUiLCJNT1ZFX0VWRU5UX1RZUEUiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9mZk1vdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25PcGVuIiwib3BlbkhhbmRsZXIiLCJPUEVOX0VWRU5UX1RZUEUiLCJvZmZPcGVuIiwib25TZWxlY3QiLCJzZWxlY3RIYW5kbGVyIiwiU0VMRUNUX0VWRU5UX1RZUEUiLCJvZmZTZWxlY3QiLCJvblBhdGhDaGFuZ2UiLCJwYXRoQ2hhbmdlSGFuZGxlciIsIlBBVEhfQ0hBTkdFX0VWRU5UX1RZUEUiLCJvZmZQYXRoQ2hhbmdlIiwiY2FsbE9wZW5IYW5kbGVycyIsImZpbGVQYXRoIiwiZXZlbnRMaXN0ZW5lcnMiLCJmaW5kRXZlbnRMaXN0ZW5lcnMiLCJldmVudExpc3RlbmVyIiwiY2FsbCIsImNhbGxTZWxlY3RIYW5kbGVycyIsInBhdGgiLCJzZWxlY3RlZCIsImNhbGxNb3ZlSGFuZGxlcnNBc3luYyIsInBhdGhNYXBzIiwiZG9uZSIsIm5leHQiLCJjYWxsUGF0aENoYW5nZUhhbmRsZXJzQXN5bmMiLCJwYXRoTWFwIiwiY2FsbGJhY2siLCJub3RTdWNjZXNzIiwic3VjY2VzcyIsImV2ZW50TWl4aW5zIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkEySUE7OztlQUFBOzs7eUJBeklzQzswQkFFc0Q7QUFFNUYsSUFBTSxBQUFFQSxVQUFZQyxnQ0FBcUIsQ0FBakNEO0FBRVIsU0FBU0UsT0FBT0MsV0FBVyxFQUFFQyxP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
|