You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
341 lines
10 KiB
JavaScript
341 lines
10 KiB
JavaScript
(function (global, factory) {
|
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory() :
|
|
typeof define === 'function' && define.amd ? define(factory) :
|
|
(factory());
|
|
}(this, (function () { 'use strict';
|
|
|
|
function createCommonjsModule(fn, module) {
|
|
return module = { exports: {} }, fn(module, module.exports), module.exports;
|
|
}
|
|
|
|
var componentQuery = createCommonjsModule(function (module, exports) {
|
|
function one(selector, el) {
|
|
return el.querySelector(selector);
|
|
}
|
|
|
|
exports = module.exports = function (selector, el) {
|
|
el = el || document;
|
|
return one(selector, el);
|
|
};
|
|
|
|
exports.all = function (selector, el) {
|
|
el = el || document;
|
|
return el.querySelectorAll(selector);
|
|
};
|
|
|
|
exports.engine = function (obj) {
|
|
if (!obj.one) throw new Error('.one callback required');
|
|
if (!obj.all) throw new Error('.all callback required');
|
|
one = obj.one;
|
|
exports.all = obj.all;
|
|
return exports;
|
|
};
|
|
});
|
|
|
|
var componentQuery_1 = componentQuery.all;
|
|
var componentQuery_2 = componentQuery.engine;
|
|
|
|
/**
|
|
* Module dependencies.
|
|
*/
|
|
|
|
try {
|
|
var query$1 = componentQuery;
|
|
} catch (err) {
|
|
var query$1 = componentQuery;
|
|
}
|
|
|
|
/**
|
|
* Element prototype.
|
|
*/
|
|
|
|
var proto = Element.prototype;
|
|
|
|
/**
|
|
* Vendor function.
|
|
*/
|
|
|
|
var vendor = proto.matches || proto.webkitMatchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector;
|
|
|
|
/**
|
|
* Expose `match()`.
|
|
*/
|
|
|
|
var componentMatchesSelector = match;
|
|
|
|
/**
|
|
* Match `el` to `selector`.
|
|
*
|
|
* @param {Element} el
|
|
* @param {String} selector
|
|
* @return {Boolean}
|
|
* @api public
|
|
*/
|
|
|
|
function match(el, selector) {
|
|
if (!el || el.nodeType !== 1) return false;
|
|
if (vendor) return vendor.call(el, selector);
|
|
var nodes = query$1.all(selector, el.parentNode);
|
|
for (var i = 0; i < nodes.length; ++i) {
|
|
if (nodes[i] == el) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Module Dependencies
|
|
*/
|
|
|
|
try {
|
|
var matches = componentMatchesSelector;
|
|
} catch (err) {
|
|
var matches = componentMatchesSelector;
|
|
}
|
|
|
|
/**
|
|
* Export `closest`
|
|
*/
|
|
|
|
var componentClosest = closest;
|
|
|
|
/**
|
|
* Closest
|
|
*
|
|
* @param {Element} el
|
|
* @param {String} selector
|
|
* @param {Element} scope (optional)
|
|
*/
|
|
|
|
function closest(el, selector, scope) {
|
|
scope = scope || document.documentElement;
|
|
|
|
// walk up the dom
|
|
while (el && el !== scope) {
|
|
if (matches(el, selector)) return el;
|
|
el = el.parentNode;
|
|
}
|
|
|
|
// check scope for match
|
|
return matches(el, selector) ? el : null;
|
|
}
|
|
|
|
function styleInject(css, ref) {
|
|
if (ref === void 0) ref = {};
|
|
var insertAt = ref.insertAt;
|
|
|
|
if (!css || typeof document === 'undefined') {
|
|
return;
|
|
}
|
|
|
|
var head = document.head || document.getElementsByTagName('head')[0];
|
|
var style = document.createElement('style');
|
|
style.type = 'text/css';
|
|
|
|
if (insertAt === 'top') {
|
|
if (head.firstChild) {
|
|
head.insertBefore(style, head.firstChild);
|
|
} else {
|
|
head.appendChild(style);
|
|
}
|
|
} else {
|
|
head.appendChild(style);
|
|
}
|
|
|
|
if (style.styleSheet) {
|
|
style.styleSheet.cssText = css;
|
|
} else {
|
|
style.appendChild(document.createTextNode(css));
|
|
}
|
|
}
|
|
|
|
var css = ".docsify-pagination-container{display:flex;flex-wrap:wrap;justify-content:space-between;overflow:hidden;margin:5em 0 1em;border-top:1px solid rgba(0,0,0,.07)}.pagination-item{margin-top:2.5em}.pagination-item a,.pagination-item a:hover{text-decoration:none}.pagination-item a{color:currentColor}.pagination-item a:hover .pagination-item-title{text-decoration:underline}.pagination-item:not(:last-child) a .pagination-item-label,.pagination-item:not(:last-child) a .pagination-item-subtitle,.pagination-item:not(:last-child) a .pagination-item-title{opacity:.3;transition:all .2s}.pagination-item:last-child .pagination-item-label,.pagination-item:not(:last-child) a:hover .pagination-item-label{opacity:.6}.pagination-item:not(:last-child) a:hover .pagination-item-title{opacity:1}.pagination-item-label{font-size:.8em}.pagination-item-label>*{line-height:1;vertical-align:middle}.pagination-item-label svg{height:.8em;width:auto;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1px}.pagination-item--next{margin-left:auto;text-align:right}.pagination-item--next svg{margin-left:.5em}.pagination-item--previous svg{margin-right:.5em}.pagination-item-title{font-size:1.6em}.pagination-item-subtitle{text-transform:uppercase;opacity:.3}";
|
|
styleInject(css);
|
|
|
|
var classCallCheck = function (instance, Constructor) {
|
|
if (!(instance instanceof Constructor)) {
|
|
throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
};
|
|
|
|
var createClass = function () {
|
|
function defineProperties(target, props) {
|
|
for (var i = 0; i < props.length; i++) {
|
|
var descriptor = props[i];
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
descriptor.configurable = true;
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
}
|
|
}
|
|
|
|
return function (Constructor, protoProps, staticProps) {
|
|
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
|
if (staticProps) defineProperties(Constructor, staticProps);
|
|
return Constructor;
|
|
};
|
|
}();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var _extends = Object.assign || function (target) {
|
|
for (var i = 1; i < arguments.length; i++) {
|
|
var source = arguments[i];
|
|
|
|
for (var key in source) {
|
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
}
|
|
|
|
return target;
|
|
};
|
|
|
|
/**
|
|
* constants
|
|
*/
|
|
var ROUTER_MODE = {
|
|
HASH: 'hash',
|
|
HISTORY: 'history'
|
|
};
|
|
var DEFAULT_OPTIONS = function DEFAULT_OPTIONS(config) {
|
|
return {
|
|
previousText: 'PREVIOUS',
|
|
nextText: 'NEXT',
|
|
crossChapter: false,
|
|
crossChapterText: false,
|
|
routerMode: config.routerMode || ROUTER_MODE.HASH
|
|
};
|
|
};
|
|
var CONTAINER_CLASSNAME = 'docsify-pagination-container';
|
|
|
|
/**
|
|
* basic utilities
|
|
*/
|
|
function toArray(elements) {
|
|
return Array.prototype.slice.call(elements);
|
|
}
|
|
function findChapter(element) {
|
|
var container = componentClosest(element, 'div > ul > li');
|
|
return componentQuery('p', container);
|
|
}
|
|
function findHyperlink(element) {
|
|
return element.href ? element : componentQuery('a', element);
|
|
}
|
|
function isALinkTo(path, element) {
|
|
if (arguments.length === 1) {
|
|
return function (element) {
|
|
return isALinkTo(path, element);
|
|
};
|
|
}
|
|
return decodeURIComponent(element.getAttribute('href').split('?')[0]) === decodeURIComponent(path);
|
|
}
|
|
|
|
/**
|
|
* core renderer
|
|
*/
|
|
|
|
var Link = function () {
|
|
function Link(element) {
|
|
classCallCheck(this, Link);
|
|
|
|
if (!element) {
|
|
return;
|
|
}
|
|
this.chapter = findChapter(element);
|
|
this.hyperlink = findHyperlink(element);
|
|
|
|
let badsites = ["introduction", "recover-vwii-ioses-channels", "common-issues-fixes", "fix-errcode-112-1037", "about", "block-updates", "unblock-updates", "dump-games", "dump-wii-games", "uninstall-cbhc", "uninstall-indexiine", "faq", "donations"]
|
|
let currentpage = window.location.href
|
|
let lastItem = currentpage.split('/').pop()
|
|
if (badsites.includes(lastItem)){
|
|
throw new NoButtons("No next button is shown.");
|
|
}
|
|
}
|
|
|
|
createClass(Link, [{
|
|
key: 'toJSON',
|
|
value: function toJSON() {
|
|
if (!this.hyperlink) {
|
|
return;
|
|
}
|
|
return {
|
|
name: this.hyperlink.innerText,
|
|
href: this.hyperlink.getAttribute('href'),
|
|
chapterName: this.chapter && this.chapter.innerText || ''
|
|
};
|
|
}
|
|
}]);
|
|
return Link;
|
|
}();
|
|
|
|
function pagination(vm, _ref) {
|
|
var crossChapter = _ref.crossChapter,
|
|
routerMode = _ref.routerMode;
|
|
|
|
try {
|
|
var path = routerMode === ROUTER_MODE.HISTORY ? vm.route.path : '#' + vm.route.path;
|
|
var all = toArray(componentQuery.all('.sidebar li a')).filter(function (element) {
|
|
return !componentMatchesSelector(element, '.section-link');
|
|
});
|
|
var active = all.find(isALinkTo(path));
|
|
var group = toArray((componentClosest(active, 'ul') || {}).children).filter(function (element) {
|
|
return element.tagName.toUpperCase() === 'LI';
|
|
});
|
|
var index = crossChapter ? all.findIndex(isALinkTo(path)) : group.findIndex(function (item) {
|
|
var hyperlink = findHyperlink(item);
|
|
return hyperlink && isALinkTo(path, hyperlink);
|
|
});
|
|
|
|
var links = crossChapter ? all : group;
|
|
|
|
return {
|
|
prev: new Link(links[index - 1]).toJSON(),
|
|
next: new Link(links[index + 1]).toJSON()
|
|
};
|
|
} catch (error) {
|
|
return {};
|
|
}
|
|
}
|
|
|
|
var template = {
|
|
container: function container() {
|
|
return '<div class="' + CONTAINER_CLASSNAME + '"></div>';
|
|
},
|
|
inner: function inner(data, options) {
|
|
return [data.prev && '\n <div class="pagination-item pagination-item--previous">\n <a href="' + data.prev.href + '">\n <div class="pagination-item-label">\n <svg class="icon" width="10" height="16" viewBox="0 0 10 16" xmlns="http://www.w3.org/2000/svg">\n <polyline fill="none" vector-effect="non-scaling-stroke" points="8,2 2,8 8,14"/>\n </svg>\n <span>' + options.previousText + '</span>\n </div>\n <div class="pagination-item-title">' + data.prev.name + '</div>\n ', data.prev && options.crossChapterText && '<div class="pagination-item-subtitle">' + data.prev.chapterName + '</div>', data.prev && '</a>\n </div>\n ', data.next && '\n <div class="pagination-item pagination-item--next">\n <a href="' + data.next.href + '">\n <div class="pagination-item-label">\n <span>' + options.nextText + '</span>\n <svg width="10" height="16" viewBox="0 0 10 16" xmlns="http://www.w3.org/2000/svg">\n <polyline fill="none" vector-effect="non-scaling-stroke" points="2,2 8,8 2,14"/>\n </svg>\n </div>\n <div class="pagination-item-title">' + data.next.name + '</div>\n ', data.next && options.crossChapterText && '<div class="pagination-item-subtitle">' + data.next.chapterName + '</div>', data.next && '</a>\n </div>\n '].filter(Boolean).join('');
|
|
}
|
|
};
|
|
|
|
/**
|
|
* installation
|
|
*/
|
|
function install(hook, vm) {
|
|
var options = _extends({}, DEFAULT_OPTIONS(vm.config), vm.config.pagination || {});
|
|
|
|
function render() {
|
|
var container = componentQuery('.' + CONTAINER_CLASSNAME);
|
|
if (!container) {
|
|
return;
|
|
}
|
|
container.innerHTML = template.inner(pagination(vm, options), options);
|
|
}
|
|
|
|
hook.afterEach(function (html) {
|
|
return html + template.container();
|
|
});
|
|
hook.doneEach(function () {
|
|
return render();
|
|
});
|
|
}
|
|
|
|
window.$docsify = window.$docsify || {};
|
|
|
|
window.$docsify.plugins = [install].concat(window.$docsify.plugins || []);
|
|
|
|
})));
|