mirror of https://github.com/Requarks/wiki.git
21 changed files with 943 additions and 872 deletions
Unified View
Diff Options
-
BINassets/images/bg.jpg
-
BINassets/images/bg_1.jpg
-
BINassets/images/bg_2.jpg
-
BINassets/images/bg_3.jpg
-
17client/index.js
-
38client/js/app.js
-
153client/js/app.old.js
-
1client/js/helpers/index.js
-
7client/js/login.js
-
3client/scss/app.scss
-
10client/scss/components/button.scss
-
465client/scss/pages/_login.scss
-
30package.json
-
4server/master.js
-
6server/modules/config.js
-
125server/views/auth/login.pug
-
28server/views/error.pug
-
31server/views/layout.pug
-
30server/views/master.pug
-
3tools/fuse.js
-
864yarn.lock
@ -1,17 +1,4 @@ |
|||||
'use strict' |
'use strict' |
||||
|
|
||||
let logic = document.documentElement.dataset.logic |
|
||||
|
|
||||
switch (logic) { |
|
||||
case 'error': |
|
||||
require('./scss/error.scss') |
|
||||
break |
|
||||
case 'login': |
|
||||
require('./scss/login.scss') |
|
||||
require('./js/login.js') |
|
||||
break |
|
||||
default: |
|
||||
require('./scss/app.scss') |
|
||||
require('./js/app.js') |
|
||||
break |
|
||||
} |
|
||||
|
require('./scss/app.scss') |
||||
|
require('./js/app.js') |
@ -0,0 +1,153 @@ |
|||||
|
'use strict' |
||||
|
|
||||
|
/* global $, siteConfig */ |
||||
|
/* eslint-disable no-new */ |
||||
|
|
||||
|
import Vue from 'vue' |
||||
|
import VueResource from 'vue-resource' |
||||
|
import VueClipboards from 'vue-clipboards' |
||||
|
import VueLodash from 'vue-lodash' |
||||
|
import store from './store' |
||||
|
import i18next from 'i18next' |
||||
|
import i18nextXHR from 'i18next-xhr-backend' |
||||
|
import VueI18Next from '@panter/vue-i18next' |
||||
|
import 'jquery-contextmenu' |
||||
|
import 'jquery-simple-upload' |
||||
|
import 'jquery-smooth-scroll' |
||||
|
import 'jquery-sticky' |
||||
|
|
||||
|
// ====================================
|
||||
|
// Load Helpers
|
||||
|
// ====================================
|
||||
|
|
||||
|
import helpers from './helpers' |
||||
|
import _ from './helpers/lodash' |
||||
|
|
||||
|
// ====================================
|
||||
|
// Load Vue Components
|
||||
|
// ====================================
|
||||
|
|
||||
|
import alertComponent from './components/alert.vue' |
||||
|
import anchorComponent from './components/anchor.vue' |
||||
|
import colorPickerComponent from './components/color-picker.vue' |
||||
|
import editorCodeblockComponent from './components/editor-codeblock.vue' |
||||
|
import editorFileComponent from './components/editor-file.vue' |
||||
|
import editorVideoComponent from './components/editor-video.vue' |
||||
|
import historyComponent from './components/history.vue' |
||||
|
import loadingSpinnerComponent from './components/loading-spinner.vue' |
||||
|
import modalCreatePageComponent from './components/modal-create-page.vue' |
||||
|
import modalCreateUserComponent from './components/modal-create-user.vue' |
||||
|
import modalDeleteUserComponent from './components/modal-delete-user.vue' |
||||
|
import modalDiscardPageComponent from './components/modal-discard-page.vue' |
||||
|
import modalMovePageComponent from './components/modal-move-page.vue' |
||||
|
import modalProfile2faComponent from './components/modal-profile-2fa.vue' |
||||
|
import modalUpgradeSystemComponent from './components/modal-upgrade-system.vue' |
||||
|
import pageLoaderComponent from './components/page-loader.vue' |
||||
|
import searchComponent from './components/search.vue' |
||||
|
import toggleComponent from './components/toggle.vue' |
||||
|
import treeComponent from './components/tree.vue' |
||||
|
|
||||
|
import adminEditUserComponent from './pages/admin-edit-user.component.js' |
||||
|
import adminProfileComponent from './pages/admin-profile.component.js' |
||||
|
import adminSettingsComponent from './pages/admin-settings.component.js' |
||||
|
import adminThemeComponent from './pages/admin-theme.component.js' |
||||
|
import contentViewComponent from './pages/content-view.component.js' |
||||
|
import editorComponent from './components/editor.component.js' |
||||
|
import sourceViewComponent from './pages/source-view.component.js' |
||||
|
|
||||
|
// ====================================
|
||||
|
// Initialize Vue Modules
|
||||
|
// ====================================
|
||||
|
|
||||
|
Vue.use(VueResource) |
||||
|
Vue.use(VueClipboards) |
||||
|
Vue.use(VueI18Next) |
||||
|
Vue.use(VueLodash, _) |
||||
|
Vue.use(helpers) |
||||
|
|
||||
|
// ====================================
|
||||
|
// Register Vue Components
|
||||
|
// ====================================
|
||||
|
|
||||
|
Vue.component('alert', alertComponent) |
||||
|
Vue.component('adminEditUser', adminEditUserComponent) |
||||
|
Vue.component('adminProfile', adminProfileComponent) |
||||
|
Vue.component('adminSettings', adminSettingsComponent) |
||||
|
Vue.component('adminTheme', adminThemeComponent) |
||||
|
Vue.component('anchor', anchorComponent) |
||||
|
Vue.component('colorPicker', colorPickerComponent) |
||||
|
Vue.component('contentView', contentViewComponent) |
||||
|
Vue.component('editor', editorComponent) |
||||
|
Vue.component('editorCodeblock', editorCodeblockComponent) |
||||
|
Vue.component('editorFile', editorFileComponent) |
||||
|
Vue.component('editorVideo', editorVideoComponent) |
||||
|
Vue.component('history', historyComponent) |
||||
|
Vue.component('loadingSpinner', loadingSpinnerComponent) |
||||
|
Vue.component('modalCreatePage', modalCreatePageComponent) |
||||
|
Vue.component('modalCreateUser', modalCreateUserComponent) |
||||
|
Vue.component('modalDeleteUser', modalDeleteUserComponent) |
||||
|
Vue.component('modalDiscardPage', modalDiscardPageComponent) |
||||
|
Vue.component('modalMovePage', modalMovePageComponent) |
||||
|
Vue.component('modalProfile2fa', modalProfile2faComponent) |
||||
|
Vue.component('modalUpgradeSystem', modalUpgradeSystemComponent) |
||||
|
Vue.component('pageLoader', pageLoaderComponent) |
||||
|
Vue.component('search', searchComponent) |
||||
|
Vue.component('sourceView', sourceViewComponent) |
||||
|
Vue.component('toggle', toggleComponent) |
||||
|
Vue.component('tree', treeComponent) |
||||
|
|
||||
|
// ====================================
|
||||
|
// Load Localization strings
|
||||
|
// ====================================
|
||||
|
|
||||
|
i18next |
||||
|
.use(i18nextXHR) |
||||
|
.init({ |
||||
|
backend: { |
||||
|
loadPath: siteConfig.path + '/js/i18n/{{lng}}.json' |
||||
|
}, |
||||
|
lng: siteConfig.lang, |
||||
|
fallbackLng: siteConfig.lang |
||||
|
}) |
||||
|
|
||||
|
$(() => { |
||||
|
// ====================================
|
||||
|
// Notifications
|
||||
|
// ====================================
|
||||
|
|
||||
|
$(window).bind('beforeunload', () => { |
||||
|
store.dispatch('startLoading') |
||||
|
}) |
||||
|
$(document).ajaxSend(() => { |
||||
|
store.dispatch('startLoading') |
||||
|
}).ajaxComplete(() => { |
||||
|
store.dispatch('stopLoading') |
||||
|
}) |
||||
|
|
||||
|
// ====================================
|
||||
|
// Bootstrap Vue
|
||||
|
// ====================================
|
||||
|
|
||||
|
const i18n = new VueI18Next(i18next) |
||||
|
if (document.querySelector('#root')) { |
||||
|
window.wikijs = new Vue({ |
||||
|
mixins: [helpers], |
||||
|
components: {}, |
||||
|
store, |
||||
|
i18n, |
||||
|
el: '#root', |
||||
|
methods: { |
||||
|
changeTheme(opts) { |
||||
|
this.$el.className = `has-stickynav is-primary-${opts.primary} is-alternate-${opts.alt}` |
||||
|
this.$refs.header.className = `nav is-${opts.primary}` |
||||
|
this.$refs.footer.className = `footer is-${opts.footer}` |
||||
|
} |
||||
|
}, |
||||
|
mounted() { |
||||
|
$('a:not(.toc-anchor)').smoothScroll({ speed: 500, offset: -50 }) |
||||
|
$('#header').sticky({ topSpacing: 0 }) |
||||
|
$('.sidebar-pagecontents').sticky({ topSpacing: 15, bottomSpacing: 75 }) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}) |
@ -1,7 +0,0 @@ |
|||||
'use strict' |
|
||||
|
|
||||
/* global $ */ |
|
||||
|
|
||||
$(() => { |
|
||||
$('#login-user').focus() |
|
||||
}) |
|
@ -1,306 +1,161 @@ |
|||||
|
|
||||
body { |
|
||||
padding: 0; |
|
||||
margin: 0; |
|
||||
font-family: $core-font-standard; |
|
||||
font-size: 14px; |
|
||||
} |
|
||||
|
|
||||
a { |
|
||||
color: #FFF; |
|
||||
transition: color 0.4s ease; |
|
||||
text-decoration: none; |
|
||||
|
|
||||
&:hover { |
|
||||
color: mc('orange','600'); |
|
||||
text-decoration: underline; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
#bg { |
|
||||
position: fixed; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
z-index: 1; |
|
||||
background-color: #000; |
|
||||
|
|
||||
> div { |
|
||||
background-size: cover; |
|
||||
background-position: center center; |
|
||||
width: 100%; |
|
||||
height: 100%; |
|
||||
position: absolute; |
|
||||
top: 0; |
|
||||
left: 0; |
|
||||
opacity: 0; |
|
||||
visibility: hidden; |
|
||||
transition: opacity 3s ease, visibility 3s; |
|
||||
animation: bg 30s linear infinite; |
|
||||
|
|
||||
&:nth-child(1) { |
|
||||
animation-delay: 10s; |
|
||||
} |
|
||||
|
|
||||
&:nth-child(2) { |
|
||||
animation-delay: 20s; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
#root { |
|
||||
position: fixed; |
|
||||
top: 15vh; |
|
||||
left: 10vw; |
|
||||
z-index: 2; |
|
||||
color: #FFF; |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
|
|
||||
h1 { |
|
||||
font-size: 4rem; |
|
||||
font-weight: bold; |
|
||||
color: #FFF; |
|
||||
padding: 0; |
|
||||
margin: 0; |
|
||||
animation: headerIntro 3s ease; |
|
||||
} |
|
||||
|
|
||||
h2 { |
|
||||
font-size: 1.5rem; |
|
||||
font-weight: normal; |
|
||||
color: rgba(255,255,255,0.7); |
|
||||
padding: 0; |
|
||||
margin: 0 0 25px 0; |
|
||||
animation: headerIntro 3s ease; |
|
||||
} |
|
||||
|
|
||||
h3 { |
|
||||
font-size: 1.25rem; |
|
||||
font-weight: normal; |
|
||||
color: #FB8C00; |
|
||||
padding: 0; |
|
||||
margin: 0; |
|
||||
animation: shake 1s ease; |
|
||||
|
|
||||
> .fa { |
|
||||
margin-right: 7px; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
h4 { |
|
||||
font-size: 0.8rem; |
|
||||
font-weight: normal; |
|
||||
color: rgba(255,255,255,0.7); |
|
||||
padding: 0; |
|
||||
margin: 0 0 15px 0; |
|
||||
animation: fadeIn 3s ease; |
|
||||
} |
|
||||
|
|
||||
form { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
} |
|
||||
|
|
||||
input[type=text], input[type=password] { |
|
||||
width: 350px; |
|
||||
max-width: 80vw; |
|
||||
border: 1px solid rgba(255,255,255,0.3); |
|
||||
border-radius: 3px; |
|
||||
background-color: rgba(0,0,0,0.2); |
|
||||
padding: 0 15px; |
|
||||
height: 40px; |
|
||||
margin: 0 0 10px 0; |
|
||||
color: #FFF; |
|
||||
font-weight: bold; |
|
||||
font-size: 14px; |
|
||||
transition: all 0.4s ease; |
|
||||
|
|
||||
&:focus { |
|
||||
outline: none; |
|
||||
border-color: mc('orange','600'); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
button { |
|
||||
background-color: mc('orange','600'); |
|
||||
color: #FFF; |
|
||||
border: 1px solid lighten(mc('orange','600'), 10%); |
|
||||
border-radius: 3px; |
|
||||
height: 40px; |
|
||||
width: 125px; |
|
||||
padding: 0; |
|
||||
font-weight: bold; |
|
||||
margin: 15px 0 0 0; |
|
||||
transition: all 0.4s ease; |
|
||||
cursor: pointer; |
|
||||
|
|
||||
span { |
|
||||
font-weight: bold; |
|
||||
} |
|
||||
|
|
||||
&:focus { |
|
||||
outline: none; |
|
||||
border-color: #FFF; |
|
||||
} |
|
||||
|
|
||||
&:hover { |
|
||||
background-color: darken(mc('orange','600'), 10%); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
#social { |
|
||||
margin-top: 25px; |
|
||||
|
|
||||
> span { |
|
||||
display: block; |
|
||||
font-weight: bold; |
|
||||
color: rgba(255,255,255,0.7); |
|
||||
} |
|
||||
|
|
||||
button { |
|
||||
margin-right: 5px; |
|
||||
width: auto; |
|
||||
padding: 0 15px; |
|
||||
|
|
||||
> i { |
|
||||
margin-right: 10px; |
|
||||
font-size: 16px; |
|
||||
} |
|
||||
|
|
||||
&.ms { |
|
||||
background-color: mc('blue','600'); |
|
||||
border-color: lighten(mc('blue','600'), 10%); |
|
||||
|
|
||||
&:focus { |
|
||||
border-color: #FFF; |
|
||||
} |
|
||||
|
|
||||
&:hover { |
|
||||
background-color: darken(mc('blue','600'), 10%); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
&.google { |
|
||||
background-color: mc('light-blue','600'); |
|
||||
border-color: lighten(mc('light-blue','600'), 10%); |
|
||||
|
|
||||
&:focus { |
|
||||
border-color: #FFF; |
|
||||
} |
|
||||
|
|
||||
&:hover { |
|
||||
background-color: darken(mc('light-blue','600'), 10%); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
&.facebook { |
|
||||
background-color: mc('indigo','600'); |
|
||||
border-color: lighten(mc('indigo','600'), 10%); |
|
||||
|
|
||||
&:focus { |
|
||||
border-color: #FFF; |
|
||||
} |
|
||||
|
|
||||
&:hover { |
|
||||
background-color: darken(mc('indigo','600'), 10%); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
&.github { |
|
||||
background-color: mc('blue-grey','700'); |
|
||||
border-color: lighten(mc('blue-grey','700'), 10%); |
|
||||
|
|
||||
&:focus { |
|
||||
border-color: #FFF; |
|
||||
} |
|
||||
|
|
||||
&:hover { |
|
||||
background-color: darken(mc('blue-grey','700'), 10%); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
&.slack { |
|
||||
background-color: mc('purple','700'); |
|
||||
border-color: lighten(mc('purple','700'), 10%); |
|
||||
|
|
||||
&:focus { |
|
||||
border-color: #FFF; |
|
||||
} |
|
||||
|
|
||||
&:hover { |
|
||||
background-color: darken(mc('purple','700'), 10%); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
#copyright { |
|
||||
display: flex; |
|
||||
align-items: center; |
|
||||
justify-content: flex-start; |
|
||||
position: absolute; |
|
||||
left: 10vw; |
|
||||
bottom: 10vh; |
|
||||
z-index: 2; |
|
||||
color: rgba(255,255,255,0.5); |
|
||||
font-weight: bold; |
|
||||
|
|
||||
.icon { |
|
||||
font-size: 1.2rem; |
|
||||
margin: 0 8px; |
|
||||
} |
|
||||
|
|
||||
a { |
|
||||
opacity: 0.75; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
|
|
||||
@include keyframes(bg) { |
|
||||
0% { |
|
||||
@include prefix(transform, scale(1,1)); |
|
||||
visibility: visible; |
|
||||
opacity: 0; |
|
||||
}, |
|
||||
5% { |
|
||||
opacity: 0.5; |
|
||||
}, |
|
||||
33% { |
|
||||
opacity: 0.5; |
|
||||
}, |
|
||||
38% { |
|
||||
@include prefix(transform, scale(1.2, 1.2)); |
|
||||
opacity: 0; |
|
||||
}, |
|
||||
39% { |
|
||||
visibility: hidden; |
|
||||
} |
|
||||
100% { |
|
||||
visibility: hidden; |
|
||||
opacity: 0; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
@include keyframes(headerIntro) { |
|
||||
0% { |
|
||||
opacity: 0; |
|
||||
} |
|
||||
100% { |
|
||||
opacity: 1; |
|
||||
} |
|
||||
|
.login { |
||||
|
background-size: cover; |
||||
|
background-position: center center; |
||||
|
background-image: url('../images/bg.jpg'); |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
|
||||
|
&-container { |
||||
|
display: flex; |
||||
|
width: 650px; |
||||
|
align-items: stretch; |
||||
|
box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); |
||||
|
} |
||||
|
|
||||
|
&-providers { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
width: 200px; |
||||
|
border: 1px solid #FFF; |
||||
|
background-color: mc('grey', '900'); |
||||
|
z-index: 1; |
||||
|
|
||||
|
button { |
||||
|
flex: 1 1; |
||||
|
padding: 0 15px; |
||||
|
border: none; |
||||
|
color: #FFF; |
||||
|
background-color: mc('grey', '800'); |
||||
|
border-top: 1px solid mc('grey', '900'); |
||||
|
font-family: $core-font-standard; |
||||
|
font-weight: 600; |
||||
|
text-align: left; |
||||
|
min-height: 40px; |
||||
|
|
||||
|
&:first-child { |
||||
|
border-top: none; |
||||
|
} |
||||
|
|
||||
|
&.is-active { |
||||
|
background-color: mc('grey', '100'); |
||||
|
background-image: radial-gradient(circle at top left, rgba(mc('grey', '200'),1) 0%,rgba(255,255,255,1) 100%); |
||||
|
color: mc('grey', '700'); |
||||
|
} |
||||
|
|
||||
|
i { |
||||
|
margin-right: 10px; |
||||
|
font-size: 16px; |
||||
|
} |
||||
|
|
||||
|
span { |
||||
|
font-weight: 600; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
&-frame { |
||||
|
background-image: radial-gradient(circle at top left, rgba(255,255,255,1) 0%,rgba(240,240,240,.6) 100%); |
||||
|
border: 1px solid #FFF; |
||||
|
width: 450px; |
||||
|
padding: 1rem; |
||||
|
color: mc('grey', '700'); |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
flex-direction: column; |
||||
|
text-align: center; |
||||
|
|
||||
|
h1 { |
||||
|
font-size: 2rem; |
||||
|
font-weight: 600; |
||||
|
color: mc('grey', '700'); |
||||
|
padding: 0; |
||||
|
margin: 0; |
||||
|
} |
||||
|
|
||||
|
h2 { |
||||
|
font-size: 1.5rem; |
||||
|
font-weight: 300; |
||||
|
color: mc('grey', '700'); |
||||
|
padding: 0; |
||||
|
margin: 0 0 25px 0; |
||||
|
} |
||||
|
|
||||
|
h3 { |
||||
|
font-size: 1.25rem; |
||||
|
font-weight: normal; |
||||
|
color: #FB8C00; |
||||
|
padding: 0; |
||||
|
margin: 0; |
||||
|
animation: shake 1s ease; |
||||
|
|
||||
|
> .fa { |
||||
|
margin-right: 7px; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
h4 { |
||||
|
font-size: .8rem; |
||||
|
font-weight: normal; |
||||
|
color: rgba(255,255,255,0.7); |
||||
|
padding: 0; |
||||
|
margin: 0 0 15px 0; |
||||
|
animation: fadeIn 3s ease; |
||||
|
} |
||||
|
|
||||
|
form { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
} |
||||
|
|
||||
|
input[type=text], input[type=password] { |
||||
|
width: 100%; |
||||
|
border: 1px solid #FFF; |
||||
|
border-radius: 3px; |
||||
|
background-color: rgba(255,255,255,.7); |
||||
|
padding: 0 15px; |
||||
|
height: 40px; |
||||
|
margin: 0 0 10px 0; |
||||
|
color: mc('grey', '700'); |
||||
|
font-weight: 600; |
||||
|
font-size: .8rem; |
||||
|
transition: all 0.4s ease; |
||||
|
text-align: center; |
||||
|
|
||||
|
&:focus { |
||||
|
outline: none; |
||||
|
border-color: mc('grey','400'); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
&-copyright { |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
position: absolute; |
||||
|
left: 0; |
||||
|
bottom: 10vh; |
||||
|
width: 100%; |
||||
|
z-index: 2; |
||||
|
color: #FFF; |
||||
|
font-weight: 400; |
||||
|
text-shadow: 1px 1px 0 #000; |
||||
|
|
||||
|
.icon { |
||||
|
font-size: 1.2rem; |
||||
|
margin: 0 8px; |
||||
|
} |
||||
|
|
||||
|
a { |
||||
|
font-weight: 600; |
||||
|
color: #FFF; |
||||
|
} |
||||
|
|
||||
|
} |
||||
} |
} |
@ -1,75 +1,54 @@ |
|||||
doctype html |
|
||||
html(data-logic='login') |
|
||||
head |
|
||||
meta(http-equiv='X-UA-Compatible', content='IE=edge') |
|
||||
meta(charset='UTF-8') |
|
||||
meta(name='viewport', content='width=device-width, initial-scale=1') |
|
||||
meta(name='theme-color', content='#009688') |
|
||||
meta(name='msapplication-TileColor', content='#009688') |
|
||||
meta(name='msapplication-TileImage', content='/favicons/ms-icon-144x144.png') |
|
||||
title= appconfig.title |
|
||||
|
|
||||
// Favicon |
|
||||
each favsize in [57, 60, 72, 76, 114, 120, 144, 152, 180] |
|
||||
link(rel='apple-touch-icon', sizes=favsize + 'x' + favsize, href='/favicons/apple-icon-' + favsize + 'x' + favsize + '.png') |
|
||||
link(rel='icon', type='image/png', sizes='192x192', href='/favicons/android-icon-192x192.png') |
|
||||
each favsize in [32, 96, 16] |
|
||||
link(rel='icon', type='image/png', sizes=favsize + 'x' + favsize, href='/favicons/favicon-' + favsize + 'x' + favsize + '.png') |
|
||||
link(rel='manifest', href='/manifest.json') |
|
||||
|
|
||||
// JS / CSS |
|
||||
script(type='text/javascript', src=appconfig.host + '/js/vendor.js') |
|
||||
script(type='text/javascript', src=appconfig.host + '/js/app.js') |
|
||||
|
extends ../master.pug |
||||
|
|
||||
|
block body |
||||
body |
body |
||||
#bg |
|
||||
each bg in _.sampleSize([1, 2, 3],3) |
|
||||
div(style='background-image:url(/images/bg_' + bg + '.jpg);') |
|
||||
#root |
|
||||
h1= appconfig.title |
|
||||
h2= t('auth:loginrequired') |
|
||||
if appflash.length > 0 |
|
||||
h3 |
|
||||
i.icon-warning-outline |
|
||||
= appflash[0].title |
|
||||
h4= appflash[0].message |
|
||||
if appconfig.auth.local.enabled |
|
||||
form(method='post', action='/login') |
|
||||
input#login-user(type='text', name='email', placeholder=t('auth:fields.emailuser')) |
|
||||
input#login-pass(type='password', name='password', placeholder=t('auth:fields.password')) |
|
||||
button(type='submit')= t('auth:actions.login') |
|
||||
if appconfig.authStrategies.socialEnabled |
|
||||
#social |
|
||||
if appconfig.auth.local.enabled |
|
||||
span= t('auth:loginusingalt') |
|
||||
else |
|
||||
span= t('auth:loginusing') |
|
||||
if appconfig.auth.microsoft && appconfig.auth.microsoft.enabled |
|
||||
button.ms(onclick='window.location.assign("/login/ms")') |
|
||||
i.icon-windows2 |
|
||||
span= t('auth:providers.windowslive') |
|
||||
if appconfig.auth.azure && appconfig.auth.azure.enabled |
|
||||
button.ms(onclick='window.location.assign("/login/azure")') |
|
||||
i.icon-windows2 |
|
||||
span= t('auth:providers.azure') |
|
||||
if appconfig.auth.google && appconfig.auth.google.enabled |
|
||||
button.google(onclick='window.location.assign("/login/google")') |
|
||||
i.icon-google |
|
||||
span= t('auth:providers.google') |
|
||||
if appconfig.auth.facebook && appconfig.auth.facebook.enabled |
|
||||
button.facebook(onclick='window.location.assign("/login/facebook")') |
|
||||
i.icon-facebook |
|
||||
span= t('auth:providers.facebook') |
|
||||
if appconfig.auth.github && appconfig.auth.github.enabled |
|
||||
button.github(onclick='window.location.assign("/login/github")') |
|
||||
i.icon-github |
|
||||
span= t('auth:providers.github') |
|
||||
if appconfig.auth.slack && appconfig.auth.slack.enabled |
|
||||
button.slack(onclick='window.location.assign("/login/slack")') |
|
||||
i.icon-slack |
|
||||
span= t('auth:providers.slack') |
|
||||
#copyright |
|
||||
= t('footer.poweredby') + ' ' |
|
||||
a.icon(href='https://github.com/Requarks/wiki') |
|
||||
i.icon-github |
|
||||
a(href='https://wiki.requarks.io/') Wiki.js |
|
||||
|
.login#root |
||||
|
.login-container |
||||
|
if config.authStrategies.socialEnabled |
||||
|
.login-providers |
||||
|
button.is-active(onclick='window.location.assign("/login/ms")') |
||||
|
i.nc-icon-outline.ui-1_database |
||||
|
span= t('auth:providers.local') |
||||
|
if config.auth.microsoft && config.auth.microsoft.enabled |
||||
|
button(onclick='window.location.assign("/login/ms")') |
||||
|
i.icon-windows2 |
||||
|
span= t('auth:providers.windowslive') |
||||
|
if config.auth.azure && config.auth.azure.enabled |
||||
|
button(onclick='window.location.assign("/login/azure")') |
||||
|
i.icon-windows2 |
||||
|
span= t('auth:providers.azure') |
||||
|
if config.auth.google && config.auth.google.enabled |
||||
|
button(onclick='window.location.assign("/login/google")') |
||||
|
i.icon-google |
||||
|
span= t('auth:providers.google') |
||||
|
if config.auth.facebook && config.auth.facebook.enabled |
||||
|
button(onclick='window.location.assign("/login/facebook")') |
||||
|
i.icon-facebook |
||||
|
span= t('auth:providers.facebook') |
||||
|
if config.auth.github && config.auth.github.enabled |
||||
|
button(onclick='window.location.assign("/login/github")') |
||||
|
i.icon-github |
||||
|
span= t('auth:providers.github') |
||||
|
if config.auth.slack && config.auth.slack.enabled |
||||
|
button(onclick='window.location.assign("/login/slack")') |
||||
|
i.icon-slack |
||||
|
span= t('auth:providers.slack') |
||||
|
.login-frame |
||||
|
h1= config.site.title |
||||
|
h2= t('auth:loginrequired') |
||||
|
if appflash.length > 0 |
||||
|
h3 |
||||
|
i.icon-warning-outline |
||||
|
= appflash[0].title |
||||
|
h4= appflash[0].message |
||||
|
if config.auth.local.enabled |
||||
|
form(method='post', action='/login') |
||||
|
input#login-user(type='text', name='email', placeholder=t('auth:fields.emailuser')) |
||||
|
input#login-pass(type='password', name='password', placeholder=t('auth:fields.password')) |
||||
|
button.button.is-light-green.is-fullwidth(type='submit') |
||||
|
span= t('auth:actions.login') |
||||
|
.login-copyright |
||||
|
= t('footer.poweredby') + ' ' |
||||
|
a.icon(href='https://github.com/Requarks/wiki') |
||||
|
i.icon-github |
||||
|
a(href='https://wiki.requarks.io/') Wiki.js |
@ -1,32 +1,12 @@ |
|||||
doctype html |
|
||||
html(data-logic='error') |
|
||||
head |
|
||||
meta(http-equiv='X-UA-Compatible', content='IE=edge') |
|
||||
meta(charset='UTF-8') |
|
||||
meta(name='viewport', content='width=device-width, initial-scale=1') |
|
||||
meta(name='theme-color', content='#009688') |
|
||||
meta(name='msapplication-TileColor', content='#009688') |
|
||||
meta(name='msapplication-TileImage', content=appconfig.host + '/favicons/ms-icon-144x144.png') |
|
||||
title= appconfig.title |
|
||||
|
|
||||
// Favicon |
|
||||
each favsize in [57, 60, 72, 76, 114, 120, 144, 152, 180] |
|
||||
link(rel='apple-touch-icon', sizes=favsize + 'x' + favsize, href=appconfig.host + '/favicons/apple-icon-' + favsize + 'x' + favsize + '.png') |
|
||||
link(rel='icon', type='image/png', sizes='192x192', href=appconfig.host + '/favicons/android-icon-192x192.png') |
|
||||
each favsize in [32, 96, 16] |
|
||||
link(rel='icon', type='image/png', sizes=favsize + 'x' + favsize, href=appconfig.host + '/favicons/favicon-' + favsize + 'x' + favsize + '.png') |
|
||||
link(rel='manifest', href=appconfig.host + '/manifest.json') |
|
||||
|
|
||||
// JS / CSS |
|
||||
script(type='text/javascript', src=appconfig.host + '/js/vendor.js') |
|
||||
script(type='text/javascript', src=appconfig.host + '/js/app.js') |
|
||||
|
extends ./master.pug |
||||
|
|
||||
|
block body |
||||
body(class='is-error') |
body(class='is-error') |
||||
.container |
.container |
||||
a(href='/'): img(src=appconfig.host + '/images/logo.png') |
|
||||
|
a(href='/'): img(src=config.site.path + '/images/logo.png') |
||||
h1= message |
h1= message |
||||
h2= t('errors:generic') |
h2= t('errors:generic') |
||||
a.button.is-amber.is-inverted.is-featured(href=appconfig.host + '/')= t('errors:actions.gohome') |
|
||||
|
a.button.is-amber.is-inverted.is-featured(href=config.site.path+ '/')= t('errors:actions.gohome') |
||||
|
|
||||
if error.stack |
if error.stack |
||||
h3= t('errors:debugmsg') |
h3= t('errors:debugmsg') |
||||
|
@ -0,0 +1,30 @@ |
|||||
|
doctype html |
||||
|
html |
||||
|
head |
||||
|
meta(http-equiv='X-UA-Compatible', content='IE=edge') |
||||
|
meta(charset='UTF-8') |
||||
|
meta(name='viewport', content='width=device-width, initial-scale=1') |
||||
|
meta(name='theme-color', content='#009688') |
||||
|
meta(name='msapplication-TileColor', content='#009688') |
||||
|
meta(name='msapplication-TileImage', content=config.site.path + '/favicons/ms-icon-144x144.png') |
||||
|
title= config.title |
||||
|
|
||||
|
//- Favicon |
||||
|
each favsize in [57, 60, 72, 76, 114, 120, 144, 152, 180] |
||||
|
link(rel='apple-touch-icon', sizes=favsize + 'x' + favsize, href=config.site.path + '/favicons/apple-icon-' + favsize + 'x' + favsize + '.png') |
||||
|
link(rel='icon', type='image/png', sizes='192x192', href=config.site.path + '/favicons/android-icon-192x192.png') |
||||
|
each favsize in [32, 96, 16] |
||||
|
link(rel='icon', type='image/png', sizes=favsize + 'x' + favsize, href=config.site.path + '/favicons/favicon-' + favsize + 'x' + favsize + '.png') |
||||
|
link(rel='manifest', href=config.site.path + '/manifest.json') |
||||
|
|
||||
|
//- Site Lang |
||||
|
script. |
||||
|
var siteConfig = !{JSON.stringify(config.site)} |
||||
|
|
||||
|
//- JS / CSS |
||||
|
script(type='text/javascript', src=config.site.path + '/js/vendor.js') |
||||
|
script(type='text/javascript', src=config.site.path + '/js/app.js') |
||||
|
|
||||
|
block head |
||||
|
|
||||
|
block body |
864
yarn.lock
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save