mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-05-24 12:07:10 -04:00
Remove some more lodash refs.
This commit is contained in:
parent
26c4d569aa
commit
d8d7b997b5
10 changed files with 89 additions and 49 deletions
|
@ -1,5 +1,4 @@
|
||||||
const isStr = x => typeof x === 'string';
|
const {isStr, isFn} = require('../lo');
|
||||||
const isFn = x => typeof x === 'function';
|
|
||||||
|
|
||||||
const subscriptions = {};
|
const subscriptions = {};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const isNum = x => typeof x === 'number';
|
const {isNum} = require('../lo');
|
||||||
|
|
||||||
const decimalMetric = {
|
const decimalMetric = {
|
||||||
t: 1000.0,
|
t: 1000.0,
|
||||||
|
|
|
@ -1,13 +1,10 @@
|
||||||
|
const {each, values, isFn, difference} = require('../lo');
|
||||||
const {win} = require('../globals');
|
const {win} = require('../globals');
|
||||||
const {request} = require('../server');
|
const {request} = require('../server');
|
||||||
const allsettings = require('./settings');
|
const allsettings = require('./settings');
|
||||||
const event = require('./event');
|
const event = require('./event');
|
||||||
const notification = require('../view/notification');
|
const notification = require('../view/notification');
|
||||||
|
|
||||||
const each = (obj, fn) => Object.keys(obj).forEach(key => fn(obj[key], key));
|
|
||||||
const values = obj => Object.keys(obj).map(key => obj[key]);
|
|
||||||
const isFn = x => typeof x === 'function';
|
|
||||||
const difference = (arr1, arr2) => arr1.filter(x => arr2.indexOf(x) < 0);
|
|
||||||
|
|
||||||
const doc = win.document;
|
const doc = win.document;
|
||||||
const settings = Object.assign({
|
const settings = Object.assign({
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
|
const {includes} = require('../lo');
|
||||||
const config = require('../config');
|
const config = require('../config');
|
||||||
const settings = require('./settings');
|
const settings = require('./settings');
|
||||||
|
|
||||||
const includes = (arr, x) => arr.indexOf(x) >= 0;
|
|
||||||
|
|
||||||
const imagesHref = settings.publicHref + 'images/';
|
const imagesHref = settings.publicHref + 'images/';
|
||||||
const uiHref = imagesHref + 'ui/';
|
const uiHref = imagesHref + 'ui/';
|
||||||
const themesHref = imagesHref + 'themes/';
|
const themesHref = imagesHref + 'themes/';
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
|
const {each, map} = require('../lo');
|
||||||
const config = require('../config');
|
const config = require('../config');
|
||||||
|
|
||||||
const each = (obj, fn) => Object.keys(obj).forEach(key => fn(obj[key], key));
|
|
||||||
const map = (arr, fn) => Array.from(arr, fn);
|
|
||||||
|
|
||||||
const reEndsWithSlash = /\/$/;
|
const reEndsWithSlash = /\/$/;
|
||||||
const regexps = {};
|
const regexps = {};
|
||||||
|
|
||||||
|
|
50
src/_h5ai/public/js/lib/lo.js
Normal file
50
src/_h5ai/public/js/lib/lo.js
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
const tof = (x, str) => typeof x === str;
|
||||||
|
const isStr = x => tof(x, 'string');
|
||||||
|
const isFn = x => tof(x, 'function');
|
||||||
|
const isNum = x => tof(x, 'number');
|
||||||
|
const keys = obj => {
|
||||||
|
if (!obj || isStr(obj)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
if (obj.hasOwnProperty('length')) {
|
||||||
|
obj = Array.from(obj);
|
||||||
|
}
|
||||||
|
return Object.keys(obj);
|
||||||
|
};
|
||||||
|
const values = obj => keys(obj).map(key => obj[key]);
|
||||||
|
const each = (obj, fn) => keys(obj).forEach(key => fn(obj[key], key));
|
||||||
|
const filter = (obj, fn) => values(obj).filter(fn);
|
||||||
|
const map = (obj, fn) => values(obj).map(fn);
|
||||||
|
const includes = (obj, x) => values(obj).indexOf(x) >= 0;
|
||||||
|
const difference = (obj1, obj2) => {
|
||||||
|
obj2 = values(obj2);
|
||||||
|
return filter(obj1, x => obj2.indexOf(x) < 0);
|
||||||
|
};
|
||||||
|
const intersection = (obj1, obj2) => {
|
||||||
|
obj2 = values(obj2);
|
||||||
|
return filter(obj1, x => obj2.indexOf(x) >= 0);
|
||||||
|
};
|
||||||
|
const sortBy = (obj, sel) => {
|
||||||
|
const selFn = isFn(sel) ? sel : x => x[sel];
|
||||||
|
const cmpFn = (x, y) => {
|
||||||
|
x = selFn(x);
|
||||||
|
y = selFn(y);
|
||||||
|
return x < y ? -1 : x > y ? 1 : 0;
|
||||||
|
};
|
||||||
|
return values(obj).sort(cmpFn);
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
isStr,
|
||||||
|
isFn,
|
||||||
|
isNum,
|
||||||
|
keys,
|
||||||
|
values,
|
||||||
|
each,
|
||||||
|
filter,
|
||||||
|
map,
|
||||||
|
includes,
|
||||||
|
difference,
|
||||||
|
intersection,
|
||||||
|
sortBy
|
||||||
|
};
|
|
@ -1,4 +1,4 @@
|
||||||
const {lo} = require('../globals');
|
const {keys, each, filter, sortBy, isFn, isStr, isNum} = require('../lo');
|
||||||
const server = require('../server');
|
const server = require('../server');
|
||||||
const location = require('../core/location');
|
const location = require('../core/location');
|
||||||
const settings = require('../core/settings');
|
const settings = require('../core/settings');
|
||||||
|
@ -49,9 +49,9 @@ function splitPath(sequence) { // eslint-disable-line consistent-return
|
||||||
}
|
}
|
||||||
|
|
||||||
function getItem(options) {
|
function getItem(options) {
|
||||||
if (lo.isString(options)) {
|
if (isStr(options)) {
|
||||||
options = {href: options};
|
options = {href: options};
|
||||||
} else if (!options || !lo.isString(options.href)) {
|
} else if (!options || !isStr(options.href)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,10 +63,10 @@ function getItem(options) {
|
||||||
|
|
||||||
const item = cache[href] || new Item(href); // eslint-disable-line no-use-before-define
|
const item = cache[href] || new Item(href); // eslint-disable-line no-use-before-define
|
||||||
|
|
||||||
if (lo.isNumber(options.time)) {
|
if (isNum(options.time)) {
|
||||||
item.time = options.time;
|
item.time = options.time;
|
||||||
}
|
}
|
||||||
if (lo.isNumber(options.size)) {
|
if (isNum(options.size)) {
|
||||||
item.size = options.size;
|
item.size = options.size;
|
||||||
}
|
}
|
||||||
if (options.managed) {
|
if (options.managed) {
|
||||||
|
@ -89,7 +89,7 @@ function removeItem(absHref) {
|
||||||
if (item.parent) {
|
if (item.parent) {
|
||||||
delete item.parent.content[item.absHref];
|
delete item.parent.content[item.absHref];
|
||||||
}
|
}
|
||||||
lo.each(item.content, child => {
|
each(item.content, child => {
|
||||||
removeItem(child.absHref);
|
removeItem(child.absHref);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ function removeItem(absHref) {
|
||||||
function fetchContent(absHref, callback) {
|
function fetchContent(absHref, callback) {
|
||||||
const item = getItem(absHref);
|
const item = getItem(absHref);
|
||||||
|
|
||||||
if (!lo.isFunction(callback)) {
|
if (!isFn(callback)) {
|
||||||
callback = () => undefined;
|
callback = () => undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ function fetchContent(absHref, callback) {
|
||||||
} else {
|
} else {
|
||||||
server.request({action: 'get', items: {href: item.absHref, what: 1}}).then(response => {
|
server.request({action: 'get', items: {href: item.absHref, what: 1}}).then(response => {
|
||||||
if (response.items) {
|
if (response.items) {
|
||||||
lo.each(response.items, jsonItem => {
|
each(response.items, jsonItem => {
|
||||||
getItem(jsonItem);
|
getItem(jsonItem);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -135,13 +135,13 @@ function Item(absHref) {
|
||||||
if (split.parent) {
|
if (split.parent) {
|
||||||
this.parent = getItem(split.parent);
|
this.parent = getItem(split.parent);
|
||||||
this.parent.content[this.absHref] = this;
|
this.parent.content[this.absHref] = this;
|
||||||
if (lo.keys(this.parent.content).length > 1) {
|
if (keys(this.parent.content).length > 1) {
|
||||||
this.parent.isContentFetched = true;
|
this.parent.isContentFetched = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lo.extend(Item.prototype, {
|
Object.assign(Item.prototype, {
|
||||||
isFolder() {
|
isFolder() {
|
||||||
return reEndsWithSlash.test(this.absHref);
|
return reEndsWithSlash.test(this.absHref);
|
||||||
},
|
},
|
||||||
|
@ -168,7 +168,7 @@ lo.extend(Item.prototype, {
|
||||||
},
|
},
|
||||||
|
|
||||||
isEmpty() {
|
isEmpty() {
|
||||||
return lo.keys(this.content).length === 0;
|
return keys(this.content).length === 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
fetchContent(callback) {
|
fetchContent(callback) {
|
||||||
|
@ -188,7 +188,7 @@ lo.extend(Item.prototype, {
|
||||||
},
|
},
|
||||||
|
|
||||||
getSubfolders() {
|
getSubfolders() {
|
||||||
return lo.sortBy(lo.filter(this.content, item => {
|
return sortBy(filter(this.content, item => {
|
||||||
return item.isFolder();
|
return item.isFolder();
|
||||||
}), item => {
|
}), item => {
|
||||||
return item.label.toLowerCase();
|
return item.label.toLowerCase();
|
||||||
|
@ -199,7 +199,7 @@ lo.extend(Item.prototype, {
|
||||||
let folders = 0;
|
let folders = 0;
|
||||||
let files = 0;
|
let files = 0;
|
||||||
|
|
||||||
lo.each(this.content, item => {
|
each(this.content, item => {
|
||||||
if (item.isFolder()) {
|
if (item.isFolder()) {
|
||||||
folders += 1;
|
folders += 1;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
const {jq} = require('./globals');
|
const {jq} = require('./globals');
|
||||||
|
const {each} = require('./lo');
|
||||||
const each = (obj, fn) => Object.keys(obj).forEach(key => fn(obj[key], key));
|
|
||||||
|
|
||||||
const request = data => {
|
const request = data => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
const {jq, lo} = require('../globals');
|
const {each, map, includes, intersection} = require('../lo');
|
||||||
|
const {jq} = require('../globals');
|
||||||
const event = require('../core/event');
|
const event = require('../core/event');
|
||||||
const format = require('../core/format');
|
const format = require('../core/format');
|
||||||
const location = require('../core/location');
|
const location = require('../core/location');
|
||||||
|
@ -9,7 +10,7 @@ const base = require('./base');
|
||||||
|
|
||||||
const modes = ['details', 'grid', 'icons'];
|
const modes = ['details', 'grid', 'icons'];
|
||||||
const sizes = [20, 40, 60, 80, 100, 150, 200, 250, 300, 350, 400];
|
const sizes = [20, 40, 60, 80, 100, 150, 200, 250, 300, 350, 400];
|
||||||
const settings = lo.extend({
|
const settings = Object.assign({
|
||||||
binaryPrefix: false,
|
binaryPrefix: false,
|
||||||
hideFolders: false,
|
hideFolders: false,
|
||||||
hideParentFolder: false,
|
hideParentFolder: false,
|
||||||
|
@ -18,7 +19,7 @@ const settings = lo.extend({
|
||||||
sizes
|
sizes
|
||||||
}, allsettings.view);
|
}, allsettings.view);
|
||||||
const sortedSizes = settings.sizes.sort((a, b) => a - b);
|
const sortedSizes = settings.sizes.sort((a, b) => a - b);
|
||||||
const checkedModes = lo.intersection(settings.modes, modes);
|
const checkedModes = intersection(settings.modes, modes);
|
||||||
const storekey = 'view';
|
const storekey = 'view';
|
||||||
const tplView =
|
const tplView =
|
||||||
`<div id="view">
|
`<div id="view">
|
||||||
|
@ -78,7 +79,7 @@ function createStyles(size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function addCssStyles() {
|
function addCssStyles() {
|
||||||
const styles = lo.map(sortedSizes, size => createStyles(size));
|
const styles = map(sortedSizes, size => createStyles(size));
|
||||||
styles.push(`#view .icon img {max-width: ${settings.maxIconSize}px; max-height: ${settings.maxIconSize}px;}`);
|
styles.push(`#view .icon img {max-width: ${settings.maxIconSize}px; max-height: ${settings.maxIconSize}px;}`);
|
||||||
jq('<style/>').text(styles.join('\n')).appendTo('head');
|
jq('<style/>').text(styles.join('\n')).appendTo('head');
|
||||||
}
|
}
|
||||||
|
@ -88,11 +89,11 @@ function set(mode, size) {
|
||||||
|
|
||||||
mode = mode || stored && stored.mode;
|
mode = mode || stored && stored.mode;
|
||||||
size = size || stored && stored.size;
|
size = size || stored && stored.size;
|
||||||
mode = lo.includes(settings.modes, mode) ? mode : settings.modes[0];
|
mode = includes(settings.modes, mode) ? mode : settings.modes[0];
|
||||||
size = lo.includes(settings.sizes, size) ? size : settings.sizes[0];
|
size = includes(settings.sizes, size) ? size : settings.sizes[0];
|
||||||
store.put(storekey, {mode, size});
|
store.put(storekey, {mode, size});
|
||||||
|
|
||||||
lo.each(checkedModes, m => {
|
each(checkedModes, m => {
|
||||||
if (m === mode) {
|
if (m === mode) {
|
||||||
$view.addClass('view-' + m);
|
$view.addClass('view-' + m);
|
||||||
} else {
|
} else {
|
||||||
|
@ -100,7 +101,7 @@ function set(mode, size) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
lo.each(sortedSizes, s => {
|
each(sortedSizes, s => {
|
||||||
if (s === size) {
|
if (s === size) {
|
||||||
$view.addClass('view-size-' + s);
|
$view.addClass('view-size-' + s);
|
||||||
} else {
|
} else {
|
||||||
|
@ -194,15 +195,11 @@ function checkHint() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function setItems(items) {
|
function setItems(items) {
|
||||||
const removed = lo.map($items.find('.item'), item => {
|
const removed = map($items.find('.item'), el => jq(el).data('item'));
|
||||||
return jq(item).data('item');
|
|
||||||
});
|
|
||||||
|
|
||||||
$items.find('.item').remove();
|
$items.find('.item').remove();
|
||||||
|
|
||||||
lo.each(items, e => {
|
each(items, item => $items.append(createHtml(item)));
|
||||||
$items.append(createHtml(e));
|
|
||||||
});
|
|
||||||
|
|
||||||
base.$content.scrollLeft(0).scrollTop(0);
|
base.$content.scrollLeft(0).scrollTop(0);
|
||||||
checkHint();
|
checkHint();
|
||||||
|
@ -210,11 +207,11 @@ function setItems(items) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function changeItems(add, remove) {
|
function changeItems(add, remove) {
|
||||||
lo.each(add, item => {
|
each(add, item => {
|
||||||
createHtml(item).hide().appendTo($items).fadeIn(400);
|
createHtml(item).hide().appendTo($items).fadeIn(400);
|
||||||
});
|
});
|
||||||
|
|
||||||
lo.each(remove, item => {
|
each(remove, item => {
|
||||||
item.$view.fadeOut(400, () => {
|
item.$view.fadeOut(400, () => {
|
||||||
item.$view.remove();
|
item.$view.remove();
|
||||||
});
|
});
|
||||||
|
@ -240,7 +237,7 @@ function onLocationChanged(item) {
|
||||||
items.push(item.parent);
|
items.push(item.parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
lo.each(item.content, child => {
|
each(item.content, child => {
|
||||||
if (!(child.isFolder() && settings.hideFolders)) {
|
if (!(child.isFolder() && settings.hideFolders)) {
|
||||||
items.push(child);
|
items.push(child);
|
||||||
}
|
}
|
||||||
|
@ -253,7 +250,7 @@ function onLocationChanged(item) {
|
||||||
function onLocationRefreshed(item, added, removed) {
|
function onLocationRefreshed(item, added, removed) {
|
||||||
const add = [];
|
const add = [];
|
||||||
|
|
||||||
lo.each(added, child => {
|
each(added, child => {
|
||||||
if (!(child.isFolder() && settings.hideFolders)) {
|
if (!(child.isFolder() && settings.hideFolders)) {
|
||||||
add.push(child);
|
add.push(child);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
const {jq, lo} = require('../globals');
|
const {each} = require('../lo');
|
||||||
|
const {jq} = require('../globals');
|
||||||
const event = require('../core/event');
|
const event = require('../core/event');
|
||||||
const resource = require('../core/resource');
|
const resource = require('../core/resource');
|
||||||
const allsettings = require('../core/settings');
|
const allsettings = require('../core/settings');
|
||||||
|
@ -7,7 +8,7 @@ const base = require('./base');
|
||||||
const view = require('./view');
|
const view = require('./view');
|
||||||
|
|
||||||
|
|
||||||
const settings = lo.extend({
|
const settings = Object.assign({
|
||||||
modeToggle: false
|
modeToggle: false
|
||||||
}, allsettings.view);
|
}, allsettings.view);
|
||||||
const tplSettings =
|
const tplSettings =
|
||||||
|
@ -29,7 +30,7 @@ let sizes;
|
||||||
function onChanged(mode, size) {
|
function onChanged(mode, size) {
|
||||||
jq('#viewmode-settings .mode').removeClass('active');
|
jq('#viewmode-settings .mode').removeClass('active');
|
||||||
jq('#viewmode-' + mode).addClass('active');
|
jq('#viewmode-' + mode).addClass('active');
|
||||||
jq('#viewmode-size').val(lo.indexOf(sizes, size));
|
jq('#viewmode-size').val(sizes.indexOf(size));
|
||||||
|
|
||||||
if (settings.modeToggle === 'next') {
|
if (settings.modeToggle === 'next') {
|
||||||
mode = modes[(modes.indexOf(mode) + 1) % modes.length];
|
mode = modes[(modes.indexOf(mode) + 1) % modes.length];
|
||||||
|
@ -45,7 +46,7 @@ function addSettings() {
|
||||||
const $viewBlock = jq(tplSettings);
|
const $viewBlock = jq(tplSettings);
|
||||||
|
|
||||||
if (modes.length > 1) {
|
if (modes.length > 1) {
|
||||||
lo.each(modes, mode => {
|
each(modes, mode => {
|
||||||
jq(tplMode.replace(/\[MODE\]/g, mode))
|
jq(tplMode.replace(/\[MODE\]/g, mode))
|
||||||
.on('click', () => {
|
.on('click', () => {
|
||||||
view.setMode(mode);
|
view.setMode(mode);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue