Skip to content

Commit d6e1dbc

Browse files
v5.0.1 fixes
1 parent 4ad6fd6 commit d6e1dbc

File tree

6 files changed

+236
-8
lines changed

6 files changed

+236
-8
lines changed

.gitignore

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# ignore these please
22
.DS_Store
33
.markdownlintrc
4-
docs/docsify-sidebarFooter.js
5-
.markdownlintrc
6-
.vscode
4+
.vscode
5+
!dist

.npmignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,4 @@
33
.github
44
.DS_Store
55
.markdownlintrc
6-
.vscode
7-
scripts
6+
.vscode

dist/docsify-sidebar.js

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
/*! docsify-sidebarFooter.js v5.0.1 | (c) Mark Battistella */
2+
'use strict';
3+
4+
// MARK: - check if object exists and is not empty
5+
function doesObjectExists(obj) {
6+
return (
7+
obj !== undefined &&
8+
obj !== null &&
9+
obj.constructor === Object &&
10+
Object.keys(obj).length > 0
11+
);
12+
}
13+
14+
15+
// MARK: - update the `options` object
16+
function getFooter(options) {
17+
18+
// -- get this year
19+
let date = new Date().getFullYear();
20+
21+
// -- update the variables
22+
options.name ? options.name : null;
23+
options.url ? options.url : null;
24+
options.copyYear ? options.copyYear : date;
25+
options.policy ? options.policy : false;
26+
options.terms ? options.terms : false;
27+
options.cookies ? options.cookies : false;
28+
options.customStyle ? options.customStyle : false;
29+
}
30+
31+
32+
// defaults - and setup
33+
const options = {
34+
name: '',
35+
url: '',
36+
copyYear: '',
37+
policy: true,
38+
terms: true,
39+
cookies: true,
40+
customStyle: false
41+
};
42+
43+
44+
// -- run the function
45+
function autoFooter(hook, vm) {
46+
47+
// MARK: run with docsify init
48+
hook.init(function () {
49+
50+
// -- initialise the options
51+
getFooter(options);
52+
53+
54+
// -- check the options for bool or string
55+
if (typeof options.customStyle === "boolean" || typeof options.customStyle === "string") {
56+
57+
// -- dont continue if using custom styles
58+
if ((typeof options.customStyle === "boolean" && options.customStyle === true)) {
59+
return;
60+
}
61+
62+
// -- global style
63+
let style = `#mb-footer { border-top: 1px solid; font-size: 0.8em; line-height: 1.5; transition: all var(--sidebar-transition-duration) ease-out; }`;
64+
65+
// -- custom style for sidebar
66+
if ((typeof options.customStyle === "boolean" && options.customStyle === false) ||
67+
(options.customStyle === "sidebar")
68+
) {
69+
style += `#mb-footer { padding-top: 1.5rem; margin-top: 1.5rem; } #mb-footer .footer-text, #mb-footer .footer-text a { font-weight: bold; }`;
70+
}
71+
72+
// -- custom style for sidebar
73+
if (options.customStyle === "body") {
74+
75+
// --> if there is a sidebar
76+
if( $docsify.loadSidebar || $docsify.loadSidebar === null || !$docsify.hideSidebar ) {
77+
style += `body #mb-footer { margin-left: var(--sidebar-width); } body.close #mb-footer { margin-left: 0; }`;
78+
}
79+
80+
// --> standard
81+
style += `#mb-footer { padding: 1.5rem; } #mb-footer .footer-container { max-width: var(--content-max-width); margin: 0 auto; } #mb-footer .footer-container { display: grid; grid-template-columns: auto auto; } #mb-footer .footer-container a { margin-left: 2em; } #mb-footer .footer-link { text-align: right; }`;
82+
83+
// --> media queries
84+
style += `@media (max-width: 680px) { #mb-footer .footer-container { grid-template-columns: auto; }#mb-footer .footer-text, #mb-footer .footer-link { text-align: center; } } @media (max-width: 400px) { #mb-footer .footer-text, #mb-footer .footer-link { text-align: left; } #mb-footer span { display: block; } #mb-footer .footer-container a { margin: 0; } }`;
85+
}
86+
87+
// create the variables
88+
const head = document.querySelector("head"),
89+
sheet = document.createElement("style");
90+
91+
// add to the page
92+
head.appendChild(sheet);
93+
sheet.appendChild(document.createTextNode(style));
94+
}
95+
});
96+
97+
98+
// MARK: after the HTML appended to DOM
99+
hook.doneEach(function () {
100+
101+
// set the scope
102+
const contentScope = document.getElementById("mb-footer");
103+
104+
// if the scope is empty
105+
if (!contentScope) { return; }
106+
107+
//
108+
// MARK: - add the info
109+
//
110+
111+
// get the date
112+
const date = new Date().getFullYear(),
113+
114+
// -- url building
115+
baseUrl = window.location.origin + window.location.pathname + "#/",
116+
117+
// -- check if link is internal or external
118+
isExternalLink = (url) => {
119+
const tmp = document.createElement('a');
120+
tmp.href = url;
121+
return tmp.host !== window.location.host;
122+
},
123+
124+
// -- link generator
125+
createLink = (option, linkText, defaultLink, className) => {
126+
let result = "";
127+
128+
// --> only accept bool and string
129+
if (typeof option === "boolean" || typeof option === "string") {
130+
131+
// --> if bool, and true
132+
if (typeof option === "boolean" && option) {
133+
134+
// --> use the default options
135+
result = `<a href="${baseUrl + defaultLink}">${linkText}</a>`;
136+
137+
// --> if it is a string url
138+
} else if (typeof option === "string") {
139+
140+
// --> is the link external
141+
result = isExternalLink(option)
142+
143+
// --> if external, add the _blank
144+
? `<a target="_blank" href="${option}">${linkText}</a>`
145+
146+
// --> if internal, then add the page name
147+
: `<a href="${baseUrl + option}">${linkText}</a>`;
148+
}
149+
}
150+
151+
// --> if the result is not empty
152+
if (result) {
153+
154+
// --> create the class name
155+
const classname = `${className.toLowerCase().replace(/\s+/g, '-')}`;
156+
157+
// -- compile the elements
158+
result = `<span class="${classname}">${result}</span>`;
159+
}
160+
161+
return result;
162+
},
163+
164+
// MARK: - html elements
165+
166+
divclose = `</div>`,
167+
168+
// -- divs
169+
div1open = `<div class="footer-container">`,
170+
div2open = `<div class="footer-text">`,
171+
div3open = `<div class="footer-link">`,
172+
173+
// -- text
174+
copyright = (
175+
`<span class="footer-text-copyright">Copyright &copy; ${
176+
options.copyYear && options.copyYear <= date
177+
? `${options.copyYear}${options.copyYear < date ? "&#45;" + date : ""}`
178+
: date
179+
}</span>`
180+
),
181+
author = createLink( options.url, options.name, '', 'footer-text-author'),
182+
183+
// -- links
184+
policyURL = createLink(options.policy, 'Policy', '_policy', 'footer-links-policy'),
185+
termsURL = createLink(options.terms, 'Terms', '_terms', 'footer-links-terms' ),
186+
cookiesURL = createLink(options.cookies, 'Cookies', '_cookies', 'footer-links-cookies'),
187+
188+
// output
189+
output = (
190+
div1open +
191+
div2open + copyright + author + divclose +
192+
div3open + policyURL + termsURL + cookiesURL + divclose +
193+
divclose
194+
);
195+
196+
contentScope.innerHTML = output;
197+
});
198+
}
199+
200+
201+
// MARK: - check options is defined and not empty
202+
if (typeof options !== 'undefined' && doesObjectExists(options)) {
203+
204+
// -- find footer plugin options
205+
window.$docsify.autoFooter = Object.assign(
206+
options,
207+
window.$docsify.autoFooter
208+
);
209+
window.$docsify.plugins = [].concat(autoFooter, window.$docsify.plugins);
210+
211+
} else {
212+
213+
// -- log the error
214+
console.error(
215+
"ERROR: sidebar-footer configuration not set" + "\n" +
216+
"This error appears when:" + "\n" +
217+
" - the `autoSidebar` not found index.html file" + "\n" +
218+
" - the `autoSidebar` is empty"
219+
);
220+
}

dist/docsify-sidebar.min.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 10 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@markbattistella/docsify-sidebarfooter",
3-
"version": "5.0.0",
3+
"version": "5.0.1",
44
"description": "Add a footer notice for Docsify.js",
55
"main": "./dist/docsify-sidebar.min.js",
66
"repository": {

0 commit comments

Comments
 (0)