mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-08-17 18:46:23 +02:00
Clean code.
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
#pv-overlay {
|
#pv-overlay {
|
||||||
display: none;
|
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 0;
|
left: 0;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
const {each, map, includes, compact} = require('../util');
|
const {each, includes, compact, dom} = require('../util');
|
||||||
const {win, jq} = require('../globals');
|
const {win} = require('../globals');
|
||||||
const event = require('../core/event');
|
const event = require('../core/event');
|
||||||
const format = require('../core/format');
|
const format = require('../core/format');
|
||||||
const allsettings = require('../core/settings');
|
const allsettings = require('../core/settings');
|
||||||
@@ -10,30 +10,32 @@ const settings = Object.assign({
|
|||||||
types: []
|
types: []
|
||||||
}, allsettings['preview-aud']);
|
}, allsettings['preview-aud']);
|
||||||
|
|
||||||
function preloadAudio(src, callback) {
|
const preloadAudio = (src, callback) => {
|
||||||
const $audio = jq('<audio/>')
|
const $audio = dom('<audio/>')
|
||||||
.one('loadedmetadata', () => {
|
.on('loadedmetadata', () => callback($audio))
|
||||||
callback($audio);
|
|
||||||
// win.setTimeout(function () { callback($img); }, 1000); // for testing
|
|
||||||
})
|
|
||||||
.attr('autoplay', 'autoplay')
|
.attr('autoplay', 'autoplay')
|
||||||
.attr('controls', 'controls')
|
.attr('controls', 'controls')
|
||||||
.attr('src', src);
|
.attr('src', src);
|
||||||
}
|
};
|
||||||
|
|
||||||
function onEnter(items, idx) {
|
const onEnter = (items, idx) => {
|
||||||
const currentItems = items;
|
const currentItems = items;
|
||||||
let currentIdx = idx;
|
let currentIdx = idx;
|
||||||
let currentItem = items[idx];
|
let currentItem = items[idx];
|
||||||
|
|
||||||
function onAdjustSize() {
|
const onAdjustSize = () => {
|
||||||
const $content = jq('#pv-content');
|
const $content = dom('#pv-content');
|
||||||
const $audio = jq('#pv-aud-audio');
|
const $audio = dom('#pv-aud-audio');
|
||||||
|
|
||||||
if ($audio.length) {
|
if ($audio.length) {
|
||||||
|
const contentW = $content[0].offsetWidth;
|
||||||
|
const contentH = $content[0].offsetHeight;
|
||||||
|
const audioW = $audio[0].offsetWidth;
|
||||||
|
const audioH = $audio[0].offsetHeight;
|
||||||
|
|
||||||
$audio.css({
|
$audio.css({
|
||||||
left: String(($content.width() - $audio.width()) * 0.5) + 'px',
|
left: (contentW - audioW) * 0.5 + 'px',
|
||||||
top: String(($content.height() - $audio.height()) * 0.5) + 'px'
|
top: (contentH - audioH) * 0.5 + 'px'
|
||||||
});
|
});
|
||||||
|
|
||||||
preview.setLabels([
|
preview.setLabels([
|
||||||
@@ -41,52 +43,52 @@ function onEnter(items, idx) {
|
|||||||
format.formatDate($audio[0].duration * 1000, 'm:ss')
|
format.formatDate($audio[0].duration * 1000, 'm:ss')
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function onIdxChange(rel) {
|
const onIdxChange = rel => {
|
||||||
currentIdx = (currentIdx + rel + currentItems.length) % currentItems.length;
|
currentIdx = (currentIdx + rel + currentItems.length) % currentItems.length;
|
||||||
currentItem = currentItems[currentIdx];
|
currentItem = currentItems[currentIdx];
|
||||||
|
|
||||||
const spinnerTimeout = win.setTimeout(() => preview.showSpinner(true), 200);
|
const spinnerTimeout = win.setTimeout(() => preview.showSpinner(true), 200);
|
||||||
|
|
||||||
if (jq('#pv-aud-audio').length) {
|
if (dom('#pv-aud-audio').length) {
|
||||||
jq('#pv-aud-audio')[0].pause();
|
dom('#pv-aud-audio')[0].pause();
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateMeta() {
|
const updateMeta = () => {
|
||||||
onAdjustSize();
|
onAdjustSize();
|
||||||
preview.setIndex(currentIdx + 1, currentItems.length);
|
preview.setIndex(currentIdx + 1, currentItems.length);
|
||||||
preview.setRawLink(currentItem.absHref);
|
preview.setRawLink(currentItem.absHref);
|
||||||
}
|
};
|
||||||
|
|
||||||
function swap(nuContent) {
|
const swap = nuContent => {
|
||||||
jq('#pv-content').empty().append(nuContent.attr('id', 'pv-vid-audio')).fadeIn(200);
|
dom('#pv-content').clr().app(nuContent.attr('id', 'pv-aud-audio')).show();
|
||||||
// small timeout, so nuContent is visible and therefore its width is available
|
updateMeta();
|
||||||
win.setTimeout(updateMeta, 10);
|
};
|
||||||
}
|
|
||||||
|
|
||||||
function onReady($preloadedContent) {
|
const onReady = $preloadedContent => {
|
||||||
win.clearTimeout(spinnerTimeout);
|
win.clearTimeout(spinnerTimeout);
|
||||||
preview.showSpinner(false);
|
preview.showSpinner(false);
|
||||||
|
|
||||||
jq('#pv-content').fadeOut(100, () => swap($preloadedContent));
|
dom('#pv-content').hide();
|
||||||
}
|
swap($preloadedContent);
|
||||||
|
};
|
||||||
|
|
||||||
preloadAudio(currentItem.absHref, onReady);
|
preloadAudio(currentItem.absHref, onReady);
|
||||||
}
|
};
|
||||||
|
|
||||||
onIdxChange(0);
|
onIdxChange(0);
|
||||||
preview.setOnIndexChange(onIdxChange);
|
preview.setOnIndexChange(onIdxChange);
|
||||||
preview.setOnAdjustSize(onAdjustSize);
|
preview.setOnAdjustSize(onAdjustSize);
|
||||||
preview.enter();
|
preview.enter();
|
||||||
}
|
};
|
||||||
|
|
||||||
function initItem(item) {
|
const initItem = item => {
|
||||||
if (item.$view && includes(settings.types, item.type)) {
|
if (item.$view && includes(settings.types, item.type)) {
|
||||||
item.$view.find('a').on('click', ev => {
|
item.$view.find('a').on('click', ev => {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
|
|
||||||
const matchedItems = compact(map(jq('#items .item'), el => {
|
const matchedItems = compact(dom('#items .item').map(el => {
|
||||||
const matchedItem = el._item;
|
const matchedItem = el._item;
|
||||||
return includes(settings.types, matchedItem.type) ? matchedItem : null;
|
return includes(settings.types, matchedItem.type) ? matchedItem : null;
|
||||||
}));
|
}));
|
||||||
@@ -94,18 +96,16 @@ function initItem(item) {
|
|||||||
onEnter(matchedItems, matchedItems.indexOf(item));
|
onEnter(matchedItems, matchedItems.indexOf(item));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function onViewChanged(added) {
|
const onViewChanged = added => each(added, initItem);
|
||||||
each(added, initItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
function init() {
|
const init = () => {
|
||||||
if (!settings.enabled) {
|
if (!settings.enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.sub('view.changed', onViewChanged);
|
event.sub('view.changed', onViewChanged);
|
||||||
}
|
};
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
const {each, map, includes, compact} = require('../util');
|
const {each, includes, compact, dom} = require('../util');
|
||||||
const {win, jq} = require('../globals');
|
const {win} = require('../globals');
|
||||||
const server = require('../server');
|
const server = require('../server');
|
||||||
const event = require('../core/event');
|
const event = require('../core/event');
|
||||||
const allsettings = require('../core/settings');
|
const allsettings = require('../core/settings');
|
||||||
@@ -17,7 +17,7 @@ let currentIdx;
|
|||||||
let currentItem;
|
let currentItem;
|
||||||
|
|
||||||
|
|
||||||
function requestSample(href, callback) {
|
const requestSample = (href, callback) => {
|
||||||
if (!settings.size) {
|
if (!settings.size) {
|
||||||
callback(href);
|
callback(href);
|
||||||
return;
|
return;
|
||||||
@@ -34,43 +34,50 @@ function requestSample(href, callback) {
|
|||||||
}).then(json => {
|
}).then(json => {
|
||||||
callback(json && json.thumbs && json.thumbs[0] ? json.thumbs[0] : null);
|
callback(json && json.thumbs && json.thumbs[0] ? json.thumbs[0] : null);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
function preloadImage(item, callback) {
|
const preloadImage = (item, callback) => {
|
||||||
requestSample(item.absHref, src => {
|
requestSample(item.absHref, src => {
|
||||||
jq('<img/>')
|
const $img = dom('<img/>')
|
||||||
.one('load', ev => {
|
.on('load', () => {
|
||||||
callback(item, ev.target);
|
callback(item, $img);
|
||||||
|
|
||||||
// for testing
|
// for testing
|
||||||
// win.setTimeout(function () { callback(item, ev.target); }, 1000);
|
// win.setTimeout(() => callback(item, $img), 1000);
|
||||||
})
|
})
|
||||||
.attr('src', src);
|
.attr('src', src);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
function onAdjustSize() {
|
const onAdjustSize = () => {
|
||||||
const $content = jq('#pv-content');
|
const $content = dom('#pv-content');
|
||||||
const $img = jq('#pv-img-image');
|
const $img = dom('#pv-img-image');
|
||||||
|
|
||||||
|
const contentW = $content[0].offsetWidth;
|
||||||
|
const contentH = $content[0].offsetHeight;
|
||||||
|
const imgW = ($img[0] || {}).offsetWidth;
|
||||||
|
const imgH = ($img[0] || {}).offsetHeight;
|
||||||
|
|
||||||
if ($img.length === 0) {
|
if ($img.length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$img.css({
|
$img.css({
|
||||||
left: ($content.width() - $img.width()) * 0.5,
|
left: (contentW - imgW) * 0.5 + 'px',
|
||||||
top: ($content.height() - $img.height()) * 0.5
|
top: (contentH - imgH) * 0.5 + 'px'
|
||||||
});
|
});
|
||||||
|
|
||||||
const labels = [currentItem.label];
|
const labels = [currentItem.label];
|
||||||
if (!settings.size) {
|
if (!settings.size) {
|
||||||
labels.push(String($img[0].naturalWidth) + 'x' + String($img[0].naturalHeight));
|
const imgNW = $img[0].naturalWidth;
|
||||||
labels.push(String((100 * $img.width() / $img[0].naturalWidth).toFixed(0)) + '%');
|
const imgNH = $img[0].naturalHeight;
|
||||||
|
labels.push(String(imgNW) + 'x' + String(imgNH));
|
||||||
|
labels.push(String((100 * imgW / imgNW).toFixed(0)) + '%');
|
||||||
}
|
}
|
||||||
preview.setLabels(labels);
|
preview.setLabels(labels);
|
||||||
}
|
};
|
||||||
|
|
||||||
function onIdxChange(rel) {
|
const onIdxChange = rel => {
|
||||||
currentIdx = (currentIdx + rel + currentItems.length) % currentItems.length;
|
currentIdx = (currentIdx + rel + currentItems.length) % currentItems.length;
|
||||||
currentItem = currentItems[currentIdx];
|
currentItem = currentItems[currentIdx];
|
||||||
|
|
||||||
@@ -78,7 +85,7 @@ function onIdxChange(rel) {
|
|||||||
preview.setIndex(currentIdx + 1, currentItems.length);
|
preview.setIndex(currentIdx + 1, currentItems.length);
|
||||||
preview.setRawLink(currentItem.absHref);
|
preview.setRawLink(currentItem.absHref);
|
||||||
|
|
||||||
jq('#pv-content').hide();
|
dom('#pv-content').hide();
|
||||||
if (preview.isSpinnerVisible()) {
|
if (preview.isSpinnerVisible()) {
|
||||||
preview.showSpinner(true, currentItem.thumbSquare);
|
preview.showSpinner(true, currentItem.thumbSquare);
|
||||||
} else {
|
} else {
|
||||||
@@ -95,29 +102,29 @@ function onIdxChange(rel) {
|
|||||||
|
|
||||||
win.clearTimeout(spinnerTimeoutId);
|
win.clearTimeout(spinnerTimeoutId);
|
||||||
preview.showSpinner(false);
|
preview.showSpinner(false);
|
||||||
jq('#pv-content')
|
dom('#pv-content')
|
||||||
.empty()
|
.clr()
|
||||||
.append(jq(preloadedImage).attr('id', 'pv-img-image'))
|
.app(dom(preloadedImage).attr('id', 'pv-img-image'))
|
||||||
.show();
|
.show();
|
||||||
onAdjustSize();
|
onAdjustSize();
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
function onEnter(items, idx) {
|
const onEnter = (items, idx) => {
|
||||||
currentItems = items;
|
currentItems = items;
|
||||||
currentIdx = idx;
|
currentIdx = idx;
|
||||||
preview.setOnIndexChange(onIdxChange);
|
preview.setOnIndexChange(onIdxChange);
|
||||||
preview.setOnAdjustSize(onAdjustSize);
|
preview.setOnAdjustSize(onAdjustSize);
|
||||||
preview.enter();
|
preview.enter();
|
||||||
onIdxChange(0);
|
onIdxChange(0);
|
||||||
}
|
};
|
||||||
|
|
||||||
function initItem(item) {
|
const initItem = item => {
|
||||||
if (item.$view && includes(settings.types, item.type)) {
|
if (item.$view && includes(settings.types, item.type)) {
|
||||||
item.$view.find('a').on('click', ev => {
|
item.$view.find('a').on('click', ev => {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
|
|
||||||
const matchedItems = compact(map(jq('#items .item'), el => {
|
const matchedItems = compact(dom('#items .item').map(el => {
|
||||||
const matchedItem = el._item;
|
const matchedItem = el._item;
|
||||||
return includes(settings.types, matchedItem.type) ? matchedItem : null;
|
return includes(settings.types, matchedItem.type) ? matchedItem : null;
|
||||||
}));
|
}));
|
||||||
@@ -125,19 +132,19 @@ function initItem(item) {
|
|||||||
onEnter(matchedItems, matchedItems.indexOf(item));
|
onEnter(matchedItems, matchedItems.indexOf(item));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function onViewChanged(added) {
|
const onViewChanged = added => {
|
||||||
each(added, initItem);
|
each(added, initItem);
|
||||||
}
|
};
|
||||||
|
|
||||||
function init() {
|
const init = () => {
|
||||||
if (!settings.enabled) {
|
if (!settings.enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.sub('view.changed', onViewChanged);
|
event.sub('view.changed', onViewChanged);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
const {each, map, keys, includes, compact} = require('../util');
|
const {each, keys, includes, compact, dom} = require('../util');
|
||||||
const {win, jq, marked, prism} = require('../globals');
|
const {win, marked, prism} = require('../globals');
|
||||||
const event = require('../core/event');
|
const event = require('../core/event');
|
||||||
const allsettings = require('../core/settings');
|
const allsettings = require('../core/settings');
|
||||||
const preview = require('./preview');
|
const preview = require('./preview');
|
||||||
|
|
||||||
|
|
||||||
|
const XHR = win.XMLHttpRequest;
|
||||||
const settings = Object.assign({
|
const settings = Object.assign({
|
||||||
enabled: false,
|
enabled: false,
|
||||||
types: {}
|
types: {}
|
||||||
@@ -12,38 +13,53 @@ const settings = Object.assign({
|
|||||||
const tplText = '<pre id="pv-txt-text" class="highlighted"/>';
|
const tplText = '<pre id="pv-txt-text" class="highlighted"/>';
|
||||||
const tplMarkdown = '<div id="pv-txt-text" class="markdown"/>';
|
const tplMarkdown = '<div id="pv-txt-text" class="markdown"/>';
|
||||||
const spinnerThreshold = 200;
|
const spinnerThreshold = 200;
|
||||||
|
|
||||||
let spinnerTimeoutId;
|
let spinnerTimeoutId;
|
||||||
let currentItems;
|
let currentItems;
|
||||||
let currentIdx;
|
let currentIdx;
|
||||||
let currentItem;
|
let currentItem;
|
||||||
|
|
||||||
|
|
||||||
function preloadText(item, callback) {
|
const request = href => {
|
||||||
jq.ajax({
|
return new Promise((resolve, reject) => {
|
||||||
url: item.absHref,
|
const xhr = new XHR();
|
||||||
dataType: 'text'
|
const callback = () => {
|
||||||
})
|
if (xhr.readyState === XHR.DONE) {
|
||||||
.done(content => {
|
try {
|
||||||
|
resolve(xhr.responseText);
|
||||||
|
} catch (err) {
|
||||||
|
reject(String(err));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.open('GET', href, true);
|
||||||
|
xhr.onreadystatechange = callback;
|
||||||
|
xhr.send();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const preloadText = (item, callback) => {
|
||||||
|
request(item.absHref)
|
||||||
|
.then(content => {
|
||||||
callback(item, content);
|
callback(item, content);
|
||||||
|
|
||||||
// for testing
|
// for testing
|
||||||
// win.setTimeout(function () { callback(item, content); }, 1000);
|
// win.setTimeout(() => callback(item, content), 1000);
|
||||||
})
|
})
|
||||||
.fail((jqXHR, textStatus) => {
|
.catch(err => callback(item, '[ajax error] ' + err));
|
||||||
callback(item, '[ajax error] ' + textStatus);
|
};
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function onAdjustSize() {
|
const onAdjustSize = () => {
|
||||||
const $content = jq('#pv-content');
|
const $content = dom('#pv-content');
|
||||||
const $text = jq('#pv-txt-text');
|
const $text = dom('#pv-txt-text');
|
||||||
|
|
||||||
if ($text.length) {
|
if ($text.length) {
|
||||||
$text.height($content.height() - 16);
|
$text[0].style.height = $content[0].offsetHeight - 16 + 'px';
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function onIdxChange(rel) {
|
const onIdxChange = rel => {
|
||||||
currentIdx = (currentIdx + rel + currentItems.length) % currentItems.length;
|
currentIdx = (currentIdx + rel + currentItems.length) % currentItems.length;
|
||||||
currentItem = currentItems[currentIdx];
|
currentItem = currentItems[currentIdx];
|
||||||
|
|
||||||
@@ -54,7 +70,7 @@ function onIdxChange(rel) {
|
|||||||
preview.setIndex(currentIdx + 1, currentItems.length);
|
preview.setIndex(currentIdx + 1, currentItems.length);
|
||||||
preview.setRawLink(currentItem.absHref);
|
preview.setRawLink(currentItem.absHref);
|
||||||
|
|
||||||
jq('#pv-content').hide();
|
dom('#pv-content').hide();
|
||||||
if (preview.isSpinnerVisible()) {
|
if (preview.isSpinnerVisible()) {
|
||||||
preview.showSpinner(true, currentItem.icon);
|
preview.showSpinner(true, currentItem.icon);
|
||||||
} else {
|
} else {
|
||||||
@@ -74,36 +90,36 @@ function onIdxChange(rel) {
|
|||||||
let $code;
|
let $code;
|
||||||
|
|
||||||
if (type === 'none') {
|
if (type === 'none') {
|
||||||
$text = jq(tplMarkdown).text(textContent);
|
$text = dom(tplMarkdown).text(textContent);
|
||||||
} else if (type === 'fixed') {
|
} else if (type === 'fixed') {
|
||||||
$text = jq(tplText).text(textContent);
|
$text = dom(tplText).text(textContent);
|
||||||
} else if (type === 'markdown') {
|
} else if (type === 'markdown') {
|
||||||
$text = jq(tplMarkdown).html(marked(textContent));
|
$text = dom(tplMarkdown).html(marked(textContent));
|
||||||
} else {
|
} else {
|
||||||
$text = jq(tplText);
|
$text = dom(tplText);
|
||||||
$code = jq('<code/>').appendTo($text);
|
$code = dom('<code/>').appTo($text);
|
||||||
|
|
||||||
if (textContent.length < 20000) {
|
if (textContent.length < 20000) {
|
||||||
$code.empty().html(prism.highlight(textContent, prism.languages[type]));
|
$code.clr().html(prism.highlight(textContent, prism.languages[type]));
|
||||||
} else {
|
} else {
|
||||||
$code.empty().text(textContent);
|
$code.clr().text(textContent);
|
||||||
win.setTimeout(() => {
|
win.setTimeout(() => {
|
||||||
$code.empty().html(prism.highlight(textContent, prism.languages[type]));
|
$code.clr().html(prism.highlight(textContent, prism.languages[type]));
|
||||||
}, 300);
|
}, 300);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
win.clearTimeout(spinnerTimeoutId);
|
win.clearTimeout(spinnerTimeoutId);
|
||||||
preview.showSpinner(false);
|
preview.showSpinner(false);
|
||||||
jq('#pv-content')
|
dom('#pv-content')
|
||||||
.empty()
|
.clr()
|
||||||
.append($text)
|
.app($text)
|
||||||
.show();
|
.show();
|
||||||
onAdjustSize();
|
onAdjustSize();
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
function onEnter(items, idx) {
|
const onEnter = (items, idx) => {
|
||||||
currentItems = items;
|
currentItems = items;
|
||||||
currentIdx = idx;
|
currentIdx = idx;
|
||||||
currentItem = items[idx];
|
currentItem = items[idx];
|
||||||
@@ -111,14 +127,14 @@ function onEnter(items, idx) {
|
|||||||
preview.setOnAdjustSize(onAdjustSize);
|
preview.setOnAdjustSize(onAdjustSize);
|
||||||
preview.enter();
|
preview.enter();
|
||||||
onIdxChange(0);
|
onIdxChange(0);
|
||||||
}
|
};
|
||||||
|
|
||||||
function initItem(item) {
|
const initItem = item => {
|
||||||
if (item.$view && includes(keys(settings.types), item.type)) {
|
if (item.$view && includes(keys(settings.types), item.type)) {
|
||||||
item.$view.find('a').on('click', ev => {
|
item.$view.find('a').on('click', ev => {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
|
|
||||||
const matchedItems = compact(map(jq('#items .item'), el => {
|
const matchedItems = compact(dom('#items .item').map(el => {
|
||||||
const matchedItem = el._item;
|
const matchedItem = el._item;
|
||||||
return includes(keys(settings.types), matchedItem.type) ? matchedItem : null;
|
return includes(keys(settings.types), matchedItem.type) ? matchedItem : null;
|
||||||
}));
|
}));
|
||||||
@@ -126,19 +142,17 @@ function initItem(item) {
|
|||||||
onEnter(matchedItems, matchedItems.indexOf(item));
|
onEnter(matchedItems, matchedItems.indexOf(item));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function onViewChanged(added) {
|
const onViewChanged = added => each(added, initItem);
|
||||||
each(added, initItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
function init() {
|
const init = () => {
|
||||||
if (!settings.enabled) {
|
if (!settings.enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
event.sub('view.changed', onViewChanged);
|
event.sub('view.changed', onViewChanged);
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
const {each, isFn, isNum} = require('../util');
|
const {each, isFn, isNum, dom} = require('../util');
|
||||||
const {win, jq} = require('../globals');
|
const {win} = require('../globals');
|
||||||
const resource = require('../core/resource');
|
const resource = require('../core/resource');
|
||||||
const allsettings = require('../core/settings');
|
const allsettings = require('../core/settings');
|
||||||
const store = require('../core/store');
|
const store = require('../core/store');
|
||||||
@@ -8,10 +8,9 @@ const store = require('../core/store');
|
|||||||
const settings = Object.assign({
|
const settings = Object.assign({
|
||||||
enabled: true
|
enabled: true
|
||||||
}, allsettings.preview);
|
}, allsettings.preview);
|
||||||
const $window = jq(win);
|
|
||||||
const tplOverlay =
|
const tplOverlay =
|
||||||
`<div id="pv-overlay">
|
`<div id="pv-overlay">
|
||||||
<div id="pv-content"/>
|
<div id="pv-content"></div>
|
||||||
<div id="pv-spinner"><img class="back"/><img class="spinner" src="${resource.image('spinner')}"/></div>
|
<div id="pv-spinner"><img class="back"/><img class="spinner" src="${resource.image('spinner')}"/></div>
|
||||||
<div id="pv-prev-area" class="hof"><img src="${resource.image('preview-prev')}"/></div>
|
<div id="pv-prev-area" class="hof"><img src="${resource.image('preview-prev')}"/></div>
|
||||||
<div id="pv-next-area" class="hof"><img src="${resource.image('preview-next')}"/></div>
|
<div id="pv-next-area" class="hof"><img src="${resource.image('preview-next')}"/></div>
|
||||||
@@ -34,193 +33,194 @@ let onAdjustSize = null;
|
|||||||
let spinnerVisible = false;
|
let spinnerVisible = false;
|
||||||
|
|
||||||
|
|
||||||
function adjustSize() {
|
const adjustSize = () => {
|
||||||
const winWidth = $window.width();
|
const docEl = win.document.documentElement;
|
||||||
const winHeight = $window.height();
|
const winWidth = docEl.clientWidth;
|
||||||
const $container = jq('#pv-content');
|
const winHeight = docEl.clientHeight;
|
||||||
const $spinner = jq('#pv-spinner');
|
|
||||||
const margin = isFullscreen ? 0 : 20;
|
const margin = isFullscreen ? 0 : 20;
|
||||||
const barHeight = isFullscreen ? 0 : 48;
|
const barHeight = isFullscreen ? 0 : 48;
|
||||||
|
|
||||||
$container.css({
|
dom('#pv-content').css({
|
||||||
width: winWidth - 2 * margin,
|
width: winWidth - 2 * margin + 'px',
|
||||||
height: winHeight - 2 * margin - barHeight,
|
height: winHeight - 2 * margin - barHeight + 'px',
|
||||||
left: margin,
|
left: margin + 'px',
|
||||||
top: margin
|
top: margin + 'px'
|
||||||
});
|
});
|
||||||
|
|
||||||
$spinner.css({
|
dom('#pv-spinner').css({
|
||||||
left: winWidth * 0.5,
|
left: winWidth * 0.5 + 'px',
|
||||||
top: winHeight * 0.5
|
top: winHeight * 0.5 + 'px'
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isFullscreen) {
|
if (isFullscreen) {
|
||||||
jq('#pv-overlay').addClass('fullscreen');
|
dom('#pv-overlay').addCls('fullscreen');
|
||||||
jq('#pv-bar-fullscreen').find('img').attr('src', resource.image('preview-no-fullscreen'));
|
dom('#pv-bar-fullscreen').find('img').attr('src', resource.image('preview-no-fullscreen'));
|
||||||
} else {
|
} else {
|
||||||
jq('#pv-overlay').removeClass('fullscreen');
|
dom('#pv-overlay').rmCls('fullscreen');
|
||||||
jq('#pv-bar-fullscreen').find('img').attr('src', resource.image('preview-fullscreen'));
|
dom('#pv-bar-fullscreen').find('img').attr('src', resource.image('preview-fullscreen'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFn(onAdjustSize)) {
|
if (isFn(onAdjustSize)) {
|
||||||
onAdjustSize(1);
|
onAdjustSize(1);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function setLabels(labels) {
|
const setLabels = labels => {
|
||||||
jq('#pv-buttons .bar-left').remove();
|
dom('#pv-buttons .bar-left').rm();
|
||||||
each(labels, label => {
|
each(labels, label => {
|
||||||
jq('<li/>')
|
dom('<li></li>')
|
||||||
.addClass('bar-left bar-label')
|
.addCls('bar-left')
|
||||||
|
.addCls('bar-label')
|
||||||
.text(label)
|
.text(label)
|
||||||
.appendTo('#pv-buttons');
|
.appTo('#pv-buttons');
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
function onNext() {
|
const onNext = () => {
|
||||||
if (isFn(onIndexChange)) {
|
if (isFn(onIndexChange)) {
|
||||||
onIndexChange(1);
|
onIndexChange(1);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function onPrevious() {
|
const onPrevious = () => {
|
||||||
if (isFn(onIndexChange)) {
|
if (isFn(onIndexChange)) {
|
||||||
onIndexChange(-1);
|
onIndexChange(-1);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function userAlive() {
|
const userAlive = () => {
|
||||||
|
const $hof = dom('#pv-overlay .hof');
|
||||||
win.clearTimeout(userAliveTimeoutId);
|
win.clearTimeout(userAliveTimeoutId);
|
||||||
jq('#pv-overlay .hof').stop(true, true).fadeIn(200);
|
$hof.show();
|
||||||
|
|
||||||
if (isFullscreen) {
|
if (isFullscreen) {
|
||||||
userAliveTimeoutId = win.setTimeout(() => {
|
userAliveTimeoutId = win.setTimeout(() => $hof.hide(), 2000);
|
||||||
jq('#pv-overlay .hof').stop(true, true).fadeOut(2000);
|
|
||||||
}, 2000);
|
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function onFullscreen() {
|
const onFullscreen = () => {
|
||||||
isFullscreen = !isFullscreen;
|
isFullscreen = !isFullscreen;
|
||||||
store.put(storekey, isFullscreen);
|
store.put(storekey, isFullscreen);
|
||||||
|
|
||||||
userAlive();
|
userAlive();
|
||||||
adjustSize();
|
adjustSize();
|
||||||
}
|
};
|
||||||
|
|
||||||
function onKeydown(ev) {
|
const dropEvent = ev => {
|
||||||
const key = ev.which;
|
ev.stopPropagation();
|
||||||
|
ev.preventDefault();
|
||||||
|
};
|
||||||
|
|
||||||
|
const onKeydown = ev => {
|
||||||
|
const key = ev.keyCode;
|
||||||
|
|
||||||
if (key === 27) { // esc
|
if (key === 27) { // esc
|
||||||
ev.preventDefault();
|
dropEvent(ev);
|
||||||
ev.stopImmediatePropagation();
|
|
||||||
onExit(); // eslint-disable-line no-use-before-define
|
onExit(); // eslint-disable-line no-use-before-define
|
||||||
} else if (key === 8 || key === 37) { // backspace, left
|
} else if (key === 8 || key === 37) { // backspace, left
|
||||||
ev.preventDefault();
|
dropEvent(ev);
|
||||||
ev.stopImmediatePropagation();
|
|
||||||
onPrevious();
|
onPrevious();
|
||||||
} else if (key === 13 || key === 32 || key === 39) { // enter, space, right
|
} else if (key === 13 || key === 32 || key === 39) { // enter, space, right
|
||||||
ev.preventDefault();
|
dropEvent(ev);
|
||||||
ev.stopImmediatePropagation();
|
|
||||||
onNext();
|
onNext();
|
||||||
} else if (key === 70) { // f
|
} else if (key === 70) { // f
|
||||||
ev.preventDefault();
|
dropEvent(ev);
|
||||||
ev.stopImmediatePropagation();
|
|
||||||
onFullscreen();
|
onFullscreen();
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function onEnter() {
|
const onEnter = () => {
|
||||||
setLabels([]);
|
setLabels([]);
|
||||||
jq('#pv-content').empty();
|
dom('#pv-content').clr();
|
||||||
jq('#pv-overlay').stop(true, true).fadeIn(200);
|
dom('#pv-overlay').show();
|
||||||
$window.on('keydown', onKeydown);
|
dom(win).on('keydown', onKeydown);
|
||||||
adjustSize();
|
adjustSize();
|
||||||
}
|
};
|
||||||
|
|
||||||
function onExit() {
|
const onExit = () => {
|
||||||
$window.off('keydown', onKeydown);
|
|
||||||
jq('#pv-overlay').stop(true, true).fadeOut(200, () => {
|
|
||||||
jq('#pv-content').empty();
|
|
||||||
setLabels([]);
|
setLabels([]);
|
||||||
});
|
dom('#pv-content').clr();
|
||||||
}
|
dom('#pv-overlay').hide();
|
||||||
|
dom(win).off('keydown', onKeydown);
|
||||||
|
};
|
||||||
|
|
||||||
function setIndex(idx, total) {
|
const setIndex = (idx, total) => {
|
||||||
if (isNum(idx)) {
|
if (isNum(idx)) {
|
||||||
jq('#pv-bar-idx').text(String(idx) + (isNum(total) ? '/' + String(total) : '')).show();
|
dom('#pv-bar-idx').text(String(idx) + (isNum(total) ? '/' + String(total) : '')).show();
|
||||||
} else {
|
} else {
|
||||||
jq('#pv-bar-idx').text('').hide();
|
dom('#pv-bar-idx').text('').hide();
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function setRawLink(href) {
|
const setRawLink = href => {
|
||||||
if (href) {
|
if (href) {
|
||||||
jq('#pv-bar-raw').show().find('a').attr('href', href);
|
dom('#pv-bar-raw').show().find('a').attr('href', href);
|
||||||
} else {
|
} else {
|
||||||
jq('#pv-bar-raw').hide().find('a').attr('href', '#');
|
dom('#pv-bar-raw').hide().find('a').attr('href', '#');
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function setOnIndexChange(fn) {
|
const setOnIndexChange = fn => {
|
||||||
onIndexChange = fn;
|
onIndexChange = fn;
|
||||||
}
|
};
|
||||||
|
|
||||||
function setOnAdjustSize(fn) {
|
const setOnAdjustSize = fn => {
|
||||||
onAdjustSize = fn;
|
onAdjustSize = fn;
|
||||||
}
|
};
|
||||||
|
|
||||||
function showSpinner(show, src, millis) {
|
const showSpinner = (show, src) => {
|
||||||
if (!isNum(millis)) {
|
const $spinner = dom('#pv-spinner');
|
||||||
millis = 300;
|
|
||||||
}
|
|
||||||
|
|
||||||
const $spinner = jq('#pv-spinner').stop(true, true);
|
|
||||||
const $back = $spinner.find('.back');
|
|
||||||
|
|
||||||
if (show) {
|
if (show) {
|
||||||
|
const $back = $spinner.find('.back');
|
||||||
if (src) {
|
if (src) {
|
||||||
$back.attr('src', src).show();
|
$back.attr('src', src).show();
|
||||||
} else {
|
} else {
|
||||||
$back.hide();
|
$back.hide();
|
||||||
}
|
}
|
||||||
spinnerVisible = true;
|
spinnerVisible = true;
|
||||||
$spinner.fadeIn(millis);
|
$spinner.show();
|
||||||
} else {
|
} else {
|
||||||
spinnerVisible = false;
|
spinnerVisible = false;
|
||||||
$spinner.fadeOut(millis);
|
$spinner.hide();
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
function isSpinnerVisible() {
|
const isSpinnerVisible = () => {
|
||||||
return spinnerVisible;
|
return spinnerVisible;
|
||||||
}
|
};
|
||||||
|
|
||||||
function init() {
|
const init = () => {
|
||||||
if (!settings.enabled) {
|
if (!settings.enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
jq(tplOverlay).appendTo('body');
|
dom(tplOverlay)
|
||||||
|
.hide()
|
||||||
jq('#pv-spinner').hide();
|
.appTo('body')
|
||||||
jq('#pv-bar-prev, #pv-prev-area').on('click', onPrevious);
|
|
||||||
jq('#pv-bar-next, #pv-next-area').on('click', onNext);
|
|
||||||
jq('#pv-bar-close').on('click', onExit);
|
|
||||||
jq('#pv-bar-fullscreen').on('click', onFullscreen);
|
|
||||||
|
|
||||||
jq('#pv-overlay')
|
|
||||||
.on('keydown', onKeydown)
|
.on('keydown', onKeydown)
|
||||||
.on('mousemove mousedown', userAlive)
|
.on('mousemove', userAlive)
|
||||||
.on('click mousedown mousemove keydown keypress', ev => {
|
.on('mousedown', userAlive)
|
||||||
if (ev.type === 'click' && (ev.target.id === 'pv-overlay' || ev.target.id === 'pv-content')) {
|
.on('click', ev => {
|
||||||
|
if (ev.target.id === 'pv-overlay' || ev.target.id === 'pv-content') {
|
||||||
onExit();
|
onExit();
|
||||||
}
|
}
|
||||||
ev.stopImmediatePropagation();
|
dropEvent(ev);
|
||||||
});
|
})
|
||||||
|
.on('mousedown', dropEvent)
|
||||||
|
.on('mousemove', dropEvent)
|
||||||
|
.on('keydown', dropEvent)
|
||||||
|
.on('keypress', dropEvent);
|
||||||
|
|
||||||
$window.on('resize load', adjustSize);
|
dom('#pv-spinner').hide();
|
||||||
}
|
dom('#pv-bar-prev, #pv-prev-area').on('click', onPrevious);
|
||||||
|
dom('#pv-bar-next, #pv-next-area').on('click', onNext);
|
||||||
|
dom('#pv-bar-close').on('click', onExit);
|
||||||
|
dom('#pv-bar-fullscreen').on('click', onFullscreen);
|
||||||
|
|
||||||
|
dom(win)
|
||||||
|
.on('resize', adjustSize)
|
||||||
|
.on('load', adjustSize);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
@@ -87,12 +87,12 @@ const selectionUpdate = ev => {
|
|||||||
|
|
||||||
$html.addCls('drag-select');
|
$html.addCls('drag-select');
|
||||||
|
|
||||||
$selectionRect.show();
|
$selectionRect.show().css({
|
||||||
const style = $selectionRect[0].style;
|
left: left + 'px',
|
||||||
style.left = left + 'px';
|
top: top + 'px',
|
||||||
style.top = top + 'px';
|
width: width + 'px',
|
||||||
style.width = width + 'px';
|
height: height + 'px'
|
||||||
style.height = height + 'px';
|
});
|
||||||
|
|
||||||
const selRect = elRect($selectionRect);
|
const selRect = elRect($selectionRect);
|
||||||
const $items = dom('#items .item:not(.folder-parent)');
|
const $items = dom('#items .item:not(.folder-parent)');
|
||||||
|
@@ -273,6 +273,10 @@ dom.prototype = {
|
|||||||
|
|
||||||
isHidden() {
|
isHidden() {
|
||||||
return this.hasCls('hidden');
|
return this.hasCls('hidden');
|
||||||
|
},
|
||||||
|
|
||||||
|
css(styles) {
|
||||||
|
return this.each(el => Object.assign(el.style, styles));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user