diff --git a/public/dist/main.css b/public/dist/main.css index d3b7234..6b5c237 100644 --- a/public/dist/main.css +++ b/public/dist/main.css @@ -1 +1 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--color-text-main:#1d202b;--color-text-second:#7b7e89;--color-line-gray:#e8e8eb;--color-link-active:#388ae5;--color-gray-border:rgba(201,201,204,0.48);--layout-padding-horisontal:40px;--layout-padding-vertical:40px;--layout-width-aside:200px;--layout-width-main-col:650px}.docs{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 40px;padding:0 var(--layout-padding-horisontal)}.docs__aside{width:200px;width:var(--layout-width-aside)}.docs__content{-webkit-box-flex:2;-ms-flex-positive:2;flex-grow:2;word-wrap:break-word}.docs__content-inner{max-width:650px;max-width:var(--layout-width-main-col);margin:0 auto}.docs__aside,.docs__content{padding:40px 0;padding:var(--layout-padding-vertical) 0}.docs-header{font-size:15.8px;border-bottom:1px solid #e8e8eb;border-bottom:1px solid var(--color-line-gray);line-height:50px;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 40px;padding:0 var(--layout-padding-horisontal)}.docs-header a{text-decoration:none;display:inline-block}.docs-header__logo{font-weight:700;color:inherit}.docs-header__menu{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 0 0 auto}.docs-header__menu li{list-style:none;margin-left:20px}.docs-header__menu a:not(.docs-header__button){color:inherit}.docs-header__menu a:not(.docs-header__button):hover{color:#388ae5;color:var(--color-link-active)}.docs-header__button{display:inline-block;background:#388ae5;background:var(--color-link-active);color:#fff;border-radius:3px;padding:9px 15px;font-size:14px;line-height:1em;text-decoration:none}.docs-header__button svg{margin:0 .3em 0 -.05em}.docs-header__button:hover{background:#387ecc}.docs-header__button{margin:auto 30px auto auto}.docs-aside{font-size:15px;color:#7b7e89;color:var(--color-text-second)}.docs-aside a{text-decoration:none}.docs-aside__section{margin-bottom:30px}.docs-aside__section-title{margin-bottom:15px;color:#388ae5;color:var(--color-link-active)}.docs-aside__section-list{padding-left:0;list-style:none}.docs-aside__section-list a{display:inline-block;color:inherit;padding:8px 0}.writing-header{display:-webkit-box;display:-ms-flexbox;display:flex;padding:15px 0;margin-top:-40px;margin-top:calc(-1*var(--layout-padding-vertical));position:-webkit-sticky;position:sticky;top:0;background:#fff;z-index:2;-webkit-box-shadow:0 3px 10px #fff;box-shadow:0 3px 10px #fff}.writing-header__save{display:inline-block;background:#388ae5;background:var(--color-link-active);color:#fff;border-radius:3px;padding:9px 15px;font-size:14px;line-height:1em;text-decoration:none}.writing-header__save svg{margin:0 .3em 0 -.05em}.writing-header__save:hover{background:#387ecc}.writing-header__save{margin-left:auto}.writing-header__left{margin:auto 0;color:#7b7e89;color:var(--color-text-second)}.uri-input{border:1px solid rgba(201,201,204,.48);-webkit-box-shadow:inset 0 1px 2px 0 rgba(35,44,72,.06);box-shadow:inset 0 1px 2px 0 rgba(35,44,72,.06);border-radius:3px;padding:10px 12px;outline:none;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.page{font-size:16px;line-height:1.6}.page__header{display:-webkit-box;display:-ms-flexbox;display:flex;color:#7b7e89;color:var(--color-text-second)}.page__header-nav{color:inherit;text-decoration:none}.page__header-nav:hover{color:#388ae5;color:var(--color-link-active)}.page__header-nav:not(:last-of-type):after{content:"\BB";margin:0 .7em 0 .45em}.page__header-time{margin-left:auto}.page__header-button{display:inline-block;background:#388ae5;background:var(--color-link-active);color:#fff;border-radius:3px;padding:9px 15px;font-size:14px;line-height:1em;text-decoration:none}.page__header-button svg{margin:0 .3em 0 -.05em}.page__header-button:hover{background:#387ecc}.page__header-button{padding:5px 10px;font-size:13px;margin-left:10px}.page__title{font-size:26px;font-weight:700;letter-spacing:-.04px;margin-bottom:-.2em}.block-header{margin:1.5em 0 .5em}.block-header--2{font-size:22px;font-weight:500}.block-header--3{font-size:18px;font-weight:500}.block-code{padding:20px!important;font-size:13px;border-radius:3px;border:1px solid #e8e8eb;border:1px solid var(--color-line-gray);font-family:Menlo,Monaco,Consolas,Courier New,monospace;line-height:1.7em}.block-list li{margin:10px 0}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Helvetica,Arial,Verdana;color:#1d202b;color:var(--color-text-main);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}svg{fill:currentColor} +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--color-text-main:#1d202b;--color-text-second:#7b7e89;--color-line-gray:#e8e8eb;--color-link-active:#388ae5;--color-gray-border:rgba(var(--color-line-gray),0.48);--layout-padding-horisontal:40px;--layout-padding-vertical:40px;--layout-width-aside:200px;--layout-width-main-col:650px}.docs{display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 40px;padding:0 var(--layout-padding-horisontal)}.docs__aside{width:200px;width:var(--layout-width-aside)}.docs__content{-webkit-box-flex:2;-ms-flex-positive:2;flex-grow:2;word-wrap:break-word}.docs__content-inner{max-width:650px;max-width:var(--layout-width-main-col);margin:0 auto}.docs__aside,.docs__content{padding:40px 0;padding:var(--layout-padding-vertical) 0}.docs-header{font-size:15.8px;border-bottom:1px solid #e8e8eb;border-bottom:1px solid var(--color-line-gray);line-height:50px;display:-webkit-box;display:-ms-flexbox;display:flex;padding:0 40px;padding:0 var(--layout-padding-horisontal)}.docs-header a{text-decoration:none;display:inline-block}.docs-header__logo{font-weight:700;color:inherit}.docs-header__menu{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 0 0 auto}.docs-header__menu li{list-style:none;margin-left:20px}.docs-header__menu a:not(.docs-header__button){color:inherit}.docs-header__menu a:not(.docs-header__button):hover{color:#388ae5;color:var(--color-link-active)}.docs-header__button{display:inline-block;background:#388ae5;background:var(--color-link-active);color:#fff;border-radius:3px;padding:9px 15px;font-size:14px;line-height:1em;text-decoration:none}.docs-header__button svg{margin:0 .3em 0 -.05em}.docs-header__button:hover{background:#387ecc}.docs-header__button{margin:auto 30px auto auto}.docs-aside{font-size:15px;color:#7b7e89;color:var(--color-text-second)}.docs-aside a{text-decoration:none}.docs-aside__section{margin-bottom:30px}.docs-aside__section-title{margin-bottom:15px;color:#388ae5;color:var(--color-link-active)}.docs-aside__section-list{padding-left:0;list-style:none}.docs-aside__section-list a{display:inline-block;color:inherit;padding:8px 0}.writing-header{display:-webkit-box;display:-ms-flexbox;display:flex;padding:15px 0;margin-top:-40px;margin-top:calc(-1*var(--layout-padding-vertical));position:-webkit-sticky;position:sticky;top:0;background:#fff;z-index:2;-webkit-box-shadow:0 3px 10px #fff;box-shadow:0 3px 10px #fff}.writing-header__save{display:inline-block;background:#388ae5;background:var(--color-link-active);color:#fff;border-radius:3px;padding:9px 15px;font-size:14px;line-height:1em;text-decoration:none}.writing-header__save svg{margin:0 .3em 0 -.05em}.writing-header__save:hover{background:#387ecc}.writing-header__save{margin-left:auto}.writing-header__left{margin:auto 0;color:#7b7e89;color:var(--color-text-second)}.uri-input{border:1px solid rgba(201,201,204,.48);-webkit-box-shadow:inset 0 1px 2px 0 rgba(35,44,72,.06);box-shadow:inset 0 1px 2px 0 rgba(35,44,72,.06);border-radius:3px;padding:10px 12px;outline:none;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.page{font-size:16px;line-height:1.6}.page__header{display:-webkit-box;display:-ms-flexbox;display:flex;color:#7b7e89;color:var(--color-text-second)}.page__header-nav{color:inherit;text-decoration:none}.page__header-nav:hover{color:#388ae5;color:var(--color-link-active)}.page__header-nav:not(:last-of-type):after{content:"\BB";margin:0 .7em 0 .45em}.page__header-time{margin-left:auto}.page__header-button{display:inline-block;background:#388ae5;background:var(--color-link-active);color:#fff;border-radius:3px;padding:9px 15px;font-size:14px;line-height:1em;text-decoration:none}.page__header-button svg{margin:0 .3em 0 -.05em}.page__header-button:hover{background:#387ecc}.page__header-button{padding:5px 10px;font-size:13px;margin-left:10px}.page__title{font-size:26px;font-weight:700;letter-spacing:-.04px;margin-bottom:-.2em}.block-header{margin:1.5em 0 .5em}.block-header--2{font-size:22px;font-weight:500}.block-header--3{font-size:18px;font-weight:500}.block-code{padding:20px!important;font-size:13px;border-radius:3px;border:1px solid #e8e8eb;border:1px solid var(--color-line-gray);font-family:Menlo,Monaco,Consolas,Courier New,monospace;line-height:1.7em}.block-list li{margin:10px 0}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Helvetica,Arial,Verdana;color:#1d202b;color:var(--color-text-main);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}svg{fill:currentColor} diff --git a/src/controllers/pages.js b/src/controllers/pages.js index 39a21f0..11311b9 100644 --- a/src/controllers/pages.js +++ b/src/controllers/pages.js @@ -1,7 +1,6 @@ const Model = require('../models/page'); const Alias = require('../models/alias'); const aliasTypes = require('../constants/aliasTypes'); -const md5 = require('../utils/md5'); /** * @class Pages @@ -60,9 +59,8 @@ class Pages { const alias = new Alias({ id: updatedPage._id, - type: aliasTypes.PAGE, - hash: md5(updatedPage.uri) - }); + type: aliasTypes.PAGE + }, updatedPage.uri); alias.save(); @@ -129,9 +127,8 @@ class Pages { const alias = new Alias({ id: updatedPage._id, - type: aliasTypes.PAGE, - hash: md5(updatedPage.uri) - }); + type: aliasTypes.PAGE + }, updatedPage.uri); alias.save(); } diff --git a/src/frontend/styles/vars.pcss b/src/frontend/styles/vars.pcss index 9fd27f0..f3fbbe9 100644 --- a/src/frontend/styles/vars.pcss +++ b/src/frontend/styles/vars.pcss @@ -3,7 +3,7 @@ --color-text-second: #7B7E89; --color-line-gray: #E8E8EB; --color-link-active: #388AE5; - --color-gray-border: rgba(201, 201, 204, 0.48); + --color-gray-border: rgba(var(--color-line-gray), 0.48); /** * Site layout sizes diff --git a/src/models/alias.js b/src/models/alias.js index 4eb669a..b629ac7 100644 --- a/src/models/alias.js +++ b/src/models/alias.js @@ -39,14 +39,18 @@ class Alias { * @constructor * * @param {AliasData} data + * @param {string} aliasName - alias of entity */ - constructor(data = {}) { + constructor(data = {}, aliasName) { if (data === null) { data = {}; } if (data._id) { this._id = data._id; } + if (aliasName) { + this.hash = md5(aliasName); + } this.data = data; } diff --git a/src/models/page.js b/src/models/page.js index 23ce92f..b186b99 100644 --- a/src/models/page.js +++ b/src/models/page.js @@ -84,7 +84,13 @@ class Page { this.body = body || this.body; this.title = this.extractTitleFromBody(); - this.uri = uri || translateString(this.title.toLowerCase()).split(' ').join('-'); + this.uri = uri || translateString(this.title + .replace(/ /g, ' ') + .replace(/-/g, ' ') + .trim() + .toLowerCase() + .split(' ') + .join('-')); this._parent = parent || this._parent; }