Quellcode durchsuchen

Fixed pug linting issues

NGPixel vor 8 Jahren
Ursprung
Commit
15e4341fed

+ 2 - 2
.pug-lintrc.json

@@ -9,8 +9,8 @@
   "requireLowerCaseTags": true,
   "requireSpaceAfterCodeOperator": true,
   "requireStrictEqualityOperators": true,
-  "validateAttributeQuoteMarks": true,
+  "validateAttributeQuoteMarks": "'",
   "validateAttributeSeparator": ", ",
   "validateDivTags": true,
   "validateIndentation": 2
-}
+}

+ 61 - 61
views/auth/login.pug

@@ -1,67 +1,67 @@
 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='/favicons/ms-icon-144x144.png')
-		title= appconfig.title
+  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')
+    // 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')
 
-		// CSS
-		link(type='text/css', rel='stylesheet', href='/css/libs.css')
-		link(type='text/css', rel='stylesheet', href='/css/login.css')
+    // CSS
+    link(type='text/css', rel='stylesheet', href='/css/libs.css')
+    link(type='text/css', rel='stylesheet', href='/css/login.css')
 
-		// JS
-		script(type='text/javascript', src='/js/libs.js')
-		script(type='text/javascript', src='/js/login.js')
+    // JS
+    script(type='text/javascript', src='/js/libs.js')
+    script(type='text/javascript', src='/js/login.js')
 
-	body
-		#bg
-			each bg in _.sampleSize([1, 2, 3],3)
-				div(style="background-image:url(/images/bg_" + bg + ".jpg);")
-		#root
-			h1= appconfig.title
-			h2 Login required
-			if appflash.length > 0
-				h3
-					i.fa.fa-warning
-					= 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='Email address')
-					input#login-pass(type='password', name='password', placeholder='Password')
-					button(type='submit') Log In
-			if appconfig.authStrategies.socialEnabled
-				#social
-					if appconfig.auth.local.enabled
-						span Or, log in using...
-					else
-						span Log in using...
-					if appconfig.auth.microsoft && appconfig.auth.microsoft.enabled
-						button.ms(onclick="window.location.assign('/login/ms')")
-							i.fa.fa-windows
-							span Microsoft Account
-					if appconfig.auth.google && appconfig.auth.google.enabled
-						button.google(onclick="window.location.assign('/login/google')")
-							i.fa.fa-google
-							span Google ID
-					if appconfig.auth.facebook && appconfig.auth.facebook.enabled
-						button.facebook(onclick="window.location.assign('/login/facebook')")
-							i.fa.fa-facebook
-							span Facebook
-		#copyright
-			= t('footer.poweredby') + ' '
-			a.icon(href='https://github.com/Requarks/wiki')
-				i.icon-github
-			a(href='https://github.com/Requarks/wiki') Requarks Wiki
+  body
+    #bg
+      each bg in _.sampleSize([1, 2, 3],3)
+        div(style='background-image:url(/images/bg_' + bg + '.jpg);')
+    #root
+      h1= appconfig.title
+      h2 Login required
+      if appflash.length > 0
+        h3
+          i.fa.fa-warning
+          = 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='Email address')
+          input#login-pass(type='password', name='password', placeholder='Password')
+          button(type='submit') Log In
+      if appconfig.authStrategies.socialEnabled
+        #social
+          if appconfig.auth.local.enabled
+            span Or, log in using...
+          else
+            span Log in using...
+          if appconfig.auth.microsoft && appconfig.auth.microsoft.enabled
+            button.ms(onclick='window.location.assign("/login/ms")')
+              i.fa.fa-windows
+              span Microsoft Account
+          if appconfig.auth.google && appconfig.auth.google.enabled
+            button.google(onclick='window.location.assign("/login/google")')
+              i.fa.fa-google
+              span Google ID
+          if appconfig.auth.facebook && appconfig.auth.facebook.enabled
+            button.facebook(onclick='window.location.assign("/login/facebook")')
+              i.fa.fa-facebook
+              span Facebook
+    #copyright
+      = t('footer.poweredby') + ' '
+      a.icon(href='https://github.com/Requarks/wiki')
+        i.icon-github
+      a(href='https://github.com/Requarks/wiki') Requarks Wiki

+ 10 - 10
views/common/alerts.pug

@@ -1,14 +1,14 @@
 #alerts
-	ul
-		template(v-for="aItem in children", track-by='_uid')
-			li(v-bind:class='aItem.class')
-				button(v-on:click='acknowledge(aItem._uid)')
-				strong {{ aItem.title }}
-				span {{ aItem.message }}
+  ul
+    template(v-for='aItem in children', track-by='_uid')
+      li(v-bind:class='aItem.class')
+        button(v-on:click='acknowledge(aItem._uid)')
+        strong {{ aItem.title }}
+        span {{ aItem.message }}
 
 if appflash.length > 0
-	script(type='text/javascript').
-		var alertsData = !{JSON.stringify(appflash)};
+  script(type='text/javascript').
+    var alertsData = !{JSON.stringify(appflash)};
 else
-	script(type='text/javascript').
-		var alertsData = [];
+  script(type='text/javascript').
+    var alertsData = [];

+ 7 - 8
views/common/footer.pug

@@ -1,9 +1,8 @@
 footer.footer
-	span
-		= t('footer.poweredby') + ' '
-		a(href='https://github.com/Requarks/wiki') Wiki.js
-		| .
-	ul
-		li: a(href='/')= t('footer.home')
-		li: a(href='#root')= t('footer.top')
-					
+  span
+    = t('footer.poweredby') + ' '
+    a(href='https://github.com/Requarks/wiki') Wiki.js
+    | .
+  ul
+    li: a(href='/')= t('footer.home')
+    li: a(href='#root')= t('footer.top')

+ 31 - 33
views/common/header.pug

@@ -1,36 +1,34 @@
 
 #header-container
-	nav.nav.stickyscroll#header
-		.nav-left
-			block rootNavLeft
-				a.nav-item(href='/')
-					h1
-						i.icon-layers
-						= appconfig.title
-		.nav-center
-			block rootNavCenter
-				.nav-item
-					p.control(v-bind:class="{ 'is-loading': searchload > 0 }")
-						input.input#search-input(type='text', v-model='searchq', @keyup.esc='closeSearch', @keyup.down='moveDownSearch', @keyup.up='moveUpSearch', @keyup.enter='moveSelectSearch', debounce='400', placeholder='Search...')
-		span.nav-toggle
-			span
-			span
-			span
-		.nav-right
-			block rootNavRight
-				i.nav-item#notifload
-
-	transition(name="searchresults-anim", enter-active-class="slideInDown", leave-active-class="fadeOutUp")
-		.searchresults.animated(v-show='searchactive', v-cloak, style={'display':'none'})
-			p.searchresults-label Search Results
-			ul.searchresults-list
-				li(v-if="searchres.length === 0")
-					a: em No results matching your query
-				li(v-for='sres in searchres', v-bind:class="{ 'is-active': searchmovekey === 'res.' + sres._id }")
-					a(v-bind:href="'/' + sres._id") {{ sres.title }}
-			p.searchresults-label(v-if='searchsuggest.length > 0') Did you mean...?
-			ul.searchresults-list(v-if='searchsuggest.length > 0')
-				li(v-for='sug in searchsuggest', v-bind:class="{ 'is-active': searchmovekey === 'sug.' + sug }")
-					a(v-on:click="useSuggestion(sug)") {{ sug }}
-
+  nav.nav.stickyscroll#header
+    .nav-left
+      block rootNavLeft
+        a.nav-item(href='/')
+          h1
+            i.icon-layers
+            = appconfig.title
+    .nav-center
+      block rootNavCenter
+        .nav-item
+          p.control(v-bind:class='{ "is-loading": searchload > 0 }')
+            input.input#search-input(type='text', v-model='searchq', @keyup.esc='closeSearch', @keyup.down='moveDownSearch', @keyup.up='moveUpSearch', @keyup.enter='moveSelectSearch', debounce='400', placeholder='Search...')
+    span.nav-toggle
+      span
+      span
+      span
+    .nav-right
+      block rootNavRight
+        i.nav-item#notifload
 
+  transition(name='searchresults-anim', enter-active-class='slideInDown', leave-active-class='fadeOutUp')
+    .searchresults.animated(v-show='searchactive', v-cloak, style={'display':'none'})
+      p.searchresults-label Search Results
+      ul.searchresults-list
+        li(v-if='searchres.length === 0')
+          a: em No results matching your query
+        li(v-for='sres in searchres', v-bind:class='{ "is-active": searchmovekey === "res." + sres._id }')
+          a(v-bind:href='"/" + sres._id') {{ sres.title }}
+      p.searchresults-label(v-if='searchsuggest.length > 0') Did you mean...?
+      ul.searchresults-list(v-if='searchsuggest.length > 0')
+        li(v-for='sug in searchsuggest', v-bind:class='{ "is-active": searchmovekey === "sug." + sug }')
+          a(v-on:click='useSuggestion(sug)') {{ sug }}

+ 24 - 24
views/error-forbidden.pug

@@ -1,29 +1,29 @@
 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='/favicons/ms-icon-144x144.png')
-		title= appconfig.title
+  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')
+    // 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')
 
-		// CSS
-		link(type='text/css', rel='stylesheet', href='/css/libs.css')
-		link(type='text/css', rel='stylesheet', href='/css/error.css')
+    // CSS
+    link(type='text/css', rel='stylesheet', href='/css/libs.css')
+    link(type='text/css', rel='stylesheet', href='/css/error.css')
 
-	body(class='is-forbidden')
-		.container
-			a(href='/'): img(src='/favicons/android-icon-96x96.png')
-			h1 Forbidden
-			h2 Sorry, you don't have the necessary permissions to access this page.
-			a.button.is-amber.is-inverted(href='/') Go Home
+  body(class='is-forbidden')
+    .container
+      a(href='/'): img(src='/favicons/android-icon-96x96.png')
+      h1 Forbidden
+      h2 Sorry, you don't have the necessary permissions to access this page.
+      a.button.is-amber.is-inverted(href='/') Go Home

+ 25 - 25
views/error-notexist.pug

@@ -1,30 +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='/favicons/ms-icon-144x144.png')
-		title= appconfig.title
+  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')
+    // 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')
 
-		// CSS
-		link(type='text/css', rel='stylesheet', href='/css/libs.css')
-		link(type='text/css', rel='stylesheet', href='/css/error.css')
+    // CSS
+    link(type='text/css', rel='stylesheet', href='/css/libs.css')
+    link(type='text/css', rel='stylesheet', href='/css/error.css')
 
-	body(class='is-notexist')
-		.container
-			a(href='/'): img(src='/favicons/android-icon-96x96.png')
-			h1= message
-			h2 Would you like to create this entry?
-			a.button.is-amber.is-inverted.is-featured(href='/create/' + newpath) Create
-			a.button.is-amber.is-inverted(href='/') Go Home
+  body(class='is-notexist')
+    .container
+      a(href='/'): img(src='/favicons/android-icon-96x96.png')
+      h1= message
+      h2 Would you like to create this entry?
+      a.button.is-amber.is-inverted.is-featured(href='/create/' + newpath) Create
+      a.button.is-amber.is-inverted(href='/') Go Home

+ 27 - 27
views/error.pug

@@ -1,33 +1,33 @@
 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='/favicons/ms-icon-144x144.png')
-		title= appconfig.title
+  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')
+    // 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')
 
-		// CSS
-		link(type='text/css', rel='stylesheet', href='/css/libs.css')
-		link(type='text/css', rel='stylesheet', href='/css/error.css')
+    // CSS
+    link(type='text/css', rel='stylesheet', href='/css/libs.css')
+    link(type='text/css', rel='stylesheet', href='/css/error.css')
 
-	body(class='is-error')
-		.container
-			a(href='/'): img(src='/favicons/android-icon-96x96.png')
-			h1= message
-			h2 Oops, something went wrong
-			a.button.is-amber.is-inverted.is-featured(href='/') Go Home
+  body(class='is-error')
+    .container
+      a(href='/'): img(src='/favicons/android-icon-96x96.png')
+      h1= message
+      h2 Oops, something went wrong
+      a.button.is-amber.is-inverted.is-featured(href='/') Go Home
 
-			if error.stack
-				h3 Detailed debug trail:
-				pre: code #{error.stack}
+      if error.stack
+        h3 Detailed debug trail:
+        pre: code #{error.stack}

+ 30 - 30
views/layout.pug

@@ -1,38 +1,38 @@
 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='/favicons/ms-icon-144x144.png')
-		title= appconfig.title
+  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')
+    // 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')
 
-		// CSS
-		link(type='text/css', rel='stylesheet', href='/css/libs.css')
-		link(type='text/css', rel='stylesheet', href='/css/app.css')
+    // CSS
+    link(type='text/css', rel='stylesheet', href='/css/libs.css')
+    link(type='text/css', rel='stylesheet', href='/css/app.css')
 
-		// JS
-		script(type='text/javascript', src='/js/libs.js')
-		script(type='text/javascript', src='/js/app.js')
+    // JS
+    script(type='text/javascript', src='/js/libs.js')
+    script(type='text/javascript', src='/js/app.js')
 
-		block head
+    block head
 
-	body
-		#root.has-stickynav
-			include ./common/header.pug
-			include ./common/alerts.pug
-			main
-				block content
-			include ./common/footer.pug
+  body
+    #root.has-stickynav
+      include ./common/header.pug
+      include ./common/alerts.pug
+      main
+        block content
+      include ./common/footer.pug
 
-		block outside
+    block outside

+ 31 - 31
views/modals/admin-createuser.pug

@@ -1,33 +1,33 @@
 
 .modal#modal-admin-users-create
-	.modal-background
-	.modal-container
-		.modal-content
-			header.is-blue Create / Authorize User
-			section
-				label.label Email address:
-				p.control.is-fullwidth
-					input.input(type='text', placeholder='e.g. john.doe@company.com', v-model='email')
-					span.help.is-red.is-hidden This email is invalid!
-			section
-				label.label Provider:
-				p.control.is-fullwidth
-					select(v-model='provider')
-						option(value='local') Local Database
-						option(value='windowslive') Microsoft Account
-						option(value='google') Google ID
-						option(value='facebook') Facebook
-			section(v-if="provider=='local'")
-				label.label Password:
-				p.control.is-fullwidth
-					input.input(type='password', placeholder='', v-model='password')
-					span.help.is-red.is-hidden This password is invalid!
-			section(v-if="provider=='local'")
-				label.label Full Name:
-				p.control.is-fullwidth
-					input.input(type='text', placeholder='e.g. John Doe', v-model='name')
-					span.help.is-red.is-hidden This name is invalid!
-			footer
-				a.button.is-grey.is-outlined(v-on:click="cancel") Discard
-				a.button.is-blue(v-on:click="create", v-if="provider=='local'") Create User
-				a.button.is-blue(v-on:click="create", v-if="provider!='local'") Authorize User
+  .modal-background
+  .modal-container
+    .modal-content
+      header.is-blue Create / Authorize User
+      section
+        label.label Email address:
+        p.control.is-fullwidth
+          input.input(type='text', placeholder='e.g. john.doe@company.com', v-model='email')
+          span.help.is-red.is-hidden This email is invalid!
+      section
+        label.label Provider:
+        p.control.is-fullwidth
+          select(v-model='provider')
+            option(value='local') Local Database
+            option(value='windowslive') Microsoft Account
+            option(value='google') Google ID
+            option(value='facebook') Facebook
+      section(v-if='provider=="local"')
+        label.label Password:
+        p.control.is-fullwidth
+          input.input(type='password', placeholder='', v-model='password')
+          span.help.is-red.is-hidden This password is invalid!
+      section(v-if='provider=="local"')
+        label.label Full Name:
+        p.control.is-fullwidth
+          input.input(type='text', placeholder='e.g. John Doe', v-model='name')
+          span.help.is-red.is-hidden This name is invalid!
+      footer
+        a.button.is-grey.is-outlined(v-on:click='cancel') Discard
+        a.button.is-blue(v-on:click='create', v-if='provider=="local"') Create User
+        a.button.is-blue(v-on:click='create', v-if='provider!="local"') Authorize User

+ 9 - 9
views/modals/admin-deleteuser.pug

@@ -1,10 +1,10 @@
 .modal#modal-admin-users-delete
-	.modal-background
-	.modal-container
-		.modal-content
-				header.is-red Delete User Account?
-				section
-					span Are you sure you want to delete this user account? This action cannot be undone!
-				footer
-					a.button.is-grey.is-outlined(v-on:click="cancel") Abort
-					a.button.is-red(v-on:click="deleteUser") Delete
+  .modal-background
+  .modal-container
+    .modal-content
+      header.is-red Delete User Account?
+      section
+        span Are you sure you want to delete this user account? This action cannot be undone!
+      footer
+        a.button.is-grey.is-outlined(v-on:click='cancel') Abort
+        a.button.is-red(v-on:click='deleteUser') Delete

+ 9 - 9
views/modals/create-discard.pug

@@ -1,10 +1,10 @@
 .modal#modal-create-discard
-	.modal-background
-	.modal-container
-		.modal-content
-				header.is-orange Discard?
-				section
-					span Are you sure you want to leave this page and loose anything you wrote so far?
-				footer
-					a.button.is-grey.is-outlined.btn-create-discard Stay on page
-					a.button.is-orange(href='/') Discard
+  .modal-background
+  .modal-container
+    .modal-content
+      header.is-orange Discard?
+      section
+        span Are you sure you want to leave this page and loose anything you wrote so far?
+      footer
+        a.button.is-grey.is-outlined.btn-create-discard Stay on page
+        a.button.is-orange(href='/') Discard

+ 12 - 12
views/modals/create.pug

@@ -1,14 +1,14 @@
 
 .modal#modal-create-prompt
-	.modal-background
-	.modal-container
-		.modal-content
-				header.is-light-blue Create New Document
-				section
-					label.label Enter the new document path:
-					p.control.is-fullwidth
-						input.input(type='text', placeholder='page-name')#txt-create-prompt
-						span.help.is-danger.is-hidden This document path is invalid!
-				footer
-					a.button.is-grey.is-outlined.btn-create-prompt Discard
-					a.button.is-light-blue.btn-create-go Create
+  .modal-background
+  .modal-container
+    .modal-content
+      header.is-light-blue Create New Document
+      section
+        label.label Enter the new document path:
+        p.control.is-fullwidth
+          input.input#txt-create-prompt(type='text', placeholder='page-name')
+          span.help.is-danger.is-hidden This document path is invalid!
+      footer
+        a.button.is-grey.is-outlined.btn-create-prompt Discard
+        a.button.is-light-blue.btn-create-go Create

+ 9 - 9
views/modals/edit-discard.pug

@@ -1,11 +1,11 @@
 
 .modal#modal-edit-discard
-	.modal-background
-	.modal-container
-		.modal-content
-				header.is-orange Discard?
-				section
-					span Are you sure you want to leave this page and loose any modifications?
-				footer
-					a.button.is-grey.is-outlined.btn-edit-discard Stay on page
-					a.button.is-orange(href='/' + pageData.meta.path) Discard
+  .modal-background
+  .modal-container
+    .modal-content
+      header.is-orange Discard?
+      section
+        span Are you sure you want to leave this page and loose any modifications?
+      footer
+        a.button.is-grey.is-outlined.btn-edit-discard Stay on page
+        a.button.is-orange(href='/' + pageData.meta.path) Discard

+ 19 - 19
views/modals/editor-codeblock.pug

@@ -1,23 +1,23 @@
 
 .modal#modal-editor-codeblock
-	.modal-background
-	.modal-container
-		.modal-content.is-expanded
-			
-			header.is-green
-				span Insert Code Block
+  .modal-background
+  .modal-container
+    .modal-content.is-expanded
+      
+      header.is-green
+        span Insert Code Block
 
-			section.is-gapless
-				.columns.is-stretched
-					.column.is-one-quarter.modal-sidebar.is-green(style={'max-width':'350px'})
-						.model-sidebar-header Language
-						.model-sidebar-content
-							p.control.is-fullwidth
-								select(v-model='modeSelected')
-									option(v-for="mode in modes" v-bind:value='mode.name') {{ mode.caption }}
-					.column.ace-container
-						#codeblock-editor
+      section.is-gapless
+        .columns.is-stretched
+          .column.is-one-quarter.modal-sidebar.is-green(style={'max-width':'350px'})
+            .model-sidebar-header Language
+            .model-sidebar-content
+              p.control.is-fullwidth
+                select(v-model='modeSelected')
+                  option(v-for='mode in modes', v-bind:value='mode.name') {{ mode.caption }}
+          .column.ace-container
+            #codeblock-editor
 
-			footer
-				a.button.is-grey.is-outlined(v-on:click="cancel") Discard
-				a.button.is-green(v-on:click="insertCode") Insert Code Block
+      footer
+        a.button.is-grey.is-outlined(v-on:click='cancel') Discard
+        a.button.is-green(v-on:click='insertCode') Insert Code Block

+ 74 - 74
views/modals/editor-file.pug

@@ -1,80 +1,80 @@
 
 .modal#modal-editor-file
-	.modal-background
-	.modal-container
-		.modal-content.is-expanded
+  .modal-background
+  .modal-container
+    .modal-content.is-expanded
 
-			header.is-green
-				span Insert File
-				p.modal-notify(v-bind:class="{ 'is-active': isLoading }")
-					span {{ isLoadingText }}
-					i
-			.modal-toolbar.is-green
-					a.button(v-on:click="newFolder")
-						i.fa.fa-folder
-						span New Folder
-					a.button#btn-editor-file-upload
-						i.fa.fa-upload
-						span Upload File
-						label
-							input(type="file", multiple)
-			section.is-gapless
-				.columns.is-stretched
-					.column.is-one-quarter.modal-sidebar.is-green(style={'max-width':'350px'})
-						.model-sidebar-header Folders
-						ul.model-sidebar-list
-							li(v-for="fld in folders")
-								a(v-on:click="selectFolder(fld)", v-bind:class="{ 'is-active': currentFolder === fld }")
-									i.icon-folder2
-									span / {{ fld }}
-					.column.editor-modal-file-choices
-						figure(v-for="fl in files", v-bind:class="{ 'is-active': currentFile === fl._id }", v-on:click="selectFile(fl._id)", v-bind:data-uid="fl._id")
-							i(class='icon-file')
-							span: strong {{ fl.filename }}
-							span {{ fl.mime }}
-							span {{ fl.filesize | filesize }}
-						em(v-show="files.length < 1")
-							i.icon-marquee-minus
-							| This folder is empty.
-			footer
-				a.button.is-grey.is-outlined(v-on:click="cancel") Discard
-				a.button.is-green(v-on:click="insertFileLink") Insert Link to File
+      header.is-green
+        span Insert File
+        p.modal-notify(v-bind:class='{ "is-active": isLoading }')
+          span {{ isLoadingText }}
+          i
+      .modal-toolbar.is-green
+        a.button(v-on:click='newFolder')
+          i.fa.fa-folder
+          span New Folder
+        a.button#btn-editor-file-upload
+          i.fa.fa-upload
+          span Upload File
+          label
+            input(type='file', multiple)
+      section.is-gapless
+        .columns.is-stretched
+          .column.is-one-quarter.modal-sidebar.is-green(style={'max-width':'350px'})
+            .model-sidebar-header Folders
+            ul.model-sidebar-list
+              li(v-for='fld in folders')
+                a(v-on:click='selectFolder(fld)', v-bind:class='{ "is-active": currentFolder === fld }')
+                  i.icon-folder2
+                  span / {{ fld }}
+          .column.editor-modal-file-choices
+            figure(v-for='fl in files', v-bind:class='{ "is-active": currentFile === fl._id }', v-on:click='selectFile(fl._id)', v-bind:data-uid='fl._id')
+              i(class='icon-file')
+              span: strong {{ fl.filename }}
+              span {{ fl.mime }}
+              span {{ fl.filesize | filesize }}
+            em(v-show='files.length < 1')
+              i.icon-marquee-minus
+              | This folder is empty.
+      footer
+        a.button.is-grey.is-outlined(v-on:click='cancel') Discard
+        a.button.is-green(v-on:click='insertFileLink') Insert Link to File
 
-	.modal.is-superimposed(v-bind:class="{ 'is-active': newFolderShow }")
-		.modal-background
-		.modal-container
-			.modal-content
-				header.is-light-blue New Folder
-				section
-					label.label Enter the new folder name:
-					p.control.is-fullwidth
-						input.input#txt-editor-file-newfoldername(type='text', placeholder='folder name', v-model='newFolderName', v-on:keyup.enter="newFolderCreate", v-on:keyup.esc="newFolderDiscard")
-						span.help.is-danger(v-show="newFolderError") This folder name is invalid!
-				footer
-					a.button.is-grey.is-outlined(v-on:click="newFolderDiscard") Discard
-					a.button.is-light-blue(v-on:click="newFolderCreate") Create
+  .modal.is-superimposed(v-bind:class='{ "is-active": newFolderShow }')
+    .modal-background
+    .modal-container
+      .modal-content
+        header.is-light-blue New Folder
+        section
+          label.label Enter the new folder name:
+          p.control.is-fullwidth
+            input.input#txt-editor-file-newfoldername(type='text', placeholder='folder name', v-model='newFolderName', v-on:keyup.enter='newFolderCreate', v-on:keyup.esc='newFolderDiscard')
+            span.help.is-danger(v-show='newFolderError') This folder name is invalid!
+        footer
+          a.button.is-grey.is-outlined(v-on:click='newFolderDiscard') Discard
+          a.button.is-light-blue(v-on:click='newFolderCreate') Create
 
-	.modal.is-superimposed(v-bind:class="{ 'is-active': renameFileShow }")
-		.modal-background
-		.modal-container
-			.modal-content
-				header.is-indigo Rename File
-				section
-					label.label Enter the new filename (without the extension) of the file:
-					p.control.is-fullwidth
-						input.input#txt-editor-file-rename(type='text', placeholder='filename', v-model='renameFileFilename')
-						span.help.is-danger.is-hidden This filename is invalid!
-				footer
-					a.button.is-grey.is-outlined(v-on:click="renameFileDiscard") Discard
-					a.button.is-light-blue(v-on:click="renameFileGo") Rename
+  .modal.is-superimposed(v-bind:class='{ "is-active": renameFileShow }')
+    .modal-background
+    .modal-container
+      .modal-content
+        header.is-indigo Rename File
+        section
+          label.label Enter the new filename (without the extension) of the file:
+          p.control.is-fullwidth
+            input.input#txt-editor-file-rename(type='text', placeholder='filename', v-model='renameFileFilename')
+            span.help.is-danger.is-hidden This filename is invalid!
+        footer
+          a.button.is-grey.is-outlined(v-on:click='renameFileDiscard') Discard
+          a.button.is-light-blue(v-on:click='renameFileGo') Rename
 
-	.modal.is-superimposed(v-bind:class="{ 'is-active': deleteFileShow }")
-		.modal-background
-		.modal-container
-			.modal-content
-				header.is-red Delete file?
-				section
-					span Are you sure you want to delete #[strong {{deleteFileFilename}}]?
-				footer
-					a.button.is-grey.is-outlined(v-on:click="deleteFileWarn(false)") Discard
-					a.button.is-red(v-on:click="deleteFileGo") Delete
+  .modal.is-superimposed(v-bind:class='{ "is-active": deleteFileShow }')
+    .modal-background
+    .modal-container
+      .modal-content
+        header.is-red Delete file?
+        section
+          span Are you sure you want to delete #[strong {{deleteFileFilename}}]?
+        footer
+          a.button.is-grey.is-outlined(v-on:click='deleteFileWarn(false)') Discard
+          a.button.is-red(v-on:click='deleteFileGo') Delete

+ 97 - 97
views/modals/editor-image.pug

@@ -1,104 +1,104 @@
 
 .modal#modal-editor-image
-	.modal-background
-	.modal-container
-		.modal-content.is-expanded
+  .modal-background
+  .modal-container
+    .modal-content.is-expanded
 
-			header.is-green
-				span Insert Image
-				p.modal-notify(v-bind:class="{ 'is-active': isLoading }")
-					span {{ isLoadingText }}
-					i
-			.modal-toolbar.is-green
-					a.button(v-on:click="newFolder")
-						i.fa.fa-folder
-						span New Folder
-					a.button#btn-editor-image-upload
-						i.fa.fa-upload
-						span Upload Image
-						label
-							input(type="file", multiple)
-					a.button(v-on:click="fetchFromUrl")
-						i.fa.fa-download
-						span Fetch from URL
-			section.is-gapless
-				.columns.is-stretched
-					.column.is-one-quarter.modal-sidebar.is-green(style={'max-width':'350px'})
-						.model-sidebar-header Folders
-						ul.model-sidebar-list
-							li(v-for="fld in folders")
-								a(v-on:click="selectFolder(fld)", v-bind:class="{ 'is-active': currentFolder === fld }")
-									i.icon-folder2
-									span / {{ fld }}
-						.model-sidebar-header Alignment
-						.model-sidebar-content
-							p.control.is-fullwidth
-								select(v-model='currentAlign')
-									option(value='left') Left (default)
-									option(value='center') Centered
-									option(value='right') Right
-									option(value='logo') Page Logo
-					.column.editor-modal-image-choices
-						figure(v-for="img in images", v-bind:class="{ 'is-active': currentImage === img._id }", v-on:click="selectImage(img._id)", v-bind:data-uid="img._id")
-							img(v-bind:src="'/uploads/t/' + img._id + '.png'")
-							span: strong {{ img.basename }}
-							span {{ img.filesize | filesize }}
-						em(v-show="images.length < 1")
-							i.icon-marquee-minus
-							| This folder is empty.
-			footer
-				a.button.is-grey.is-outlined(v-on:click="cancel") Discard
-				a.button.is-green(v-on:click="insertImage") Insert Image
+      header.is-green
+        span Insert Image
+        p.modal-notify(v-bind:class='{ "is-active": isLoading }')
+          span {{ isLoadingText }}
+          i
+      .modal-toolbar.is-green
+        a.button(v-on:click='newFolder')
+          i.fa.fa-folder
+          span New Folder
+        a.button#btn-editor-image-upload
+          i.fa.fa-upload
+          span Upload Image
+          label
+            input(type='file', multiple)
+        a.button(v-on:click='fetchFromUrl')
+          i.fa.fa-download
+          span Fetch from URL
+      section.is-gapless
+        .columns.is-stretched
+          .column.is-one-quarter.modal-sidebar.is-green(style={'max-width':'350px'})
+            .model-sidebar-header Folders
+            ul.model-sidebar-list
+              li(v-for='fld in folders')
+                a(v-on:click='selectFolder(fld)', v-bind:class='{ "is-active": currentFolder === fld }')
+                  i.icon-folder2
+                  span / {{ fld }}
+            .model-sidebar-header Alignment
+            .model-sidebar-content
+              p.control.is-fullwidth
+                select(v-model='currentAlign')
+                  option(value='left') Left (default)
+                  option(value='center') Centered
+                  option(value='right') Right
+                  option(value='logo') Page Logo
+          .column.editor-modal-image-choices
+            figure(v-for='img in images', v-bind:class='{ "is-active": currentImage === img._id }', v-on:click='selectImage(img._id)', v-bind:data-uid='img._id')
+              img(v-bind:src='"/uploads/t/" + img._id + ".png"')
+              span: strong {{ img.basename }}
+              span {{ img.filesize | filesize }}
+            em(v-show='images.length < 1')
+              i.icon-marquee-minus
+              | This folder is empty.
+      footer
+        a.button.is-grey.is-outlined(v-on:click='cancel') Discard
+        a.button.is-green(v-on:click='insertImage') Insert Image
 
-	.modal.is-superimposed(v-bind:class="{ 'is-active': newFolderShow }")
-		.modal-background
-		.modal-container
-			.modal-content
-				header.is-light-blue New Folder
-				section
-					label.label Enter the new folder name:
-					p.control.is-fullwidth
-						input.input#txt-editor-image-newfoldername(type='text', placeholder='folder name', v-model='newFolderName', v-on:keyup.enter="newFolderCreate", v-on:keyup.esc="newFolderDiscard")
-						span.help.is-danger(v-show="newFolderError") This folder name is invalid!
-				footer
-					a.button.is-grey.is-outlined(v-on:click="newFolderDiscard") Discard
-					a.button.is-light-blue(v-on:click="newFolderCreate") Create
+  .modal.is-superimposed(v-bind:class='{ "is-active": newFolderShow }')
+    .modal-background
+    .modal-container
+      .modal-content
+        header.is-light-blue New Folder
+        section
+          label.label Enter the new folder name:
+          p.control.is-fullwidth
+            input.input#txt-editor-image-newfoldername(type='text', placeholder='folder name', v-model='newFolderName', v-on:keyup.enter='newFolderCreate', v-on:keyup.esc='newFolderDiscard')
+            span.help.is-danger(v-show='newFolderError') This folder name is invalid!
+        footer
+          a.button.is-grey.is-outlined(v-on:click='newFolderDiscard') Discard
+          a.button.is-light-blue(v-on:click='newFolderCreate') Create
 
-	.modal.is-superimposed(v-bind:class="{ 'is-active': fetchFromUrlShow }")
-		.modal-background
-		.modal-container
-			.modal-content
-				header.is-light-blue Fetch Image from URL
-				section
-					label.label Enter full URL path to the image:
-					p.control.is-fullwidth
-						input.input#txt-editor-image-fetchurl(type='text', placeholder='http://www.example.com/some-image.png', v-model='fetchFromUrlURL')
-						span.help.is-danger.is-hidden This URL path is invalid!
-				footer
-					a.button.is-grey.is-outlined(v-on:click="fetchFromUrlDiscard") Discard
-					a.button.is-light-blue(v-on:click="fetchFromUrlGo") Fetch
+  .modal.is-superimposed(v-bind:class='{ "is-active": fetchFromUrlShow }')
+    .modal-background
+    .modal-container
+      .modal-content
+        header.is-light-blue Fetch Image from URL
+        section
+          label.label Enter full URL path to the image:
+          p.control.is-fullwidth
+            input.input#txt-editor-image-fetchurl(type='text', placeholder='http://www.example.com/some-image.png', v-model='fetchFromUrlURL')
+            span.help.is-danger.is-hidden This URL path is invalid!
+        footer
+          a.button.is-grey.is-outlined(v-on:click='fetchFromUrlDiscard') Discard
+          a.button.is-light-blue(v-on:click='fetchFromUrlGo') Fetch
 
-	.modal.is-superimposed(v-bind:class="{ 'is-active': renameImageShow }")
-		.modal-background
-		.modal-container
-			.modal-content
-				header.is-indigo Rename Image
-				section
-					label.label Enter the new filename (without the extension) of the image:
-					p.control.is-fullwidth
-						input.input#txt-editor-image-rename(type='text', placeholder='filename', v-model='renameImageFilename')
-						span.help.is-danger.is-hidden This filename is invalid!
-				footer
-					a.button.is-grey.is-outlined(v-on:click="renameImageDiscard") Discard
-					a.button.is-light-blue(v-on:click="renameImageGo") Rename
+  .modal.is-superimposed(v-bind:class='{ "is-active": renameImageShow }')
+    .modal-background
+    .modal-container
+      .modal-content
+        header.is-indigo Rename Image
+        section
+          label.label Enter the new filename (without the extension) of the image:
+          p.control.is-fullwidth
+            input.input#txt-editor-image-rename(type='text', placeholder='filename', v-model='renameImageFilename')
+            span.help.is-danger.is-hidden This filename is invalid!
+        footer
+          a.button.is-grey.is-outlined(v-on:click='renameImageDiscard') Discard
+          a.button.is-light-blue(v-on:click='renameImageGo') Rename
 
-	.modal.is-superimposed(v-bind:class="{ 'is-active': deleteImageShow }")
-		.modal-background
-		.modal-container
-			.modal-content
-				header.is-red Delete image?
-				section
-					span Are you sure you want to delete #[strong {{deleteImageFilename}}]?
-				footer
-					a.button.is-grey.is-outlined(v-on:click="deleteImageWarn(false)") Discard
-					a.button.is-red(v-on:click="deleteImageGo") Delete
+  .modal.is-superimposed(v-bind:class='{ "is-active": deleteImageShow }')
+    .modal-background
+    .modal-container
+      .modal-content
+        header.is-red Delete image?
+        section
+          span Are you sure you want to delete #[strong {{deleteImageFilename}}]?
+        footer
+          a.button.is-grey.is-outlined(v-on:click='deleteImageWarn(false)') Discard
+          a.button.is-red(v-on:click='deleteImageGo') Delete

+ 1 - 1
views/modals/editor-link.pug

@@ -30,4 +30,4 @@
 			.column
 				label.label Link
 				p.control
-					input.input(type='text', placeholder='http://')
+					input.input(type='text', placeholder='http://')

+ 26 - 26
views/modals/editor-video.pug

@@ -1,28 +1,28 @@
 
 .modal#modal-editor-video
-	.modal-background
-	.modal-container
-		.modal-content
-			header.is-green Insert Video Player
-			section
-				label.label Enter the link to the video to be embedded:
-				p.control.is-fullwidth
-					input.input(type='text', placeholder='https://www.youtube.com/watch?v=xxxxxxxxxxx', v-model='link')
-					span.help.is-red.is-hidden This URL is invalid or not supported!
-				.note The following are supported:
-					ul
-						li
-							i.icon-youtube-play
-							span Youtube
-						li
-							i.icon-vimeo
-							span Vimeo
-						li
-							i.icon-film
-							span Dailymotion
-						li
-							i.icon-video
-							span Any standard MP4 file
-			footer
-				a.button.is-grey.is-outlined(v-on:click="cancel") Discard
-				a.button.is-green(v-on:click="insertVideo") Insert Video
+  .modal-background
+  .modal-container
+    .modal-content
+      header.is-green Insert Video Player
+      section
+        label.label Enter the link to the video to be embedded:
+        p.control.is-fullwidth
+          input.input(type='text', placeholder='https://www.youtube.com/watch?v=xxxxxxxxxxx', v-model='link')
+          span.help.is-red.is-hidden This URL is invalid or not supported!
+        .note The following are supported:
+          ul
+            li
+              i.icon-youtube-play
+              span Youtube
+            li
+              i.icon-vimeo
+              span Vimeo
+            li
+              i.icon-film
+              span Dailymotion
+            li
+              i.icon-video
+              span Any standard MP4 file
+      footer
+        a.button.is-grey.is-outlined(v-on:click='cancel') Discard
+        a.button.is-green(v-on:click='insertVideo') Insert Video

+ 13 - 13
views/modals/move.pug

@@ -1,15 +1,15 @@
 
 .modal#modal-move-prompt
-	.modal-background
-	.modal-container
-		.modal-content
-			header.is-indigo Move document
-			section
-				label.label Enter the new document path:
-				p.control.is-fullwidth
-					input.input(type='text', placeholder='page-name')#txt-move-prompt
-					span.help.is-red.is-hidden This document path is invalid or not allowed!
-				span.note Note that moving or renaming documents can lead to broken links. Make sure to edit any page that links to this document afterwards!
-			footer
-				a.button.is-grey.is-outlined.btn-move-prompt Discard
-				a.button.is-indigo.btn-move-go Move
+  .modal-background
+  .modal-container
+    .modal-content
+      header.is-indigo Move document
+      section
+        label.label Enter the new document path:
+        p.control.is-fullwidth
+          input.input#txt-move-prompt(type='text', placeholder='page-name')
+          span.help.is-red.is-hidden This document path is invalid or not allowed!
+        span.note Note that moving or renaming documents can lead to broken links. Make sure to edit any page that links to this document afterwards!
+      footer
+        a.button.is-grey.is-outlined.btn-move-prompt Discard
+        a.button.is-indigo.btn-move-go Move

+ 51 - 51
views/pages/admin/_layout.pug

@@ -1,59 +1,59 @@
 extends ../../layout.pug
 
 block rootNavCenter
-	h2.nav-item Account
+  h2.nav-item Account
 
 block rootNavRight
-	i.nav-item#notifload
-	.nav-item
-		a.button.btn-edit-discard(href='/')
-			i.icon-home
-			span Home
+  i.nav-item#notifload
+  .nav-item
+    a.button.btn-edit-discard(href='/')
+      i.icon-home
+      span Home
 
 block content
 
-	#page-type-account
-		.container.is-fluid
-			.columns.is-gapless
-
-				.column.is-narrow.is-hidden-touch.sidebar
-
-					aside
-						.sidebar-label
-							i.icon-th-small
-							span Navigation
-						ul.sidebar-menu
-							li
-								a(href='/')
-									i.icon-home
-									span Home
-
-					aside
-						.sidebar-label
-							i.icon-head
-							span Account
-						ul.sidebar-menu
-							li
-								a(href='/admin/profile')
-									i.icon-user
-									span My Profile
-							li
-								a(href='/admin/stats')
-									i.icon-bar-graph-2
-									span Stats
-							if rights.manage
-								li
-									a(href='/admin/users')
-										i.icon-users
-										span Users
-								li
-									a(href='/admin/settings')
-										i.icon-cog
-										span Site Settings
-							li
-								a(href='/logout')
-									i.icon-delete2
-									span Logout
-
-				.column
-					block adminContent
+  #page-type-account
+    .container.is-fluid
+      .columns.is-gapless
+
+        .column.is-narrow.is-hidden-touch.sidebar
+
+          aside
+            .sidebar-label
+              i.icon-th-small
+              span Navigation
+            ul.sidebar-menu
+              li
+                a(href='/')
+                  i.icon-home
+                  span Home
+
+          aside
+            .sidebar-label
+              i.icon-head
+              span Account
+            ul.sidebar-menu
+              li
+                a(href='/admin/profile')
+                  i.icon-user
+                  span My Profile
+              li
+                a(href='/admin/stats')
+                  i.icon-bar-graph-2
+                  span Stats
+              if rights.manage
+                li
+                  a(href='/admin/users')
+                    i.icon-users
+                    span Users
+                li
+                  a(href='/admin/settings')
+                    i.icon-cog
+                    span Site Settings
+              li
+                a(href='/logout')
+                  i.icon-delete2
+                  span Logout
+
+        .column
+          block adminContent

+ 45 - 45
views/pages/admin/profile.pug

@@ -1,49 +1,49 @@
 extends ./_layout.pug
 
 block adminContent
-	#page-type-admin-profile
-		.hero
-			h1.title#title My Profile
-			h2.subtitle Profile and authentication info
-		.form-sections
-			.columns.is-gapless
-				.column.is-two-thirds
-					section
-						label.label Email
-						p.control.is-fullwidth
-							input.input(type='text', placeholder='Email', value=user.email, disabled)
-					if user.provider == 'local'
-						section
-							label.label Password
-							p.control.is-fullwidth
-								input.input(type='password', placeholder='Password', value='********', v-model='password')
-						section
-							label.label Verify Password
-							p.control.is-fullwidth
-								input.input(type='password', placeholder='Password', value='********', v-model='passwordVerify')
-					section
-						label.label Display Name
-						p.control.is-fullwidth
-							input.input(type='text', placeholder='John Smith', v-model='name')
-					section
-						button.button.is-green(v-on:click='saveUser')
-							i.icon-check
-							span Save Changes
-				.column
-					.panel
-						label.label Provider
-						p.control.account-profile-provider
-							case user.provider
-								when 'local': i.icon-server
-								when 'windowslive': i.icon-windows2.is-blue
-								when 'google': i.icon-google.is-blue
-								when 'facebook': i.icon-facebook.is-purple
-								default: i.icon-warning
-							= t('auth:providers.' + user.provider)
-						label.label Member since
-						p.control= userMoment(user.createdAt).format('LL')
-						label.label Last Profile Update
-						p.control= userMoment(user.updatedAt).format('LL')
+  #page-type-admin-profile
+    .hero
+      h1.title#title My Profile
+      h2.subtitle Profile and authentication info
+    .form-sections
+      .columns.is-gapless
+        .column.is-two-thirds
+          section
+            label.label Email
+            p.control.is-fullwidth
+              input.input(type='text', placeholder='Email', value=user.email, disabled)
+          if user.provider === 'local'
+            section
+              label.label Password
+              p.control.is-fullwidth
+                input.input(type='password', placeholder='Password', value='********', v-model='password')
+            section
+              label.label Verify Password
+              p.control.is-fullwidth
+                input.input(type='password', placeholder='Password', value='********', v-model='passwordVerify')
+          section
+            label.label Display Name
+            p.control.is-fullwidth
+              input.input(type='text', placeholder='John Smith', v-model='name')
+          section
+            button.button.is-green(v-on:click='saveUser')
+              i.icon-check
+              span Save Changes
+        .column
+          .panel
+            label.label Provider
+            p.control.account-profile-provider
+              case user.provider
+                when 'local': i.icon-server
+                when 'windowslive': i.icon-windows2.is-blue
+                when 'google': i.icon-google.is-blue
+                when 'facebook': i.icon-facebook.is-purple
+                default: i.icon-warning
+              = t('auth:providers.' + user.provider)
+            label.label Member since
+            p.control= userMoment(user.createdAt).format('LL')
+            label.label Last Profile Update
+            p.control= userMoment(user.updatedAt).format('LL')
 
-	script(type='text/javascript').
-		var usrDataName = "!{user.name}";
+  script(type='text/javascript').
+    var usrDataName = "!{user.name}";

+ 6 - 6
views/pages/admin/settings.pug

@@ -1,9 +1,9 @@
 extends ./_layout.pug
 
 block adminContent
-	.hero
-		h1.title#title Site Settings
-		h2.subtitle Manage site configuration
-	.form-sections
-		section
-			| Coming soon
+  .hero
+    h1.title#title Site Settings
+    h2.subtitle Manage site configuration
+  .form-sections
+    section
+      | Coming soon

+ 11 - 11
views/pages/admin/stats.pug

@@ -1,14 +1,14 @@
 extends ./_layout.pug
 
 block adminContent
-	.hero
-		h1.title#title Stats
-		h2.subtitle General site-wide statistics
-	.form-sections
-		section
-				label.label Entries
-				p.control= totalEntries
-				label.label Uploads
-				p.control= totalUploads
-				label.label Users
-				p.control= totalUsers
+  .hero
+    h1.title#title Stats
+    h2.subtitle General site-wide statistics
+  .form-sections
+    section
+      label.label Entries
+      p.control= totalEntries
+      label.label Uploads
+      p.control= totalUploads
+      label.label Users
+      p.control= totalUsers

+ 119 - 119
views/pages/admin/users-edit.pug

@@ -1,126 +1,126 @@
 extends ./_layout.pug
 
 block rootNavRight
-	i.nav-item#notifload
-	.nav-item
-		a.button(href='/admin/users')
-			i.icon-reply
-			span Return to Users
+  i.nav-item#notifload
+  .nav-item
+    a.button(href='/admin/users')
+      i.icon-reply
+      span Return to Users
 
 block adminContent
-	#page-type-admin-users-edit
-		.hero
-			h1.title#title Edit User
-			h2.subtitle= usr.email
-		table.table
-			thead
-				tr
-					th Unique ID
-					th Provider
-					th Created On
-					th Updated On
-			tbody
-					tr
-						td.is-centered= usr._id
-						td.is-centered.has-icons
-							case usr.provider
-								when 'local'
-									i.icon-server.is-deep-orange
-									| Local Database
-								when 'windowslive'
-									i.icon-windows2.is-blue
-									| Microsoft Account
-								when 'google'
-									i.icon-google.is-blue
-									| Google ID
-								when 'facebook'
-									i.icon-facebook.is-purple
-									| Facebook
-								default: i.icon-warning
-						td.is-centered= userMoment(usr.createdAt).format('lll')
-						td.is-centered= userMoment(usr.updatedAt).format('lll')
-		.form-sections
-			section
-				label.label Email Address
-				p.control.is-fullwidth
-					input.input(type='text', placeholder='john.smith@example.com', v-model='email', disabled=!usrOpts.canChangeEmail)
-			section
-				label.label Display Name
-				p.control.is-fullwidth
-					input.input(type='text', placeholder='John Smith', v-model='name', disabled=!usrOpts.canChangeName)
-			if usrOpts.canChangePassword
-				section
-					label.label Password
-					p.control.is-fullwidth
-						input.input(type='password', placeholder='Password', v-model='password', value='********')
-			section
-				label.label Access Rights
-				table.table
-					thead.is-teal
-						tr
-							th
-							th(style={width: '200px'}) Permission(s)
-							th Path
-							th(style={width: '150px'}) Access
-							th(style={width: '50px'})
-					tbody
-						tr(v-for='(right, idx) in rights', v-cloak)
-							td.is-icon
-								i.icon-marquee-plus.is-green(v-if='right.deny === false || right.deny === "false"')
-								i.icon-marquee-minus.is-red(v-if='right.deny === true || right.deny === "true"')
-							td
-								p.control.is-fullwidth
-									select(v-model='right.role')
-										option(value='write') Read and Write
-										option(value='read') Read Only
-							td
-								.columns
-									.column.is-narrow
-										p.control
-											select(v-model='right.exact')
-												option(value='false') Path starts with:
-												option(value='true') Path match exactly:
-									.column
-										p.control.is-fullwidth
-											input.input(type='text', placeholder='/', v-model='right.path')
-							td
-								p.control.is-fullwidth
-									select(v-model='right.deny')
-										option(value='false') Allow
-										option(value='true') Deny
-							td.is-centered.has-action-icons
-								i.icon-delete.is-red(v-on:click='removeRightsRow(idx)')
-						tr(v-if='rights.length < 1', v-cloak)
-							td.is-icon
-							td.is-centered(colspan='3'): em No additional access rights
-							td.is-centered.has-action-icons
-				.table-actions
-					button.button.is-blue(v-on:click='addRightsRow')
-						i.icon-plus
-						span Add New Row
-			section
-				label.label Role Override
-				p.control.is-fullwidth
-					select(v-model='roleoverride', disabled=!usrOpts.canChangeRole)
-						option(value='none') None
-						option(value='admin') Global Administrator
-			.columns.is-gapless
-				.column
-					section
-						button.button.is-green(v-on:click='saveUser')
-							i.icon-check
-							span Save Changes
-						a.button.button.is-grey.is-outlined(href='/admin/users')
-							i.icon-cancel
-							span Discard
-				.column.is-narrow
-					section
-						if usrOpts.canBeDeleted
-							button.button.is-red.btn-deluser-prompt
-								i.icon-trash2
-								span Delete Account
+  #page-type-admin-users-edit
+    .hero
+      h1.title#title Edit User
+      h2.subtitle= usr.email
+    table.table
+      thead
+        tr
+          th Unique ID
+          th Provider
+          th Created On
+          th Updated On
+      tbody
+        tr
+          td.is-centered= usr._id
+          td.is-centered.has-icons
+            case usr.provider
+              when 'local'
+                i.icon-server.is-deep-orange
+                | Local Database
+              when 'windowslive'
+                i.icon-windows2.is-blue
+                | Microsoft Account
+              when 'google'
+                i.icon-google.is-blue
+                | Google ID
+              when 'facebook'
+                i.icon-facebook.is-purple
+                | Facebook
+              default: i.icon-warning
+          td.is-centered= userMoment(usr.createdAt).format('lll')
+          td.is-centered= userMoment(usr.updatedAt).format('lll')
+    .form-sections
+      section
+        label.label Email Address
+        p.control.is-fullwidth
+          input.input(type='text', placeholder='john.smith@example.com', v-model='email', disabled=!usrOpts.canChangeEmail)
+      section
+        label.label Display Name
+        p.control.is-fullwidth
+          input.input(type='text', placeholder='John Smith', v-model='name', disabled=!usrOpts.canChangeName)
+      if usrOpts.canChangePassword
+        section
+          label.label Password
+          p.control.is-fullwidth
+            input.input(type='password', placeholder='Password', v-model='password', value='********')
+      section
+        label.label Access Rights
+        table.table
+          thead.is-teal
+            tr
+              th
+              th(style={width: '200px'}) Permission(s)
+              th Path
+              th(style={width: '150px'}) Access
+              th(style={width: '50px'})
+          tbody
+            tr(v-for='(right, idx) in rights', v-cloak)
+              td.is-icon
+                i.icon-marquee-plus.is-green(v-if='right.deny === false || right.deny === "false"')
+                i.icon-marquee-minus.is-red(v-if='right.deny === true || right.deny === "true"')
+              td
+                p.control.is-fullwidth
+                  select(v-model='right.role')
+                    option(value='write') Read and Write
+                    option(value='read') Read Only
+              td
+                .columns
+                  .column.is-narrow
+                    p.control
+                      select(v-model='right.exact')
+                        option(value='false') Path starts with:
+                        option(value='true') Path match exactly:
+                  .column
+                    p.control.is-fullwidth
+                      input.input(type='text', placeholder='/', v-model='right.path')
+              td
+                p.control.is-fullwidth
+                  select(v-model='right.deny')
+                    option(value='false') Allow
+                    option(value='true') Deny
+              td.is-centered.has-action-icons
+                i.icon-delete.is-red(v-on:click='removeRightsRow(idx)')
+            tr(v-if='rights.length < 1', v-cloak)
+              td.is-icon
+              td.is-centered(colspan='3'): em No additional access rights
+              td.is-centered.has-action-icons
+        .table-actions
+          button.button.is-blue(v-on:click='addRightsRow')
+            i.icon-plus
+            span Add New Row
+      section
+        label.label Role Override
+        p.control.is-fullwidth
+          select(v-model='roleoverride', disabled=!usrOpts.canChangeRole)
+            option(value='none') None
+            option(value='admin') Global Administrator
+      .columns.is-gapless
+        .column
+          section
+            button.button.is-green(v-on:click='saveUser')
+              i.icon-check
+              span Save Changes
+            a.button.button.is-grey.is-outlined(href='/admin/users')
+              i.icon-cancel
+              span Discard
+        .column.is-narrow
+          section
+            if usrOpts.canBeDeleted
+              button.button.is-red.btn-deluser-prompt
+                i.icon-trash2
+                span Delete Account
 
-	include ../../modals/admin-deleteuser.pug
+  include ../../modals/admin-deleteuser.pug
 
-	script(type='text/javascript').
-		var usrData = !{JSON.stringify(usr)};
+  script(type='text/javascript').
+    var usrData = !{JSON.stringify(usr)};

+ 44 - 44
views/pages/admin/users.pug

@@ -1,50 +1,50 @@
 extends ./_layout.pug
 
 block rootNavRight
-	i.nav-item#notifload
-	.nav-item
-		a.button.btn-create-prompt
-			i.icon-plus
-			span Create / Authorize User
+  i.nav-item#notifload
+  .nav-item
+    a.button.btn-create-prompt
+      i.icon-plus
+      span Create / Authorize User
 
 block adminContent
-	#page-type-admin-users
-		.hero
-			h1.title#title Users
-			h2.subtitle Manage users and access rights
-		table.table
-			thead
-				tr
-					th
-					th Name
-					th Email
-					th Provider
-					th Created On
-					th Updated On
-			tbody
-				each usr in usrs
-					tr
-						td.is-icon
-							i.icon-user.is-grey
-						td
-							a(href='/admin/users/' + usr._id)= usr.name
-						td= usr.email
-						td.is-centered.has-icons
-							case usr.provider
-								when 'local'
-									i.icon-server.is-deep-orange
-									| Local Database
-								when 'windowslive'
-									i.icon-windows2.is-blue
-									| Microsoft Account
-								when 'google'
-									i.icon-google.is-blue
-									| Google ID
-								when 'facebook'
-									i.icon-facebook.is-purple
-									| Facebook
-								default: i.icon-warning
-						td.is-centered= userMoment(usr.createdAt).format('lll')
-						td.is-centered= userMoment(usr.updatedAt).format('lll')
+  #page-type-admin-users
+    .hero
+      h1.title#title Users
+      h2.subtitle Manage users and access rights
+    table.table
+      thead
+        tr
+          th
+          th Name
+          th Email
+          th Provider
+          th Created On
+          th Updated On
+      tbody
+        each usr in usrs
+          tr
+            td.is-icon
+              i.icon-user.is-grey
+            td
+              a(href='/admin/users/' + usr._id)= usr.name
+            td= usr.email
+            td.is-centered.has-icons
+              case usr.provider
+                when 'local'
+                  i.icon-server.is-deep-orange
+                  | Local Database
+                when 'windowslive'
+                  i.icon-windows2.is-blue
+                  | Microsoft Account
+                when 'google'
+                  i.icon-google.is-blue
+                  | Google ID
+                when 'facebook'
+                  i.icon-facebook.is-purple
+                  | Facebook
+                default: i.icon-warning
+            td.is-centered= userMoment(usr.createdAt).format('lll')
+            td.is-centered= userMoment(usr.updatedAt).format('lll')
 
-		include ../../modals/admin-createuser.pug
+    include ../../modals/admin-createuser.pug

+ 18 - 18
views/pages/create.pug

@@ -1,27 +1,27 @@
 extends ../layout.pug
 
 block rootNavCenter
-	h2.nav-item Create New Document
+  h2.nav-item Create New Document
 
 block rootNavRight
-	i.nav-item#notifload
-	span.nav-item
-		a.button.is-outlined.btn-create-discard
-			i.icon-cross
-			span Discard
-		a.button.btn-create-save
-			i.icon-check
-			span Save Document
+  i.nav-item#notifload
+  span.nav-item
+    a.button.is-outlined.btn-create-discard
+      i.icon-cross
+      span Discard
+    a.button.btn-create-save
+      i.icon-check
+      span Save Document
 
 block content
 
-	#page-type-create(data-entrypath=pageData.meta.path)
-		.editor-area
-			textarea#mk-editor= pageData.markdown
+  #page-type-create(data-entrypath=pageData.meta.path)
+    .editor-area
+      textarea#mk-editor= pageData.markdown
 
-	include ../modals/create-discard.pug
-	include ../modals/editor-link.pug
-	include ../modals/editor-image.pug
-	include ../modals/editor-file.pug
-	include ../modals/editor-video.pug
-	include ../modals/editor-codeblock.pug
+  include ../modals/create-discard.pug
+  include ../modals/editor-link.pug
+  include ../modals/editor-image.pug
+  include ../modals/editor-file.pug
+  include ../modals/editor-video.pug
+  include ../modals/editor-codeblock.pug

+ 18 - 18
views/pages/edit.pug

@@ -1,27 +1,27 @@
 extends ../layout.pug
 
 block rootNavCenter
-	h2.nav-item= pageData.meta.title
+  h2.nav-item= pageData.meta.title
 
 block rootNavRight
-	i.nav-item#notifload
-	span.nav-item
-		a.button.is-outlined.btn-edit-discard
-			i.icon-cross
-			span Discard
-		a.button.btn-edit-save
-			i.icon-check
-			span Save Changes
+  i.nav-item#notifload
+  span.nav-item
+    a.button.is-outlined.btn-edit-discard
+      i.icon-cross
+      span Discard
+    a.button.btn-edit-save
+      i.icon-check
+      span Save Changes
 
 block content
 
-	#page-type-edit(data-entrypath=pageData.meta.path)
-		.editor-area
-			textarea#mk-editor= pageData.markdown
+  #page-type-edit(data-entrypath=pageData.meta.path)
+    .editor-area
+      textarea#mk-editor= pageData.markdown
 
-	include ../modals/edit-discard.pug
-	include ../modals/editor-link.pug
-	include ../modals/editor-image.pug
-	include ../modals/editor-file.pug
-	include ../modals/editor-video.pug
-	include ../modals/editor-codeblock.pug
+  include ../modals/edit-discard.pug
+  include ../modals/editor-link.pug
+  include ../modals/editor-image.pug
+  include ../modals/editor-file.pug
+  include ../modals/editor-video.pug
+  include ../modals/editor-codeblock.pug

+ 22 - 22
views/pages/source.pug

@@ -1,31 +1,31 @@
 extends ../layout.pug
 
 block rootNavCenter
-	h2.nav-item= pageData.meta.title
+  h2.nav-item= pageData.meta.title
 
 block rootNavRight
-	i.nav-item#notifload
-	span.nav-item
-		if rights.write
-			a.button.is-outlined.btn-move-prompt.is-hidden
-				i.icon-shuffle
-				span Move
-		a.button.is-outlined(href='/' + pageData.meta.path)
-			i.icon-loader
-			span Normal View
-		if rights.write
-			a.button.is-orange(href='/edit/' + pageData.meta.path)
-				i.fa.fa-edit
-				span Edit
-			a.button.is-blue.btn-create-prompt
-				i.fa.fa-plus
-				span Create
+  i.nav-item#notifload
+  span.nav-item
+    if rights.write
+      a.button.is-outlined.btn-move-prompt.is-hidden
+        i.icon-shuffle
+        span Move
+    a.button.is-outlined(href='/' + pageData.meta.path)
+      i.icon-loader
+      span Normal View
+    if rights.write
+      a.button.is-orange(href='/edit/' + pageData.meta.path)
+        i.fa.fa-edit
+        span Edit
+      a.button.is-blue.btn-create-prompt
+        i.fa.fa-plus
+        span Create
 
 block content
 
-	#page-type-source(data-entrypath=pageData.meta.path)
-		.ace-container
-			#source-display= pageData.markdown
+  #page-type-source(data-entrypath=pageData.meta.path)
+    .ace-container
+      #source-display= pageData.markdown
 
-	include ../modals/create.pug
-	include ../modals/move.pug
+  include ../modals/create.pug
+  include ../modals/move.pug

+ 66 - 66
views/pages/view.pug

@@ -1,79 +1,79 @@
 extends ../layout.pug
 
 mixin tocMenu(ti)
-	each node in ti
-		li
-			a(href='#' + node.anchor, title=node.content)= node.content
-			if node.nodes.length > 0
-				ul
-					+tocMenu(node.nodes)
+  each node in ti
+    li
+      a(href='#' + node.anchor, title=node.content)= node.content
+      if node.nodes.length > 0
+        ul
+          +tocMenu(node.nodes)
 
 block rootNavRight
-	i.nav-item#notifload
-	.nav-item
-		if rights.write
-			a.button.is-outlined.btn-move-prompt.is-hidden
-				i.icon-shuffle
-				span Move
-		a.button.is-outlined(href='/source/' + pageData.meta.path)
-			i.icon-loader
-			span Source
-		if rights.write
-			a.button(href='/edit/' + pageData.meta.path)
-				i.icon-document-text
-				span Edit
-			a.button.btn-create-prompt
-				i.icon-plus
-				span Create
+  i.nav-item#notifload
+  .nav-item
+    if rights.write
+      a.button.is-outlined.btn-move-prompt.is-hidden
+        i.icon-shuffle
+        span Move
+    a.button.is-outlined(href='/source/' + pageData.meta.path)
+      i.icon-loader
+      span Source
+    if rights.write
+      a.button(href='/edit/' + pageData.meta.path)
+        i.icon-document-text
+        span Edit
+      a.button.btn-create-prompt
+        i.icon-plus
+        span Create
 
 block content
 
-	#page-type-view(data-entrypath=pageData.meta.path)
-		.container.is-fluid
-			.columns.is-gapless
+  #page-type-view(data-entrypath=pageData.meta.path)
+    .container.is-fluid
+      .columns.is-gapless
 
-				.column.is-narrow.is-hidden-touch.sidebar
+        .column.is-narrow.is-hidden-touch.sidebar
 
-					aside
-						.sidebar-label
-							i.icon-th-small
-							span Navigation
-						ul.sidebar-menu
-							li
-								a(href='/')
-									i.icon-home
-									span Home
-							if pageData.parent
-								li
-									a(href='/' + pageData.parent.path)
-										i.icon-reply
-										span= pageData.parent.title
-							if !isGuest
-								li
-									a(href='/admin')
-										i.icon-head
-										span Account
-							else
-								li
-									a(href='/login')
-										i.icon-unlock
-										span Login
-					aside.stickyscroll(data-margin-top=40)
-						.sidebar-label
-							i.icon-th-list
-							span Contents
-						ul.sidebar-menu
-							li: a(href='#root', title='Start') Start
-							+tocMenu(pageData.tree)
+          aside
+            .sidebar-label
+              i.icon-th-small
+              span Navigation
+            ul.sidebar-menu
+              li
+                a(href='/')
+                  i.icon-home
+                  span Home
+              if pageData.parent
+                li
+                  a(href='/' + pageData.parent.path)
+                    i.icon-reply
+                    span= pageData.parent.title
+              if !isGuest
+                li
+                  a(href='/admin')
+                    i.icon-head
+                    span Account
+              else
+                li
+                  a(href='/login')
+                    i.icon-unlock
+                    span Login
+          aside.stickyscroll(data-margin-top=40)
+            .sidebar-label
+              i.icon-th-list
+              span Contents
+            ul.sidebar-menu
+              li: a(href='#root', title='Start') Start
+              +tocMenu(pageData.tree)
 
-				.column
+        .column
 
-					.hero
-						h1.title#title= pageData.meta.title
-						if pageData.meta.subtitle
-							h2.subtitle= pageData.meta.subtitle
-					.content.mkcontent
-						!= pageData.html
+          .hero
+            h1.title#title= pageData.meta.title
+            if pageData.meta.subtitle
+              h2.subtitle= pageData.meta.subtitle
+          .content.mkcontent
+            != pageData.html
 
-	include ../modals/create.pug
-	include ../modals/move.pug
+  include ../modals/create.pug
+  include ../modals/move.pug

+ 8 - 8
views/pages/welcome.pug

@@ -3,14 +3,14 @@ extends ../layout.pug
 block rootNavCenter
 
 block rootNavRight
-	i.nav-item#notifload
+  i.nav-item#notifload
 
 block content
 
-	#page-type-welcome
-		.container
-			.welcome
-				img(src='/favicons/android-icon-144x144.png',alt='Wiki.js')
-				h1 Welcome to your Wiki.js!
-				h2 Let's get started and create the home page.
-				a.button.is-indigo(href='/create/home') Create Home Page
+  #page-type-welcome
+    .container
+      .welcome
+        img(src='/favicons/android-icon-144x144.png', alt='Wiki.js')
+        h1 Welcome to your Wiki.js!
+        h2 Let's get started and create the home page.
+        a.button.is-indigo(href='/create/home') Create Home Page