# CHANGES

## v4.0.0-RC

* Support: Upgrade libs
    * bootstrap

## v3.7.6

*

## v3.7.5

* Fix: Draw.io diagrams rendered twice
* Fix: Behavior of password reset modal is strange
* Fix: Import GROWI Archive doesn't restore some data correctly
* Fix: Attachments list on root page and users top pages
* Fix: Trash page shouldn't be editable
* Fix: Rendering Timeline on /trash

## v3.7.4

* Fix: Broken by displaying user image

## v3.7.3

* Feature: Profile Image Cropping
* Improvement: Reactify users pages
* Improvement: Detect language and adjust the order of first and last names when creating accounts in OAuth
* Fix: Installation is broken when selecting Japanese
    * Introduced by 3.7.0
* Fix: Mathjax Rendering is unstable (workaround)
    * Introduced by 3.7.0
* Fix: Notification Setting couldn't update without slack token
    * Introduced by 3.6.6
* Support: Add GROWI Contributers

## v3.7.2

* Feature: User Management Filtering/Sort
* Feature: Show env vars on Admin pages
* Fix: Attachment row z-index
* I18n: HackMD integration alert

## v3.7.1

* Improvement: Add an option that make it possible to choose what to send notifications
* Improvement: Add the env var `DRAWIO_URI`
* Improvement: Accessibility for 'spring' theme
* Improvement: Editor scroll sync behaves strangely when using draw.io blocks
* Fix: Coudn't upload file on Comment Editor
    * Introduced by 3.5.8
* I18n: HackMD integration

## v3.7.0

* Feature: [Draw.io](https://www.draw.io/) Integration
* Feature: SAML Attribute-based Login Control
* Improvement: Reactify admin pages (Security)
* Improvement: Behavior of pre-editing screen of HackMD when user needs to resume

## v3.6.10

* Fix: Redirect logic for users except for actives
    * Introduced by 3.6.9

## v3.6.9

* Improvement: Redirection when login/logout
* Improvement: Add home icon before '/'
* Fix: Client crashed when the first login
    * Introduced by 3.6.8

## v3.6.8

* Improvement: Show page history side-by-side
* Improvement: Optimize markdown rendering
* Improvement: Reactify admin pages (Navigation)
* Fix: Reply comments collapsed are broken
    * Introduced by 3.6.7
* Support: Update libs
    * cross-env
    * mkdirp
    * diff2html
    * jest
    * stylelint

## v3.6.7

* Feature: Anchor link for comments
* Improvement: Show error toastr when saving page is failed because of empty document
* Fix: Admin Customise couldn't restore stored config value
    * Introduced by 3.6.2
* Fix: Admin Customise missed preview functions
    * Introduced by 3.6.2
* Fix: AWS doesn't work
    * Introduced by 3.6.4
* Fix: Ensure not to get unrelated indices information in Elasticsearch Management
    * Introduced by 3.6.6
* Support: Optimize bundles
* Support: Optimize build-prod job with caching node_modules/.cache

## v3.6.6

* Feature: Reconnect to Elasticsearch from Full Text Search Management
* Feature: Normalize indices of Elasticsearch from Full Text Search Management
* Improvement: Add 'spring' theme
* Improvement: Reactify admin pages (Notification)
* Impromvement: Add `checkMiddlewaresStrictly` option to Healthcheck API
* Improvement: Accessibility for History component under dark themes
* Fix: Warning on client console when developing /admin/app
* Support: Upgrade libs
    * react-bootstrap-typeahead

## v3.6.5 (Missing number)

## v3.6.4

* Feature: Alert for stale page
* Improvement: Reactify admin pages (Home)
* Improvement: Reactify admin pages (App)
* Improvement: Accessibility for editor icons of dark themes
* Improvement: Accessibility for importing table data pane
* Improvement: Resolve username and email when logging in with Google OAuth

## v3.6.3

* Improvement: Searching users in UserGroup Management
* Fix: Repair google authentication by migrating to jaredhanson/passport-google-oauth2
* Fix: Markdown Settings are broken by the button to import recommended settings
* Support: Upgrade libs
    * check-node-version
    * file-loader
    * mini-css-extract-plugin

## v3.6.2

* Improvement: Reactify admin pages (Customize)
* Improvement: Ensure not to consider `[text|site](https://example.com]` as a row in the table
* Improvement: Enter key behavior in markdown table
* Fix: Pre-installed plugins in official docker image are not detected
    * Introduced by 3.6.0
* Fix: Emoji Autocomplete window does not float correctly
    * Introduced by 3.5.0

## v3.6.1

### BREAKING CHANGES

* GROWI v3.6.x no longer support Node.js v8.x
* The name of database that is storing migrations meta data has been changed
    * This affects **only when `MONGO_URI` has parameters**
    * v3.5.x or above has a bug ([#1361](https://github.com/weseek/growi/issues/1361))

Upgrading Guide: <https://docs.growi.org/en/admin-guide/upgrading/36x.html>

### Updates

* Improvement: Drop unnecessary MongoDB collection indexes
* Improvement: Accessibility of Antarctic theme
* Improvement: Reactify admin pages (Markdown Settings)
* Fix: Appending tag is failed by wrong index of PageTagRelation
    * Introduced by 3.5.20
* Fix: Pages without heading slash is invalid but creatable
* Fix: Connect to Elasticsearch with `httpAuth` param
* Support: Support Node.js v12
* Support: Optimize build in dev with hard-source-webpack-plugin
* Support: Upgrade libs
    * growi-commons

## v3.6.0 (Missing number)

## v3.5.25

* Improvement: Disable ESC key to close Handsontable Modal
* Fix: Exported data of empty collection is broken
* Fix: Some components crash after when the page with attachment has exported/imported

## v3.5.24

* Fix: Plugins are not working on Heroku

## v3.5.23

* Fix: Global Notification failed to send e-mail
* Fix: Pagination is not working for trash list
* Fix: Healthcheck API with `?connectToMiddlewares` returns error
* Support: Upgrade libs
    * growi-commons

## v3.5.22

* Improvement: Add `FILE_UPLOAD_DISABLED` env var

## v3.5.21

* Improvement: Cache control when retrieving attachment data
* Fix: Inviting user doesn't work
    * Introduced by 3.5.20

## v3.5.20

* Improvement: Organize MongoDB collection indexes uniqueness
* Improvement: Reactify admin pages (External Account Management)
* Fix: Search result or Timeline shows loading icon eternally when retrieving not accessible page
* Support: Use SearchBox Elasticsearch Addon on Heroku
* Support: Upgrade libs
    * cross-env
    * eslint-plugin-jest
    * i18next
    * i18next-browser-languagedetector
    * migrate-mongo
    * react-i18next
    * validator

## v3.5.19 (Missing number)

## v3.5.18

* Improvement: Import GROWI Archive
    * Process asynchronously
    * Collection configurations
    * Selectable mode (insert/upsert/flush and insert)
    * Safely mode settings for configs and users collections
    * Show errors view
* Improvement: Optimize handling promise of stream when exporting archive
* Improvement: Optimize handling promise of stream when building indices
* Improvement: Add link to [docs.growi.org](https://docs.growi.org)
* Fix: Monospace font code is broken when printing on Mac

## v3.5.17

* Feature: Upload to GCS (Google Cloud Storage)
* Feature: Statistics API
* Improvement: Optimize exporting
* Improvement: Show progress bar when exporting
* Improvement: Validate collection combinations when importing
* Improvement: Reactify admin pages
* Fix: Use HTTP PlantUML URL in default
    * Introduced by 3.5.12
* Fix: Config default values
* Support: REPL with `console` npm scripts

## v3.5.16

* Fix: Full Text Search doesn't work after when building indices
    * Introduced by 3.5.12

## v3.5.15

* Feature: Import/Export Page data
* Fix: The link to Sandbox on Markdown Help Modal doesn't work
* Support: Upgrade libs
    * codemirror

## v3.5.14 (Missing number)

## v3.5.13

* Feature: Re-edit comments
* Support: [growi-plugin-attachment-refs](https://github.com/weseek/growi-plugin-attachment-refs)
* Support: Upgrade libs
    * entities
    * markdown-it

## v3.5.12

* Improvement: Use Elasticsearch Alias
* Improvement: Connect to HTTPS PlantUML URL in default
* Fix: Global Notification doesn't work after updating Webhook URL
* Fix: User Trigger Notification is not be sent when channel is not specified
* Support: Upgrade libs
    * terser-webpack-plugin

## v3.5.11

* Fix: HackMD Editor shows 404 error when HackMD redirect to fqdn URI
    * Introduced by 3.5.8
* Fix: Timeline doesn't work
    * Introduced by 3.5.1
* Fix: Last Login field does not shown in /admin/user
* Support: Upgrade libs
    * env-cmd
    * sass-loader
    * webpack
    * webpack-cli
    * webpack-merge

## v3.5.10

* Feature: Send Global Notification with Slack
* Improvement: Show loading spinner when fetching page history data
* Improvement: Hierarchical page link when the page is in /Trash
* Fix: Code Highlight Theme does not change
    * Introduced by 3.5.2
* Support: Upgrade libs
    * date-fns
    * eslint-config-weseek

## v3.5.9

* Fix: Editing table with Spreadsheet like GUI (Handsontable) is failed
* Fix: Plugins are not initialized when first launching
    * Introduced by 3.5.0
* Support: Upgrade libs
    * entities
    * growi-commons
    * openid-client
    * rimraf
    * style-loader

## v3.5.8

* Improvement: Controls when HackMD/CodiMD has unsaved draft
* Improvement: Show hints if HackMD/CodiMD integration is not working
* Improvement: GROWI server obtains HackMD/CodiMD page id from the 302 response header
* Improvement: Comment Thread Layout
* Improvement: Show commented date with date distance format

## v3.5.7 (Missing number)

## v3.5.6

* Fix: Saving new page is failed when empty string tag is set
* Fix: Link of Create template page button in New Page Modal is broken
* Fix: Global Notification dows not work when creating/moving/deleting/like/comment

## v3.5.5

* Feature: Support S3-compatible object storage (e.g. MinIO)
* Feature: Enable/Disable ID/Password Authentication
* Improvement: Login Mechanism with HTTP Basic Authentication header
* Improvement: Reactify Table Of Contents
* Fix: Profile images are broken in User Management
* Fix: Template page under root page doesn't work
* Support: Upgrade libs
    * csv-to-markdown-table
    * express-validator
    * markdown-it
    * mini-css-extract-plugin
    * react-hotkeys

## v3.5.4

* Fix: List private pages wrongly
* Fix: Global Notification Trigger Path does not parse glob correctly
* Fix: Consecutive page deletion requests cause unexpected complete page deletion

## v3.5.3

* Improvement: Calculate string width when save with Spreadsheet like GUI (Handsontable)
* Fix: Search Result Page doesn't work
* Fix: Create/Update page API returns data includes author's password hash
* Fix: Dropdown to copy page path/URL/MarkdownLink shows under CodeMirror vscrollbar
* Fix: Link to /trash in Dropdown menu

## v3.5.2

* Feature: Remain metadata option when Move/Rename page
* Improvement: Support code highlight for Swift and Kotlin
* Fix: Couldn't restrict page with user group permission
* Fix: Couldn't duplicate a page when it restricted by a user group permission
* Fix: Consider timezone on admin page
* Fix: Editor doesn't work on Microsoft Edge
* Support: Upgrade libs
    * growi-commons

## v3.5.1

### BREAKING CHANGES

* GROWI no longer supports
    * Protection system with Basic Authentication
    * Crowi Classic Authentication Mechanism
    * [Crowi Template syntax](https://medium.com/crowi-book/crowi-v1-5-0-5a62e7c6be90)
* GROWI no lonnger supports plugins with schema version 2
    * Upgrade [weseek/growi-plugin-lsx](https://github.com/weseek/growi-plugin-lsx) to v3.0.0 or above
    * Upgrade [weseek/growi-plugin-pukiwiki-like-linker
](https://github.com/weseek/growi-plugin-pukiwiki-like-linker
) to v3.0.0 or above
* The restriction mode of the root page (`/`) will be set 'Public'
* The restriction mode of the root page (`/`) can not be changed after v 3.5.1

Upgrading Guide: <https://docs.growi.org/en/admin-guide/upgrading/35x.html>

### Updates

* Feature: Comment Thread
* Feature: OpenID Connect authentication
* Feature: HTTP Basic authentication
* Feature: Staff Credits with [Konami Code](https://en.wikipedia.org/wiki/Konami_Code)
* Feature: Restricte Complete Deletion of Pages
* Improvement Draft list
* Fix: Deleting page completely
* Fix: Search with `prefix:` param with CJK pathname
* Fix: Could not edit UserGroup even if `PUBLIC_WIKI_ONLY` is not set
* I18n: User Management Details
* I18n: Group Management Details
* Support: Apply unstated
* Support: Use Babel 7
* Support: Support plugins with schema version 3
* Support: Abolish Old Config API
* Support: Apply Jest for Tests
* Support: Upgrade libs
    * async
    * axios
    * connect-mongo
    * css-loader
    * eslint
    * eslint-config-weseek
    * eslint-plugin-import
    * eslint-plugin-jest
    * eslint-plugin-react
    * file-loader
    * googleapis
    * i18next
    * migrate-mongo
    * mini-css-extract-plugin
    * mongoose
    * mongoose-gridfs
    * mongoose-unique-validator
    * null-loader

## v3.5.0 (Missing number)

## v3.4.7

* Improvement: Handle private pages on group deletion
* Fix: Searching with `tag:xxx` syntax doesn't work
* Fix: Check CSRF when updating user data
* Fix: `createdAt` field initialization
* I18n: Import data page
* I18n: Group Management page

## v3.4.6

* Feature: Tags
* Feature: Dropdown to copy page path/URL/MarkdownLink
* Feature: List of drafts
* Improvement: Replace icons of Editor Tool Bar
* Improvement: Show display name when mouse hover to user image
* Fix: URL in slack message is broken on Safari
* Fix: Registration does not work when basic auth is enabled
* Support: Publish API docs with swagger-jsdoc and ReDoc
* Support: Upgrade libs
    * cmd-env
    * elasticsearch
    * mongoose-gridfs
    * node-dev
    * null-loader
    * react-codemirror

## v3.4.5

* Improvement: Pass autolink through the XSS filter according to CommonMark Spec
* Fix: Update ElasticSearch index when deleting/duplicating pages
* Fix: Xss filter breaks PlantUML arrows
* Support: Support growi-plugin-lsx@2.2.0
* Support: Upgrade libs
    * growi-commons
    * xss

## v3.4.4

* Fix: Comment component doesn't work

## v3.4.3

* Improvement: Add 'antarctic' theme
* Support Apply eslint-config-airbnb based rules
* Support Apply prettier and stylelint
* Support: Upgrade libs
    * csrf
    * escape-string-regexp
    * eslint
    * express-session
    * googleapis
    * growi-commons
    * i18next
    * mini-css-extract-plugin
    * nodemailer
    * penpal
    * react-i18next
    * string-width

## v3.4.2

* Fix: Nofitication to Slack doesn't work
    * Introduced by 3.4.0

## v3.4.1

* Fix: "Cannot find module 'stream-to-promise'" occured when build client with `FILE_UPLOAD=local`

## v3.4.0

### BREAKING CHANGES

None.

Upgrading Guide: <https://docs.growi.org/en/admin-guide/upgrading/34x.html>

### Updates

* Improvement: Restrict to access attachments when the user is not allowed to see page
* Improvement: Show fans and visitors of page
* Improvement: Full text search tokenizing
* Improvement: Markdown comment on Crowi Classic Layout
* Fix: Profile image is not displayed when `FILE_UPLOAD=mongodb`
* Fix: Posting comment doesn't work under Crowi Classic Layout
    * Introduced by 3.1.5
* Fix: HackMD doesn't work when `siteUrl` ends with slash
* Fix: Ensure not to be able to move/duplicate page to the path which has trailing slash
* Support: Launch with Node.js v10
* Support: Launch with MongoDB 3.6
* Support: Launch with Elasticsearch 6.6
* Support: Upgrade libs
    * bootstrap-sass
    * browser-sync
    * react
    * react-dom


## v3.3.10

* Feature: PlantUML and Blockdiag on presentation
* Improvement: Render slides of presentation with GrowiRenderer
* Fix: Unportalizing doesn't work
* Support: Use mini-css-extract-plugin instead of extract extract-text-webpack-plugin
* Support: Use terser-webpack-plugin instead of uglifyjs-webpack-plugin
* Support: Upgrade libs
    * csv-to-markdown-table
    * file-loader
    * googleapis
    * i18next-browser-languagedetector
    * mocha
    * react-waypoint
    * webpack
    * webpack-assets-manifest
    * webpack-cli
    * webpack-merge

## v3.3.9

* Fix: Import from Qiita:Team doesn't work
    * Introduced by 3.3.0
* Fix: Typeahead shows autocomplete wrongly
    * Introduced by 3.3.8
* Support: Upgrade libs
    * react-bootstrap-typeahead

## v3.3.8

* Fix: Move/Duplicate don't work
    * Introduced by 3.3.7
* Fix: Server doesn't respond when root page is restricted
* Support: Upgrade libs
    * react
    * react-bootstrap-typeahead

## v3.3.7

* Feature: Editor toolbar
* Feature: `prefix:/path` searching syntax to filter with page path prefix
* Feature: Add an option to filter only children to searching box of navbar
* Improvement: Suggest page path when moving/duplicating/searching
* Fix: Anonymous users couldn't search
    * Introduced by 3.3.6
* I18n: Searching help
* Support: Prepare to suppoert Node.js v10
* Support: Upgrade libs
    * node-sass

## v3.3.6

* Improvement: Site URL settings must be set
* Improvement: Site URL settings can be set with environment variable
* Fix: "Anyone with the link" ACL doesn't work correctly
    * Introduced by 3.3.0
* Fix: Related pages list of /admin/user-group-detail/xxx doesn't show anything
    * Introduced by 3.3.0
* Fix: Diff of revision contents doesn't appeared when notifing with slack
* Fix: NPE occured on /admin/security when Crowi Classic Auth Mechanism is set
* Fix: Coudn't render Timing Diagram with PlantUML
* I18n: Cheatsheet for editor
* I18n: Some admin pages
* Support: Upgrade libs
    * diff
    * markdown-it-plantuml
    * mongoose
    * nodemailer
    * mongoose-gridfs
    * sinon
    * sinon-chai

## v3.3.5 (Missing number)

## v3.3.4

* Improvement: SAML configuration with environment variables
* Improvement: Upload file with pasting from clipboard
* Fix: `/_api/revisions.get` doesn't populate author data correctly
* Fix: Wrong OAuth callback url are shown at admin page
* Fix: Connecting to MongoDB failed when processing migration
* Support: Get ready to use new config management system

## v3.3.3

* Feature: Show line numbers to a code block
* Feature: Bulk update the scope of descendant pages when create/update page
* Improvement: The scope of ascendant page will be retrieved and set to controls in advance when creating a new page
* Fix: Pages that is restricted by groups couldn't be shown in search result page
* Fix: Pages order in search result page was wrong
* Fix: Guest user can't search
* Fix: Possibility that ExternalAccount deletion processing selects incorrect data
* Support: Upgrade libs
    * bootstrap-sass
    * i18next
    * migrate-mongo
    * string-width

## v3.3.2

* Fix: Specified Group ACL is not persisted correctly
    * Introduced by 3.3.0

## v3.3.1

* Feature: NO_CDN Mode
* Feature: Add option to show/hide restricted pages in list
* Feature: MongoDB GridFS quota
* Improvement: Refactor Access Control
* Improvement: Checkbox behavior of task list
* Improvement: Fixed search input on search result page
* Improvement: Add 'christmas' theme
* Improvement: Select default language of new users
* Fix: Hide restricted pages contents in timeline
* Support: Upgrade libs
    * googleapis
    * passport-saml

## v3.3.0 (Missing number)

## v3.2.10

* Fix: Pages in trash are available to create
* Fix: Couldn't create portal page under Crowi Classic Behavior
* Fix: Table tag in Timeline/SearchResult missed border and BS3 styles
* I18n: Installer


## v3.2.9

* Feature: Attachment Storing to MongoDB GridFS
* Fix: row/col moving of Spreadsheet like GUI (Handsontable) doesn't work
* Fix: Emoji AutoComplete dialog pops up at wrong position
* Support: Upgrade libs
    * codemirror
    * react-codemirror2

## v3.2.8

* Improvement: Add an option to use email for account link when using SAML federation
* Fix: Editor layout is sometimes broken
* Fix: Normalize table data for Spreadsheet like GUI (Handsontable) when import
* Support: Improve development environment
* Support: Upgrade libs
    * googleapis
    * react-dropzone

## v3.2.7

* Feature: Import CSV/TSV/HTML table on Spreadsheet like GUI (Handsontable)
* Fix: Pasting table data copied from Excel includes unnecessary line breaks
* Fix: Page break Preset 1 for Presentation mode is broken
* Fix: Login Form when LDAP login failed caused 500 Internal Server Error

## v3.2.6

* Feature: Add select alignment buttons of Spreadsheet like GUI (Handsontable)
* Improvement: Shrink the rows that have no diff of revision history page
* Fix: Login form rejects weak password
* Fix: An error occured by uploading attachment file when the page is not exists
    * Introduced by 2.3.5
* Support: Upgrade libs
    * i18next-express-middleware
    * i18next-node-fs-backend
    * i18next-sprintf-postprocessor

## v3.2.5

* Improvement: Expandable Spreadsheet like GUI (Handsontable)
* Improvement: Move/Resize rows/columns of Spreadsheet like GUI (Handsontable)
* Improvement: Prevent XSS of New Page modal
* Fix: Recent Created tab of user home shows wrong page list
    * Introduced by 3.2.4
* Support: Upgrade libs
    * @handsontable/react
    * handsontable
    * metismenu
    * sinon

## v3.2.4

* Feature: Edit table with Spreadsheet like GUI (Handsontable)
* Feature: Paging recent created in users home
* Improvement: Specify certificate for SAML Authentication
* Fix: SAML Authentication didn't work
    * Introduced by 3.2.2
* Fix: Failed to create new page with title which includes RegEx special characters
* Fix: Preventing XSS Settings are not applied in default
    * Introduced by 3.1.12
* Support: Mongoose migration mechanism
* Support: Upgrade libs
    * googleapis
    * mocha
    * mongoose
    * mongoose-paginate
    * mongoose-unique-validator
    * multer

## v3.2.3

* Feature: Kibela like layout
* Improvement: Custom newpage separator for presentation view
* Support: Shrink image size for themes which recently added

## v3.2.2

* Feature: SAML Authentication (SSO)
* Improvement: Add 'wood' theme
* Improvement: Add 'halloween' theme
* Improvement: Add 'island' theme
* Fix: Sending email function doesn't work
* Support Upgrade libs
    * style-loader

## v3.2.1

* Feature: Import data from esa.io
* Feature: Import data from Qiita:Team
* Feature: Add the endpoint for health check
* Improvement: Adjust styles when printing
* Fix: Renaming page doesn't work if the page was saved with shortcut
* Support: Refactor directory structure
* Support Upgrade libs
    * file-loader
    * googleapis
    * postcss-loader
    * sass-loader
    * style-loader

## v3.2.0

* Feature: HackMD integration so that user will be able to simultaneously edit with multiple people
* Feature: Login with Twitter Account (OAuth)
* Fix: The Initial scroll position is wrong when reloading the page

## v3.1.14

* Improvement: Show help for header search box
* Improvement: Add Markdown Cheatsheet to Editor component
* Fix: Couldn't delete page completely from search result page
* Fix: Tabs of trash page are broken

## v3.1.13

* Feature: Global Notification
* Feature: Send Global Notification with E-mail
* Improvement: Add attribute mappings for email to LDAP settings
* Support: Upgrade libs
    * autoprefixer
    * css-loader
    * method-override
    * optimize-css-assets-webpack-plugin
    * react
    * react-bootstrap-typeahead
    * react-dom


## v3.1.12

* Feature: Add XSS Settings
* Feature: Notify to Slack when comment
* Improvement: Prevent XSS in various situations
* Improvement: Show forbidden message when the user accesses to ungranted page
* Improvement: Add overlay styles for pasting file to comment form
* Fix: Omit unnecessary css link
    * Introduced by 3.1.10
* Fix: Invitation mail do not be sent
* Fix: Edit template button on New Page modal doesn't work

## v3.1.11

* Fix: OAuth doesn't work in production because callback URL field cannot be specified
    * Introduced by 3.1.9

## v3.1.10

* Fix: Enter key on react-bootstrap-typeahead doesn't submit
    * Introduced by 3.1.9
* Fix: CodeMirror of `/admin/customize` is broken
    * Introduced by 3.1.9

## v3.1.9

* Feature: Login with Google Account (OAuth)
* Feature: Login with GitHub Account (OAuth)
* Feature: Attach files in Comment
* Improvement: Write comment with CodeMirror Editor
* Improvement: Post comment with `Ctrl-Enter`
* Improvement: Place the commented page at the beginning of the list
* Improvement: Resolve errors on IE11 (Experimental)
* Support: Migrate to webpack 4
* Support: Upgrade libs
    * eslint
    * react-bootstrap-typeahead
    * react-codemirror2
    * webpack

## v3.1.8 (Missing number)

## v3.1.7

* Fix: Update hidden input 'pageForm[grant]' when save with `Ctrl-S`
* Fix: Show alert message when conflict
* Fix: `BLOCKDIAG_URI` environment variable doesn't work
* Fix: Paste in markdown list doesn't work correctly
* Support: Ensure to inject logger configuration from environment variables
* Support: Upgrade libs
    * sinon
    * sinon-chai

## v3.1.6

* Feature: Support [blockdiag](http://blockdiag.com)
* Feature: Add `BLOCKDIAG_URI` environment variable
* Fix: Select modal for group is not shown
* Support: Upgrade libs
    * googleapis
    * throttle-debounce

## v3.1.5

* Feature: Write comment with Markdown
* Improvement: Support some placeholders for template page
* Improvement: Omit unnecessary response header
* Improvement: Support LDAP attribute mappings for user's full name
* Improvement: Enable to scroll revision-toc
* Fix: Posting to Slack doesn't work
    * Introduced by 3.1.0
* Fix: page.rename api doesn't work
* Fix: HTML escaped characters in markdown are unescaped unexpectedly after page is saved
* Fix: sanitize `#raw-text-original` content with 'entities'
* Fix: Double newline character posted
    * Introduced by 3.1.4
* Fix: List and Comment components do not displayed
    * Introduced by 3.1.4
* Support: Upgrade libs
    * markdown-it-toc-and-anchor-with-slugid


## v3.1.4 (Missing number)


## v3.1.3 (Missing number)


## v3.1.2

* Feature: Template page
* Improvement: Add 'future' theme
* Improvement: Modify syntax for Crowi compatible template feature
    * *before*

        ~~~markdown
        ``` template:/page/name
        page contents
        ```
        ~~~

    * *after*

        ~~~plane
        ::: template:/page/name
        page contents
        :::
        ~~~

* Improvement: Escape iframe tag in block codes
* Support: Upgrade libs
    * assets-webpack-plugin
    * googleapis
    * react-clipboard.js
    * xss

## v3.1.1

* Improvement: Add 'blue-night' theme
* Improvement: List up pages which restricted for Group ACL
* Fix: PageGroupRelation didn't remove when page is removed completely


## v3.1.0

* Improvement: Group Access Control List - Select group modal
* Improvement: Better input on mobile
* Improvement: Detach code blocks correctly
* Improvement: Auto-format markdown table which includes multibyte text
* Improvement: Show icon when auto-format markdown table is activated
* Improvement: Enable to switch show/hide border for highlight.js
* Improvement: BindDN field allows also ActiveDirectory styles
* Improvement: Show LDAP logs when testing login
* Fix: Comment body doesn't break long terms
* Fix: lsx plugin lists up pages that hit by forward match wrongly
    * Introduced by 3.0.4
* Fix: Editor is broken on IE11
* Support: Multilingualize React components with i18next
* Support: Organize dependencies
* Support: Upgrade libs
    * elasticsearch
    * googleapis

## v3.0.13

* Improvement: Add Vim/Emacs/Sublime-Text icons for keybindings menu
* Improvement: Add 'mono-blue' theme
* Fix: Unportalize process failed silently
* Fix: Sidebar breaks editor layouts
* Support: Switch the logger from 'pino' to 'bunyan'
* Support: Set the alias for 'debug' to the debug function of 'bunyan'
* Support: Translate `/admin/security`
* Support: Optimize bundles
    * upgrade 'markdown-it-toc-and-anchor-with-slugid' and omit 'uslug'
* Support: Optimize .eslintrc.js

## v3.0.12

* Feature: Support Vim/Emacs/Sublime-Text keybindings
* Improvement: Add some CodeMirror themes (Eclipse, Dracula)
* Improvement: Dynamic loading for CodeMirror theme files from CDN
* Improvement: Prevent XSS when move/redirect/duplicate

## v3.0.11

* Fix: login.html is broken in iOS
* Fix: Removing attachment is crashed
* Fix: File-attaching error after new page creation
* Support: Optimize development build
* Support: Upgrade libs
    * env-cmd
    * googleapis
    * sinon

## v3.0.10

* Improvement: Add 'nature' theme
* Fix: Page list and Timeline layout for layout-growi
* Fix: Adjust theme colors
    * Introduced by 3.0.9

## v3.0.9

* Fix: Registering new LDAP User is failed
    * Introduced by 3.0.6
* Support: Organize scss for overriding bootstrap variables
* Support: Upgrade libs
    * codemirror
    * react-codemirror2
    * normalize-path
    * style-loader

## v3.0.8

* Improvement: h1#revision-path occupies most of the screen when the page path is long
* Improvement: Ensure not to save concealed email field to localStorage
* Fix: Cannot input "c" and "e" on iOS

## v3.0.7

* Improvement: Enable to download an attached file with original name
* Improvement: Use MongoDB for session store instead of Redis
* Improvement: Update dropzone overlay icons and styles
* Fix: Dropzone overlay elements doesn't show
    * Introduced by 3.0.0
* Fix: Broken page path of timeline
    * Introduced by 3.0.4

## v3.0.6

* Improvement: Automatically bind external accounts newly logged in to local accounts when username match
* Improvement: Simplify configuration for Slack Web API
* Support: Use 'slack-node' instead of '@slack/client'
* Support: Upgrade libs
    * googleapis
    * i18next
    * i18next-express-middleware
    * react-bootstrap-typeahead
    * sass-loader
    * uglifycss

## v3.0.5

* Improvement: Update lsx icons and styles
* Fix: lsx plugins doesn't show page names

## v3.0.4

* Improvement: The option that switch whether add h1 section when create new page
* Improvement: Encode page path that includes special character
* Fix: Page-saving error after new page creation

## v3.0.3

* Fix: Login page is broken in iOS
* Fix: Hide presentation tab if portal page
* Fix: A few checkboxes doesn't work
    * Invite user check with email in `/admin/user`
    * Recursively check in rename modal
    * Redirect check in rename modal
* Fix: Activating invited user form url is wrong
* Support: Use postcss-loader and autoprefixer

## v3.0.2

* Feature: Group Access Control List
* Feature: Add site theme selector
* Feature: Add a control to switch whether email shown or hidden by user
* Feature: Custom title tag content
* Fix: bosai version
* Support: Rename to GROWI
* Support: Add dark theme
* Support: Refreshing bootstrap theme and icons
* Support: Use Browsersync instead of easy-livereload
* Support: Upgrade libs
    * react-bootstrap
    * react-bootstrap-typeahead
    * react-clipboard.js

## v3.0.1 (Missing number)

## v3.0.0 (Missing number)

## v2.4.4

* Feature: Autoformat Markdown Table
* Feature: highlight.js Theme Selector
* Fix: The bug of updating numbering list by codemirror
* Fix: Template LangProcessor doesn't work
    * Introduced by 2.4.0
* Support: Apply ESLint
* Support: Upgrade libs
    * react, react-dom
    * codemirror, react-codemirror2

## v2.4.3

* Improvement: i18n in `/admin`
* Improvement: Add `SESSION_NAME` environment variable
* Fix: All Elements are cleared when the Check All button in DeletionMode
* Support: Upgrade libs
    * uglifycss
    * sinon-chai

## v2.4.2

* Improvement: Ensure to set absolute url from root when attaching files when `FILE_UPLOAD=local`
* Fix: Inline code blocks that includes doller sign are broken
* Fix: Comment count is not updated when a comment of the page is deleted
* Improvement: i18n in `/admin` (WIP)
* Support: Upgrade libs
    * googleapis
    * markdown-it-plantuml

## v2.4.1

* Feature: Custom Header HTML
* Improvement: Add highlight.js languages
    * dockerfile, go, gradle, json, less, scss, typescript, yaml
* Fix: Couldn't connect to PLANTUML_URI
    * Introduced by 2.4.0
* Fix: Couldn't render UML which includes CJK
    * Introduced by 2.4.0
* Support: Upgrade libs
    * axios
    * diff2html

## v2.4.0

* Feature: Support Footnotes
* Feature: Support Task lists
* Feature: Support Table with CSV
* Feature: Enable to render UML diagrams with public plantuml.com server
* Feature: Enable to switch whether rendering MathJax in realtime or not
* Improvement: Replace markdown parser with markdown-it
* Improvement: Generate anchor of headers with header strings
* Improvement: Enhanced Scroll Sync on Markdown Editor/Preview
* Improvement: Update `#revision-body` tab contents after saving with `Ctrl-S`
* Fix: 500 Internal Server Error occures when basic-auth configuration is set

## v2.3.9

* Fix: `Ctrl-/` doesn't work on Chrome
* Fix: Close Shortcuts help with `Ctrl-/`, ESC key
* Fix: Jump to last line wrongly when `.revision-head-edit-button` clicked
* Support: Upgrade libs
    * googleapis

## v2.3.8

* Feature: Suggest page path when creating pages
* Improvement: Prevent keyboard shortcuts when modal is opened
* Improvement: PageHistory UI
* Improvement: Ensure to scroll when edit button of section clicked
* Improvement: Enabled to toggle the style for active line
* Support: Upgrade libs
    * style-loader
    * react-codemirror2

## v2.3.7

* Fix: Open popups when `Ctrl+C` pressed
    * Introduced by 2.3.5

## v2.3.6

* Feature: Theme Selector for Editor
* Improvement: Remove unportalize button from crowi-plus layout
* Fix: CSS for admin pages
* Support: Shrink the size of libraries to include

## v2.3.5

* Feature: Enhanced Editor by CodeMirror
* Feature: Emoji AutoComplete
* Feature: Add keyboard shortcuts
* Improvement: Attaching file with Dropzone.js
* Improvement: Show shortcuts help with `Ctrl-/`
* Fix: DOMs that has `.alert-info` class don't be displayed
* Support: Switch and upgrade libs
    * 8fold-marked -> marked
    * react-bootstrap
    * googleapis
    * mongoose
    * mongoose-unique-validator
    * etc..

## v2.3.4 (Missing number)

## v2.3.3

* Fix: The XSS Library escapes inline code blocks
    * Degraded by 2.3.0
* Fix: NPE occurs on Elasticsearch when initial access
* Fix: Couldn't invite users(failed to create)

## v2.3.2

* Improvement: Add LDAP group search options

## v2.3.1

* Fix: Blockquote doesn't work
    * Degraded by 2.3.0
* Fix: Couldn't create user with first LDAP logging in

## v2.3.0

* Feature: LDAP Authentication
* Improvement: Prevent XSS
* Fix: node versions couldn't be shown
* Support: Upgrade libs
    * express-pino-logger

## v2.2.4

* Fix: googleapis v23.0.0 lost the function `oauth2Client.setCredentials`
    * Degraded by 2.2.2 updates
* Fix: HeaderSearchBox didn't append 'q=' param when searching
    * Degraded by 2.2.3 updates

## v2.2.3

* Fix: The server responds anything when using passport
    * Degraded by 2.2.2 updates
* Fix: Update `lastLoginAt` when login is success
* Support: Replace moment with date-fns
* Support: Upgrade react-bootstrap-typeahead
* Improvement: Replace emojify.js with emojione

## v2.2.2 (Missing number)

## v2.2.1

* Feature: Duplicate page
* Improve: Ensure that admin users can remove users waiting for approval
* Fix: Modal doesn't work with React v16
* Support: Upgrade React to 16
* Support: Upgrade outdated libs

## v2.2.0

* Support: Merge official Crowi v1.6.3

## v2.1.2

* Improvement: Ensure to prevent suspending own account
* Fix: Ensure to be able to use `.` for username when invited
* Fix: monospace font for `<code></code>`

## v2.1.1

* Fix: The problem that React Modal doesn't work
* Support: Lock some packages(react, react-dom, mongoose)

## v2.1.0

* Feature: Adopt Passport the authentication middleware
* Feature: Selective batch deletion in search result page
* Improvement: Ensure to be able to login with both of username or email
* Fix: The problem that couldn't update user data in /me
* Support: Upgrade outdated libs

## v2.0.9

* Fix: Server is down when a guest user accesses to someone's private pages
* Support: Merge official Crowi (master branch)
* Support: Upgrade outdated libs

## v2.0.8

* Fix: The problem that path including round bracket makes something bad
* Fix: Recursively option processes also unexpedted pages
* Fix: en-US translation

## v2.0.7

* Improvement: Add recursively option for Delete/Move/Putback operation
* Improvement: Comment layout and sort order (crowi-plus Enhanced Layout)

## v2.0.6

* Fix: check whether `$APP_DIR/public/uploads` exists before creating symlink
    * Fixed in weseek/crowi-plus-docker

## v2.0.5

* Improvement: Adjust styles for CodeMirror
* Fix: File upload does not work when using crowi-plus-docker-compose and `FILE_UPLOAD=local` is set  
    * Fixed in weseek/crowi-plus-docker

## v2.0.2 - 2.0.4 (Missing number)

## v2.0.1

* Feature: Custom Script
* Improvement: Adjust layout and styles for admin pages
* Improvement: Record and show last updated date in user list page
* Fix: Ignore Ctrl+(Shift+)Tab when editing (cherry-pick from the official)

## v2.0.0

* Feature: Enabled to integrate with Slack using Incoming Webhooks
* Support: Upgrade all outdated libs

## v1.2.16

* Improvement: Condition for creating portal
* Fix: Couldn't create new page after installation cleanly

## v1.2.15

* Improvement: Optimize cache settings for express server
* Improvement: Add a logo link to the affix header
* Fix: Child pages under `/trash` are not shown when applying crowi-plus Simplified Behavior

## v1.2.14

* Fix: Tabs(`a[data-toggle="tab"][href="#..."]`) push browser history twice
* Fix: `a[href="#edit-form"]` still save history even when disabling pushing states option

## v1.2.13

* Improvement: Enabled to switch whether to push states with History API when tabs changes
* Fix: Layout of the Not Found page

## v1.2.12 (Missing number)

## v1.2.11

* Improvement: Enabled to open editing form from affix header
* Improvement: Enabled to open editing form from each section headers

## v1.2.10

* Fix: Revise `server:prod:container` script for backward compatibility

## v1.2.9

* Improvement: Enabled to save with <kbd>⌘+S</kbd> on Mac
* Improvement: Adopt the fastest logger 'pino'
* Fix: The problem that can't upload profile image

## v1.2.8

* Fix: The problem that redirect doesn't work when using 'crowi-plus Simplified Behavior'

## v1.2.7 (Missing number)

## v1.2.6

* Fix: The problem that page_list widget doesn't show the picture of revision.author
* Fix: Change implementation of Bootstrap3 toggle switch for admin pages

## v1.2.5

* Feature: crowi-plus Simplified Behavior
    * `/page` and `/page/` both shows the page
    * `/nonexistent_page` shows editing form
    * All pages shows the list of sub pages
* Improvement: Ensure to be able to disable Timeline feature

## v1.2.4

* Fix: Internal Server Error has occurred when a guest user visited the page someone added "liked"

## v1.2.3

* Improvement: Ensure to be able to use Presentation Mode even when not logged in
* Improvement: Presentation Mode on IE11 (Experimental)
* Fix: Broken Presentation Mode

## v1.2.2

* Support: Merge official Crowi (master branch)

## v1.2.1

* Fix: buildIndex error occured when access to installer

## v1.2.0

* Support: Merge official Crowi v1.6.2

## v1.1.12

* Feature: Remove Comment Button

## v1.1.11

* Fix: Omit Comment form from page_list (crowi-plus Enhanced Layout)
* Fix: .search-box is broken on sm/xs screen

## v1.1.10

* Fix: .search-box is broken on sm/xs screen
* Support: Browsable with IE11 (Experimental)

## v1.1.9

* Improvement: Ensure to generate indices of Elasticsearch when installed
* Fix: Specify the version of Bonsai Elasticsearch on Heroku

## v1.1.8

* Fix: Depth of dropdown-menu when `.on-edit`
* Fix: Error occured on saveing with `Ctrl-S`
* Fix: Guest users browsing

## v1.1.7

* Feature: Add option to allow guest users to browse
* Fix: crowi-plus Enhanced Layout

## v1.1.6

* Fix: crowi-plus Enhanced Layout

## v1.1.5

* Fix: crowi-plus Enhanced Layout
* Support: Merge official Crowi v1.6.1 master branch [573144b]

## v1.1.4

* Feature: Ensure to select layout type from Admin Page
* Feature: Add crowi-plus Enhanced Layout

## v1.1.3

* Improvement: Use POSIX-style paths (bollowed crowi/crowi#219 by @Tomasom)

## v1.1.2

* Imprv: Brushup fonts and styles
* Fix: Ensure to specity revision id when saving with `Ctrl-S`

## v1.1.1

* Feature: Save with `Ctrl-S`
* Imprv: Brushup fonts and styles

## v1.1.0

* Support: Merge official Crowi v1.6.1

## v1.0.9

* Feature: Delete user
* Feature: Upload other than images

## v1.0.8

* Feature: Ensure to delete page completely
* Feature: Ensure to delete redirect page
* Fix: https access to Gravatar (this time for sure)

## v1.0.7

* Feature: Keyboard navigation for search box
* Improvement: Intelligent Search

## v1.0.6

* Feature: Copy button that copies page path to clipboard
* Fix: https access to Gravatar
* Fix: server watching crash with `Error: read ECONNRESET` on Google Chrome

## v1.0.5

* Feature: Ensure to use Gravatar for profile image

## v1.0.4

* Improvement: Detach code blocks before preProcess
* Support: Ensure to deploy to Heroku with INSTALL_PLUGINS env
* Support: Ensure to load plugins easily when development

## v1.0.3

* Improvement: Adjust styles

## v1.0.2

* Improvement: For lsx

## v1.0.1

* Feature: Custom CSS
* Support: Notify build failure to Slask

## v1.0.0

* Feature: Plugin mechanism
* Feature: Switchable LineBreaks ON/OFF from admin page
* Improvement: Exclude Environment-dependency
* Improvement: Enhanced linker
* Support: Add Dockerfile
* Support: Abolish gulp
* Support: LiveReload
* Support: Update libs
