瀏覽代碼

Merge pull request #172 from Requarks/dev

1.0.1 Release
Nicolas Giard 8 年之前
父節點
當前提交
5f0a1d5797
共有 10 個文件被更改,包括 341 次插入221 次删除
  1. 10 1
      CHANGELOG.md
  2. 5 1
      README.md
  3. 6 3
      client/js/components/search.vue
  4. 45 2
      fuse.js
  5. 16 1
      npm/install.js
  6. 1 1
      npm/package-lock.json
  7. 1 1
      npm/package.json
  8. 14 13
      package.json
  9. 7 1
      tsconfig.json
  10. 236 197
      yarn.lock

+ 10 - 1
CHANGELOG.md

@@ -2,11 +2,20 @@
 All notable changes to this project will be documented in this file.
 All notable changes to this project will be documented in this file.
 This project adheres to [Semantic Versioning](http://semver.org/).
 This project adheres to [Semantic Versioning](http://semver.org/).
 
 
-## [v1.0.0-beta.14] - Unreleased
+## [v1.0.1] - Unreleased
 ### Added
 ### Added
 - **History**: History section to list all changes
 - **History**: History section to list all changes
 - **Security**: Optional Two-Factor Authentication (2FA) protection
 - **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
 ## [v1.0.0-beta.13] - 2017-07-09
 ### Added
 ### Added
 - **Admin**: Added Host Information section to System Info page
 - **Admin**: Added Host Information section to System Info page

+ 5 - 1
README.md

@@ -58,7 +58,11 @@ Current and upcoming milestones *(major features only, see the [changelog](https
 - [x] Render line breaks by default (GitHub style)
 - [x] Render line breaks by default (GitHub style)
 - [x] New Localization: German
 - [x] New Localization: German
 
 
-### Beta 14
+### 1.0.0
+
+- [x] Bug fixes release
+
+### 1.1.0
 > *Planned for August release*  
 > *Planned for August release*  
 ![Progress](http://progressed.io/bar/20)
 ![Progress](http://progressed.io/bar/20)
 
 

+ 6 - 3
client/js/components/search.vue

@@ -10,7 +10,7 @@
           li(v-if='searchres.length === 0')
           li(v-if='searchres.length === 0')
             a: em {{ $t('search.nomatch') }}
             a: em {{ $t('search.nomatch') }}
           li(v-for='sres in searchres', v-bind:class='{ "is-active": searchmovekey === "res." + sres.entryPath }')
           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') }}
         p.searchresults-label(v-if='searchsuggest.length > 0') {{ $t('search.didyoumean') }}
         ul.searchresults-list(v-if='searchsuggest.length > 0')
         ul.searchresults-list(v-if='searchsuggest.length > 0')
           li(v-for='sug in searchsuggest', v-bind:class='{ "is-active": searchmovekey === "sug." + sug }')
           li(v-for='sug in searchsuggest', v-bind:class='{ "is-active": searchmovekey === "sug." + sug }')
@@ -39,7 +39,10 @@ export default {
         self.searchactive = true
         self.searchactive = true
         self.searchload++
         self.searchload++
         socket.emit('search', { terms: val }, (data) => {
         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.searchsuggest = data.suggest
           self.searchmovearr = self._.concat([], self.searchres, self.searchsuggest)
           self.searchmovearr = self._.concat([], self.searchres, self.searchsuggest)
           if (self.searchload > 0) { self.searchload-- }
           if (self.searchload > 0) { self.searchload-- }
@@ -74,7 +77,7 @@ export default {
       let i = this.searchmoveidx - 1
       let i = this.searchmoveidx - 1
 
 
       if (this.searchmovearr[i]) {
       if (this.searchmovearr[i]) {
-        window.location.assign(siteRoot + '/' + this.searchmovearr[i].entryPath)
+        window.location.assign(this.searchmovearr[i].entryPath)
       } else {
       } else {
         this.searchq = this.searchmovearr[i]
         this.searchq = this.searchmovearr[i]
       }
       }

+ 45 - 2
fuse.js

@@ -9,6 +9,9 @@
 const colors = require('colors/safe')
 const colors = require('colors/safe')
 const fsbx = require('fuse-box')
 const fsbx = require('fuse-box')
 const nodemon = require('nodemon')
 const nodemon = require('nodemon')
+const babel = require('babel-core')
+const uglify = require('uglify-es')
+const fs = require('fs-extra')
 
 
 // ======================================================
 // ======================================================
 // Parse cmd arguments
 // Parse cmd arguments
@@ -90,7 +93,7 @@ globalTasks.then(() => {
       fsbx.VuePlugin(),
       fsbx.VuePlugin(),
       ['.scss', fsbx.SassPlugin({ outputStyle: (dev) ? 'nested' : 'compressed' }), fsbx.CSSPlugin()],
       ['.scss', fsbx.SassPlugin({ outputStyle: (dev) ? 'nested' : 'compressed' }), fsbx.CSSPlugin()],
       fsbx.BabelPlugin({ comments: false, presets: ['es2015'] }),
       fsbx.BabelPlugin({ comments: false, presets: ['es2015'] }),
-      fsbx.JSONPlugin(),
+      fsbx.JSONPlugin()
       /* !dev && fsbx.QuantumPlugin({
       /* !dev && fsbx.QuantumPlugin({
         target: 'browser',
         target: 'browser',
         uglify: true,
         uglify: true,
@@ -109,7 +112,7 @@ globalTasks.then(() => {
           })
           })
         }
         }
       }) */
       }) */
-      !dev && fsbx.UglifyESPlugin()
+      // !dev && fsbx.UglifyESPlugin()
     ],
     ],
     debug: false,
     debug: false,
     log: true
     log: true
@@ -140,6 +143,46 @@ globalTasks.then(() => {
         watch: (args.d) ? ['server'] : ['server/configure.js'],
         watch: (args.d) ? ['server'] : ['server/configure.js'],
         env: { 'NODE_ENV': 'development' }
         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 => {
   }).catch(err => {
     console.error(colors.red(' X Bundle compilation failed! ' + err.message))
     console.error(colors.red(' X Bundle compilation failed! ' + err.message))

+ 16 - 1
npm/install.js

@@ -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
    * Install npm dependencies
    */
    */
   installDependencies() {
   installDependencies() {
     ora.text = 'Installing Wiki.js npm dependencies...'
     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
       cwd: installDir
     }).then(results => {
     }).then(results => {
       ora.text = 'Wiki.js npm dependencies installed successfully.'
       ora.text = 'Wiki.js npm dependencies installed successfully.'
@@ -247,6 +259,9 @@ Promise.join(
 }).then(() => {
 }).then(() => {
   isContainerBased && console.info('>> Creating config file...')
   isContainerBased && console.info('>> Creating config file...')
   return tasks.ensureConfigFile()
   return tasks.ensureConfigFile()
+}).then(() => {
+  isContainerBased && console.info('>> Installing Yarn...')
+  return tasks.installYarn()
 }).then(() => {
 }).then(() => {
   isContainerBased && console.info('>> Installing dependencies...')
   isContainerBased && console.info('>> Installing dependencies...')
   return tasks.installDependencies()
   return tasks.installDependencies()

+ 1 - 1
npm/package-lock.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wiki.js",
   "name": "wiki.js",
-  "version": "1.0.0-beta.13.1",
+  "version": "1.0.1",
   "lockfileVersion": 1,
   "lockfileVersion": 1,
   "dependencies": {
   "dependencies": {
     "amp": {
     "amp": {

+ 1 - 1
npm/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "wiki.js",
   "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",
   "description": "A modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown",
   "main": "install.js",
   "main": "install.js",
   "scripts": {
   "scripts": {

+ 14 - 13
package.json

@@ -1,8 +1,8 @@
 {
 {
   "name": "wiki",
   "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",
   "description": "A modern, lightweight and powerful wiki app built on NodeJS, Git and Markdown",
-  "main": "server.js",
+  "main": "wiki.js",
   "scripts": {
   "scripts": {
     "start": "node wiki start",
     "start": "node wiki start",
     "stop": "node wiki stop",
     "stop": "node wiki stop",
@@ -37,7 +37,7 @@
     "node": ">=4.6"
     "node": ">=4.6"
   },
   },
   "dependencies": {
   "dependencies": {
-    "auto-load": "~2.1.0",
+    "auto-load": "~3.0.0",
     "axios": "~0.16.2",
     "axios": "~0.16.2",
     "bcryptjs-then": "~1.0.1",
     "bcryptjs-then": "~1.0.1",
     "bluebird": "~3.5.0",
     "bluebird": "~3.5.0",
@@ -46,7 +46,7 @@
     "cheerio": "~1.0.0-rc.2",
     "cheerio": "~1.0.0-rc.2",
     "child-process-promise": "~2.2.1",
     "child-process-promise": "~2.2.1",
     "chokidar": "~1.7.0",
     "chokidar": "~1.7.0",
-    "compression": "~1.6.2",
+    "compression": "~1.7.0",
     "connect-flash": "~0.1.1",
     "connect-flash": "~0.1.1",
     "connect-mongo": "~1.3.2",
     "connect-mongo": "~1.3.2",
     "cookie-parser": "~1.4.3",
     "cookie-parser": "~1.4.3",
@@ -60,7 +60,7 @@
     "file-type": "~5.2.0",
     "file-type": "~5.2.0",
     "filesize.js": "~1.0.2",
     "filesize.js": "~1.0.2",
     "follow-redirects": "~1.2.4",
     "follow-redirects": "~1.2.4",
-    "fs-extra": "~3.0.1",
+    "fs-extra": "~4.0.0",
     "git-wrapper2-promise": "~0.2.9",
     "git-wrapper2-promise": "~0.2.9",
     "highlight.js": "~9.12.0",
     "highlight.js": "~9.12.0",
     "i18next": "~8.4.3",
     "i18next": "~8.4.3",
@@ -89,7 +89,7 @@
     "moment": "~2.18.1",
     "moment": "~2.18.1",
     "moment-timezone": "~0.5.13",
     "moment-timezone": "~0.5.13",
     "mongodb": "~2.2.30",
     "mongodb": "~2.2.30",
-    "mongoose": "^4.11.1",
+    "mongoose": "~4.11.1",
     "multer": "~1.3.0",
     "multer": "~1.3.0",
     "node-2fa": "~1.1.2",
     "node-2fa": "~1.1.2",
     "node-graceful": "~0.2.3",
     "node-graceful": "~0.2.3",
@@ -104,13 +104,13 @@
     "passport-slack": "0.0.7",
     "passport-slack": "0.0.7",
     "passport-windowslive": "~1.0.2",
     "passport-windowslive": "~1.0.2",
     "passport.socketio": "~3.7.0",
     "passport.socketio": "~3.7.0",
-    "pm2": "~2.5.0",
+    "pm2": "~2.6.1",
     "pug": "~2.0.0-rc.2",
     "pug": "~2.0.0-rc.2",
     "read-chunk": "~2.0.0",
     "read-chunk": "~2.0.0",
     "remove-markdown": "~0.2.0",
     "remove-markdown": "~0.2.0",
     "request": "~2.81.0",
     "request": "~2.81.0",
     "search-index-adder": "~0.3.9",
     "search-index-adder": "~0.3.9",
-    "search-index-searcher": "~0.2.8",
+    "search-index-searcher": "~0.2.10",
     "semver": "~5.3.0",
     "semver": "~5.3.0",
     "serve-favicon": "~2.4.3",
     "serve-favicon": "~2.4.3",
     "simplemde": "~1.11.2",
     "simplemde": "~1.11.2",
@@ -125,21 +125,22 @@
     "yargs": "~8.0.1"
     "yargs": "~8.0.1"
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "@glimpse/glimpse": "~0.21.5",
+    "@glimpse/glimpse": "~0.22.13",
     "@panter/vue-i18next": "~0.5.0",
     "@panter/vue-i18next": "~0.5.0",
     "babel-cli": "~6.24.1",
     "babel-cli": "~6.24.1",
     "babel-jest": "~20.0.3",
     "babel-jest": "~20.0.3",
+    "babel-plugin-transform-object-assign": "~6.22.0",
     "babel-preset-es2015": "~6.24.1",
     "babel-preset-es2015": "~6.24.1",
     "brace": "~0.10.0",
     "brace": "~0.10.0",
     "colors": "~1.1.2",
     "colors": "~1.1.2",
     "consolidate": "~0.14.5",
     "consolidate": "~0.14.5",
-    "eslint": "~4.1.1",
+    "eslint": "~4.3.0",
     "eslint-config-standard": "~10.2.1",
     "eslint-config-standard": "~10.2.1",
     "eslint-plugin-import": "~2.7.0",
     "eslint-plugin-import": "~2.7.0",
     "eslint-plugin-node": "~5.1.0",
     "eslint-plugin-node": "~5.1.0",
     "eslint-plugin-promise": "~3.5.0",
     "eslint-plugin-promise": "~3.5.0",
     "eslint-plugin-standard": "~3.0.1",
     "eslint-plugin-standard": "~3.0.1",
-    "fuse-box": "~2.2.0",
+    "fuse-box": "~2.2.1",
     "i18next-xhr-backend": "~1.4.2",
     "i18next-xhr-backend": "~1.4.2",
     "jest": "~20.0.4",
     "jest": "~20.0.4",
     "jquery": "~3.2.1",
     "jquery": "~3.2.1",
@@ -156,11 +157,11 @@
     "typescript": "~2.4.1",
     "typescript": "~2.4.1",
     "uglify-es": "~3.0.24",
     "uglify-es": "~3.0.24",
     "vee-validate": "~2.0.0-rc.6",
     "vee-validate": "~2.0.0-rc.6",
-    "vue": "~2.3.4",
+    "vue": "~2.4.2",
     "vue-clipboards": "~1.0.2",
     "vue-clipboards": "~1.0.2",
     "vue-lodash": "~1.0.3",
     "vue-lodash": "~1.0.3",
     "vue-resource": "~1.3.4",
     "vue-resource": "~1.3.4",
-    "vue-template-compiler": "~2.3.4",
+    "vue-template-compiler": "~2.4.2",
     "vue-template-es2015-compiler": "~1.5.3",
     "vue-template-es2015-compiler": "~1.5.3",
     "vuex": "~2.3.1"
     "vuex": "~2.3.1"
   },
   },

+ 7 - 1
tsconfig.json

@@ -11,5 +11,11 @@
     "strictNullChecks": true,
     "strictNullChecks": true,
     "suppressImplicitAnyIndexErrors": true,
     "suppressImplicitAnyIndexErrors": true,
     "target": "es5"
     "target": "es5"
-  }
+  },
+  "exclude": [
+    ".fusebox",
+    "data",
+    "node_modules",
+    "repo"
+  ]
 }
 }

File diff suppressed because it is too large
+ 236 - 197
yarn.lock


Some files were not shown because too many files changed in this diff