فهرست منبع

Merge pull request #7192 from weseek/support/uninstall-swig-template

support: Uninstall swig-template
Yuki Takei 3 سال پیش
والد
کامیت
2730221366
82فایلهای تغییر یافته به همراه118 افزوده شده و 2254 حذف شده
  1. 1 3
      packages/app/package.json
  2. 6 6
      packages/app/resource/locales/en_US/admin/userInvitation.txt
  3. 8 8
      packages/app/resource/locales/en_US/admin/userWaitingActivation.txt
  4. 3 3
      packages/app/resource/locales/en_US/notifications/comment.txt
  5. 4 4
      packages/app/resource/locales/en_US/notifications/notActiveUser.txt
  6. 2 2
      packages/app/resource/locales/en_US/notifications/pageCreate.txt
  7. 2 2
      packages/app/resource/locales/en_US/notifications/pageDelete.txt
  8. 2 2
      packages/app/resource/locales/en_US/notifications/pageEdit.txt
  9. 2 2
      packages/app/resource/locales/en_US/notifications/pageLike.txt
  10. 2 2
      packages/app/resource/locales/en_US/notifications/pageMove.txt
  11. 4 4
      packages/app/resource/locales/en_US/notifications/passwordReset.txt
  12. 1 1
      packages/app/resource/locales/en_US/notifications/passwordResetSuccessful.txt
  13. 4 4
      packages/app/resource/locales/en_US/notifications/userActivation.txt
  14. 6 6
      packages/app/resource/locales/ja_JP/admin/userInvitation.txt
  15. 8 8
      packages/app/resource/locales/ja_JP/admin/userWaitingActivation.txt
  16. 4 4
      packages/app/resource/locales/ja_JP/notifications/notActiveUser.txt
  17. 4 4
      packages/app/resource/locales/ja_JP/notifications/passwordReset.txt
  18. 1 1
      packages/app/resource/locales/ja_JP/notifications/passwordResetSuccessful.txt
  19. 4 4
      packages/app/resource/locales/ja_JP/notifications/userActivation.txt
  20. 6 6
      packages/app/resource/locales/zh_CN/admin/userInvitation.txt
  21. 8 8
      packages/app/resource/locales/zh_CN/admin/userWaitingActivation.txt
  22. 3 3
      packages/app/resource/locales/zh_CN/notifications/comment.txt
  23. 4 4
      packages/app/resource/locales/zh_CN/notifications/notActiveUser.txt
  24. 2 2
      packages/app/resource/locales/zh_CN/notifications/pageCreate.txt
  25. 2 2
      packages/app/resource/locales/zh_CN/notifications/pageDelete.txt
  26. 2 2
      packages/app/resource/locales/zh_CN/notifications/pageEdit.txt
  27. 2 2
      packages/app/resource/locales/zh_CN/notifications/pageLike.txt
  28. 2 2
      packages/app/resource/locales/zh_CN/notifications/pageMove.txt
  29. 3 3
      packages/app/resource/locales/zh_CN/notifications/passwordReset.txt
  30. 1 1
      packages/app/resource/locales/zh_CN/notifications/passwordResetSuccessful.txt
  31. 4 4
      packages/app/resource/locales/zh_CN/notifications/userActivation.txt
  32. 0 2
      packages/app/src/server/crowi/dev.js
  33. 0 12
      packages/app/src/server/crowi/express-init.js
  34. 0 3
      packages/app/src/server/routes/hackmd.js
  35. 1 1
      packages/app/src/server/service/import.js
  36. 8 2
      packages/app/src/server/service/mail.ts
  37. 0 133
      packages/app/src/server/util/middlewares.js
  38. 0 208
      packages/app/src/server/util/swigFunctions.js
  39. 0 1
      packages/app/src/server/views/500.html
  40. 0 45
      packages/app/src/server/views/forgot-password.html
  41. 0 60
      packages/app/src/server/views/forgot-password/error.html
  42. 0 95
      packages/app/src/server/views/installer.html
  43. 0 150
      packages/app/src/server/views/invited.html
  44. 0 43
      packages/app/src/server/views/layout-growi/base/layout.html
  45. 0 24
      packages/app/src/server/views/layout-growi/expired_shared_page.html
  46. 0 25
      packages/app/src/server/views/layout-growi/forbidden.html
  47. 0 30
      packages/app/src/server/views/layout-growi/identical-path-page.html
  48. 0 20
      packages/app/src/server/views/layout-growi/not_creatable.html
  49. 0 32
      packages/app/src/server/views/layout-growi/not_found.html
  50. 0 16
      packages/app/src/server/views/layout-growi/not_found_shared_page.html
  51. 0 35
      packages/app/src/server/views/layout-growi/page.html
  52. 0 31
      packages/app/src/server/views/layout-growi/page_list.html
  53. 0 44
      packages/app/src/server/views/layout-growi/shared_page.html
  54. 0 43
      packages/app/src/server/views/layout-growi/user_page.html
  55. 0 155
      packages/app/src/server/views/layout/layout.html
  56. 0 171
      packages/app/src/server/views/login.html
  57. 0 40
      packages/app/src/server/views/maintenance-mode.html
  58. 0 21
      packages/app/src/server/views/me/all-in-app-notifications.html
  59. 0 21
      packages/app/src/server/views/me/drafts.html
  60. 0 21
      packages/app/src/server/views/me/index.html
  61. 0 64
      packages/app/src/server/views/page_presentation.html
  62. 0 25
      packages/app/src/server/views/private-legacy-pages.html
  63. 0 24
      packages/app/src/server/views/redoc.html
  64. 0 48
      packages/app/src/server/views/reset-password.html
  65. 0 25
      packages/app/src/server/views/search.html
  66. 0 16
      packages/app/src/server/views/tags.html
  67. 0 52
      packages/app/src/server/views/user-activation.html
  68. 0 0
      packages/app/src/server/views/widget/alert_breaking_changes.html
  69. 0 6
      packages/app/src/server/views/widget/alert_siteurl_undefined.html
  70. 0 1
      packages/app/src/server/views/widget/header.html
  71. 0 16
      packages/app/src/server/views/widget/headers/favicon.html
  72. 0 21
      packages/app/src/server/views/widget/headers/mathjax.html
  73. 0 7
      packages/app/src/server/views/widget/headers/scripts-for-dev.html
  74. 0 8
      packages/app/src/server/views/widget/headers/styles-for-app.html
  75. 0 5
      packages/app/src/server/views/widget/headers/styles-theme.html
  76. 0 6
      packages/app/src/server/views/widget/logo.html
  77. 0 16
      packages/app/src/server/views/widget/not_creatable_content.html
  78. 0 35
      packages/app/src/server/views/widget/not_found_content.html
  79. 0 69
      packages/app/src/server/views/widget/page_alerts.html
  80. 0 49
      packages/app/src/server/views/widget/page_content.html
  81. 0 65
      packages/app/src/server/views/widget/page_list.html
  82. 2 103
      yarn.lock

+ 1 - 3
packages/app/package.json

@@ -9,7 +9,7 @@
     "build:client": "yarn next build",
     "prebuild:client": "tsc -p tsconfig.build.next.config.json",
     "build:server": "yarn cross-env NODE_ENV=production tsc -p tsconfig.build.server.json && tsc-alias -p tsconfig.build.server-tsc-alias.json",
-    "postbuild:server": "npx -y shx echo \"Listing files under transpiled\" && npx -y shx ls transpiled && npx -y shx mv transpiled/src dist && npx -y shx cp -r transpiled/config/* config && npx -y shx cp -r src/server/views dist/server/ && npx -y shx rm -rf transpiled",
+    "postbuild:server": "npx -y shx echo \"Listing files under transpiled\" && npx -y shx ls transpiled && npx -y shx mv transpiled/src dist && npx -y shx cp -r transpiled/config/* config && npx -y shx rm -rf transpiled",
     "clean": "npx -y shx rm -rf dist transpiled",
     "prebuild": "yarn cross-env NODE_ENV=production run-p clean resources:*",
     "server": "yarn cross-env NODE_ENV=production node -r dotenv-flow/config dist/server/app.js",
@@ -110,7 +110,6 @@
     "express-mongo-sanitize": "^2.1.0",
     "express-session": "^1.16.1",
     "express-validator": "^6.14.0",
-    "express-webpack-assets": "^0.1.0",
     "extensible-custom-error": "^0.0.7",
     "graceful-fs": "^4.1.11",
     "hast-util-select": "^5.0.2",
@@ -182,7 +181,6 @@
     "string-width": "=4.2.2",
     "superjson": "^1.9.1",
     "swagger-jsdoc": "^6.1.0",
-    "swig-templates": "^2.0.2",
     "swr": "^1.3.0",
     "throttle-debounce": "^3.0.1",
     "toastr": "^2.1.2",

+ 6 - 6
packages/app/resource/locales/en_US/admin/userInvitation.txt

@@ -1,14 +1,14 @@
-Hi, {{ email }}
+Hi, <%- email -%>
 
 You are invited to our Wiki, you can log in with following account:
 
-Email: {{ email }}
-Password: {{ password }}
+Email: <%- email -%>
+Password: <%- password -%>
 (This password was auto generated. Update required at the first time you logging in)
 
 We are waiting for you!
-{{ url }}
+<%- url -%>
 
 --
-{{ appTitle }}
-{{ url }}
+<%- appTitle -%>
+<%- url -%>

+ 8 - 8
packages/app/resource/locales/en_US/admin/userWaitingActivation.txt

@@ -1,21 +1,21 @@
-Hi, {{ adminUser.name }}
+Hi, <%- adminUser.name -%>
 
-A user registered to {{ appTitle }}.
+A user registered to <%- appTitle -%>.
 
 
 ====
 Created user:
 
-Name: {{ createdUser.name }}
-User Name: {{ createdUser.username }}
-Email: {{ createdUser.email }}
+Name: <%- createdUser.name -%>
+User Name: <%- createdUser.username -%>
+Email: <%- createdUser.email -%>
 ====
 
 Please do some action with following URL:
-{{ url }}/admin/users
+<%- url -%>/admin/users
 
 
 --
-{{ appTitle }}
-{{ url }}
+<%- appTitle -%>
+<%- url -%>
 

+ 3 - 3
packages/app/resource/locales/en_US/notifications/comment.txt

@@ -1,9 +1,9 @@
-{{ username }} commented on {{ path }}.
+<%- username }} commented on {{ path -%>.
 
 ----------------------
 
-{{ comment }}
+<%- comment -%>
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 4 - 4
packages/app/resource/locales/en_US/notifications/notActiveUser.txt

@@ -1,13 +1,13 @@
 Password Reset
 
-Hi, {{ email }}
+Hi, <%- email -%>
 
-A request has been received to change the password from {{ appTitle }}.
+A request has been received to change the password from <%- appTitle -%>.
 However, this email is not registerd. Please try again with different email.
 
 If you did not request a password reset, you can safely ignore this email.
 
 -------------------------------------------------------------------------
 
-GROWI: {{ appTitle }}
-URL: {{ url }}
+GROWI: <%- appTitle -%>
+URL: <%- url -%>

+ 2 - 2
packages/app/resource/locales/en_US/notifications/pageCreate.txt

@@ -1,5 +1,5 @@
-{{ username }} created a new page under {{ path }}.
+<%- username -%> created a new page under <%- path -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 2 - 2
packages/app/resource/locales/en_US/notifications/pageDelete.txt

@@ -1,5 +1,5 @@
-{{ username }} deleted the page  {{ path }}.
+<%- username -%> deleted the page  <%- path -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 2 - 2
packages/app/resource/locales/en_US/notifications/pageEdit.txt

@@ -1,5 +1,5 @@
-{{ username }} edited the page {{ path }}.
+<%- username -%> edited the page <%- path -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 2 - 2
packages/app/resource/locales/en_US/notifications/pageLike.txt

@@ -1,5 +1,5 @@
-{{ username }} liked the page {{ path }}.
+<%- username -%> liked the page <%- path -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 2 - 2
packages/app/resource/locales/en_US/notifications/pageMove.txt

@@ -1,5 +1,5 @@
-{{ username }} renamed the page {{ oldPath }} to {{ newPath }}.
+<%- username -%> renamed the page <%- oldPath -%> to <%- newPath -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 4 - 4
packages/app/resource/locales/en_US/notifications/passwordReset.txt

@@ -1,12 +1,12 @@
 Password Reset
 
-Hi, {{ email }}
+Hi, <%- email -%>
 
-A request has been received to change the password your GROWI ({{ appTitle }}) account.
+A request has been received to change the password your GROWI (<%- appTitle -%>) account.
 To reset your password, click on the link below.
 
-{{ url }}
+<%- url -%>
 
-This link will expire in 10 minutes at  {{ expiredAt }}.
+This link will expire in 10 minutes at  <%- expiredAt -%>.
 
 If you did not request a password reset, you can safely ignore this email.

+ 1 - 1
packages/app/resource/locales/en_US/notifications/passwordResetSuccessful.txt

@@ -1,6 +1,6 @@
 Password Reset Successful
 
-Hi {{ email }}
+Hi <%- email -%>
 
 Your password has been successfully reset.
 Please log in with your new password.

+ 4 - 4
packages/app/resource/locales/en_US/notifications/userActivation.txt

@@ -1,12 +1,12 @@
 Account confirmation
 
-Hi, {{ email }}
+Hi, <%- email -%>
 
-An acount has been created in GROWI ({{ appTitle }}).
+An acount has been created in GROWI (<%- appTitle -%>).
 To activate your account, click on the link below.
 
-{{ url }}
+<%- url -%>
 
-This link will expire in 1 hour at  {{ expiredAt }}.
+This link will expire in 1 hour at  <%- expiredAt -%>.
 
 If you did not created the account, you can safely ignore this email.

+ 6 - 6
packages/app/resource/locales/ja_JP/admin/userInvitation.txt

@@ -1,14 +1,14 @@
-Hi, {{ email }}
+Hi, <%- email -%>
 
 You are invited to our Wiki, you can log in with following account:
 
-Email: {{ email }}
-Password: {{ password }}
+Email: <%- email -%>
+Password: <%- password -%>
 (This password was auto generated. Update required at the first time you logging in)
 
 We are waiting for you!
-{{ url }}
+<%- url -%>
 
 --
-{{ appTitle }}
-{{ url }}
+<%- appTitle -%>
+<%- url -%>

+ 8 - 8
packages/app/resource/locales/ja_JP/admin/userWaitingActivation.txt

@@ -1,21 +1,21 @@
-Hi, {{ adminUser.name }}
+Hi, <%- adminUser.name -%>
 
-A user registered to {{ appTitle }}.
+A user registered to <%- appTitle -%>.
 
 
 ====
 Created user:
 
-Name: {{ createdUser.name }}
-User Name: {{ createdUser.username }}
-Email: {{ createdUser.email }}
+Name: <%- createdUser.name -%>
+User Name: <%- createdUser.username -%>
+Email: <%- createdUser.email -%>
 ====
 
 Please do some action with following URL:
-{{ url }}/admin/users
+<%- url -%>/admin/users
 
 
 --
-{{ appTitle }}
-{{ url }}
+<%- appTitle -%>
+<%- url -%>
 

+ 4 - 4
packages/app/resource/locales/ja_JP/notifications/notActiveUser.txt

@@ -1,13 +1,13 @@
 パスワードリセット
 
-こんにちは、 {{ email }}
+こんにちは、 <%- email -%>
 
-{{ appTitle }} からパスワード再設定のリクエストがありましたが、このemailは登録されておりません。
+<%- appTitle -%> からパスワード再設定のリクエストがありましたが、このemailは登録されておりません。
 他のemailアドレスで再度お試しください。
 
 もしこのリクエストに心当たりがない場合は、このメールを無視してください。
 
 -------------------------------------------------------------------------
 
-GROWI: {{ appTitle }}
-URL: {{ url }}
+GROWI: <%- appTitle -%>
+URL: <%- url -%>

+ 4 - 4
packages/app/resource/locales/ja_JP/notifications/passwordReset.txt

@@ -1,12 +1,12 @@
 パスワード リセット
 
-こんにちは, {{ email }}
+こんにちは, <%- email -%>
 
-あなたのGROWI ({{ appTitle }}) アカウントから、パスワード再設定のリクエストがありました。
+あなたのGROWI (<%- appTitle -%>) アカウントから、パスワード再設定のリクエストがありました。
 パスワードをリセットするには、以下のリンクをクリックしてください。
 
-{{ url }}
+<%- url -%>
 
-このリンクは10分後の {{ expiredAt }} に失効します。
+このリンクは10分後の <%- expiredAt -%> に失効します。
 
 もしこのリクエストに心当たりがない場合は、このメールを無視してください。

+ 1 - 1
packages/app/resource/locales/ja_JP/notifications/passwordResetSuccessful.txt

@@ -1,6 +1,6 @@
 パスワードリセットに成功
 
-こんにちは、 {{ email }}
+こんにちは、 <%- email -%>
 
 あなたのパスワードは正常にリセットされました。
 新しいパスワードでログインしてください。

+ 4 - 4
packages/app/resource/locales/ja_JP/notifications/userActivation.txt

@@ -1,13 +1,13 @@
 仮登録完了のお知らせ
 
-{{ email }} さん
+<%- email -%> さん
 
-GROWI ({{ appTitle }}) で仮登録が完了いたしました。
+GROWI (<%- appTitle -%>) で仮登録が完了いたしました。
 
 ご本人様確認のため、下記リンクをクリックし、アカウントの本登録を完了させて下さい。
 
-{{ url }}
+<%- url -%>
 
-このリンクは1時間後の {{ expiredAt }} に失効します。
+このリンクは1時間後の <%- expiredAt -%> に失効します。
 
 ※当メールの内容に心当たりがない場合は、このメールを無視してください。

+ 6 - 6
packages/app/resource/locales/zh_CN/admin/userInvitation.txt

@@ -1,14 +1,14 @@
-Hi, {{ email }}
+Hi, <%- email -%>
 
 You are invited to our Wiki, you can log in with following account:
 
-Email: {{ email }}
-Password: {{ password }}
+Email: <%- email -%>
+Password: <%- password -%>
 (This password was auto generated. Update required at the first time you logging in)
 
 We are waiting for you!
-{{ url }}
+<%- url -%>
 
 --
-{{ appTitle }}
-{{ url }}
+<%- appTitle -%>
+<%- url -%>

+ 8 - 8
packages/app/resource/locales/zh_CN/admin/userWaitingActivation.txt

@@ -1,21 +1,21 @@
-Hi, {{ adminUser.name }}
+Hi, <%- adminUser.name -%>
 
-A user registered to {{ appTitle }}.
+A user registered to <%- appTitle -%>.
 
 
 ====
 Created user:
 
-Name: {{ createdUser.name }}
-User Name: {{ createdUser.username }}
-Email: {{ createdUser.email }}
+Name: <%- createdUser.name -%>
+User Name: <%- createdUser.username -%>
+Email: <%- createdUser.email -%>
 ====
 
 Please do some action with following URL:
-{{ url }}/admin/users
+<%- url -%>/admin/users
 
 
 --
-{{ appTitle }}
-{{ url }}
+<%- appTitle -%>
+<%- url -%>
 

+ 3 - 3
packages/app/resource/locales/zh_CN/notifications/comment.txt

@@ -1,9 +1,9 @@
-{{ username }} commented on {{ path }}.
+<%- username -%> commented on <%- path -%>.
 
 ----------------------
 
-{{ comment }}
+<%- comment -%>
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 4 - 4
packages/app/resource/locales/zh_CN/notifications/notActiveUser.txt

@@ -1,13 +1,13 @@
 重设密码
 
-嗨,{{电子邮件}}
+嗨,<%-电子邮件-%>
 
-已收到来自 {{appTitle}} 的更改密码请求。
+已收到来自 <%-appTitle-%> 的更改密码请求。
 但是,此电子邮件未注册。请使用其他电子邮件重试。
 
 如果您没有要求重置密码,则可以放心地忽略此电子邮件。
 
 -------------------------------------------------------------------------
 
-GROWI: {{ appTitle }}
-URL: {{ url }}
+GROWI: <%- appTitle -%>
+URL: <%- url -%>

+ 2 - 2
packages/app/resource/locales/zh_CN/notifications/pageCreate.txt

@@ -1,5 +1,5 @@
-{{ username }} created a new page under {{ path }}.
+<%- username -%> created a new page under <%- path -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 2 - 2
packages/app/resource/locales/zh_CN/notifications/pageDelete.txt

@@ -1,5 +1,5 @@
-{{ username }} deleted the page  {{ path }}.
+<%- username -%> deleted the page  <%- path -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 2 - 2
packages/app/resource/locales/zh_CN/notifications/pageEdit.txt

@@ -1,5 +1,5 @@
-{{ username }} edited the page {{ path }}.
+<%- username -%> edited the page <%- path -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 2 - 2
packages/app/resource/locales/zh_CN/notifications/pageLike.txt

@@ -1,5 +1,5 @@
-{{ username }} liked the page {{ path }}.
+<%- username -%> liked the page <%- path -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 2 - 2
packages/app/resource/locales/zh_CN/notifications/pageMove.txt

@@ -1,5 +1,5 @@
-{{ username }} renamed the page {{ oldPath }} to {{ newPath }}.
+<%- username -%> renamed the page <%- oldPath -%> to <%- newPath -%>.
 
 ----------------------
 
-Growi: {{ appTitle }}
+Growi: <%- appTitle -%>

+ 3 - 3
packages/app/resource/locales/zh_CN/notifications/passwordReset.txt

@@ -1,11 +1,11 @@
 重设密码
 
-嗨,{{ email }}
+嗨,<%- email -%>
 
-已收到更改您 GROWI ({{appTitle}}) 帐户 密码的请求。
+已收到更改您 GROWI (<%-appTitle-%>) 帐户 密码的请求。
 要重置密码,请单击下面的链接。
 
-{{ url }}
+<%- url -%>
 
 这个链接在10分钟后的{ expiredAt }}失效。
 

+ 1 - 1
packages/app/resource/locales/zh_CN/notifications/passwordResetSuccessful.txt

@@ -1,6 +1,6 @@
 密码重置成功
 
-嗨, {{email}}
+嗨, <%-email-%>
 
 您的密码已成功重置。
 请使用您的新密码登录。

+ 4 - 4
packages/app/resource/locales/zh_CN/notifications/userActivation.txt

@@ -1,12 +1,12 @@
 确认账户创建
 
-致{{ email }}
+致<%- email -%>
 
-已使用 GROWI ({{ appTitle }}) 创建帐户。
+已使用 GROWI (<%- appTitle -%>) 创建帐户。
 单击下面的链接以激活您的帐户。
 
-{{ url }}
+<%- url -%>
 
-这个链接将在1小时后即{{ expiredAt }}失效。
+这个链接将在1小时后即<%- expiredAt -%>失效。
 
 如果您尚未创建,请忽略此电子邮件。

+ 0 - 2
packages/app/src/server/crowi/dev.js

@@ -8,8 +8,6 @@ import loggerFactory from '~/utils/logger';
 
 import nextFactory from '../routes/next';
 
-const swig = require('swig-templates');
-
 const logger = loggerFactory('growi:crowi:dev');
 
 

+ 0 - 12
packages/app/src/server/crowi/express-init.js

@@ -2,8 +2,6 @@ import { manifestPath as presetThemesManifestPath } from '@growi/preset-themes';
 import csrf from 'csurf';
 import mongoose from 'mongoose';
 
-import { i18n, localePath } from '^/config/next-i18next.config';
-
 import loggerFactory from '~/utils/logger';
 import { resolveFromRoot } from '~/utils/project-dir-utils';
 
@@ -22,8 +20,6 @@ module.exports = function(crowi, app) {
   const expressSession = require('express-session');
   const flash = require('connect-flash');
   const mongoSanitize = require('express-mongo-sanitize');
-  const swig = require('swig-templates');
-  const webpackAssets = require('express-webpack-assets');
   // const i18next = require('i18next');
   // const i18nFsBackend = require('i18next-node-fs-backend');
   // const i18nSprintf = require('i18next-sprintf-postprocessor');
@@ -122,10 +118,6 @@ module.exports = function(crowi, app) {
   ));
   app.use('/static/plugins', express.static(path.resolve(__dirname, '../../../tmp/plugins')));
 
-  app.engine('html', swig.renderFile);
-  // app.set('view cache', false);  // Default: true in production, otherwise undefined. -- 2017.07.04 Yuki Takei
-  app.set('view engine', 'html');
-  app.set('views', crowi.viewsDir);
   app.use(methodOverride());
 
   // inject rawBody to req
@@ -173,10 +165,6 @@ module.exports = function(crowi, app) {
   app.use(injectCurrentuserToLocalvars);
   app.use(autoReconnectToS2sMsgServer);
 
-  const middlewares = require('../util/middlewares')(crowi, app);
-  app.use(middlewares.swigFilters(swig));
-  app.use(middlewares.swigFunctions());
-
   // app.use(i18nMiddleware.handle(i18next));
   // TODO: Remove this workaround implementation when i18n works correctly.
   //       For now, req.t returns string given to req.t(string)

+ 0 - 3
packages/app/src/server/routes/hackmd.js

@@ -3,13 +3,10 @@ import loggerFactory from '~/utils/logger';
 /* eslint-disable no-use-before-define */
 
 const logger = loggerFactory('growi:routes:hackmd');
-const path = require('path');
 
 const hackmdFiles = require('@growi/hackmd');
 const axios = require('axios');
 const ejs = require('ejs');
-const fs = require('graceful-fs');
-const swig = require('swig-templates');
 
 const ApiResponse = require('../util/apiResponse');
 

+ 1 - 1
packages/app/src/server/service/import.js

@@ -396,7 +396,7 @@ class ImportService {
       // https://regex101.com/r/mD4eZs/6
       // prevent from unexpecting attack doing unzip file (path traversal attack)
       // FOR EXAMPLE
-      // ../../src/server/views/admin/markdown.html
+      // ../../src/server/example.html
       if (fileName.match(/(\.\.\/|\.\.\\)/)) {
         logger.error('File path is not appropriate.', fileName);
         return;

+ 8 - 2
packages/app/src/server/service/mail.ts

@@ -1,13 +1,17 @@
+import { promisify } from 'util';
+
+import ejs from 'ejs';
 import nodemailer from 'nodemailer';
-import swig from 'swig-templates';
 
 import loggerFactory from '~/utils/logger';
 
 import S2sMessage from '../models/vo/s2s-message';
+
 import { S2sMessageHandlable } from './s2s-messaging/handlable';
 
 const logger = loggerFactory('growi:service:mail');
 
+
 type MailConfig = {
   to?: string,
   from?: string,
@@ -190,8 +194,10 @@ class MailService implements S2sMessageHandlable {
       throw new Error('Mailer is not completed to set up. Please set up SMTP or AWS setting.');
     }
 
+    const renderFilePromisified = promisify(ejs.renderFile);
+
     const templateVars = config.vars || {};
-    const output = await swig.renderFile(
+    const output = await renderFilePromisified(
       config.template,
       templateVars,
     );

+ 0 - 133
packages/app/src/server/util/middlewares.js

@@ -1,133 +0,0 @@
-import loggerFactory from '~/utils/logger';
-
-// don't add any more middlewares to this file.
-// all new middlewares should be an independent file under /server/middlewares
-// eslint-disable-next-line no-unused-vars
-
-const { pathUtils } = require('@growi/core');
-const { formatDistanceStrict } = require('date-fns');
-const entities = require('entities');
-
-// eslint-disable-next-line no-unused-vars
-const logger = loggerFactory('growi:lib:middlewares');
-
-module.exports = (crowi) => {
-  const { configManager } = crowi;
-
-  const middlewares = {};
-
-  middlewares.swigFunctions = function() {
-    return function(req, res, next) {
-      require('../util/swigFunctions')(crowi, req, res.locals);
-      next();
-    };
-  };
-
-  middlewares.swigFilters = function(swig) {
-
-    return function(req, res, next) {
-      swig.setFilter('path2name', (string) => {
-        const name = string.replace(/(\/)$/, '');
-
-        if (name.match(/.+\/([^/]+\/\d{4}\/\d{2}\/\d{2})$/)) { // /.../hoge/YYYY/MM/DD 形式のページ
-          return name.replace(/.+\/([^/]+\/\d{4}\/\d{2}\/\d{2})$/, '$1');
-        }
-        if (name.match(/.+\/([^/]+\/\d{4}\/\d{2})$/)) { // /.../hoge/YYYY/MM 形式のページ
-          return name.replace(/.+\/([^/]+\/\d{4}\/\d{2})$/, '$1');
-        }
-        if (name.match(/.+\/([^/]+\/\d{4})$/)) { // /.../hoge/YYYY 形式のページ
-          return name.replace(/.+\/([^/]+\/\d{4})$/, '$1');
-        }
-
-        return name.replace(/.+\/(.+)?$/, '$1'); // ページの末尾を拾う
-      });
-
-      swig.setFilter('normalizeDateInPath', (path) => {
-        const patterns = [
-          [/20(\d{2})(\d{2})(\d{2})(.+)/g, '20$1/$2/$3/$4'],
-          [/20(\d{2})(\d{2})(\d{2})/g, '20$1/$2/$3'],
-          [/20(\d{2})(\d{2})(.+)/g, '20$1/$2/$3'],
-          [/20(\d{2})(\d{2})/g, '20$1/$2'],
-          [/20(\d{2})_(\d{1,2})_(\d{1,2})_?(.+)/g, '20$1/$2/$3/$4'],
-          [/20(\d{2})_(\d{1,2})_(\d{1,2})/g, '20$1/$2/$3'],
-          [/20(\d{2})_(\d{1,2})_?(.+)/g, '20$1/$2/$3'],
-          [/20(\d{2})_(\d{1,2})/g, '20$1/$2'],
-        ];
-
-        for (let i = 0; i < patterns.length; i++) {
-          const mat = patterns[i][0];
-          const rep = patterns[i][1];
-          if (path.match(mat)) {
-            return path.replace(mat, rep);
-          }
-        }
-
-        return path;
-      });
-
-      swig.setFilter('datetz', (input, format) => {
-        // timezone
-        const swigFilters = require('swig-templates/lib/filters');
-        return swigFilters.date(input, format, crowi.appService.getTzoffset());
-      });
-
-      swig.setFilter('dateDistance', (input) => {
-        return formatDistanceStrict(input, new Date());
-      });
-
-      swig.setFilter('nl2br', (string) => {
-        return string
-          .replace(/\n/g, '<br>');
-      });
-
-      swig.setFilter('removeTrailingSlash', (string) => {
-        return pathUtils.removeTrailingSlash(string);
-      });
-
-      swig.setFilter('addTrailingSlash', (string) => {
-        return pathUtils.addTrailingSlash(string);
-      });
-
-      swig.setFilter('presentation', (string) => {
-        // 手抜き
-        return string
-          .replace(/\s(https?.+(jpe?g|png|gif))\s/, '\n\n\n![]($1)\n\n\n');
-      });
-
-      swig.setFilter('encodeHTML', (string) => {
-        return entities.encodeHTML(string);
-      });
-
-      swig.setFilter('preventXss', (string) => {
-        return crowi.xss.process(string);
-      });
-
-      swig.setFilter('slice', (list, start, end) => {
-        return list.slice(start, end);
-      });
-
-      swig.setFilter('push', (list, element) => {
-        list.push(element);
-        return list;
-      });
-
-      next();
-    };
-  };
-
-  middlewares.awsEnabled = function() {
-    return function(req, res, next) {
-      if ((configManager.getConfig('crowi', 'aws:s3Region') !== '' || this.configManager.getConfig('crowi', 'aws:s3CustomEndpoint') !== '')
-          && configManager.getConfig('crowi', 'aws:s3Bucket') !== ''
-          && configManager.getConfig('crowi', 'aws:s3AccessKeyId') !== ''
-          && configManager.getConfig('crowi', 'aws:s3SecretAccessKey') !== '') {
-        req.flash('globalError', req.t('message.aws_sttings_required'));
-        return res.redirect('/');
-      }
-
-      return next();
-    };
-  };
-
-  return middlewares;
-};

+ 0 - 208
packages/app/src/server/util/swigFunctions.js

@@ -1,208 +0,0 @@
-module.exports = function(crowi, req, locals) {
-  const debug = require('debug')('growi:lib:swigFunctions');
-  const stringWidth = require('string-width');
-
-  const { pathUtils } = require('@growi/core');
-
-  const Page = crowi.model('Page');
-  const User = crowi.model('User');
-  const {
-    configManager,
-    cdnResourcesService,
-    passportService,
-    appService,
-    aclService,
-    customizeService,
-    pageService,
-  } = crowi;
-  debug('initializing swigFunctions');
-
-  locals.nodeVersion = function() {
-    return crowi.runtimeVersions.versions.node ? crowi.runtimeVersions.versions.node.version : '-';
-  };
-  locals.npmVersion = function() {
-    return crowi.runtimeVersions.versions.npm ? crowi.runtimeVersions.versions.npm.version : '-';
-  };
-  locals.yarnVersion = function() {
-    return crowi.runtimeVersions.versions.yarn ? crowi.runtimeVersions.versions.yarn.version : '-';
-  };
-
-  locals.getAppTitleFontSize = function(appTitle) {
-    const appTitleWidth = stringWidth(appTitle);
-    let fontSize = 22;
-    if (appTitleWidth < 13) { /* do nothing */ }
-    else if (appTitleWidth < 21) {
-      fontSize -= 3 * (Math.floor((appTitleWidth - 13) / 3) + 1);
-    }
-    else {
-      fontSize = 11;
-    }
-    return fontSize;
-  };
-
-  /**
-   * @see ConfigManager#getConfig
-   */
-  locals.getConfig = configManager.getConfig.bind(configManager);
-
-  /**
-   * **Do not use this unless absolutely necessary. Use getConfig instead.**
-   */
-  locals.getConfigFromDB = configManager.getConfigFromDB.bind(configManager);
-
-  /**
-   * **Do not use this unless absolutely necessary. Use getConfig instead.**
-   */
-  locals.getConfigFromEnvVars = configManager.getConfigFromEnvVars.bind(configManager);
-
-  /**
-   * pass service/utils instances to swig
-   */
-  locals.appService = appService;
-  locals.aclService = aclService;
-  locals.customizeService = customizeService;
-  locals.passportService = passportService;
-  locals.pageService = pageService;
-  locals.pathUtils = pathUtils;
-
-  locals.noCdn = function() {
-    return cdnResourcesService.noCdn;
-  };
-
-  locals.cdnScriptTag = function(name) {
-    return cdnResourcesService.getScriptTagByName(name);
-  };
-  locals.cdnScriptTagsByGroup = function(group) {
-    const tags = cdnResourcesService.getScriptTagsByGroup(group);
-    return tags.join('\n');
-  };
-
-  locals.cdnStyleTag = function(name) {
-    return cdnResourcesService.getStyleTagByName(name);
-  };
-
-  locals.cdnStyleTagsByGroup = function(group) {
-    const tags = cdnResourcesService.getStyleTagsByGroup(group);
-    return tags.join('\n');
-  };
-
-  locals.cdnHighlightJsStyleTag = function(styleName) {
-    return cdnResourcesService.getHighlightJsStyleTag(styleName);
-  };
-
-  /**
-   * return true if enabled but strategy has some problem
-   */
-  locals.isLdapSetupFailed = function() {
-    return (
-      configManager.getConfig('crowi', 'security:passport-ldap:isEnabled')
-      && !passportService.isLdapStrategySetup
-    );
-  };
-
-  locals.getSamlMissingMandatoryConfigKeys = function() {
-    return crowi.passportService.getSamlMissingMandatoryConfigKeys();
-  };
-
-  locals.isHackmdSetup = function() {
-    return process.env.HACKMD_URI != null;
-  };
-
-  locals.parentPath = function(path) {
-    if (path === '/') {
-      return path;
-    }
-
-    if (path.match(/.+\/$/)) {
-      return path;
-    }
-
-    return `${path}/`;
-  };
-
-  locals.isUserPageList = function(path) {
-    if (path.match(/^\/user\/[^/]+\/$/)) {
-      return true;
-    }
-
-    return false;
-  };
-
-  locals.isTopPage = function() {
-    const path = req.path || '';
-    if (path === '/') {
-      return true;
-    }
-
-    return false;
-  };
-
-  locals.isTrashPage = function(path = '') {
-    if (path.match(/^\/trash(\/.*)?$/)) {
-      return true;
-    }
-
-    return false;
-  };
-
-  locals.userPageRoot = function(user) {
-    if (!user || !user.username) {
-      return '';
-    }
-    return `/user/${user.username}`;
-  };
-
-  locals.pagesDataForTimeline = function(pages) {
-    return pages.map((page) => {
-      return {
-        id: page.id,
-        path: page.path,
-        revision: page.revision,
-      };
-    });
-  };
-
-  locals.attachTitleHeader = function(path) {
-    return pathUtils.attachTitleHeader(path);
-  };
-
-  locals.css = {
-    grant(pageData) {
-      if (!pageData) {
-        return '';
-      }
-
-      switch (pageData.grant) {
-        case Page.GRANT_PUBLIC:
-          return 'grant-public';
-        case Page.GRANT_RESTRICTED:
-          return 'grant-restricted';
-        // case Page.GRANT_SPECIFIED:
-        //  return 'grant-specified';
-        //  break;
-        case Page.GRANT_OWNER:
-          return 'grant-owner';
-        default:
-          break;
-      }
-      return '';
-    },
-    userStatus(user) {
-      switch (user.status) {
-        case User.STATUS_REGISTERED:
-          return 'label-info';
-        case User.STATUS_ACTIVE:
-          return 'label-success';
-        case User.STATUS_SUSPENDED:
-          return 'label-warning';
-        case User.STATUS_DELETED:
-          return 'label-danger';
-        case User.STATUS_INVITED:
-          return 'label-info';
-        default:
-          break;
-      }
-      return '';
-    },
-  };
-};

+ 0 - 1
packages/app/src/server/views/500.html

@@ -1 +0,0 @@
-Error: {{ error.message }}

+ 0 - 45
packages/app/src/server/views/forgot-password.html

@@ -1,45 +0,0 @@
-{% extends './layout/layout.html' %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName(t('forgot_password.forgot_password')) }}{% endblock %}
-
-
-{#
-  # Remove default contents
-  #}
- {% block html_head_loading_legacy %}
- {% endblock %}
- {% block html_head_loading_app %}
- {% endblock %}
- {% block layout_head_nav %}
- {% endblock %}
- {% block sidebar %}
- {% endblock %}
- {% block head_warn_alert_siteurl_undefined %}
- {% endblock %}
- {% block fixed-controls %}
- {% endblock %}
-
- {% block html_additional_headers %}
-   <script src="{{ webpack_asset('js/nologin.js') }}" defer></script>
- {% endblock %}
-
-{% block layout_main %}
-
-  <div id="main" class="main">
-    <div id="content-main" class="content-main container-lg">
-      <div class="container">
-        <div class="row justify-content-md-center">
-          <div class="col-md-6 mt-5">
-            <div class="text-center">
-              <h1><i class="icon-lock large"></i></h1>
-              <h1 class="text-center">{{ t('forgot_password.forgot_password') }}</h1>
-              <h3>{{ t('forgot_password.password_reset_request_desc') }}</h3>
-              <div id="password-reset-request-form"></div>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-
-{% endblock %}

+ 0 - 60
packages/app/src/server/views/forgot-password/error.html

@@ -1,60 +0,0 @@
-{% extends '../layout/layout.html' %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName(t('forgot_password.reset_password')) }}{% endblock %}
-
-
-{#
-  # Remove default contents
-  #}
- {% block html_head_loading_legacy %}
- {% endblock %}
- {% block html_head_loading_app %}
- {% endblock %}
- {% block layout_head_nav %}
- {% endblock %}
- {% block sidebar %}
- {% endblock %}
- {% block head_warn_alert_siteurl_undefined %}
- {% endblock %}
- {% block fixed-controls %}
- {% endblock %}
-
- {% block html_additional_headers %}
-   <script src="{{ webpack_asset('js/nologin.js') }}" defer></script>
- {% endblock %}
-
-{% block layout_main %}
-
-  <div id="main" class="main">
-    <div id="content-main" class="content-main container-lg">
-      <div class="container">
-        <div class="row justify-content-md-center">
-          <div class="col-md-6 mt-5">
-            <div class="text-center">
-              <h1><i class="icon-lock-open large"></i></h1>
-              <h2 class="text-center">{{ t('forgot_password.reset_password') }}</h2>
-
-                {% if key === 'password-reset-is-unavailable' %}
-                <h3 class="text-muted">This feature is unavailable.</h3>
-                {% endif %}
-
-                {% if key === 'password-reset-order-is-not-appropriate' %}
-                <div>
-                  <div class="alert alert-warning mb-3">
-                    <h2>{{ t('forgot_password.incorrect_token_or_expired_url') }}</h2>
-                  </div>
-                  <a href="/forgot-password" class="link-switch">
-                    <i class="icon-key"></i> {{ t('forgot_password.forgot_password') }}
-                  </a>
-                </div>
-                {% endif %}
-
-            </div>
-          </div>
-        </div>
-      </div>
-
-    </div>
-  </div>
-
-{% endblock %}

+ 0 - 95
packages/app/src/server/views/installer.html

@@ -1,95 +0,0 @@
-<!DOCTYPE html>
-<html>
-{% block html_head %}
-<head>
-  <meta charset="utf-8">
-  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-  <title>{{ customizeService.generateCustomTitleForFixedPageName(t('installer.setup')) }}</title>
-  <meta name="description" content="">
-  <meta name="author" content="">
-
-  <meta name="viewport" content="width=device-width,initial-scale=1">
-
-  <meta name="apple-mobile-web-app-title" content="{{ appService.getAppTitle() | preventXss }}">
-
-  {% include './widget/headers/favicon.html' %}
-
-  {{ cdnScriptTagsByGroup('basis') }}
-
-  {% include './widget/headers/scripts-for-dev.html' %}
-
-  <script src="{{ webpack_asset('js/boot.js') }}"></script>
-
-  <script src="{{ webpack_asset('js/vendors.js') }}" defer></script>
-  <script src="{{ webpack_asset('js/commons.js') }}" defer></script>
-
-  <!-- styles -->
-  {% include './widget/headers/styles-for-app.html' %}
-  {% block theme_css_block %}
-    {% include './widget/headers/styles-theme.html' with {themeName: 'default'} %}
-  {% endblock %}
-
-  {{ cdnStyleTagsByGroup('basis') }}
-
-  <script src="{{ webpack_asset('js/installer.js') }}" defer></script>
-
-</head>
-{% endblock %}
-
-{% block html_body %}
-<body
-  class="installer nologin growi"
-  {% block html_base_attr %}{% endblock %}
- >
-
-<div id="growi-context-extractor"></div>
-
-<div id="wrapper">
-
-  <!-- Page Content -->
-  <div id="page-wrapper">
-    <div class="main container-fluid">
-
-      <div class="row">
-        <div class="col-md-12">
-          <div class="login-header mx-auto">
-            <div class="logo">{% include 'widget/logo.html' %}</div>
-            <h1 class="my-3">GROWI</h1>
-
-            <div class="login-form-errors px-3">
-              {% if req.form.errors.length > 0 %}
-              <div class="alert alert-danger">
-                <ul class="mb-0">
-                {% for error in req.form.errors %}
-                  <li>{{ error }}</li>
-                {% endfor %}
-                </ul>
-              </div>
-              {% endif %}
-            </div>
-          </div>
-        </div>
-        <div class="col-md-12">
-          <div id="installer-form-container"
-            data-user-name="{{ req.body.registerForm.username }}"
-            data-name="{{ req.body.registerForm.name }}"
-            data-email="{{ req.body.registerForm.email }}">
-          </div>
-        </div>
-      </div>{# /.row #}
-
-    </div>
-  </div><!-- /#page-wrapper -->
-
-</div><!-- /#wrapper -->
-
-{% block body_end %}
-{% endblock %}
-</body>
-{% endblock %}
-
-<script type="application/json" id="growi-context-hydrate">
-{{ local_config|json|safe|preventXss }}
-</script>
-
-</html>

+ 0 - 150
packages/app/src/server/views/invited.html

@@ -1,150 +0,0 @@
-{% extends 'layout/layout.html' %}
-
-{% block html_base_css %}invited nologin{% endblock %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName('Registration') }}{% endblock %}
-
-
-
-{#
-  # Remove default contents
-  #}
- {% block html_head_loading_legacy %}
- {% endblock %}
- {% block html_head_loading_app %}
- {% endblock %}
- {% block layout_head_nav %}
- {% endblock %}
- {% block sidebar %}
- {% endblock %}
- {% block head_warn_alert_siteurl_undefined %}
- {% endblock %}
- {% block fixed-controls %}
- {% endblock %}
-
-
-
- {% block layout_main %}
-
-<div class="main container-fluid">
-
-  <div class="row">
-
-    <div class="login-header offset-4 col-sm-4">
-      <div class="logo">{% include 'widget/logo.html' %}</div>
-      <h1>GROWI</h1>
-
-      <div id="login-form-errors">
-        {% set errorMessages = req.flash('errorMessages') %}
-        {% if errorMessages.length > 0 %}
-        <div class="alert alert-danger">
-          <ul class="mb-0">
-          {% for error in errorMessages %}
-            <li>{{ error }}</li>
-          {% endfor %}
-          </ul>
-        </div>
-        {% endif %}
-
-        {% set message = req.flash('warningMessage') %}
-        {% if message.length %}
-        <div class="alert alert-danger">
-          {{ message }}
-        </div>
-        {% endif %}
-
-        {% if req.form.errors.length > 0 %}
-        <div class="alert alert-danger">
-          <ul>
-          {% for error in req.form.errors %}
-            <li>{{ error }}</li>
-          {% endfor %}
-          </ul>
-        </div>
-        {% endif %}
-      </div>
-    </div>
-
-    <div class="login-dialog grw-pt-10px p-b-10 offset-4 col-sm-4" id="login-dialog">
-      <p class="alert alert-success">
-        <strong>アカウントの作成</strong><br>
-        <small>招待を受け取ったメールアドレスでアカウントを作成します</small>
-      </p>
-
-      <form role="form" action="/login/activateInvited" method="post" id="invited-form">
-
-        <div class="input-group">
-          <div class="input-group-prepend">
-            <span class="input-group-text"><i class="icon-envelope"></i></span>
-          </div>
-          <input type="text" class="form-control" disabled value="{{ user.email }}">
-        </div>
-        <div class="input-group" id="input-group-username">
-          <div class="input-group-prepend">
-            <span class="input-group-text"><i class="icon-user"></i></span>
-          </div>
-          <input type="text" class="form-control" placeholder="{{ t('User ID') }}" name="invitedForm[username]" value="{{ req.body.invitedForm.username }}" required>
-        </div>
-        <p class="form-text text-muted">
-          <span id="help-block-username"></span>
-        </p>
-
-        <div class="input-group">
-          <div class="input-group-prepend">
-            <span class="input-group-text"><i class="icon-tag"></i></span>
-          </div>
-          <input type="text" class="form-control" placeholder="{{ t('Name') }}" name="invitedForm[name]" value="{{ req.body.invitedForm.name }}" required>
-        </div>
-
-
-        <div class="input-group">
-          <div class="input-group-prepend">
-            <span class="input-group-text"><i class="icon-lock"></i></span>
-          </div>
-          <input type="password" class="form-control" placeholder="{{ t('Password') }}" name="invitedForm[password]" required>
-        </div>
-
-        <div class="input-group justify-content-center d-flex mt-5">
-          <input type="hidden" name="_csrf" value="{{ req.csrfToken() }}">
-          <button type="submit" class="btn btn-fill" id="register">
-            <div class="eff"></div>
-            <span class="btn-label"><i class="icon-user-follow"></i></span>
-            <span class="btn-label-text">{{ t('Create') }}</span>
-          </button>
-        </div>
-
-        <div class="input-group mt-5 d-flex justify-content-center">
-          <a href="https://growi.org" class="link-growi-org">
-            <span class="growi">GROWI</span>.<span class="org">ORG
-          </a>
-        </div>
-      </form>
-    </div>
-
-  </div>{# /.row #}
-
-</div>{# /.main #}
-
-<script>
-$(function() {
-  $('#invited-form input[name="invitedForm[username]"]').change(function(e) {
-    var username = $(this).val();
-    $('#login-dialog').removeClass('has-error');
-    $('#input-group-username').removeClass('has-error');
-    $('#help-block-username').html("");
-
-    $.getJSON('/_api/v3/check-username', {username: username}, function(json) {
-      if (!json.valid) {
-        $('#help-block-username').html(
-          '<i class="icon-fw icon-ban"></i>このユーザーIDは利用できません。'
-        );
-        $('#login-dialog').addClass('has-error');
-        $('#input-group-username').addClass('has-error');
-      }
-    });
-  });
-});
-</script>
-
-{% endblock %}
-

+ 0 - 43
packages/app/src/server/views/layout-growi/base/layout.html

@@ -1,43 +0,0 @@
-{% extends '../../layout/layout.html' %}
-
-{% block html_additional_headers %}
-  {% parent %}
-  {{ cdnScriptTag('highlight-addons') }}
-  {{ cdnScriptTag('drawio-viewer') }}
-{% endblock %}
-
-{% block layout_main %}
-<div class="h-100 d-flex flex-column justify-content-between">
-
-  <div id="growi-context-extractor"></div>
-
-  {% block content_header_wrapper %}
-    <header class="py-0">
-      {% block content_header %}
-        <div id="grw-subnav-container"></div>
-      {% endblock %}
-    </header>
-    <div id="grw-subnav-switcher-container" class="d-edit-none"></div>
-    <div id="grw-subnav-sticky-trigger" class="sticky-top"></div>
-    <div id="grw-fav-sticky-trigger" class="sticky-top"></div>
-  {% endblock %}
-
-  <div class="flex-grow-1">
-    <div id="main" class="main {% if page %}{{ css.grant(page) }}{% endif %}">
-      {% block content_main_before %}
-      {% endblock %}
-
-      {% block content_main %}
-      {% endblock content_main %}
-
-      {% block content_main_after %}
-      {% endblock %}
-    </div>
-  </div>
-
-  <footer class="footer d-edit-none">
-    {% block content_footer %}{% endblock %}
-  </footer>
-
-</div>
-{% endblock %} {# layout_main #}

+ 0 - 24
packages/app/src/server/views/layout-growi/expired_shared_page.html

@@ -1,24 +0,0 @@
-{% extends './shared_page.html' %}
-
-{% block html_title %}
-  {{ customizeService.generateCustomTitle('Page is expired') }}
-{% endblock %}
-
-{% block content_main %}
-  <div class="container-lg">
-
-    <div
-      id="is-shared-page"
-      data-share-link-expired-at="{% if sharelink.expiredAt %}{{ sharelink.expiredAt|datetz('Y/m/d H:i:s')}}{% endif %}"
-      data-share-link-created-at="{{ sharelink.createdAt|datetz('Y/m/d H:i:s')}}"
-    >
-      <div id="share-link-alert"></div>
-
-      <h2 class="text-muted mt-4">
-        <i class="icon-ban" aria-hidden="true"></i>
-        Page is expired
-      </h2>
-    </div>
-
-  </div>
-{% endblock %}

+ 0 - 25
packages/app/src/server/views/layout-growi/forbidden.html

@@ -1,25 +0,0 @@
-{% extends 'base/layout.html' %}
-
-
-{% block content_main_before %}
-  <div class="container-lg">
-    {% include '../widget/page_alerts.html' %}
-  </div>
-{% endblock %}
-
-{% block content_main %}
-  <div
-    id="content-main"
-    class="content-main page-list"
-    data-path="{{ encodeURI(path) }}"
-    data-current-user="{% if user %}{{ user._id.toString() }}{% endif %}"
-    data-page-is-not-creatable="true"
-    >
-  </div>
-  <div class="container-lg" id="forbidden-page"></div>
-{% endblock %}
-
-{% block body_end %}
-  <div id="crowi-modals">
-  </div>
-{% endblock %}

+ 0 - 30
packages/app/src/server/views/layout-growi/identical-path-page.html

@@ -1,30 +0,0 @@
-{% extends 'base/layout.html' %}
-
-{% block content_main_before %}
-{% endblock %}
-
-
-{% block content_main %}
-  <div class="grw-container-convertible">
-
-    <div id="content-main" class="content-main d-flex"
-      data-path="{{ encodeURI(path) }}"
-      data-current-user="{% if user %}{{ user._id.toString() }}{% endif %}"
-      data-page-is-not-creatable="true"
-      data-identical-path="true"
-    >
-      <div class="flex-grow-1 flex-basis-0 mw-0">
-        <div
-          id="identical-path-page"
-          data-identical-path-pages="{{ identicalPathPages|json }}"
-        ></div>
-      </div>
-      <div id="page-context"></div>
-    </div>
-
-  </div>
-{% endblock %}
-
-{% block content_footer %}
-  <div id="page-content-footer"></div>
-{% endblock %}

+ 0 - 20
packages/app/src/server/views/layout-growi/not_creatable.html

@@ -1,20 +0,0 @@
-{% extends 'base/layout.html' %}
-
-
-{% block content_main_before %}
-  <div class="container-lg">
-    {% include '../widget/page_alerts.html' %}
-  </div>
-{% endblock %}
-
-
-{% block content_main %}
-  <div class="container-lg">
-    {% include '../widget/not_creatable_content.html' %}
-  </div>
-{% endblock %}
-
-{% block body_end %}
-  <div id="crowi-modals">
-  </div>
-{% endblock %}

+ 0 - 32
packages/app/src/server/views/layout-growi/not_found.html

@@ -1,32 +0,0 @@
-{% extends 'base/layout.html' %}
-
-{% block html_base_css %}not-found-page{% endblock %}
-
-{% block content_main_before %}
-  <div
-    id="growi-pagetree-not-found-context"
-    data-not-found-target-path-or-id="{% if notFoundTargetPathOrId %}{{notFoundTargetPathOrId|json}}{% endif %}"
-  >
-  </div>
-  <div
-    id="growi-not-found-context"
-    data-page-id="{%if pageId %}{{pageId.toString()}}{% endif %}"
-  >
-  </div>
-  <div class="grw-container-convertible">
-    {% include '../widget/page_alerts.html' %}
-  </div>
-{% endblock %}
-
-
-{% block content_main %}
-  <div class="grw-container-convertible">
-    {% include '../widget/not_found_content.html' %}
-  </div>
-{% endblock %}
-
-{% block body_end %}
-  <div id="presentation-layer" class="fullscreen-layer">
-    <div id="presentation-container"></div>
-  </div>
-{% endblock %}

+ 0 - 16
packages/app/src/server/views/layout-growi/not_found_shared_page.html

@@ -1,16 +0,0 @@
-{% extends './shared_page.html' %}
-
-{% block html_title %}
-  {{ customizeService.generateCustomTitle('Page is not found') }}
-{% endblock %}
-
-{% block content_main %}
-  <div class="container-lg">
-
-    <h2 class="text-muted mt-4">
-      <i class="icon-ban" aria-hidden="true"></i>
-      Page is not found
-    </h2>
-
-  </div>
-{% endblock %}

+ 0 - 35
packages/app/src/server/views/layout-growi/page.html

@@ -1,35 +0,0 @@
-{% extends 'base/layout.html' %}
-
-{% block html_additional_headers %}
-  {% parent %}
-
-  <!-- OGP -->
-  <meta property="og:site_name" content="{{ appService.getAppTitle() | preventXss }}" />
-  <meta property="og:title" content="{{ page.path | preventXss }}" />
-  <meta property="og:url" content="{{ appService.getSiteUrl() | preventXss }}/{{ page.id }}" />
-  <meta property="og:type" content="article" />
-  <meta property="og:image" content="{{ appService.getSiteUrl() | preventXss }}/ogp/{{ page.id }}" />
-{% endblock %}
-
-{% block content_main_before %}
-{% endblock %}
-
-
-{% block content_main %}
-  <div class="grw-container-convertible">
-
-    {% include '../widget/page_content.html' %}
-
-  </div>
-{% endblock %}
-
-{% block content_footer %}
-  {% include 'widget/comments.html' %}
-  <div id="page-content-footer"></div>
-{% endblock %}
-
-{% block body_end %}
-  <div id="presentation-layer" class="fullscreen-layer">
-    <div id="presentation-container"></div>
-  </div>
-{% endblock %}

+ 0 - 31
packages/app/src/server/views/layout-growi/page_list.html

@@ -1,31 +0,0 @@
-{% extends 'base/layout.html' %}
-
-
-{% block content_main_before %}
-{% endblock %}
-
-
-{% block content_main %}
-  <div class="grw-container-convertible">
-    {% include '../widget/page_content.html' %}
-  </div>
-{% endblock %}
-
-
-{% block content_main_after %}
-  {% if isTrashPage(path) %}
-    <div class="grw-container-convertible">
-      <div id="trash-page-list-container"></div>
-    </div>
-  {% endif %}
-{% endblock %}
-
-{% block content_footer %}
-  <div id="page-content-footer"></div>
-{% endblock %}
-
-{% block body_end %}
-  <div id="presentation-layer" class="fullscreen-layer">
-    <div id="presentation-container"></div>
-  </div>
-{% endblock %}

+ 0 - 44
packages/app/src/server/views/layout-growi/shared_page.html

@@ -1,44 +0,0 @@
-{% extends 'base/layout.html' %}
-
-{% block content_header_wrapper %}
-<header class="py-0">
-  {% block content_header %}
-    <div id="grw-subnav-container"></div>
-  {% endblock %}
-</header>
-<div id="grw-subnav-switcher-container" class="d-edit-none"></div>
-<div id="grw-subnav-sticky-trigger" class="sticky-top"></div>
-<div id="grw-fav-sticky-trigger" class="sticky-top"></div>
-{% endblock %}
-
-{% block content_main_before %}
-{% endblock %}
-{% block search %}
-{% endblock %}
-{% block head_warn_alert_siteurl_undefined %}
-{% endblock %}
-{% block sidebar %}
-{% endblock %}
-
-{% block content_main %}
-  <div class="grw-container-convertible">
-
-    <div
-      id="is-shared-page"
-      data-share-link-expired-at="{% if sharelink.expiredAt %}{{ sharelink.expiredAt|datetz('Y/m/d H:i:s')}}{% endif %}"
-      data-share-link-created-at="{{ sharelink.createdAt|datetz('Y/m/d H:i:s')}}"
-    >
-      <div id="share-link-alert"></div>
-
-      {% include '../widget/page_content.html' %}
-
-    </div>
-
-  </div>
-{% endblock %}
-
-{% block body_end %}
-  <div id="presentation-layer" class="fullscreen-layer">
-    <div id="presentation-container"></div>
-  </div>
-{% endblock %}

+ 0 - 43
packages/app/src/server/views/layout-growi/user_page.html

@@ -1,43 +0,0 @@
-{% extends 'page.html' %}
-
-{% block content_main %}
-  <div class="grw-container-convertible user-page" data-testid="grw-user-page">
-
-    {% include '../widget/page_content.html' %}
-
-  </div>
-{% endblock %}
-
-{% block content_footer %}
-  {% include 'widget/comments.html' %}
-
-  {% if page %}
-    <div class="container-lg user-page-footer py-5">
-
-      <div class="grw-user-page-list-m d-edit-none">
-        <h2 class="grw-user-page-header border-bottom pb-2 mb-3" id="bookmarks-list">
-          <i class="fa fa-fw fa-bookmark-o" style="font-size: 1.3em"></i>
-          Bookmarks
-        </h2>
-        <div class="page-list" id="user-bookmark-list">
-          <div class="page-list-container">
-          </div>
-        </div>
-      </div>
-
-      <div class="grw-user-page-list-m mt-5 d-edit-none">
-        <h2 class="grw-user-page-header border-bottom pb-2 mb-3" id="recently-created-list">
-          <i id="recent-created-icon" class="mr-1"></i>
-          Recently Created
-        </h2>
-        <div class="page-list" id="user-created-list">
-          <div class="page-list-container">
-          </div>
-        </div>
-      </div>
-
-    </div>
-  {% endif %}
-
-  <div id="page-content-footer"></div>
-{% endblock %}

+ 0 - 155
packages/app/src/server/views/layout/layout.html

@@ -1,155 +0,0 @@
-<!DOCTYPE html>
-<html>
-{% block html_head %}
-<head>
-  <meta charset="utf-8">
-  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-  <title>{% block html_title %}{{ customizeService.generateCustomTitle(page || path) }}{% endblock %}</title>
-  <meta name="description" content="">
-  <meta name="author" content="">
-
-  <meta name="viewport" content="width=device-width,initial-scale=1">
-
-  <meta name="apple-mobile-web-app-title" content="{{ appService.getAppTitle() | preventXss }}">
-
-  {{ getConfig('crowi', 'customize:header') | default('') }}
-
-  {% include '../widget/headers/favicon.html' %}
-
-  {{ cdnScriptTagsByGroup('basis') }}
-
-  {% if local_config.env.MATHJAX %}
-    {% include '../widget/headers/mathjax.html' %}
-  {% endif %}
-
-  {% include '../widget/headers/drawio.html' %}
-
-  {% include '../widget/headers/scripts-for-dev.html' %}
-
-  <script src="{{ webpack_asset('js/boot.js') }}"></script>
-
-  <script src="{{ webpack_asset('js/vendors.js') }}" defer></script>
-  <script src="{{ webpack_asset('js/commons.js') }}" defer></script>
-  {% block html_head_loading_legacy %}
-    <script src="{{ webpack_asset('js/legacy.js') }}" defer></script>
-  {% endblock %}
-  {% block html_head_loading_app %}
-    <script src="{{ webpack_asset('js/app.js') }}" defer></script>
-  {% endblock %}
-
-  <!-- styles -->
-  {% include '../widget/headers/styles-for-app.html' %}
-  {% block theme_css_block %}
-    {% set themeName = getConfig('crowi', 'customize:theme') %}
-    {% include '../widget/headers/styles-theme.html' with {themeName: themeName} %}
-  {% endblock %}
-
-  {{ cdnStyleTagsByGroup('basis') }}
-  {{ cdnHighlightJsStyleTag(getConfig('crowi', 'customize:highlightJsStyle')) }}
-
-  {% block html_additional_headers %}{% endblock %}
-
-  <style>
-    {{ customizeService.getCustomCss() }}
-  </style>
-</head>
-{% endblock %}
-
-{% block html_body %}
-{% set additionalBodyClasses = []; %}
-{% block html_additional_body_classes %}{% endblock %}
-
-{% if page.expandContentWidth !== undefined %}
-  {% set isContainerFluid = page.expandContentWidth; %}
-{% else %}
-  {% set isContainerFluid = getConfig('crowi', 'customize:isContainerFluid'); %}
-{% endif %}
-
-{% if isContainerFluid  %}
-  {% set additionalBodyClasses = additionalBodyClasses|push('growi-layout-fluid') %}
-{% endif %}
-
-<body
-  class="{% block html_base_css %}{% endblock %} growi {{ additionalBodyClasses|join(' ') }}"
-  {% block html_base_attr %}{% endblock %}
- >
-
-<div id="growi-context-extractor"></div>
-
-<div id="wrapper">
-
-  {% block layout_head_nav %}
-    <nav id="grw-navbar" class="navbar grw-navbar navbar-expand navbar-dark sticky-top mb-0 px-0"></nav>
-  {% endblock  %} {# layout_head_nav #}
-
-  {% block head_warn_breaking_changes %}{% include '../widget/alert_breaking_changes.html' %}{% endblock %}
-
-  <div id="page-wrapper" class="page-wrapper d-flex d-print-block">
-    {% block sidebar %}
-    <div id="grw-sidebar-wrapper"></div>
-    {% endblock %}
-
-    <div class="flex-fill mw-0">
-      {% block head_warn_alert_siteurl_undefined %}{% include '../widget/alert_siteurl_undefined.html' %}{% endblock %}
-      {% block layout_main %}{% endblock %}
-    </div>
-  </div>
-
-  <div id="grw-navbar-bottom-container"></div>
-
-</div><!-- /#wrapper -->
-
-{% block fixed-controls %}
-<div id="grw-fab-container" data-testid="grw-fab-container"></div>
-{% endblock %}
-
-<div id="grw-hotkeys-manager"></div>
-
-<div id="system-version"></div>
-
-<div id="page-create-modal"></div>
-<div id="page-delete-modal"></div>
-<div id="empty-trash-modal"></div>
-<div id="page-duplicate-modal"></div>
-<div id="page-rename-modal"></div>
-<div id="page-presentation-modal"></div>
-<div id="page-accessories-modal"></div>
-<div id="descendants-page-list-modal"></div>
-<div id="page-put-back-modal"></div>
-<div id="show-page-accessories-modal"></div>
-<div id="shortcuts-modal"></div>
-
-
-{% block body_end %}
-{% endblock %}
-</body>
-{% endblock %}
-
-<script type="application/json" id="growi-context-hydrate">
-{{ local_config|json|safe|preventXss }}
-</script>
-
-{% if user != null %}
-  <script type="application/json" id="growi-current-user">
-  {{ user|json|safe|preventXss }}
-  </script>
-{% endif %}
-{% if userUISettings != null %}
-  <script type="application/json" id="growi-user-ui-settings">
-  {{ userUISettings|json|safe }}
-  </script>
-{% endif %}
-{% if targetAndAncestors != null %}
-  <script type="application/json" id="growi-pagetree-target-and-ancestors">
-  {{ targetAndAncestors|json|safe }}
-  </script>
-{% endif %}
-
-
-{% block custom_script %}
-<script>
-  {{ customizeService.getCustomScript() }}
-</script>
-{% endblock %}
-
-</html>

+ 0 - 171
packages/app/src/server/views/login.html

@@ -1,171 +0,0 @@
-{% extends 'layout/layout.html' %}
-
-{% block html_base_css %}login-page nologin{% endblock %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName(t('Sign in')) }}{% endblock %}
-
-
-
-{#
- # Remove default contents
- #}
-{% block html_head_loading_legacy %}
-{% endblock %}
-{% block html_head_loading_app %}
-{% endblock %}
-{% block layout_head_nav %}
-{% endblock %}
-{% block sidebar %}
-{% endblock %}
-{% block head_warn_alert_siteurl_undefined %}
-{% endblock %}
-{% block fixed-controls %}
-{% endblock %}
-
-{% block html_additional_headers %}
-  <script src="{{ webpack_asset('js/nologin.js') }}" defer></script>
-{% endblock %}
-
-{% block layout_main %}
-
-<div class="main container-fluid">
-
-  <div class="row">
-    <div class="col-md-12">
-      <div class="login-header mx-auto">
-        <div class="logo mb-3">{% include 'widget/logo.html' %}</div>
-        <h1>{{ appService.getAppTitle() | preventXss }}</h1>
-
-          <div class="login-form-errors px-3">
-            {% if isLdapSetupFailed() %}
-            <div class="alert alert-warning small">
-              <strong><i class="icon-fw icon-info"></i>LDAP is enabled but the configuration has something wrong.</strong>
-              <br>
-              (Please set the environment variables <code>DEBUG=crowi:service:PassportService</code> to get the logs)
-            </div>
-            {% endif %}
-
-            {#
-            # The case that there already exists a user whose username matches ID of the newly created LDAP user
-            # https://github.com/weseek/growi/issues/193
-            #}
-            {% set failedProviderForDuplicatedUsernameException = req.flash('provider-DuplicatedUsernameException') %}
-            {% if failedProviderForDuplicatedUsernameException != null %}
-            <div class="alert alert-warning small">
-              <p><strong><i class="icon-fw icon-ban"></i>DuplicatedUsernameException occured</strong></p>
-              <p>
-                Your {{ failedProviderForDuplicatedUsernameException }} authentication was succeess, but a new user could not be created.
-                See the issue <a href="https://github.com/weseek/growi/issues/193">#193</a>.
-              </p>
-            </div>
-            {% endif %}
-
-            {% set success = req.flash('successMessage') %}
-            {% if success.length %}
-            <div class="alert alert-success">
-              {{ success }}
-            </div>
-            {% endif %}
-
-            {% set warn = req.flash('warningMessage') %}
-            {% if warn.length %}
-            {% for w in warn %}
-            <div class="alert alert-warning">
-              {{ w }}
-            </div>
-            {% endfor %}
-            {% endif %}
-
-            {% set error = req.flash('errorMessage') %}
-            {% if error.length %}
-            {% for e in error %}
-            <div class="alert alert-danger">
-              {{ e }}
-            </div>
-            {% endfor %}
-            {% endif %}
-
-            {% set errorMessages = req.flash('errorMessages') %}
-            {% if errorMessages.length > 0 %}
-            <div class="alert alert-danger">
-              <ul class="mb-0">
-              {% for error in errorMessages %}
-                <li>{{ error }}</li>
-              {% endfor %}
-              </ul>
-            </div>
-            {% endif %}
-
-            {% if req.form.errors.length > 0 %}
-            <div class="alert alert-danger">
-              <ul class="mb-0">
-              {% for error in req.form.errors %}
-                <li>{{ error }}</li>
-              {% endfor %}
-              </ul>
-            </div>
-            {% endif %}
-          </div>
-          <div id="register-form-errors" class="px-3">
-            {% set message = req.flash('registerWarningMessage') %}
-            {% if message.length %}
-            <div class="alert alert-danger">
-              {% for msg in message %}
-              {{ msg }}<br>
-              {% endfor  %}
-            </div>
-            {% endif %}
-          </div>
-      </div>
-
-      {% set registrationMode = getConfig('crowi', 'security:registrationMode') %}
-      {% set isRegistrationEnabled = passportService.isLocalStrategySetup && registrationMode != 'Closed' %}
-      {% set isPasswordResetEnabled = getConfig('crowi', 'security:passport-local:isPasswordResetEnabled') %}
-      {% set isEmailAuthenticationEnabled = getConfig('crowi', 'security:passport-local:isEmailAuthenticationEnabled') %}
-      <div
-        id="login-form"
-        data-is-registering="{{ req.query.register or req.body.registerForm or isRegistering }}"
-        data-username ="{{ req.body.registerForm.username }}"
-        data-name ="{{ req.body.registerForm.name }}"
-        data-email ="{{ req.body.registerForm.email || req.flash('email') }}"
-        data-is-registration-enabled="{{ isRegistrationEnabled }}"
-        data-registration-mode = "{{ registrationMode }}"
-        data-registration-white-list = "{{ getConfig('crowi', 'security:registrationWhiteList') }}"
-        data-is-password-reset-enabled = "{{ isPasswordResetEnabled }}"
-        data-is-email-authentication-enabled = "{{ isEmailAuthenticationEnabled }}"
-        data-is-local-strategy-setup = "{{ passportService.isLocalStrategySetup }}"
-        data-is-ldap-strategy-setup = "{{ passportService.isLdapStrategySetup}}"
-        data-is-google-auth-enabled = "{{ getConfig('crowi', 'security:passport-google:isEnabled') }}"
-        data-is-github-auth-enabled = "{{ getConfig('crowi', 'security:passport-github:isEnabled') }}"
-        data-is-facebook-auth-enabled = "{{ getConfig('crowi', 'security:passport-facebook:isEnabled') }}"
-        data-is-saml-auth-enabled = "{{ getConfig('crowi', 'security:passport-saml:isEnabled') }}"
-        data-is-oidc-auth-enabled = "{{ getConfig('crowi', 'security:passport-oidc:isEnabled') }}"
-        data-is-basic-auth-enabled = "{{ getConfig('crowi', 'security:passport-basic:isEnabled') }}"
-      ></div>
-    </div>
-  </div>
-</div>
-
-{% endblock %}
-
-
-{% block body_end %}
-<script>
-  $('#register-form input[name="registerForm[username]"]').change(function(e) {
-    var username = $(this).val();
-    $('#login-dialog').removeClass('has-error');
-    $('#input-group-username').removeClass('has-error');
-    $('#help-block-username').html("");
-
-    $.getJSON('/_api/v3/check-username', {username: username}, function(json) {
-      if (!json.valid) {
-        $('#help-block-username').html(
-          '<i class="icon-fw icon-ban"></i> This User ID is not available.'
-        );
-        $('#login-dialog').addClass('has-error');
-        $('#input-group-username').addClass('has-error');
-      }
-    });
-  });
-</script>
-{% endblock %}

+ 0 - 40
packages/app/src/server/views/maintenance-mode.html

@@ -1,40 +0,0 @@
-{% extends './layout/layout.html' %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName(t('maintenance_mode.maintenance_mode')) }}{% endblock %}
-
-
-
-{#
-  # Remove default contents
-  #}
- {% block html_head_loading_legacy %}
- {% endblock %}
- {% block layout_head_nav %}
- {% endblock %}
- {% block sidebar %}
- {% endblock %}
- {% block head_warn_alert_siteurl_undefined %}
- {% endblock %}
- {% block fixed-controls %}
- {% endblock %}
-
-
-{% block layout_main %}
-<div id="main" class="main">
-  <div id="content-main" class="content-main container-lg">
-    <div class="container">
-      <div class="row justify-content-md-center">
-        <div class="col-md-6 mt-5">
-          <div class="text-center">
-            <h1><i class="icon-exclamation large"></i></h1>
-            <h1 class="text-center">{{ t('maintenance_mode.maintenance_mode') }}</h1>
-            <h3>{{ t('maintenance_mode.growi_is_under_maintenance') }}</h3>
-            <hr />
-            <div id="maintenance-mode-content"></div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</div>
-{% endblock %}

+ 0 - 21
packages/app/src/server/views/me/all-in-app-notifications.html

@@ -1,21 +0,0 @@
-{% extends '../layout/layout.html' %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName(t('in_app_notification.notification_list')) }}{% endblock %}
-
-{% block layout_main %}
-
-{% block content_header_wrapper %}
-<header class="py-3">
-  <div class="container-fluid">
-    <h1 class="title">{{ t('in_app_notification.notification_list') }}</h1>
-  </div>
-</header>
-<div id="grw-fav-sticky-trigger" class="sticky-top"></div>
-{% endblock %}
-
-<div id="main" class="main">
-  <div id="content-main" class="content-main grw-container-convertible">
-    <div id="all-in-app-notifications"></div>
-  </div>
-</div>
-{% endblock %}

+ 0 - 21
packages/app/src/server/views/me/drafts.html

@@ -1,21 +0,0 @@
-{% extends '../layout/layout.html' %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName(t('My Drafts')) }}{% endblock %}
-
-{% block layout_main %}
-
-{% block content_header_wrapper %}
-<header class="py-3">
-  <div class="container-fluid">
-    <h1 class="title">{{ t('My Drafts') }}</h1>
-  </div>
-</header>
-<div id="grw-fav-sticky-trigger" class="sticky-top"></div>
-{% endblock %}
-
-<div id="main" class="main">
-  <div id="content-main" class="content-main grw-container-convertible">
-    <div id="my-drafts"></div>
-  </div>
-</div>
-{% endblock %}

+ 0 - 21
packages/app/src/server/views/me/index.html

@@ -1,21 +0,0 @@
-{% extends '../layout/layout.html' %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName(t('User Settings')) }}{% endblock %}
-
-{% block layout_main %}
-
-{% block content_header_wrapper %}
-<header class="py-3">
-  <div class="container-fluid">
-    <h1 class="title">{{ t('User Settings') }}</h1>
-  </div>
-</header>
-<div id="grw-fav-sticky-trigger" class="sticky-top"></div>
-{% endblock %}
-
-<div id="main" class="main">
-  <div id="content-main" class="content-main container-lg">
-    <div id="personal-setting"></div>
-  </div>
-</div>
-{% endblock %}

+ 0 - 64
packages/app/src/server/views/page_presentation.html

@@ -1,64 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset="utf-8">
-    <meta name="apple-mobile-web-app-capable" content="yes" />
-    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
-
-    {{ getConfig('crowi', 'customize:header') | default('') }}
-
-    <!-- polyfills for IE11 -->
-    <script>
-      var userAgent = window.navigator.userAgent.toLowerCase();
-      if (userAgent.indexOf('msie') != -1 || userAgent.indexOf('trident') != -1) {
-        var scriptElement = document.createElement('script');
-        scriptElement.src = 'https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.23.0/polyfill.min.js';
-        var headElement = document.getElementsByTagName('head')[0];
-        headElement.appendChild(scriptElement);
-      }
-    </script>
-
-    {{ cdnScriptTagsByGroup('basis') }}
-
-    {% if env === 'development' %}
-      <script src="{{ webpack_asset('js/dev.js') }}" async></script>
-    {% endif %}
-
-    <script src="{{ webpack_asset('js/legacy-presentation.js') }}" defer></script>
-    <link rel="stylesheet" href="{{ webpack_asset('styles/style-presentation.css') }}">
-
-    <title>{{ page.path | path2name | preventXss }} | {{ page.path | preventXss }}</title>
-
-    {{ cdnStyleTagsByGroup('basis') }}
-    {{ cdnHighlightJsStyleTag(getConfig('crowi', 'customize:highlightJsStyle')) }}
-
-    <style>
-      {{ customizeService.getCustomCss() }}
-    </style>
-  </head>
-  <body>
-    <div class="reveal">
-      <div class="slides">
-        {% set pageBreakSeparator = getConfig('markdown', 'markdown:presentation:pageBreakSeparator') | default(1) %}
-        {% set pageBreakCustomSeparator = getConfig('markdown', 'markdown:presentation:pageBreakCustomSeparator') | default('') %}
-
-        {% if 3 === pageBreakSeparator %}
-          {% set dataSeparator = pageBreakCustomSeparator %}
-        {% elseif 2 === pageBreakSeparator %}
-          {% set dataSeparator = "\n-----\n" %}
-        {% else %}
-          {% set dataSeparator = "\n\n\n" %}
-        {% endif %}
-
-        <section data-markdown data-separator="{{dataSeparator}}">
-          <script type="text/template">
-{{ revision.body|presentation|safe }}
-          </script>
-        </section>
-        <section  data-markdown># {{ t('The end') }}</section>
-      </div>
-    </div>
-
-  </body>
-</html>

+ 0 - 25
packages/app/src/server/views/private-legacy-pages.html

@@ -1,25 +0,0 @@
-{% extends 'layout/layout.html' %}
-
-{% block html_additional_headers %}
-  {% parent %}
-  {{ cdnScriptTag('highlight-addons') }}
-  {{ cdnScriptTag('drawio-viewer') }}
-{% endblock %}
-
-{% block html_base_attr %}
-  data-spy="scroll"
-  data-target="#search-result-list"
-{% endblock %}
-
-<!-- add .on-search to body tag class in layout -->
-{% block html_additional_body_classes %}
-  {% set additionalBodyClasses = additionalBodyClasses|push('on-search') %}
-{% endblock %}
-
-{% block layout_main %}
-<div id="grw-fav-sticky-trigger" class="sticky-top"></div>
-
-<div id="main" class="main search-page mt-0">
-  <div id="private-regacy-pages"></div>
-</div>
-{% endblock %} {# layout_main #}

+ 0 - 24
packages/app/src/server/views/redoc.html

@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>GROWI API v3</title>
-    <!-- needed for adaptive design -->
-    <meta charset="utf-8"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1">
-    <link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
-
-    <!--
-    ReDoc doesn't change outer page styles
-    -->
-    <style>
-      body {
-        margin: 0;
-        padding: 0;
-      }
-    </style>
-  </head>
-  <body>
-    <redoc spec-url='/api-docs/swagger-spec.json'></redoc>
-    {{ cdnScriptTag('redoc-standalone') }}
-  </body>
-</html>

+ 0 - 48
packages/app/src/server/views/reset-password.html

@@ -1,48 +0,0 @@
-{% extends './layout/layout.html' %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName(t('forgot_password.reset_password')) }}{% endblock %}
-
-
-{#
-  # Remove default contents
-  #}
- {% block html_head_loading_legacy %}
- {% endblock %}
- {% block html_head_loading_app %}
- {% endblock %}
- {% block layout_head_nav %}
- {% endblock %}
- {% block sidebar %}
- {% endblock %}
- {% block head_warn_alert_siteurl_undefined %}
- {% endblock %}
- {% block fixed-controls %}
- {% endblock %}
-
- {% block html_additional_headers %}
-   <script src="{{ webpack_asset('js/nologin.js') }}" defer></script>
- {% endblock %}
-
-{% block layout_main %}
-
-  <div id="main" class="main">
-    <div id="content-main" class="content-main container-lg">
-      <div class="container">
-        <div class="row justify-content-md-center">
-          <div class="col-md-6 mt-5">
-            <div class="text-center">
-              <h1><i class="icon-lock-open large"></i></h1>
-              <h2 class="text-center">{{ t('forgot_password.reset_password') }}</h2>
-              <h5>{{ email }}</h5>
-              <p class="mt-4">{{ t('forgot_password.password_reset_excecution_desc') }}</p>
-              <div id="password-reset-execution-form"></div>
-            </div>
-          </div>
-        </div>
-      </div>
-
-    </div>
-    </div>
-  </div>
-
-{% endblock %}

+ 0 - 25
packages/app/src/server/views/search.html

@@ -1,25 +0,0 @@
-{% extends 'layout/layout.html' %}
-
-{% block html_additional_headers %}
-  {% parent %}
-  {{ cdnScriptTag('highlight-addons') }}
-  {{ cdnScriptTag('drawio-viewer') }}
-{% endblock %}
-
-{% block html_base_attr %}
-  data-spy="scroll"
-  data-target="#search-result-list"
-{% endblock %}
-
-<!-- add .on-search to body tag class in layout -->
-{% block html_additional_body_classes %}
-  {% set additionalBodyClasses = additionalBodyClasses|push('on-search') %}
-{% endblock %}
-
-{% block layout_main %}
-<div id="grw-fav-sticky-trigger" class="sticky-top"></div>
-
-<div id="main" class="main search-page mt-0">
-  <div id="search-page"></div>
-</div>
-{% endblock %} {# layout_main #}

+ 0 - 16
packages/app/src/server/views/tags.html

@@ -1,16 +0,0 @@
-{% extends 'layout/layout.html' %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName(t('Tags')) }}{% endblock %}
-
-{% block html_base_css %}tags-page{% endblock %}
-
-{% block layout_main %}
-<div id="grw-fav-sticky-trigger" class="sticky-top"></div>
-<div class="grw-container-convertible">
-  <div class="row">
-    <div id="main" class="main mt-3 col-md-12 tags-page">
-      <div class="" id="tags-page" data-testid="tags-page"></div>
-    </div>
-  </div>
-</div><!-- /.container-fluid -->
-{% endblock %} {# layout_main #}

+ 0 - 52
packages/app/src/server/views/user-activation.html

@@ -1,52 +0,0 @@
-{% extends 'layout/layout.html' %}
-
-{% block html_base_css %}invited nologin{% endblock %}
-
-{% block html_title %}{{ customizeService.generateCustomTitleForFixedPageName('Registration') }}{% endblock %}
-
-
-
-{#
-# Remove default contents
-#}
-{% block html_head_loading_legacy %}
-{% endblock %}
-{% block html_head_loading_app %}
-{% endblock %}
-{% block layout_head_nav %}
-{% endblock %}
-{% block sidebar %}
-{% endblock %}
-{% block head_warn_alert_siteurl_undefined %}
-{% endblock %}
-{% block fixed-controls %}
-{% endblock %}
-
-{% block html_additional_headers %}
-  <script src="{{ webpack_asset('js/nologin.js') }}" defer></script>
-{% endblock %}
-
-{% block layout_main %}
-
-<div class="main container-fluid">
-
-  <div class="row">
-
-    <div class="login-header mx-auto col-sm-3">
-      <div class="logo">{% include 'widget/logo.html' %}</div>
-      <h1>GROWI</h1>
-
-      <div
-        id="user-activation-form"
-        data-message-errors="{{ req.flash('errors') }}"
-        data-inputs="{{ req.flash('inputs') }}"
-        data-email="{{ userRegistrationOrder.email }}"
-        data-token="{{ userRegistrationOrder.token }}"
-        class="col-sm-12"
-      ></div>
-
-  </div>{# /.row #}
-
-</div>{# /.main #}
-
-{% endblock %}

+ 0 - 0
packages/app/src/server/views/widget/alert_breaking_changes.html


+ 0 - 6
packages/app/src/server/views/widget/alert_siteurl_undefined.html

@@ -1,6 +0,0 @@
-{% if !getConfig('crowi', 'app:siteUrl') %}
-<div class="alert alert-danger rounded-0 d-edit-none mb-0 px-4 py-2">
-  <i class="icon-exclamation"></i>
-  {{ t("security_setting.alert_siteUrl_is_not_set", { link: t('app_settings')}) }} &gt;&gt; <a href="/admin/app">{{t('app_settings')}}<i class="icon-login"></i></a>
-</div>
-{% endif %}

+ 0 - 1
packages/app/src/server/views/widget/header.html

@@ -1 +0,0 @@
-<div id="grw-subnav" class="grw-subnav d-edit-none"></div>

+ 0 - 16
packages/app/src/server/views/widget/headers/favicon.html

@@ -1,16 +0,0 @@
-<link rel="apple-touch-icon" sizes="57x57" href="/images/icons/favicon/apple-icon-57x57.png">
-<link rel="apple-touch-icon" sizes="60x60" href="/images/icons/favicon/apple-icon-60x60.png">
-<link rel="apple-touch-icon" sizes="72x72" href="/images/icons/favicon/apple-icon-72x72.png">
-<link rel="apple-touch-icon" sizes="76x76" href="/images/icons/favicon/apple-icon-76x76.png">
-<link rel="apple-touch-icon" sizes="114x114" href="/images/icons/favicon/apple-icon-114x114.png">
-<link rel="apple-touch-icon" sizes="120x120" href="/images/icons/favicon/apple-icon-120x120.png">
-<link rel="apple-touch-icon" sizes="144x144" href="/images/icons/favicon/apple-icon-144x144.png">
-<link rel="apple-touch-icon" sizes="152x152" href="/images/icons/favicon/apple-icon-152x152.png">
-<link rel="apple-touch-icon" sizes="180x180" href="/images/icons/favicon/apple-icon-180x180.png">
-<link rel="icon" type="image/png" sizes="192x192"  href="/images/icons/favicon/android-icon-192x192.png">
-<link rel="icon" type="image/png" sizes="32x32" href="/images/icons/favicon/favicon-32x32.png">
-<link rel="icon" type="image/png" sizes="96x96" href="/images/icons/favicon/favicon-96x96.png">
-<link rel="icon" type="image/png" sizes="16x16" href="/images/icons/favicon/favicon-16x16.png">
-<meta name="msapplication-TileColor" content="#4f5467">
-<meta name="msapplication-TileImage" content="/images/icons/favicon/ms-icon-144x144.png">
-<meta name="theme-color" content="#4f5467">

+ 0 - 21
packages/app/src/server/views/widget/headers/mathjax.html

@@ -1,21 +0,0 @@
-<!-- Mathjax -->
-<script type="text/javascript">
-  window.MathJax = {
-    startup: {
-      typeset: false
-    },
-    tex: {
-      processEscapes: true,
-      inlineMath: [['$', '$'], ['\\(', '\\)']]
-    },
-    options: {
-      renderActions: {
-        addMenu: [],
-        checkLoading: []
-      },
-      ignoreHtmlClass: 'tex2jax_ignore',
-      processHtmlClass: 'tex2jax_process'
-    }
-  };
-</script>
-{{ cdnScriptTag('mathjax') }}

+ 0 - 7
packages/app/src/server/views/widget/headers/scripts-for-dev.html

@@ -1,7 +0,0 @@
-{% if env === 'development' %}
-  <script src="{{ webpack_asset('js/dev.js') }}" async></script>
-  <!-- Browsersync -->
-  <script id="__bs_script__">//<![CDATA[
-    document.write("<script async src='http://HOST:3001/browser-sync/browser-sync-client.js?v=2.23.6'><\/script>".replace("HOST", location.hostname));
-  //]]></script>
-{% endif %}

+ 0 - 8
packages/app/src/server/views/widget/headers/styles-for-app.html

@@ -1,8 +0,0 @@
-{% if env === 'development' %}
-  <script src="{{ webpack_asset('styles/style-commons.js') }}"></script>
-  <script src="{{ webpack_asset('styles/style-app.js') }}"></script>
-{% else %}
-  <script src="{{ webpack_asset('styles/style-commons.js') }}"></script>
-  <link rel="stylesheet" href="{{ webpack_asset('styles/style-commons.css') }}">
-  <link rel="stylesheet" href="{{ webpack_asset('styles/style-app.css') }}">
-{% endif %}

+ 0 - 5
packages/app/src/server/views/widget/headers/styles-theme.html

@@ -1,5 +0,0 @@
-{% if env === 'development' %}
-  <script src="{{ webpack_asset('styles/theme-' + themeName + '.js') }}"></script>
-{% else %}
-  <link rel="stylesheet" id="grw-theme-link" href="{{ webpack_asset('styles/theme-' + themeName + '.css') }}">
-{% endif %}

+ 0 - 6
packages/app/src/server/views/widget/logo.html

@@ -1,6 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="32px" height="32px" viewBox="0 0 226.44 196.11">
-  <polygon class="group2" points="56.61 196.11 169.83 196.11 226.44 98.06 188.7 98.06 150.96 163.43 75.48 163.43 56.61 196.11" />
-  <polygon class="group1" points="75.48 98.05 94.35 65.37 150.96 65.38 207.57 65.37 207.57 65.38 226.44 98.06 169.83 98.06 113.22 98.06 94.39 130.66 94.3 130.66 84.92 114.4 75.48 98.05" />
-  <polygon class="group1" points="0 98.06 56.6 0 113.22 0.01 169.83 0.01 169.83 0.01 188.69 32.68 132.09 32.69 75.47 32.69 18.86 130.74 0 98.06" />
-  <polygon class="group1" points="75.48 163.43 56.61 130.74 37.71 163.46 47.15 179.81 56.54 196.07 56.63 196.07 75.48 163.43" />
-</svg>

+ 0 - 16
packages/app/src/server/views/widget/not_creatable_content.html

@@ -1,16 +0,0 @@
-<div class="row not-found-message-row">
-  <div class="col-md-12">
-    <h2 class="text-muted">
-      <i class="icon-ban" aria-hidden="true"></i>
-      Couldn't create path
-    </h2>
-  </div>
-</div>
-
-<div id="content-main" class="content-main page-list"
-  data-path="{{ encodeURI(path) }}"
-  data-current-user="{% if user %}{{ user._id.toString() }}{% endif %}"
-  data-page-is-not-creatable="true"
-  ></div>
-
-</div>

+ 0 - 35
packages/app/src/server/views/widget/not_found_content.html

@@ -1,35 +0,0 @@
-<div id="content-main" class="content-main page-list"
-  data-path="{{ encodeURI(path) }}"
-  data-current-user="{% if user %}{{ user._id.toString() }}{% endif %}"
-  data-page-grant="{{ grant }}"
-  data-page-grant-group="{{ grantedGroupId }}"
-  data-page-grant-group-name="{{ grantedGroupName }}"
-  data-page-is-empty="{{ isEmpty }}"
-  {% if templateTags %}
-    data-template-tags="{{ templateTags }}"
-  {% endif %}
-  >
-  <div id="display-switcher"></div>
-  <div id="not-found-page"></div>
-  <div class="tab-content">
-
-
-    {# TODO: should be removed and transplanted to PageContainer.initStateMarkdown ------ from here ------ #}
-
-    {% if getConfig('crowi', 'customize:isEnabledAttachTitleHeader') %}
-    {% if template %}
-    <script type="text/template" id="raw-text-original">{{ attachTitleHeader(path | path2name | preventXss) }}&NewLine;{{ template }}</script>
-    {% else %}
-    <script type="text/template" id="raw-text-original">{{ attachTitleHeader(path | path2name | preventXss) }}</script>
-    {% endif %}
-    {% else %}
-    {% if template %}
-    <script type="text/template" id="raw-text-original">{{ template }}</script>
-    {% endif %}
-    {% endif %}
-
-    {# TODO: should be removed and transplanted to PageContainer.initStateMarkdown ------ to here ------ #}
-  </div>
-
-  <div id="grw-page-status-alert-container"></div>
-</div>

+ 0 - 69
packages/app/src/server/views/widget/page_alerts.html

@@ -1,69 +0,0 @@
-<div class="row row-alerts d-edit-none">
-  <div class="col-sm-12">
-    {% if page && page.grant && page.grant > 1 %}
-
-      <p class="alert alert-primary py-3 px-4">
-      {% if page.grant == 2 %}
-        <i class="icon-fw icon-link"></i><strong>{{ t('Anyone with the link') }}</strong> ({{ t('Browsing of this page is restricted') }})
-      {% elseif page.grant == 4 %}
-        <i class="icon-fw icon-lock"></i><strong>{{ t('Only me') }}</strong> ({{ t('Browsing of this page is restricted') }})
-      {% elseif page.grant == 5 %}
-        <i class="icon-fw icon-organization"></i><strong>'{{ page.grantedGroup.name | preventXss }}' only</strong> ({{ t('Browsing of this page is restricted') }})
-      {% endif %}
-      </p>
-    {% endif %}
-
-    {% if getConfig('crowi', 'customize:isEnabledStaleNotification') %}
-      {% if page && page.updatedAt && page.getContentAge() > 0 %}
-        {% if page.getContentAge() == 1 %}
-        <div class="alert alert-info">
-        {% elseif page.getContentAge() == 2 %}
-        <div class="alert alert-warning">
-        {% else %}
-        <div class="alert alert-danger">
-        {% endif %}
-          <i class="icon-fw icon-hourglass"></i>
-          <strong>{{ t('page_page.notice.stale', { count: page.getContentAge() }) }}</strong>
-        </div>
-      {% endif %}
-    {% endif %}
-
-    <!-- This code has been replaced to <PageRedirectedAlert /> -->
-    <!-- {% if redirectFrom or req.query.redirectFrom %}
-    <div class="alert alert-pink d-edit-none py-3 px-4 d-flex align-items-center justify-content-between">
-      <span>
-        {% set fromPath = req.query.redirectFrom %}
-        {% if redirectFrom or req.query.redirectFrom %}
-        <div id="redirected-alert"></div>
-        {% endif %}
-      </span>
-      {% set hasRedirectLink = redirectFrom or req.query.redirectFrom or req.query.withRedirect %}
-      {% if user and not page.isDeleted() and hasRedirectLink %}
-        <button type="button" id="unlink-page-button" class="btn btn-outline-dark btn-sm float-right">
-          <i class="ti ti-unlink" aria-hidden="true"></i>
-          Unlink redirection
-        </button>
-      {% endif %}
-    </div>
-    {% endif %} -->
-
-    {% if req.query.unlinked %}
-    <div class="alert alert-info d-edit-none py-3 px-4">
-      <strong>{{ t('Unlinked') }}: </strong> {{ t('page_page.notice.unlinked') }}
-    </div>
-    {% endif %}
-
-    {% set dmessage = req.flash('dangerMessage') %}
-    {% if dmessage.length %}
-    <div class="alert alert-danger mb-4">
-      {{ dmessage }}
-    </div>
-    {% endif %}
-
-    {% if isTrashPage(page.path) %}
-      <div id="trash-page-alert"></div>
-    {% endif %}
-
-    <div id="fix-page-grant-alert"></div>
-  </div>
-</div>

+ 0 - 49
packages/app/src/server/views/widget/page_content.html

@@ -1,49 +0,0 @@
-{% if page %}
-<div id="content-main" class="content-main d-flex"
-  data-path="{{ encodeURI(page.path) }}"
-  data-current-user="{% if user %}{{ user._id.toString() }}{% endif %}"
-  data-page-id="{% if page %}{{ page._id.toString() }}{% endif %}"
-  data-page-revision-id="{% if revision %}{{ revision._id.toString() }}{% endif %}"
-  data-page-revision-created="{% if revision %}{{ revision.createdAt|datetz('U') }}{% endif %}"
-  data-page-revision-author="{% if revision && revision.author %}{{ revision.author|json }}{% endif %}"
-  data-page-revision-id-hackmd-synced="{% if revisionHackmdSynced %}{{ revisionHackmdSynced.toString() }}{% endif %}"
-  data-page-id-on-hackmd="{% if pageIdOnHackmd %}{{ pageIdOnHackmd.toString() }}{% endif %}"
-  data-page-has-draft-on-hackmd="{% if hasDraftOnHackmd %}{{ hasDraftOnHackmd.toString() }}{% endif %}"
-  data-page-grant="{{ grant }}"
-  data-page-grant-group="{{ grantedGroupId }}"
-  data-page-grant-group-name="{{ grantedGroupName }}"
-  data-page-is-not-creatable="false"
-  data-page-created-at="{{ page.createdAt|datetz('Y/m/d H:i:s') }}"
-  data-page-creator="{% if page && page.creator %}{{ page.creator|json }}{% endif %}"
-  data-page-last-update-username="{% if page && page.lastUpdateUser %}{{ page.lastUpdateUser.name }}{% endif %}"
-  data-page-updated-at="{{ page.updatedAt|datetz('Y/m/d H:i:s') }}"
-  data-page-delete-username="{% if page && page.deleteUser %}{{ page.deleteUser.name }}{% endif %}"
-  data-page-deleted-at="{% if page && page.deletedAt %}{{ page.deletedAt|datetz('Y/m/d H:i:s') }}{% endif %}"
-  data-page-has-children="{% if pages.length > 0 %}true{% else %}false{% endif %}"
-  data-page-user="{% if pageUser %}{{ pageUser|json }}{% else %}null{% endif %}"
-  data-share-links-number="{% if page %}{{ sharelinksNumber }}{% endif %}"
-  data-share-link-id="{% if sharelink %}{{ sharelink._id|json }}{% endif %}"
-  data-has-parent="{{ page.parent != null }}"
-  >
-{% else %}
-<div id="content-main" class="content-main d-flex"
-  data-path="{{ encodeURI(path) }}"
-  data-current-user="{% if user %}{{ user._id.toString() }}{% endif %}"
-  data-page-has-children="{% if pages.length > 0 %}true{% else %}false{% endif %}"
-  >
-{% endif %}
-
-<div class="flex-grow-1 flex-basis-0 mw-0">
-  {% include 'page_alerts.html' %}
-
-  <div id="display-switcher">
-    <script type="text/template" id="raw-text-original">{{ revision.body.toString() | encodeHTML }}</script>
-  </div>
-  <div id="page-editor-navbar-bottom-container" class="d-none d-edit-block"></div>
-</div>
-
-<div id="grw-page-status-alert-container"></div>
-<div id="page-context"></div>
-
-</div>
-

+ 0 - 65
packages/app/src/server/views/widget/page_list.html

@@ -1,65 +0,0 @@
-<ul class="page-list-ul page-list-ul-flat">
-{% for data in pages %}
-
-{% if pagePropertyName %}
-  {% set listPage = data[pagePropertyName] %}
-{% else %}
-  {% set listPage = data %}
-{% endif %}
-
-<li>
-  <img src="{{ listPage.lastUpdateUser.imageUrlCached|default('/images/icons/user.svg') }}" class="picture rounded-circle">
-  <a href="{{ encodeURI(listPage.path) }}" class="text-break ml-1">
-    {{ listPage.path | preventXss }}
-  </a>
-  <span class="page-list-meta">
-    {% if listPage.isTopPage() %}
-      <span class="badge badge-info">TOP</span>
-    {% endif  %}
-
-    {% if listPage.isTemplate() %}
-      <span class="badge badge-info">TMPL</span>
-    {% endif  %}
-
-    {% if listPage.commentCount > 0 %}
-    <span>
-      <i class="icon-bubble"></i>{{ listPage.commentCount }}
-    </span>
-    {% endif  %}
-
-    {% if listPage.liker.length > 0 %}
-    <span class="page-list-liker" data-count="{{ listPage.liker.length }}">
-      <i class="fa fa-heart-o"></i>{{ listPage.liker.length }}
-    </span>
-    {% endif  %}
-
-    {% if viewConfig.seener_threshold and listPage.seenUsers.length >= viewConfig.seener_threshold %}
-    <span class="page-list-seer" data-count="{{ listPage.seenUsers.length }}">
-      <i class="fa fa-paw"></i>{{ listPage.seenUsers.length }}
-    </span>
-    {% endif %}
-
-    {% if !listPage.isPublic() %}
-    <span>
-      <i class="icon icon-lock"></i>
-    </span>
-    {% endif %}
-  </span>
-</li>
-{% endfor %}
-</ul>
-
-{% if pager %}
-<ul class="pagination">
-  {% if pager.prev !== null %}
-    <li class="prev">
-      <a href="{{ encodeURI(path) }}?offset={{ pager.prev }}" class="btn btn-outline-secondary"><i class="icon-arrow-left"></i> Prev</a>
-    </li>
-  {% endif %}
-  {% if pager.next %}
-    <li class="next">
-      <a href="{{ encodeURI(path) }}?offset={{ pager.next }}" class="btn btn-outline-secondary">Next <i class="icon-arrow-right"></i></a>
-    </li>
-  {% endif %}
-</ul>
-{% endif %}

+ 2 - 103
yarn.lock

@@ -4947,14 +4947,6 @@ ajv@^8.0.1:
     require-from-string "^2.0.2"
     uri-js "^4.2.2"
 
-align-text@^0.1.1, align-text@^0.1.3:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
-  dependencies:
-    kind-of "^3.0.2"
-    longest "^1.0.1"
-    repeat-string "^1.5.2"
-
 ansi-colors@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
@@ -5425,10 +5417,6 @@ async@^3.2.3:
   resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
   integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
 
-async@~0.2.6:
-  version "0.2.10"
-  resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
-
 asynckit@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
@@ -6325,10 +6313,6 @@ camelcase-keys@^7.0.0:
     quick-lru "^5.1.1"
     type-fest "^1.2.1"
 
-camelcase@^1.0.2:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
 camelcase@^2.0.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
@@ -6407,13 +6391,6 @@ ccount@^2.0.0:
   resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5"
   integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==
 
-center-align@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
-  dependencies:
-    align-text "^0.1.3"
-    lazy-cache "^1.0.3"
-
 chainsaw@~0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98"
@@ -6779,14 +6756,6 @@ cli@~1.0.0:
     exit "0.1.2"
     glob "^7.1.1"
 
-cliui@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
-  dependencies:
-    center-align "^0.1.1"
-    right-align "^0.1.1"
-    wordwrap "0.0.2"
-
 cliui@^4.0.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
@@ -7792,7 +7761,7 @@ decamelize-keys@^1.1.0:
     decamelize "^1.1.0"
     map-obj "^1.0.0"
 
-decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0:
+decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
 
@@ -9747,10 +9716,6 @@ express-validator@^6.14.0:
     lodash "^4.17.21"
     validator "^13.7.0"
 
-express-webpack-assets@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/express-webpack-assets/-/express-webpack-assets-0.1.0.tgz#000fb3413eb0d512cbd6cd3f6a10b5e70dbe0079"
-
 express@^4.16.1:
   version "4.16.2"
   resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
@@ -13572,10 +13537,6 @@ lazy-ass@1.6.0, lazy-ass@^1.6.0:
   resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
   integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM=
 
-lazy-cache@^1.0.3:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
 lazystream@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
@@ -14037,10 +13998,6 @@ longest-streak@^3.0.0:
   resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.0.1.tgz#c97315b7afa0e7d9525db9a5a2953651432bdc5d"
   integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==
 
-longest@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
 loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
   version "1.3.1"
   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
@@ -15385,10 +15342,6 @@ minimist@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
 
-minimist@~0.0.1:
-  version "0.0.10"
-  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
-
 minipass-collect@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
@@ -16711,13 +16664,6 @@ openid-client@^5.1.2:
     object-hash "^2.0.1"
     oidc-token-hash "^5.0.1"
 
-optimist@~0.6:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
-  dependencies:
-    minimist "~0.0.1"
-    wordwrap "~0.0.2"
-
 optional@0.1.4:
   version "0.1.4"
   resolved "https://registry.yarnpkg.com/optional/-/optional-0.1.4.tgz#cdb1a9bedc737d2025f690ceeb50e049444fd5b3"
@@ -20290,12 +20236,6 @@ rfdc@^1.3.0:
   resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b"
   integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==
 
-right-align@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
-  dependencies:
-    align-text "^0.1.1"
-
 rimraf@2, rimraf@^2.6.1:
   version "2.7.1"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
@@ -21171,7 +21111,7 @@ source-map-url@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
 
-source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.1:
+source-map@^0.5.0, source-map@^0.5.6:
   version "0.5.7"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
   integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
@@ -21868,13 +21808,6 @@ swagger2openapi@^5.3.1:
     yaml "^1.3.1"
     yargs "^12.0.5"
 
-swig-templates@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/swig-templates/-/swig-templates-2.0.2.tgz#d2502a7303019356f4ea76ea9065d4f58af6ab75"
-  dependencies:
-    optimist "~0.6"
-    uglify-js "2.6.0"
-
 swr@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/swr/-/swr-1.3.0.tgz#c6531866a35b4db37b38b72c45a63171faf9f4e8"
@@ -22951,24 +22884,11 @@ uberproto@^1.1.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/uberproto/-/uberproto-1.2.0.tgz#61d4eab024f909c4e6ea52be867c4894a4beeb76"
 
-uglify-js@2.6.0:
-  version "2.6.0"
-  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.6.0.tgz#25eaa1cc3550e39410ceefafd1cfbb6b6d15f001"
-  dependencies:
-    async "~0.2.6"
-    source-map "~0.5.1"
-    uglify-to-browserify "~1.0.0"
-    yargs "~3.10.0"
-
 uglify-js@^3.1.4:
   version "3.13.4"
   resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.4.tgz#592588bb9f47ae03b24916e2471218d914955574"
   integrity sha512-kv7fCkIXyQIilD5/yQy8O+uagsYIOt5cZvs890W40/e/rvjMSzJw81o9Bg0tkURxzZBROtDQhW2LFjOGoK3RZw==
 
-uglify-to-browserify@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
 uglifycss@^0.0.29:
   version "0.0.29"
   resolved "https://registry.yarnpkg.com/uglifycss/-/uglifycss-0.0.29.tgz#abe49531155d146e75dd2fdf933d371bc1180054"
@@ -23934,10 +23854,6 @@ wide-align@^1.1.2:
   dependencies:
     string-width "^1.0.2 || 2 || 3 || 4"
 
-window-size@0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
 windows-release@^3.1.0:
   version "3.3.3"
   resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999"
@@ -23950,18 +23866,10 @@ word-wrap@^1.2.3, word-wrap@~1.2.3:
   resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
   integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
 
-wordwrap@0.0.2:
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
 wordwrap@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
 
-wordwrap@~0.0.2:
-  version "0.0.3"
-  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-
 wrap-ansi@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
@@ -24373,15 +24281,6 @@ yargs@^17.3.1:
     y18n "^5.0.5"
     yargs-parser "^21.0.0"
 
-yargs@~3.10.0:
-  version "3.10.0"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
-  dependencies:
-    camelcase "^1.0.2"
-    cliui "^2.1.0"
-    decamelize "^1.0.0"
-    window-size "0.1.0"
-
 yauzl@^2.10.0:
   version "2.10.0"
   resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"