Fixed pug linting issues
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 = []; | ||||
|   | ||||
| @@ -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') | ||||
|   | ||||
| @@ -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 }} | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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} | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -30,4 +30,4 @@ | ||||
| 			.column | ||||
| 				label.label Link | ||||
| 				p.control | ||||
| 					input.input(type='text', placeholder='http://') | ||||
| 					input.input(type='text', placeholder='http://') | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   #page-type-account | ||||
|     .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 | ||||
|           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 | ||||
|           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 | ||||
|         .column | ||||
|           block adminContent | ||||
|   | ||||
| @@ -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}"; | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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)}; | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user