Add files via upload
This commit is contained in:
parent
15db93c73a
commit
5641e7140a
2 changed files with 136 additions and 0 deletions
15
assets/js/.eslintrc.js
Normal file
15
assets/js/.eslintrc.js
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
module.exports = {
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 5,
|
||||||
|
"sourceType": "script"
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"commonjs": false,
|
||||||
|
"es6" : false,
|
||||||
|
"node" : false
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"no-var" : "off",
|
||||||
|
"prefer-const": "off"
|
||||||
|
}
|
||||||
|
}
|
121
assets/js/main.js
Normal file
121
assets/js/main.js
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
(function() {
|
||||||
|
// Functions
|
||||||
|
// =========================================================================
|
||||||
|
/**
|
||||||
|
* Adds event listeners to change active stylesheet and restore previously
|
||||||
|
* activated stylesheet on reload.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* This link:
|
||||||
|
* <a href="#" data-link-title="Foo">Foo</a>
|
||||||
|
* Will active this existing link:
|
||||||
|
* <link rel="stylesheet alternate" title="Foo" href="..." >
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* This link:
|
||||||
|
* <a href="#" data-link-href="path/to/file.css">Bar</a>
|
||||||
|
* Will activate this existing link:
|
||||||
|
* <link rel="stylesheet alternate" title="[someID]" href="path/to/file.css" >
|
||||||
|
* Or generate this active link:
|
||||||
|
* <link rel="stylesheet" title="Bar" href="path/to/file.css" >
|
||||||
|
*/
|
||||||
|
function initStyleSwitcher() {
|
||||||
|
var isInitialzed = false;
|
||||||
|
var sessionStorageKey = 'activeStylesheetHref';
|
||||||
|
|
||||||
|
function handleSwitch(activeHref, activeTitle) {
|
||||||
|
var activeElm = document.querySelector('link[href*="' + activeHref +'"],link[title="' + activeTitle +'"]');
|
||||||
|
|
||||||
|
if (!activeElm && activeHref) {
|
||||||
|
activeElm = document.createElement('link');
|
||||||
|
activeElm.setAttribute('href', activeHref);
|
||||||
|
activeElm.setAttribute('rel', 'stylesheet');
|
||||||
|
activeElm.setAttribute('title', activeTitle);
|
||||||
|
|
||||||
|
document.head.appendChild(activeElm);
|
||||||
|
|
||||||
|
activeElm.addEventListener('load', function linkOnLoad() {
|
||||||
|
activeElm.removeEventListener('load', linkOnLoad);
|
||||||
|
setActiveLink(activeElm);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (activeElm) {
|
||||||
|
setActiveLink(activeElm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setActiveLink(activeElm) {
|
||||||
|
var activeHref = activeElm.getAttribute('href');
|
||||||
|
var activeTitle = activeElm.getAttribute('title');
|
||||||
|
var inactiveElms = document.querySelectorAll('link[title]:not([href*="' + activeHref +'"]):not([title="' + activeTitle +'"])');
|
||||||
|
|
||||||
|
// Remove "alternate" keyword
|
||||||
|
activeElm.setAttribute('rel', (activeElm.rel || '').replace(/\s*alternate/g, '').trim());
|
||||||
|
|
||||||
|
// Force enable stylesheet (required for some browsers)
|
||||||
|
activeElm.disabled = true;
|
||||||
|
activeElm.disabled = false;
|
||||||
|
|
||||||
|
// Store active style sheet
|
||||||
|
sessionStorage.setItem(sessionStorageKey, activeHref);
|
||||||
|
|
||||||
|
// Disable other elms
|
||||||
|
for (var i = 0; i < inactiveElms.length; i++) {
|
||||||
|
var elm = inactiveElms[i];
|
||||||
|
|
||||||
|
elm.disabled = true;
|
||||||
|
|
||||||
|
// Fix for browsersync and alternate stylesheet updates. Will
|
||||||
|
// cause FOUC when switching stylesheets during development, but
|
||||||
|
// required to properly apply style updates when alternate
|
||||||
|
// stylesheets are enabled.
|
||||||
|
if (window.browsersyncObserver) {
|
||||||
|
var linkRel = elm.getAttribute('rel') || '';
|
||||||
|
var linkRelAlt = linkRel.indexOf('alternate') > -1 ? linkRel : (linkRel + ' alternate').trim();
|
||||||
|
|
||||||
|
elm.setAttribute('rel', linkRelAlt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CSS custom property ponyfil
|
||||||
|
if ((window.$docsify || {}).themeable) {
|
||||||
|
window.$docsify.themeable.util.cssVars();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Event listeners
|
||||||
|
if (!isInitialzed) {
|
||||||
|
isInitialzed = true;
|
||||||
|
|
||||||
|
// Restore active stylesheet
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
var activeHref = sessionStorage.getItem(sessionStorageKey);
|
||||||
|
|
||||||
|
if (activeHref) {
|
||||||
|
handleSwitch(activeHref);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Update active stylesheet
|
||||||
|
document.addEventListener('click', function(evt) {
|
||||||
|
var dataHref = evt.target.getAttribute('data-link-href');
|
||||||
|
var dataTitle = evt.target.getAttribute('data-link-title')
|
||||||
|
|
||||||
|
if (dataHref || dataTitle) {
|
||||||
|
dataTitle = dataTitle
|
||||||
|
|| evt.target.textContent
|
||||||
|
|| '_' + Math.random().toString(36).substr(2, 9); // UID
|
||||||
|
|
||||||
|
handleSwitch(dataHref, dataTitle);
|
||||||
|
evt.preventDefault();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main
|
||||||
|
// =========================================================================
|
||||||
|
initStyleSwitcher();
|
||||||
|
})();
|
Loading…
Reference in a new issue