mirror of
https://github.com/go-shiori/shiori.git
synced 2024-11-17 06:34:55 +08:00
257 lines
No EOL
12 KiB
JavaScript
257 lines
No EOL
12 KiB
JavaScript
! function (e, t) {
|
|
"function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? module.exports = t() : e.salvattore = t()
|
|
}(this, function () {
|
|
window.matchMedia || (window.matchMedia = function () {
|
|
"use strict";
|
|
var e = window.styleMedia || window.media;
|
|
if (!e) {
|
|
var t = document.createElement("style"),
|
|
n = document.getElementsByTagName("script")[0],
|
|
r = null;
|
|
t.type = "text/css", t.id = "matchmediajs-test", n.parentNode.insertBefore(t, n), r = "getComputedStyle" in window && window.getComputedStyle(t, null) || t.currentStyle, e = {
|
|
matchMedium: function (e) {
|
|
var n = "@media " + e + "{ #matchmediajs-test { width: 1px; } }";
|
|
return t.styleSheet ? t.styleSheet.cssText = n : t.textContent = n, "1px" === r.width
|
|
}
|
|
}
|
|
}
|
|
return function (t) {
|
|
return {
|
|
matches: e.matchMedium(t || "all"),
|
|
media: t || "all"
|
|
}
|
|
}
|
|
}()),
|
|
function () {
|
|
"use strict";
|
|
if (window.matchMedia && window.matchMedia("all").addListener) return !1;
|
|
var e = window.matchMedia,
|
|
t = e("only all").matches,
|
|
n = !1,
|
|
r = 0,
|
|
a = [],
|
|
i = function (t) {
|
|
clearTimeout(r), r = setTimeout(function () {
|
|
for (var t = 0, n = a.length; n > t; t++) {
|
|
var r = a[t].mql,
|
|
i = a[t].listeners || [],
|
|
o = e(r.media).matches;
|
|
if (o !== r.matches) {
|
|
r.matches = o;
|
|
for (var c = 0, l = i.length; l > c; c++) i[c].call(window, r)
|
|
}
|
|
}
|
|
}, 30)
|
|
};
|
|
window.matchMedia = function (r) {
|
|
var o = e(r),
|
|
c = [],
|
|
l = 0;
|
|
return o.addListener = function (e) {
|
|
t && (n || (n = !0, window.addEventListener("resize", i, !0)), 0 === l && (l = a.push({
|
|
mql: o,
|
|
listeners: c
|
|
})), c.push(e))
|
|
}, o.removeListener = function (e) {
|
|
for (var t = 0, n = c.length; n > t; t++) c[t] === e && c.splice(t, 1)
|
|
}, o
|
|
}
|
|
}(),
|
|
function () {
|
|
"use strict";
|
|
for (var e = 0, t = ["ms", "moz", "webkit", "o"], n = 0; n < t.length && !window.requestAnimationFrame; ++n) window.requestAnimationFrame = window[t[n] + "RequestAnimationFrame"], window.cancelAnimationFrame = window[t[n] + "CancelAnimationFrame"] || window[t[n] + "CancelRequestAnimationFrame"];
|
|
window.requestAnimationFrame || (window.requestAnimationFrame = function (t, n) {
|
|
var r = (new Date).getTime(),
|
|
a = Math.max(0, 16 - (r - e)),
|
|
i = window.setTimeout(function () {
|
|
t(r + a)
|
|
}, a);
|
|
return e = r + a, i
|
|
}), window.cancelAnimationFrame || (window.cancelAnimationFrame = function (e) {
|
|
clearTimeout(e)
|
|
})
|
|
}(), "function" != typeof window.CustomEvent && ! function () {
|
|
"use strict";
|
|
|
|
function e(e, t) {
|
|
t = t || {
|
|
bubbles: !1,
|
|
cancelable: !1,
|
|
detail: void 0
|
|
};
|
|
var n = document.createEvent("CustomEvent");
|
|
return n.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), n
|
|
}
|
|
e.prototype = window.Event.prototype, window.CustomEvent = e
|
|
}();
|
|
var e = function (e, t, n) {
|
|
"use strict";
|
|
var r = {},
|
|
a = [],
|
|
i = [],
|
|
o = [],
|
|
c = function (e, t, n) {
|
|
e.dataset ? e.dataset[t] = n : e.setAttribute("data-" + t, n)
|
|
};
|
|
return r.obtainGridSettings = function (t) {
|
|
var n = e.getComputedStyle(t, ":before"),
|
|
r = n.getPropertyValue("content").slice(1, -1),
|
|
a = r.match(/^\s*(\d+)(?:\s?\.(.+))?\s*$/),
|
|
i = 1,
|
|
o = [];
|
|
return a ? (i = a[1], o = a[2], o = o ? o.split(".") : ["column"]) : (a = r.match(/^\s*\.(.+)\s+(\d+)\s*$/), a && (o = a[1], i = a[2], i && (i = i.split(".")))), {
|
|
numberOfColumns: i,
|
|
columnClasses: o
|
|
}
|
|
}, r.addColumns = function (e, n) {
|
|
for (var a, i = r.obtainGridSettings(e), o = i.numberOfColumns, l = i.columnClasses, s = new Array(+o), u = t.createDocumentFragment(), d = o; 0 !== d--;) a = "[data-columns] > *:nth-child(" + o + "n-" + d + ")", s.push(n.querySelectorAll(a));
|
|
s.forEach(function (e) {
|
|
var n = t.createElement("div"),
|
|
r = t.createDocumentFragment();
|
|
n.className = l.join(" "), Array.prototype.forEach.call(e, function (e) {
|
|
r.appendChild(e)
|
|
}), n.appendChild(r), u.appendChild(n)
|
|
}), e.appendChild(u), c(e, "columns", o)
|
|
}, r.removeColumns = function (n) {
|
|
var r = t.createRange();
|
|
r.selectNodeContents(n);
|
|
var a = Array.prototype.filter.call(r.extractContents().childNodes, function (t) {
|
|
return t instanceof e.HTMLElement
|
|
}),
|
|
i = a.length,
|
|
o = a[0].childNodes.length,
|
|
l = new Array(o * i);
|
|
Array.prototype.forEach.call(a, function (e, t) {
|
|
Array.prototype.forEach.call(e.children, function (e, n) {
|
|
l[n * i + t] = e
|
|
})
|
|
});
|
|
var s = t.createElement("div");
|
|
return c(s, "columns", 0), l.filter(function (e) {
|
|
return !!e
|
|
}).forEach(function (e) {
|
|
s.appendChild(e)
|
|
}), s
|
|
}, r.recreateColumns = function (t) {
|
|
e.requestAnimationFrame(function () {
|
|
r.addColumns(t, r.removeColumns(t));
|
|
var e = new CustomEvent("columnsChange");
|
|
t.dispatchEvent(e)
|
|
})
|
|
}, r.mediaQueryChange = function (e) {
|
|
e.matches && Array.prototype.forEach.call(a, r.recreateColumns)
|
|
}, r.getCSSRules = function (e) {
|
|
var t;
|
|
try {
|
|
t = e.sheet.cssRules || e.sheet.rules
|
|
} catch (e) {
|
|
return []
|
|
}
|
|
return t || []
|
|
}, r.getStylesheets = function () {
|
|
var e = Array.prototype.slice.call(t.querySelectorAll("style"));
|
|
return e.forEach(function (t, n) {
|
|
"text/css" !== t.type && "" !== t.type && e.splice(n, 1)
|
|
}), Array.prototype.concat.call(e, Array.prototype.slice.call(t.querySelectorAll("link[rel='stylesheet']")))
|
|
}, r.mediaRuleHasColumnsSelector = function (e) {
|
|
var t, n;
|
|
try {
|
|
t = e.length
|
|
} catch (e) {
|
|
t = 0
|
|
}
|
|
for (; t--;)
|
|
if (n = e[t], n.selectorText && n.selectorText.match(/\[data-columns\](.*)::?before$/)) return !0;
|
|
return !1
|
|
}, r.scanMediaQueries = function () {
|
|
var t = [];
|
|
if (e.matchMedia) {
|
|
r.getStylesheets().forEach(function (e) {
|
|
Array.prototype.forEach.call(r.getCSSRules(e), function (e) {
|
|
try {
|
|
e.media && e.cssRules && r.mediaRuleHasColumnsSelector(e.cssRules) && t.push(e)
|
|
} catch (e) {}
|
|
})
|
|
});
|
|
var n = i.filter(function (e) {
|
|
return -1 === t.indexOf(e)
|
|
});
|
|
o.filter(function (e) {
|
|
return -1 !== n.indexOf(e.rule)
|
|
}).forEach(function (e) {
|
|
e.mql.removeListener(r.mediaQueryChange)
|
|
}), o = o.filter(function (e) {
|
|
return -1 === n.indexOf(e.rule)
|
|
}), t.filter(function (e) {
|
|
return -1 == i.indexOf(e)
|
|
}).forEach(function (t) {
|
|
var n = e.matchMedia(t.media.mediaText);
|
|
n.addListener(r.mediaQueryChange), o.push({
|
|
rule: t,
|
|
mql: n
|
|
})
|
|
}), i.length = 0, i = t
|
|
}
|
|
}, r.rescanMediaQueries = function () {
|
|
r.scanMediaQueries(), Array.prototype.forEach.call(a, r.recreateColumns)
|
|
}, r.nextElementColumnIndex = function (e, t) {
|
|
var n, r, a, i = e.children,
|
|
o = i.length,
|
|
c = 0,
|
|
l = 0;
|
|
for (a = 0; o > a; a++) n = i[a], r = n.children.length + (t[a].children || t[a].childNodes).length, 0 === c && (c = r), c > r && (l = a, c = r);
|
|
return l
|
|
}, r.createFragmentsList = function (e) {
|
|
for (var n = new Array(e), r = 0; r !== e;) n[r] = t.createDocumentFragment(), r++;
|
|
return n
|
|
}, r.appendElements = function (e, t) {
|
|
var n = e.children,
|
|
a = n.length,
|
|
i = r.createFragmentsList(a);
|
|
Array.prototype.forEach.call(t, function (t) {
|
|
var n = r.nextElementColumnIndex(e, i);
|
|
i[n].appendChild(t)
|
|
}), Array.prototype.forEach.call(n, function (e, t) {
|
|
e.appendChild(i[t])
|
|
})
|
|
}, r.prependElements = function (e, n) {
|
|
var a = e.children,
|
|
i = a.length,
|
|
o = r.createFragmentsList(i),
|
|
c = i - 1;
|
|
n.forEach(function (e) {
|
|
var t = o[c];
|
|
t.insertBefore(e, t.firstChild), 0 === c ? c = i - 1 : c--
|
|
}), Array.prototype.forEach.call(a, function (e, t) {
|
|
e.insertBefore(o[t], e.firstChild)
|
|
});
|
|
for (var l = t.createDocumentFragment(), s = n.length % i; 0 !== s--;) l.appendChild(e.lastChild);
|
|
e.insertBefore(l, e.firstChild)
|
|
}, r.registerGrid = function (n) {
|
|
if ("none" !== e.getComputedStyle(n).display) {
|
|
var i = t.createRange();
|
|
i.selectNodeContents(n);
|
|
var o = t.createElement("div");
|
|
o.appendChild(i.extractContents()), c(o, "columns", 0), r.addColumns(n, o), a.push(n)
|
|
}
|
|
}, r.init = function () {
|
|
var e = t.createElement("style");
|
|
e.innerHTML = "[data-columns]::before{display:block;visibility:hidden;position:absolute;font-size:1px;}", t.head.appendChild(e);
|
|
var n = t.querySelectorAll("[data-columns]");
|
|
Array.prototype.forEach.call(n, r.registerGrid), r.scanMediaQueries()
|
|
}, r.init(), {
|
|
appendElements: r.appendElements,
|
|
prependElements: r.prependElements,
|
|
registerGrid: r.registerGrid,
|
|
recreateColumns: r.recreateColumns,
|
|
rescanMediaQueries: r.rescanMediaQueries,
|
|
init: r.init,
|
|
append_elements: r.appendElements,
|
|
prepend_elements: r.prependElements,
|
|
register_grid: r.registerGrid,
|
|
recreate_columns: r.recreateColumns,
|
|
rescan_media_queries: r.rescanMediaQueries
|
|
}
|
|
}(window, window.document);
|
|
return e
|
|
}); |