11
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -2,11 +2,20 @@ | ||||
| All notable changes to this project will be documented in this file. | ||||
| This project adheres to [Semantic Versioning](http://semver.org/). | ||||
|  | ||||
| ## [v1.0.0-beta.14] - Unreleased | ||||
| ## [v1.0.1] - Unreleased | ||||
| ### Added | ||||
| - **History**: History section to list all changes | ||||
| - **Security**: Optional Two-Factor Authentication (2FA) protection | ||||
|  | ||||
| ## [v1.0.0] - Unreleased | ||||
| ### Changed | ||||
| - **Misc**: Switch to Yarn for npm dependencies installation | ||||
|  | ||||
| ### Fixed | ||||
| - **Misc**: JS/CSS is now loading properly in Safari (macOS/iOS) | ||||
| - **Misc**: Process termination handling | ||||
| - **Search**: siteRoot is now properly parsed in search results href | ||||
|  | ||||
| ## [v1.0.0-beta.13] - 2017-07-09 | ||||
| ### Added | ||||
| - **Admin**: Added Host Information section to System Info page | ||||
|   | ||||
| @@ -58,7 +58,11 @@ Current and upcoming milestones *(major features only, see the [changelog](https | ||||
| - [x] Render line breaks by default (GitHub style) | ||||
| - [x] New Localization: German | ||||
|  | ||||
| ### Beta 14 | ||||
| ### 1.0.0 | ||||
|  | ||||
| - [x] Bug fixes release | ||||
|  | ||||
| ### 1.1.0 | ||||
| > *Planned for August release*   | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -10,7 +10,7 @@ | ||||
|           li(v-if='searchres.length === 0') | ||||
|             a: em {{ $t('search.nomatch') }} | ||||
|           li(v-for='sres in searchres', v-bind:class='{ "is-active": searchmovekey === "res." + sres.entryPath }') | ||||
|             a(v-bind:href='siteRoot + "/" + sres.entryPath') {{ sres.title }} | ||||
|             a(v-bind:href='sres.entryPath') {{ sres.title }} | ||||
|         p.searchresults-label(v-if='searchsuggest.length > 0') {{ $t('search.didyoumean') }} | ||||
|         ul.searchresults-list(v-if='searchsuggest.length > 0') | ||||
|           li(v-for='sug in searchsuggest', v-bind:class='{ "is-active": searchmovekey === "sug." + sug }') | ||||
| @@ -39,7 +39,10 @@ export default { | ||||
|         self.searchactive = true | ||||
|         self.searchload++ | ||||
|         socket.emit('search', { terms: val }, (data) => { | ||||
|           self.searchres = data.match | ||||
|           self.searchres = self._.map(data.match, m => { | ||||
|             m.entryPath = `${siteRoot}/${m.entryPath}` | ||||
|             return m | ||||
|           }) | ||||
|           self.searchsuggest = data.suggest | ||||
|           self.searchmovearr = self._.concat([], self.searchres, self.searchsuggest) | ||||
|           if (self.searchload > 0) { self.searchload-- } | ||||
| @@ -74,7 +77,7 @@ export default { | ||||
|       let i = this.searchmoveidx - 1 | ||||
|  | ||||
|       if (this.searchmovearr[i]) { | ||||
|         window.location.assign(siteRoot + '/' + this.searchmovearr[i].entryPath) | ||||
|         window.location.assign(this.searchmovearr[i].entryPath) | ||||
|       } else { | ||||
|         this.searchq = this.searchmovearr[i] | ||||
|       } | ||||
|   | ||||
							
								
								
									
										47
									
								
								fuse.js
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								fuse.js
									
									
									
									
									
								
							| @@ -9,6 +9,9 @@ | ||||
| const colors = require('colors/safe') | ||||
| const fsbx = require('fuse-box') | ||||
| const nodemon = require('nodemon') | ||||
| const babel = require('babel-core') | ||||
| const uglify = require('uglify-es') | ||||
| const fs = require('fs-extra') | ||||
|  | ||||
| // ====================================================== | ||||
| // Parse cmd arguments | ||||
| @@ -90,7 +93,7 @@ globalTasks.then(() => { | ||||
|       fsbx.VuePlugin(), | ||||
|       ['.scss', fsbx.SassPlugin({ outputStyle: (dev) ? 'nested' : 'compressed' }), fsbx.CSSPlugin()], | ||||
|       fsbx.BabelPlugin({ comments: false, presets: ['es2015'] }), | ||||
|       fsbx.JSONPlugin(), | ||||
|       fsbx.JSONPlugin() | ||||
|       /* !dev && fsbx.QuantumPlugin({ | ||||
|         target: 'browser', | ||||
|         uglify: true, | ||||
| @@ -109,7 +112,7 @@ globalTasks.then(() => { | ||||
|           }) | ||||
|         } | ||||
|       }) */ | ||||
|       !dev && fsbx.UglifyESPlugin() | ||||
|       // !dev && fsbx.UglifyESPlugin() | ||||
|     ], | ||||
|     debug: false, | ||||
|     log: true | ||||
| @@ -140,6 +143,46 @@ globalTasks.then(() => { | ||||
|         watch: (args.d) ? ['server'] : ['server/configure.js'], | ||||
|         env: { 'NODE_ENV': 'development' } | ||||
|       }) | ||||
|     } else { | ||||
|       console.info(colors.yellow.bold('\nTranspiling vendor bundle...')) | ||||
|       let appCode = babel.transform(fs.readFileSync('./assets/js/app.js', 'utf8'), { | ||||
|         babelrc: false, | ||||
|         compact: false, | ||||
|         filename: 'app.js', | ||||
|         plugins: ['transform-object-assign'] | ||||
|       }).code | ||||
|       let vendorCode = babel.transform(fs.readFileSync('./assets/js/vendor.js', 'utf8'), { | ||||
|         babelrc: false, | ||||
|         comments: false, | ||||
|         compact: false, | ||||
|         filename: 'vendor.js', | ||||
|         plugins: [ | ||||
|           'transform-es2015-arrow-functions', | ||||
|           'transform-es2015-block-scoped-functions', | ||||
|           'transform-es2015-block-scoping', | ||||
|           'transform-es2015-classes', | ||||
|           'transform-es2015-computed-properties', | ||||
|           'transform-es2015-destructuring', | ||||
|           'transform-es2015-duplicate-keys', | ||||
|           'transform-es2015-for-of', | ||||
|           'transform-es2015-function-name', | ||||
|           'transform-es2015-literals', | ||||
|           'transform-es2015-object-super', | ||||
|           'transform-es2015-parameters', | ||||
|           'transform-es2015-shorthand-properties', | ||||
|           'transform-es2015-spread', | ||||
|           'transform-es2015-sticky-regex', | ||||
|           'transform-es2015-template-literals', | ||||
|           'transform-es2015-typeof-symbol', | ||||
|           'transform-es2015-unicode-regex' | ||||
|         ] | ||||
|       }).code | ||||
|       console.info(colors.yellow.bold('Minifing bundles...')) | ||||
|       fs.writeFileSync('./assets/js/vendor.js', uglify.minify(vendorCode).code, 'utf8') | ||||
|       fs.writeFileSync('./assets/js/app.js', uglify.minify(appCode).code, 'utf8') | ||||
|       fs.writeFileSync('./assets/js/configure.js', uglify.minify(fs.readFileSync('./assets/js/configure.js', 'utf8')).code, 'utf8') | ||||
|       console.info(colors.green.bold('\nBUILD SUCCEEDED.')) | ||||
|       return true | ||||
|     } | ||||
|   }).catch(err => { | ||||
|     console.error(colors.red(' X Bundle compilation failed! ' + err.message)) | ||||
|   | ||||
| @@ -138,12 +138,24 @@ const tasks = { | ||||
|       } | ||||
|     }) | ||||
|   }, | ||||
|   /** | ||||
|    * Install Yarn | ||||
|    */ | ||||
|   installYarn() { | ||||
|     ora.text = 'Installing Yarn...' | ||||
|     return exec.stdout('npm', ['install', '-g', 'yarn'], { | ||||
|       cwd: installDir | ||||
|     }).then(results => { | ||||
|       ora.text = 'Yarn installed successfully.' | ||||
|       return true | ||||
|     }) | ||||
|   }, | ||||
|   /** | ||||
|    * Install npm dependencies | ||||
|    */ | ||||
|   installDependencies() { | ||||
|     ora.text = 'Installing Wiki.js npm dependencies...' | ||||
|     return exec.stdout('npm', ['install', '--only=production', '--no-optional'], { | ||||
|     return exec.stdout('yarn', ['install', '--production', '--ignore-optional'], { | ||||
|       cwd: installDir | ||||
|     }).then(results => { | ||||
|       ora.text = 'Wiki.js npm dependencies installed successfully.' | ||||
| @@ -247,6 +259,9 @@ Promise.join( | ||||
| }).then(() => { | ||||
|   isContainerBased && console.info('>> Creating config file...') | ||||
|   return tasks.ensureConfigFile() | ||||
| }).then(() => { | ||||
|   isContainerBased && console.info('>> Installing Yarn...') | ||||
|   return tasks.installYarn() | ||||
| }).then(() => { | ||||
|   isContainerBased && console.info('>> Installing dependencies...') | ||||
|   return tasks.installDependencies() | ||||
|   | ||||
							
								
								
									
										2
									
								
								npm/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								npm/package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "wiki.js", | ||||
|   "version": "1.0.0-beta.13.1", | ||||
|   "version": "1.0.1", | ||||
|   "lockfileVersion": 1, | ||||
|   "dependencies": { | ||||
|     "amp": { | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "wiki.js", | ||||
|   "version": "1.0.0-beta.13.2", | ||||
|   "version": "1.0.1", | ||||
|   "description": "A modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown", | ||||
|   "main": "install.js", | ||||
|   "scripts": { | ||||
|   | ||||
							
								
								
									
										27
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,8 +1,8 @@ | ||||
| { | ||||
|   "name": "wiki", | ||||
|   "version": "1.0.0-beta.13", | ||||
|   "version": "1.0.1", | ||||
|   "description": "A modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown", | ||||
|   "main": "server.js", | ||||
|   "main": "wiki.js", | ||||
|   "scripts": { | ||||
|     "start": "node wiki start", | ||||
|     "stop": "node wiki stop", | ||||
| @@ -37,7 +37,7 @@ | ||||
|     "node": ">=4.6" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "auto-load": "~2.1.0", | ||||
|     "auto-load": "~3.0.0", | ||||
|     "axios": "~0.16.2", | ||||
|     "bcryptjs-then": "~1.0.1", | ||||
|     "bluebird": "~3.5.0", | ||||
| @@ -46,7 +46,7 @@ | ||||
|     "cheerio": "~1.0.0-rc.2", | ||||
|     "child-process-promise": "~2.2.1", | ||||
|     "chokidar": "~1.7.0", | ||||
|     "compression": "~1.6.2", | ||||
|     "compression": "~1.7.0", | ||||
|     "connect-flash": "~0.1.1", | ||||
|     "connect-mongo": "~1.3.2", | ||||
|     "cookie-parser": "~1.4.3", | ||||
| @@ -60,7 +60,7 @@ | ||||
|     "file-type": "~5.2.0", | ||||
|     "filesize.js": "~1.0.2", | ||||
|     "follow-redirects": "~1.2.4", | ||||
|     "fs-extra": "~3.0.1", | ||||
|     "fs-extra": "~4.0.0", | ||||
|     "git-wrapper2-promise": "~0.2.9", | ||||
|     "highlight.js": "~9.12.0", | ||||
|     "i18next": "~8.4.3", | ||||
| @@ -89,7 +89,7 @@ | ||||
|     "moment": "~2.18.1", | ||||
|     "moment-timezone": "~0.5.13", | ||||
|     "mongodb": "~2.2.30", | ||||
|     "mongoose": "^4.11.1", | ||||
|     "mongoose": "~4.11.1", | ||||
|     "multer": "~1.3.0", | ||||
|     "node-2fa": "~1.1.2", | ||||
|     "node-graceful": "~0.2.3", | ||||
| @@ -104,13 +104,13 @@ | ||||
|     "passport-slack": "0.0.7", | ||||
|     "passport-windowslive": "~1.0.2", | ||||
|     "passport.socketio": "~3.7.0", | ||||
|     "pm2": "~2.5.0", | ||||
|     "pm2": "~2.6.1", | ||||
|     "pug": "~2.0.0-rc.2", | ||||
|     "read-chunk": "~2.0.0", | ||||
|     "remove-markdown": "~0.2.0", | ||||
|     "request": "~2.81.0", | ||||
|     "search-index-adder": "~0.3.9", | ||||
|     "search-index-searcher": "~0.2.8", | ||||
|     "search-index-searcher": "~0.2.10", | ||||
|     "semver": "~5.3.0", | ||||
|     "serve-favicon": "~2.4.3", | ||||
|     "simplemde": "~1.11.2", | ||||
| @@ -125,21 +125,22 @@ | ||||
|     "yargs": "~8.0.1" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@glimpse/glimpse": "~0.21.5", | ||||
|     "@glimpse/glimpse": "~0.22.13", | ||||
|     "@panter/vue-i18next": "~0.5.0", | ||||
|     "babel-cli": "~6.24.1", | ||||
|     "babel-jest": "~20.0.3", | ||||
|     "babel-plugin-transform-object-assign": "~6.22.0", | ||||
|     "babel-preset-es2015": "~6.24.1", | ||||
|     "brace": "~0.10.0", | ||||
|     "colors": "~1.1.2", | ||||
|     "consolidate": "~0.14.5", | ||||
|     "eslint": "~4.1.1", | ||||
|     "eslint": "~4.3.0", | ||||
|     "eslint-config-standard": "~10.2.1", | ||||
|     "eslint-plugin-import": "~2.7.0", | ||||
|     "eslint-plugin-node": "~5.1.0", | ||||
|     "eslint-plugin-promise": "~3.5.0", | ||||
|     "eslint-plugin-standard": "~3.0.1", | ||||
|     "fuse-box": "~2.2.0", | ||||
|     "fuse-box": "~2.2.1", | ||||
|     "i18next-xhr-backend": "~1.4.2", | ||||
|     "jest": "~20.0.4", | ||||
|     "jquery": "~3.2.1", | ||||
| @@ -156,11 +157,11 @@ | ||||
|     "typescript": "~2.4.1", | ||||
|     "uglify-es": "~3.0.24", | ||||
|     "vee-validate": "~2.0.0-rc.6", | ||||
|     "vue": "~2.3.4", | ||||
|     "vue": "~2.4.2", | ||||
|     "vue-clipboards": "~1.0.2", | ||||
|     "vue-lodash": "~1.0.3", | ||||
|     "vue-resource": "~1.3.4", | ||||
|     "vue-template-compiler": "~2.3.4", | ||||
|     "vue-template-compiler": "~2.4.2", | ||||
|     "vue-template-es2015-compiler": "~1.5.3", | ||||
|     "vuex": "~2.3.1" | ||||
|   }, | ||||
|   | ||||
| @@ -11,5 +11,11 @@ | ||||
|     "strictNullChecks": true, | ||||
|     "suppressImplicitAnyIndexErrors": true, | ||||
|     "target": "es5" | ||||
|   } | ||||
|   }, | ||||
|   "exclude": [ | ||||
|     ".fusebox", | ||||
|     "data", | ||||
|     "node_modules", | ||||
|     "repo" | ||||
|   ] | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user