mirror of
https://github.com/flarum/framework.git
synced 2024-12-12 22:53:37 +08:00
60 lines
1.4 KiB
JavaScript
60 lines
1.4 KiB
JavaScript
export class Item {
|
|
constructor(content, position) {
|
|
this.content = content;
|
|
this.position = position;
|
|
}
|
|
}
|
|
|
|
export default class ItemList {
|
|
add(key, content, position) {
|
|
this[key] = new Item(content, position);
|
|
}
|
|
|
|
merge(items) {
|
|
for (var i in items) {
|
|
if (items.hasOwnProperty(i) && items[i] instanceof Item) {
|
|
this[i] = items[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
toArray() {
|
|
var items = [];
|
|
for (var i in this) {
|
|
if (this.hasOwnProperty(i) && this[i] instanceof Item) {
|
|
items.push(this[i]);
|
|
}
|
|
}
|
|
|
|
var array = [];
|
|
|
|
var addItems = function(method, position) {
|
|
items = items.filter(function(item) {
|
|
if ((position && item.position && item.position[position]) || (!position && !item.position)) {
|
|
array[method](item);
|
|
} else {
|
|
return true;
|
|
}
|
|
});
|
|
};
|
|
addItems('unshift', 'first');
|
|
addItems('push', false);
|
|
addItems('push', 'last');
|
|
|
|
items.forEach(item => {
|
|
var key = item.position.before || item.position.after;
|
|
var type = item.position.before ? 'before' : 'after';
|
|
if (key) {
|
|
var index = array.indexOf(this[key]);
|
|
if (index === -1) {
|
|
index = type === 'before' ? 0 : array.length;
|
|
}
|
|
array.splice(index + (type === 'after' ? 1 : 0), 0, item);
|
|
}
|
|
});
|
|
|
|
return array.map((item) => item.content);
|
|
}
|
|
}
|
|
|