ultimate-jekyll-manager 0.0.16 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/README.md +10 -1
  2. package/dist/build.js +16 -2
  3. package/dist/cli.js +4 -0
  4. package/dist/commands/setup.js +329 -59
  5. package/dist/defaults/.vscode/settings.json +1 -1
  6. package/dist/defaults/dist/_includes/app/elements/footer.html +1 -0
  7. package/dist/defaults/dist/_includes/app/elements/header.html +1 -0
  8. package/dist/defaults/dist/_includes/master/assets/css/cookieconsent.css +6 -0
  9. package/dist/defaults/dist/_includes/master/assets/css/defaults.css +384 -0
  10. package/dist/defaults/dist/_includes/master/assets/css/normalize.css +349 -0
  11. package/dist/defaults/dist/_includes/master/assets/css/reset.css +48 -0
  12. package/dist/defaults/dist/_includes/master/assets/css/social-share-kit.css +7 -0
  13. package/dist/defaults/dist/_includes/master/assets/scripts/debug/performance-metrics.js +59 -0
  14. package/dist/defaults/dist/_includes/master/assets/scripts/social-share-kit.js +438 -0
  15. package/dist/defaults/dist/_includes/master/global/foot.html +477 -0
  16. package/dist/defaults/dist/_includes/master/global/head.html +510 -0
  17. package/dist/defaults/dist/_includes/master/helpers/404.html +30 -0
  18. package/dist/defaults/dist/_includes/master/helpers/blog-author.html +37 -0
  19. package/dist/defaults/dist/_includes/master/helpers/blog-image.html +33 -0
  20. package/dist/defaults/dist/_includes/master/helpers/fake-comments.html +6 -0
  21. package/dist/defaults/dist/_includes/master/helpers/iframe.html +19 -0
  22. package/dist/defaults/dist/_includes/master/helpers/image.html +133 -0
  23. package/dist/defaults/dist/_includes/master/helpers/read-time.html +6 -0
  24. package/dist/defaults/dist/_includes/master/helpers/svg.html +44 -0
  25. package/dist/defaults/dist/_includes/master/misc/embed-manager.html +97 -0
  26. package/dist/defaults/dist/_includes/master/modules/admin/account-manager.html +30 -0
  27. package/dist/defaults/dist/_includes/master/modules/adunits/adsense-display.html +24 -0
  28. package/dist/defaults/dist/_includes/master/modules/adunits/adsense-in-article.html +24 -0
  29. package/dist/defaults/dist/_includes/master/modules/adunits/adsense-in-feed.html +32 -0
  30. package/dist/defaults/dist/_includes/master/modules/adunits/adsense-multiplex.html +23 -0
  31. package/dist/defaults/dist/_includes/master/modules/adunits/fallback/insert.html +164 -0
  32. package/dist/defaults/dist/_includes/master/modules/checkout/footer.html +43 -0
  33. package/dist/defaults/dist/_includes/master/modules/engagement/giscus.html +17 -0
  34. package/dist/defaults/dist/_includes/master/modules/engagement/social-share-kit.html +33 -0
  35. package/dist/defaults/dist/_includes/master/modules/user/dashboard.html +664 -0
  36. package/dist/defaults/dist/_includes/master/vendor/front-admin/v2/js/theme-prefix.html +164 -0
  37. package/dist/defaults/dist/_includes/themes/front/foot-pre-bundle.html +112 -0
  38. package/dist/defaults/dist/_includes/themes/front/foot.html +1 -0
  39. package/dist/defaults/dist/_includes/themes/front/head-pre-bundle.html +32 -0
  40. package/dist/defaults/dist/_includes/themes/front/head.html +1 -0
  41. package/dist/defaults/dist/_includes/themes/geeks/foot-pre-bundle.html +12 -0
  42. package/dist/defaults/dist/_includes/themes/geeks/foot.html +1 -0
  43. package/dist/defaults/dist/_includes/themes/geeks/footer.html +108 -0
  44. package/dist/defaults/dist/_includes/themes/geeks/head-pre-bundle.html +52 -0
  45. package/dist/defaults/dist/_includes/themes/geeks/head.html +1 -0
  46. package/dist/defaults/dist/_includes/themes/geeks/header.html +213 -0
  47. package/dist/defaults/dist/_includes/themes/placeholder/elements/footer.html +183 -0
  48. package/dist/defaults/dist/_includes/themes/placeholder/elements/header.html +123 -0
  49. package/dist/defaults/dist/_layouts/master/admin/main.html +361 -0
  50. package/dist/defaults/dist/_layouts/master/authentication/account.html +2369 -0
  51. package/dist/defaults/dist/_layouts/master/authentication/main.html +1147 -0
  52. package/dist/defaults/dist/_layouts/master/global/default.html +35 -0
  53. package/dist/defaults/dist/_layouts/master/misc/redirect.html +86 -0
  54. package/dist/defaults/dist/_layouts/master/reference/main.html +83 -0
  55. package/dist/defaults/dist/_layouts/placeholder/404.html +45 -0
  56. package/dist/defaults/dist/_layouts/placeholder/about.md +49 -0
  57. package/dist/defaults/dist/_layouts/placeholder/app.html +68 -0
  58. package/dist/defaults/dist/_layouts/placeholder/blog/index copy.html +213 -0
  59. package/dist/defaults/dist/_layouts/placeholder/blog/index.html +256 -0
  60. package/dist/defaults/dist/_layouts/placeholder/blog/post copy.html +454 -0
  61. package/dist/defaults/dist/_layouts/placeholder/blog/post.html +196 -0
  62. package/dist/defaults/dist/_layouts/placeholder/browser.html +781 -0
  63. package/dist/defaults/dist/_layouts/placeholder/careers.md +18 -0
  64. package/dist/defaults/dist/_layouts/placeholder/contact.html +56 -0
  65. package/dist/defaults/dist/_layouts/placeholder/download.md +50 -0
  66. package/dist/defaults/dist/_layouts/placeholder/extension.md +48 -0
  67. package/dist/defaults/dist/_layouts/placeholder/index.html +1454 -0
  68. package/dist/defaults/dist/_layouts/placeholder/legal/cookies.md +216 -0
  69. package/dist/defaults/dist/_layouts/placeholder/legal/privacy.md +94 -0
  70. package/dist/defaults/dist/_layouts/placeholder/legal/terms.md +172 -0
  71. package/dist/defaults/dist/_layouts/placeholder/pricing.html +515 -0
  72. package/dist/defaults/dist/_layouts/placeholder/team/index.html +41 -0
  73. package/dist/defaults/dist/_layouts/placeholder/team/profile.html +42 -0
  74. package/dist/defaults/dist/_layouts/themes/bootstrap/frontend/base.html +7 -0
  75. package/dist/defaults/dist/_layouts/themes/bootstrap/frontend/default.html +7 -0
  76. package/dist/defaults/dist/_layouts/themes/bootstrap/frontend/minimal.html +7 -0
  77. package/dist/defaults/dist/_layouts/themes/bootstrap/frontend/plain.html +7 -0
  78. package/dist/defaults/dist/_layouts/themes/front/frontend/default.html +19 -0
  79. package/dist/defaults/dist/_layouts/themes/front/frontend/plain.html +142 -0
  80. package/dist/defaults/dist/_layouts/themes/geeks/frontend/base.html +43 -0
  81. package/dist/defaults/dist/_layouts/themes/geeks/frontend/default.html +47 -0
  82. package/dist/defaults/dist/_layouts/themes/geeks/frontend/minimal.html +85 -0
  83. package/dist/defaults/dist/_layouts/themes/geeks/frontend/plain.html +42 -0
  84. package/dist/defaults/dist/ads.txt +5 -0
  85. package/dist/defaults/dist/budget.json +8 -0
  86. package/dist/defaults/dist/manifest.json +88 -0
  87. package/dist/defaults/dist/pages/admin/dashboard.html +826 -0
  88. package/dist/defaults/dist/pages/admin/lab/firestore.html +406 -0
  89. package/dist/defaults/dist/pages/admin/lab/webhook.html +265 -0
  90. package/dist/defaults/dist/pages/admin/notifications/create.html +639 -0
  91. package/dist/defaults/dist/pages/admin/notifications/index.html +14 -0
  92. package/dist/defaults/dist/pages/admin/notifications/vendor/preview.html +131 -0
  93. package/dist/defaults/dist/pages/admin/posts/create.html +1498 -0
  94. package/dist/defaults/dist/pages/admin/posts/index.html +14 -0
  95. package/dist/defaults/dist/pages/admin/posts/vendor/stackedit.html +58 -0
  96. package/dist/defaults/dist/pages/admin/posts/vendor/turndown.js +930 -0
  97. package/dist/defaults/dist/pages/admin/users/index.html +583 -0
  98. package/dist/defaults/dist/pages/admin/users/online.html +450 -0
  99. package/dist/defaults/dist/pages/authentication/account.html +15 -0
  100. package/dist/defaults/dist/pages/authentication/authentication-required.html +15 -0
  101. package/dist/defaults/dist/pages/authentication/authentication-success.html +15 -0
  102. package/dist/defaults/dist/pages/authentication/authentication-token.html +15 -0
  103. package/dist/defaults/dist/pages/authentication/forgot.html +15 -0
  104. package/dist/defaults/dist/pages/authentication/oauth2.html +199 -0
  105. package/dist/defaults/dist/pages/authentication/signin.html +15 -0
  106. package/dist/defaults/dist/pages/authentication/signout.html +15 -0
  107. package/dist/defaults/dist/pages/authentication/signup.html +15 -0
  108. package/dist/defaults/dist/pages/checkout/checkout.html +233 -0
  109. package/dist/defaults/dist/pages/checkout/confirmation.html +274 -0
  110. package/dist/defaults/dist/pages/email-subscription.html +272 -0
  111. package/dist/defaults/dist/pages/feedback/feedback.html +466 -0
  112. package/dist/defaults/dist/pages/status/index.html +240 -0
  113. package/dist/defaults/dist/pages/submission/confirmation.html +109 -0
  114. package/dist/defaults/dist/pages/test1.html +5 -0
  115. package/dist/defaults/dist/pages/test2.html +5 -0
  116. package/dist/defaults/dist/pages.json +42 -0
  117. package/dist/defaults/dist/robots.txt +33 -0
  118. package/dist/defaults/dist/sitemap.html +36 -0
  119. package/dist/defaults/dist/sitemap.xml +64 -0
  120. package/dist/defaults/src/pages/404.md +11 -0
  121. package/dist/defaults/src/pages/about.md +11 -0
  122. package/dist/defaults/src/pages/app.md +11 -0
  123. package/dist/defaults/src/pages/blog.md +11 -0
  124. package/dist/defaults/src/pages/careers.md +11 -0
  125. package/dist/defaults/src/pages/contact.md +11 -0
  126. package/dist/defaults/src/pages/download.md +11 -0
  127. package/dist/defaults/src/pages/extension.md +11 -0
  128. package/dist/defaults/src/pages/index.md +11 -0
  129. package/dist/defaults/src/pages/legal/cookies.md +11 -0
  130. package/dist/defaults/src/pages/legal/privacy.md +11 -0
  131. package/dist/defaults/src/pages/legal/terms.md +11 -0
  132. package/dist/defaults/src/pages/pricing.md +11 -0
  133. package/dist/defaults/src/pages/team.md +11 -0
  134. package/dist/defaults/src/redirects/_ +0 -0
  135. package/dist/defaults/src/service-worker.js +5 -2
  136. package/dist/gulp/main.js +9 -44
  137. package/dist/gulp/plugins/webpack/replace.js +26 -20
  138. package/dist/gulp/tasks/distribute.js +21 -108
  139. package/dist/gulp/tasks/imagemin.js +2 -1
  140. package/dist/gulp/tasks/jekyll.js +47 -5
  141. package/dist/gulp/tasks/sass.js +2 -1
  142. package/dist/gulp/tasks/webpack.js +3 -1
  143. package/package.json +2 -2
  144. package/dist/defaults/src/pages/index.html +0 -9
  145. package/dist/gulp/tasks/clean.js +0 -36
  146. /package/dist/defaults/dist/{_includes/main.html → _layouts/master/status/default.html} +0 -0
  147. /package/dist/defaults/dist/{feeds/posts.json → posts.json} +0 -0
  148. /package/dist/defaults/dist/{feeds/posts.xml → posts.xml} +0 -0
  149. /package/dist/defaults/dist/{pages/redirects → redirects}/admin/admin.html +0 -0
  150. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/account.html +0 -0
  151. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/authentication-required.html +0 -0
  152. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/authentication-success.html +0 -0
  153. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/authentication-token.html +0 -0
  154. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/forgot.html +0 -0
  155. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/helpers/cancel.html +0 -0
  156. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/helpers/change-password.html +0 -0
  157. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/helpers/recover.html +0 -0
  158. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/helpers/refund.html +0 -0
  159. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/helpers/register.html +0 -0
  160. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/helpers/reset-password.html +0 -0
  161. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/helpers/well-known-change-password.html +0 -0
  162. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/oauth2.html +0 -0
  163. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/signin.html +0 -0
  164. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/signout.html +0 -0
  165. /package/dist/defaults/dist/{pages/redirects → redirects}/authentication/signup.html +0 -0
  166. /package/dist/defaults/dist/{pages/redirects → redirects}/download/all.html +0 -0
  167. /package/dist/defaults/dist/{pages/redirects → redirects}/download/linux-debian.html +0 -0
  168. /package/dist/defaults/dist/{pages/redirects → redirects}/download/linux-snap.html +0 -0
  169. /package/dist/defaults/dist/{pages/redirects → redirects}/download/mac.html +0 -0
  170. /package/dist/defaults/dist/{pages/redirects → redirects}/download/windows.html +0 -0
  171. /package/dist/defaults/dist/{pages/redirects → redirects}/extension/browser-extension.html +0 -0
  172. /package/dist/defaults/dist/{pages/redirects → redirects}/extension/chrome.html +0 -0
  173. /package/dist/defaults/dist/{pages/redirects → redirects}/extension/edge.html +0 -0
  174. /package/dist/defaults/dist/{pages/redirects → redirects}/extension/firefox.html +0 -0
  175. /package/dist/defaults/dist/{pages/redirects → redirects}/extension/opera.html +0 -0
  176. /package/dist/defaults/dist/{pages/redirects → redirects}/extension/safari.html +0 -0
  177. /package/dist/defaults/dist/{pages/redirects → redirects}/legal/cookie-policy.html +0 -0
  178. /package/dist/defaults/dist/{pages/redirects → redirects}/legal/privacy-policy.html +0 -0
  179. /package/dist/defaults/dist/{pages/redirects → redirects}/legal/terms-of-service.html +0 -0
  180. /package/dist/defaults/dist/{pages/redirects → redirects}/legal/tos.html +0 -0
  181. /package/dist/defaults/dist/{pages/redirects → redirects}/misc/search-cse.html +0 -0
  182. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/dev.html +0 -0
  183. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/discord.html +0 -0
  184. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/facebook.html +0 -0
  185. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/github.html +0 -0
  186. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/instagram.html +0 -0
  187. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/linkedin.html +0 -0
  188. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/mixcloud.html +0 -0
  189. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/slack.html +0 -0
  190. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/soundcloud.html +0 -0
  191. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/spotify.html +0 -0
  192. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/tiktok.html +0 -0
  193. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/tumblr.html +0 -0
  194. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/twitch.html +0 -0
  195. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/twitter.html +0 -0
  196. /package/dist/defaults/dist/{pages/redirects → redirects}/socials/youtube.html +0 -0
  197. /package/dist/defaults/{dist/_layouts/main.html → src/data/_} +0 -0
package/README.md CHANGED
@@ -40,9 +40,18 @@ npm start
40
40
  ```
41
41
 
42
42
  ## 📦 How to sync with the template
43
- 1. Simply run `npx uj setup` in Terminal to get all the latest updates from the **Ultimate Jekyll template**.
43
+ 1. Simply run `npm start` in Terminal to get all the latest updates from the **Ultimate Jekyll template** and launch your website in the browser.
44
44
 
45
45
  ## 🌎 Publishing your website
46
46
  1. Change the `url` in `_config.yml` to your domain.
47
47
  2. Push your changes to GitHub using `npm run dist` in Terminal.
48
48
 
49
+ ## ⛳️ Flags
50
+ * `--browser=false` - Disables the browser from opening when running `npm start`.
51
+ ```bash
52
+ npm start -- --browser=false
53
+ ```
54
+ * `--debug=true` - Enables logging of extra information when running `npm start`.
55
+ ```bash
56
+ npm start -- --debug=true
57
+ ```
package/dist/build.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // Libraries
2
2
  const jetpack = require('fs-jetpack');
3
- const path = require('path');
4
3
  const yaml = require('js-yaml');
5
- const { execute } = require('node-powertools');
4
+ const argv = require('yargs').argv;
5
+ const { force } = require('node-powertools');
6
6
 
7
7
  // Class
8
8
  function Manager() {
@@ -30,6 +30,20 @@ Manager.prototype.logger = function (name) {
30
30
  return this._logger;
31
31
  };
32
32
 
33
+ // argv
34
+ Manager.getArguments = function () {
35
+ const options = argv || {};
36
+
37
+ // Fix
38
+ options._ = options._ || [];
39
+ options.browser = force(options.browser === undefined ? true : options.browser, 'boolean');
40
+ options.debug = force(options.debug === undefined ? false : options.debug, 'boolean');
41
+
42
+ // Return
43
+ return options;
44
+ };
45
+ Manager.prototype.getArguments = Manager.getArguments;
46
+
33
47
  // isServer
34
48
  Manager.isServer = function () {
35
49
  return process.env.UJ_IS_SERVER === 'true';
package/dist/cli.js CHANGED
@@ -41,6 +41,10 @@ function resolveCommand(options) {
41
41
  function Main() {}
42
42
 
43
43
  Main.prototype.process = async function (options) {
44
+ // Fix options
45
+ options = options || {};
46
+ options._ = options._ || [];
47
+
44
48
  // Determine the command (use default if not provided)
45
49
  const command = resolveCommand(options);
46
50
 
@@ -1,6 +1,7 @@
1
1
  // Libraries
2
2
  const Manager = new (require('../build.js'));
3
3
  const logger = Manager.logger('setup');
4
+ const argv = Manager.getArguments();
4
5
  const path = require('path');
5
6
  const jetpack = require('fs-jetpack');
6
7
  const version = require('wonderful-version');
@@ -17,6 +18,7 @@ const templating = {
17
18
  bundlerVersion: version.clean(package.engines.bundler),
18
19
  nodeVersion: version.major(package.engines.node),
19
20
  };
21
+ const config = Manager.getConfig();
20
22
 
21
23
  // Dependency MAP
22
24
  const DEPENDENCY_MAP = {
@@ -26,15 +28,48 @@ const DEPENDENCY_MAP = {
26
28
  // File MAP
27
29
  const FILE_MAP = {
28
30
  // Files to skip overwrite
29
- 'hooks/**/*': {overwrite: false},
30
- 'src/**/*': {overwrite: false},
31
-
32
- // Files to rename
33
- '_.gitignore': {rename: '.gitignore'},
31
+ 'hooks/**/*': {
32
+ overwrite: false,
33
+ },
34
+ 'src/**/*': {
35
+ overwrite: false,
36
+ },
37
+ 'src/**/*.{html,md}': {
38
+ skip: (file) => {
39
+ // Get the name
40
+ const name = path.basename(file.name, path.extname(file.name));
41
+ const htmlFilePath = path.join(file.destination, `${name}.html`);
42
+ const mdFilePath = path.join(file.destination, `${name}.md`);
43
+ const htmlFileExists = jetpack.exists(htmlFilePath);
44
+ const mdFileExists = jetpack.exists(mdFilePath);
45
+ const eitherExists = htmlFileExists || mdFileExists;
46
+
47
+ console.log('--htmlFilePath', htmlFilePath);
48
+ console.log('--mdFilePath', mdFilePath);
49
+ console.log('--htmlFileExists', htmlFileExists);
50
+ console.log('--mdFileExists', mdFileExists);
51
+ console.log('--eitherExists', eitherExists);
52
+
53
+ // Skip if both files exist
54
+ return eitherExists;
55
+ },
56
+ },
57
+
58
+ // Files to rewrite path
59
+ 'dist/pages/**/*': {
60
+ path: (file) => file.source.replace('dist/pages', 'dist'),
61
+ },
62
+ '_.gitignore': {
63
+ name: (file) => file.name.replace('_.gitignore', '.gitignore'),
64
+ },
34
65
 
35
66
  // Files to run templating on
36
- '.github/workflows/build.yml': {template: templating},
37
- '.nvmrc': {template: templating},
67
+ '.github/workflows/build.yml': {
68
+ template: templating,
69
+ },
70
+ '.nvmrc': {
71
+ template: templating,
72
+ },
38
73
  }
39
74
 
40
75
  module.exports = async function (options) {
@@ -47,6 +82,9 @@ module.exports = async function (options) {
47
82
  project.devDependencies = project.devDependencies || {};
48
83
 
49
84
  try {
85
+ // Log current working directory
86
+ await logCWD();
87
+
50
88
  // Ensure this package is up-to-date
51
89
  await updateManager();
52
90
 
@@ -68,6 +106,15 @@ module.exports = async function (options) {
68
106
  // Build files
69
107
  await buildSiteFiles();
70
108
 
109
+ // Copy all files from src/defaults/dist on first run
110
+ // await copyDefaultDistFiles();
111
+
112
+ // Create CNAME
113
+ await createCNAME();
114
+
115
+ // Fetch firebase-auth files
116
+ await fetchFirebaseAuth();
117
+
71
118
  // Check which locality we are using
72
119
  await checkLocality();
73
120
 
@@ -77,6 +124,12 @@ module.exports = async function (options) {
77
124
  }
78
125
  };
79
126
 
127
+ async function logCWD() {
128
+ logger.log('Current working directory:', process.cwd());
129
+ // logger.log('Current working directory 2:', await execute('pwd'));
130
+ // logger.log('Current working directory 3:', await execute('ls -al'));
131
+ }
132
+
80
133
  async function updateManager() {
81
134
  const npm = new NPM();
82
135
 
@@ -89,20 +142,25 @@ async function updateManager() {
89
142
  }, (e) => {
90
143
  return '0.0.0';
91
144
  });
145
+ const isUpToDate = version.is(installedVersion, '>=', latestVersion);
146
+ const levelDifference = version.levelDifference(installedVersion, latestVersion);
147
+
148
+ // Log
149
+ logVersionCheck('ultimate-jekyll-manager', installedVersion, latestVersion, isUpToDate);
92
150
 
93
151
  // Quit if local
94
152
  if (installedVersion.startsWith('file:')) {
95
- return logger.log('Local version detected. Skipping update check.');
153
+ return;
96
154
  }
97
155
 
98
- // Log
99
- logger.log('Installed Version:', installedVersion);
100
- logger.log('Latest Version:', latestVersion);
101
-
102
156
  // Check if we need to update
103
- if (version.is(installedVersion, '>=', latestVersion)) {
104
- return logger.log('Ultimate Jekyll Manager is up-to-date.');
105
- } else {
157
+ if (!isUpToDate) {
158
+ // Quit if major version difference
159
+ if (levelDifference === 'major') {
160
+ return logger.error(`Major version difference detected. Please update to ${latestVersion} manually.`);
161
+ }
162
+
163
+ // Install the latest version
106
164
  await install('ultimate-jekyll-manager', latestVersion);
107
165
  }
108
166
  }
@@ -110,15 +168,13 @@ async function updateManager() {
110
168
  async function ensureNodeVersion() {
111
169
  const installedVersion = version.clean(process.version);
112
170
  const requiredVersion = version.clean(package.engines.node);
171
+ const isUpToDate = version.is(installedVersion, '>=', requiredVersion);
113
172
 
114
173
  // Log
115
- logger.log('Installed Node Version:', installedVersion);
116
- logger.log('Required Node Version:', requiredVersion);
174
+ logVersionCheck('Node.js', installedVersion, requiredVersion, isUpToDate);
117
175
 
118
176
  // Check if we need to update
119
- if (version.is(installedVersion, '>=', requiredVersion)) {
120
- return logger.log('Node version is up-to-date.');
121
- } else {
177
+ if (!isUpToDate) {
122
178
  throw new Error(`Node version is out-of-date. Required version is ${requiredVersion}.`);
123
179
  }
124
180
  }
@@ -128,15 +184,13 @@ async function ensureBundlerVersion() {
128
184
  (await execute('bundler -v', { log: false })).match(/(\d+\.\d+\.\d+)/)[0]
129
185
  );
130
186
  const requiredVersion = version.clean(package.engines.bundler);
187
+ const isUpToDate = version.is(installedVersion, '>=', requiredVersion);
131
188
 
132
189
  // Log
133
- logger.log('Installed Bundler Version:', installedVersion);
134
- logger.log('Required Bundler Version:', requiredVersion);
190
+ logVersionCheck('Bundler', installedVersion, requiredVersion, isUpToDate);
135
191
 
136
192
  // Check if we need to update
137
- if (version.is(installedVersion, '>=', requiredVersion)) {
138
- return logger.log('Bundler version is up-to-date.');
139
- } else {
193
+ if (!isUpToDate) {
140
194
  throw new Error(`Bundler version is out-of-date. Required version is ${requiredVersion}.`);
141
195
  }
142
196
  }
@@ -146,15 +200,13 @@ async function ensureRubyVersion() {
146
200
  (await execute('ruby -v', { log: false })).match(/(\d+\.\d+\.\d+)/)[0]
147
201
  );
148
202
  const requiredVersion = version.clean(package.engines.ruby);
203
+ const isUpToDate = version.is(installedVersion, '>=', requiredVersion);
149
204
 
150
205
  // Log
151
- logger.log('Installed Ruby Version:', installedVersion);
152
- logger.log('Required Ruby Version:', requiredVersion);
206
+ logVersionCheck('Ruby', installedVersion, requiredVersion, isUpToDate);
153
207
 
154
208
  // Check if we need to update
155
- if (version.is(installedVersion, '>=', requiredVersion)) {
156
- return logger.log('Ruby version is up-to-date.');
157
- } else {
209
+ if (!isUpToDate) {
158
210
  throw new Error(`Ruby version is out-of-date. Required version is ${requiredVersion}.`);
159
211
  }
160
212
  }
@@ -163,19 +215,24 @@ async function ensurePeerDependencies() {
163
215
  const requiredPeerDependencies = package.peerDependencies || {};
164
216
 
165
217
  // Loop through and make sure project has AT LEAST the required version
166
- for (const [dependency, ver] of Object.entries(requiredPeerDependencies)) {
167
- const projectDependencyVersion = project.dependencies[dependency] || project.devDependencies[dependency];
218
+ for (let [dependency, ver] of Object.entries(requiredPeerDependencies)) {
219
+ const projectDependencyVersion = version.clean(project.dependencies[dependency] || project.devDependencies[dependency]);
168
220
  const location = DEPENDENCY_MAP[dependency] === 'dev' ? '--save-dev' : '';
221
+ const isUpToDate = version.is(projectDependencyVersion, '>=', ver);
222
+
223
+ // Clean version if needed
224
+ ver = version.clean(ver);
169
225
 
170
226
  // Log
171
- logger.log('Checking peer dep:', dependency, '-->', projectDependencyVersion, '>=', ver);
227
+ // logger.log('Checking peer dep:', dependency, '-->', projectDependencyVersion, '>=', ver);
228
+ logVersionCheck(dependency, projectDependencyVersion, ver, isUpToDate);
172
229
 
173
230
  // Install if not found
174
231
  if (
175
232
  // Not found
176
233
  !projectDependencyVersion
177
234
  // Not the right version
178
- || version.is(projectDependencyVersion, '<', ver)
235
+ || !isUpToDate
179
236
  ) {
180
237
  await install(dependency, ver, location);
181
238
  }
@@ -239,6 +296,8 @@ function buildSiteFiles() {
239
296
  '**/*',
240
297
 
241
298
  // Files to exclude
299
+ // Dist files
300
+ // '!dist/**',
242
301
  '!**/.DS_Store', // TODO: NOT WORKING
243
302
  ]
244
303
 
@@ -249,44 +308,100 @@ function buildSiteFiles() {
249
308
  nodir: true,
250
309
  });
251
310
 
311
+ const debug = argv.debug
312
+ || true;
313
+
252
314
  // Log
253
- // logger.log('Files:', files);
315
+ logger.log(`Preparing to copy ${files.length} default files...`);
254
316
 
255
317
  // Loop
256
318
  for (const file of files) {
319
+ // Build item
320
+ const item = {
321
+ source: null,
322
+ destination: null,
323
+ name: null,
324
+ }
257
325
  // Get the destination
258
- const source = path.join(dir, file);
259
- let destination = path.join(process.cwd(), file.replace('defaults/', ''));
260
- const filename = path.basename(destination);
326
+ // const source = path.join(dir, file);
327
+ // let destination = path.join(process.cwd(), file.replace('defaults/', ''));
328
+ // const filename = path.basename(destination);
329
+
330
+ // Set the item properties
331
+ item.source = path.dirname(path.join(dir, file));
332
+ item.name = path.basename(file);
333
+ item.destination = path.dirname(path.join(process.cwd(), file.replace('defaults/', '')));
334
+
335
+ // Get options
261
336
  const options = getFileOptions(file);
337
+ const ogName = item.name;
262
338
 
263
339
  // Quit if file is '_'
264
- if (filename === '_') {
340
+ // We have files like this to trigger the creation of directories without them being ignored by git
341
+ if (item.name === '_') {
265
342
  // First, create the directory around the file
266
- jetpack.dir(destination.split(path.sep).slice(0, -1).join(path.sep));
343
+ jetpack.dir(item.destination);
267
344
 
268
345
  // Skip
269
346
  continue;
270
347
  }
271
348
 
272
- // Rename if needed
273
- if (options.rename) {
274
- destination = destination.replace(filename, options.rename);
349
+ // Resolve name
350
+ if (typeof options.name === 'function') {
351
+ item.name = options.name(item);
275
352
  }
276
353
 
277
- // Check if the file exists
278
- const exists = jetpack.exists(destination);
354
+ // Resolve path
355
+ if (typeof options.path === 'function') {
356
+ item.destination = options.path(item);
357
+ }
358
+
359
+ // Resolve overwrite
360
+ if (typeof options.overwrite === 'function') {
361
+ options.overwrite = options.overwrite(item);
362
+ }
363
+
364
+ // Resolve skip
365
+ if (typeof options.skip === 'function') {
366
+ options.skip = options.skip(item);
367
+ }
279
368
 
280
369
  // Log
281
- // logger.log('File:', file);
282
- // logger.log('filename:', filename);
283
- // logger.log('options:', options);
284
- // logger.log('contents:', jetpack.read(source));
285
- // logger.log('source:', source);
286
- // logger.log('Destination:', destination);
370
+ if (debug) {
371
+ logger.log(`Copying defaults...`);
372
+ logger.log(` name: ${item.name}`);
373
+ logger.log(` from: ${item.source}`);
374
+ logger.log(` to: ${item.destination}`);
375
+ logger.log(` overwrite: ${options.overwrite}`);
376
+ logger.log(` skip: ${options.skip}`);
377
+
378
+ // logger.log('File:', file);
379
+ // logger.log('filename:', filename);
380
+ // logger.log('options:', options);
381
+ // // logger.log('contents:', jetpack.read(source));
382
+ // logger.log('source:', source);
383
+ // logger.log('Destination:', destination);
384
+ console.log('\n');
385
+ }
386
+
387
+ // Skip if needed
388
+ if (options.skip) {
389
+ continue;
390
+ }
391
+
392
+
393
+ // Get final paths
394
+ const finalSource = path.join(item.source, ogName);
395
+ const finalDestination = path.join(item.destination, item.name);
396
+
397
+ // console.log('---finalSource', finalSource);
398
+ // console.log('---finalDestination', finalDestination);
399
+
400
+ // Check if the file exists
401
+ const exists = jetpack.exists(finalDestination);
287
402
 
288
403
  // Skip if exists and we don't want to overwrite
289
- if (exists && !options.overwrite) {
404
+ if (!options.overwrite && exists) {
290
405
  continue;
291
406
  }
292
407
 
@@ -296,31 +411,186 @@ function buildSiteFiles() {
296
411
  // logger.log('Running templating on:', destination);
297
412
 
298
413
  // Run the templating
299
- const contents = jetpack.read(source);
414
+ const contents = jetpack.read(finalSource);
300
415
  const templated = template(contents, options.template);
301
416
 
302
417
  // Write the file
303
- jetpack.write(destination, templated);
418
+ jetpack.write(finalDestination, templated);
304
419
  } else {
305
420
  // Copy the file
306
- jetpack.copy(source, destination, { overwrite: true });
421
+ jetpack.copy(finalSource, finalDestination, { overwrite: true });
307
422
  }
308
423
  }
309
424
  }
425
+
426
+ // Copy default dist files
427
+ // async function copyDefaultDistFiles() {
428
+ // // Get the directory
429
+ // const dir = path.join(__dirname, '..', '..', 'defaults', 'dist');
430
+
431
+ // // Log
432
+ // logger.log(`Copying default dist files from ${dir}`);
433
+
434
+ // // Copy the files
435
+ // jetpack.copy(dir, 'dist', { overwrite: true });
436
+ // }
437
+ // async function copyDefaultDistFiles() {
438
+ // // Loop through all files in /defaults directory
439
+ // const dir = path.join(__dirname, '..', '..', 'defaults', 'dist');
440
+ // const input = [
441
+ // // Files to include
442
+ // '**/*',
443
+
444
+ // // Files to exclude
445
+ // '!**/.DS_Store', // TODO: NOT WORKING
446
+ // ]
447
+
448
+ // // Get all files
449
+ // const files = glob(input, {
450
+ // cwd: dir,
451
+ // dot: true,
452
+ // nodir: true,
453
+ // });
454
+
455
+ // // Log
456
+ // logger.log(`Preparing to copy ${files.length} default dist files...`);
457
+
458
+ // for (const file of files) {
459
+ // // const relativePath = path.relative(path.join(__dirname, '..', '..', 'defaults', 'dist'), file);
460
+ // // const destination = path.join(__dirname, '..', '..', 'dist', relativePath.replace('pages', ''));
461
+ // const source = path.join(dir, file);
462
+ // const destination = path.join(process.cwd(), file.replace('dist/pages', 'dist'));
463
+
464
+ // // Log
465
+ // if (true) {
466
+ // logger.log(`Copying default dist file...`);
467
+ // logger.log(` file: ${file}`);
468
+ // logger.log(` from: ${source}`);
469
+ // logger.log(` to: ${destination}`);
470
+ // console.log('\n');
471
+ // }
472
+
473
+ // // Ensure the directory exists
474
+ // // await jetpack.dir(path.dirname(destination));
475
+
476
+ // // Copy the file
477
+ // // await jetpack.copy(file, destination, { overwrite: true });
478
+ // }
479
+ // }
480
+
481
+ // Create CNAME
482
+ async function createCNAME() {
483
+ // Get the CNAME
484
+ const url = config.url;
485
+ const host = new URL(url).host
486
+
487
+ // Write to file
488
+ jetpack.write('dist/CNAME', host);
489
+
490
+ // Log
491
+ logger.log('Created CNAME');
492
+ }
493
+
494
+ // Fetch firebase-auth files
495
+ async function fetchFirebaseAuth() {
496
+ const managerConfig = config.settings['manager-configuration'];
497
+ const firebase = eval(`(${managerConfig})`)?.libraries?.firebase_app?.config;
498
+ const projectId = firebase.projectId || 'ultimate-jekyll';
499
+ const base = `https://${projectId}.firebaseapp.com`;
500
+ const files = [
501
+ {
502
+ remote: '__/auth/handler',
503
+ filename: 'handler.html',
504
+ },
505
+ {
506
+ remote: '__/auth/handler.js',
507
+ },
508
+ {
509
+ remote: '__/auth/experiments.js',
510
+ },
511
+ {
512
+ remote: '__/auth/iframe',
513
+ filename: 'iframe.html',
514
+ },
515
+ {
516
+ remote: '__/auth/iframe.js',
517
+ },
518
+ {
519
+ remote: '__/firebase/init.json',
520
+ }
521
+ ]
522
+ const promises = [];
523
+ const output = './dist';
524
+
525
+ // Loop through files
526
+ files.forEach((file) => {
527
+ // Get the remote URL
528
+ const url = `${base}/${file.remote}`;
529
+
530
+ // Get the local path
531
+ const fileName = file.filename ? path.basename(file.filename) : path.basename(file.remote);
532
+ // console.log('---fileName', fileName);
533
+
534
+ const filePath = path.join(path.dirname(file.remote), fileName);
535
+ // console.log('---filePath', filePath);
536
+
537
+ const finalPath = path.join(output, filePath);
538
+ // console.log('---finalPath', finalPath);
539
+
540
+ // Push to promises
541
+ promises.push(
542
+ fetch(url, {
543
+ response: 'text',
544
+ })
545
+ .then((r) => {
546
+ // Write to file
547
+ // jetpack.write(finalPath, r);
548
+
549
+ jetpack.write(finalPath,
550
+ '---\n'
551
+ + `permalink: /${file.remote}\n`
552
+ + '---\n'
553
+ + '\n'
554
+ + r
555
+ )
556
+ })
557
+ );
558
+ });
559
+
560
+ // Await all promises
561
+ await Promise.all(promises);
562
+
563
+ // Log
564
+ logger.log('Fetched firebase-auth files');
565
+ }
566
+
310
567
  function getFileOptions(filePath) {
311
568
  const defaults = {
312
569
  overwrite: true,
313
- rename: null,
570
+ name: null,
571
+ path: null,
314
572
  template: null,
573
+ skip: false,
315
574
  };
316
575
 
576
+ let options = { ...defaults };
577
+
317
578
  // Loop through all patterns
318
579
  for (const pattern in FILE_MAP) {
319
580
  if (minimatch(filePath, pattern)) {
320
- return { ...defaults, ...FILE_MAP[pattern] };
581
+ options = { ...options, ...FILE_MAP[pattern] };
321
582
  }
322
583
  }
323
584
 
324
- // Default
325
- return defaults;
585
+ return options;
586
+ }
587
+
588
+ function logVersionCheck(name, installedVersion, latestVersion, isUpToDate) {
589
+ // Quit if local
590
+ if (installedVersion.startsWith('file:')) {
591
+ isUpToDate = true;
592
+ }
593
+
594
+ // Log
595
+ logger.log(`Checking if ${name} is up to date (${logger.format.bold(installedVersion)} >= ${logger.format.bold(latestVersion)}): ${isUpToDate ? logger.format.green('Yes') : logger.format.red('No')}`);
326
596
  }
@@ -3,6 +3,6 @@
3
3
  // The following will hide certian files from the file explorer
4
4
  "files.exclude": {
5
5
  // Hide any files with /master/ in the path
6
- "**/master/**": true,
6
+ // "**/master/**": true,
7
7
  }
8
8
  }
@@ -0,0 +1 @@
1
+ <!-- App Footer Content -->
@@ -0,0 +1 @@
1
+ <!-- App Header Content -->
@@ -0,0 +1,6 @@
1
+ .cc-window{opacity:1;transition:opacity 1s ease}.cc-window.cc-invisible{opacity:0}.cc-animate.cc-revoke{transition:transform 1s ease}.cc-animate.cc-revoke.cc-top{transform:translateY(-2em)}.cc-animate.cc-revoke.cc-bottom{transform:translateY(2em)}.cc-animate.cc-revoke.cc-active.cc-bottom,.cc-animate.cc-revoke.cc-active.cc-top,.cc-revoke:hover{transform:translateY(0)}.cc-grower{max-height:0;overflow:hidden;transition:max-height 1s}
2
+ .cc-link,.cc-revoke:hover{text-decoration:underline}.cc-revoke,.cc-window{position:fixed;overflow:hidden;box-sizing:border-box;font-family:Helvetica,Calibri,Arial,sans-serif;font-size:16px;line-height:1.5em;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;z-index:9999}.cc-window.cc-static{position:static}.cc-window.cc-floating{padding:2em;max-width:24em;-ms-flex-direction:column;flex-direction:column}.cc-window.cc-banner{padding:1em 1.8em;width:100%;-ms-flex-direction:row;flex-direction:row}.cc-revoke{padding:.5em}.cc-header{font-size:18px;font-weight:700}.cc-btn,.cc-close,.cc-link,.cc-revoke{cursor:pointer}.cc-link{opacity:.8;display:inline-block;padding:.2em}.cc-link:hover{opacity:1}.cc-link:active,.cc-link:visited{color:initial}.cc-btn{display:block;padding:.4em .8em;font-size:.9em;font-weight:700;border-width:2px;border-style:solid;text-align:center;white-space:nowrap}.cc-highlight .cc-btn:first-child{background-color:transparent;border-color:transparent}.cc-highlight .cc-btn:first-child:focus,.cc-highlight .cc-btn:first-child:hover{background-color:transparent;text-decoration:underline}.cc-close{display:block;position:absolute;top:.5em;right:.5em;font-size:1.6em;opacity:.9;line-height:.75}.cc-close:focus,.cc-close:hover{opacity:1}
3
+ .cc-revoke.cc-top{top:0;left:3em;border-bottom-left-radius:.5em;border-bottom-right-radius:.5em}.cc-revoke.cc-bottom{bottom:0;left:3em;border-top-left-radius:.5em;border-top-right-radius:.5em}.cc-revoke.cc-left{left:3em;right:unset}.cc-revoke.cc-right{right:3em;left:unset}.cc-top{top:1em}.cc-left{left:1em}.cc-right{right:1em}.cc-bottom{bottom:1em}.cc-floating>.cc-link{margin-bottom:1em}.cc-floating .cc-message{display:block;margin-bottom:1em}.cc-window.cc-floating .cc-compliance{-ms-flex:1 0 auto;flex:1 0 auto}.cc-window.cc-banner{-ms-flex-align:center;align-items:center}.cc-banner.cc-top{left:0;right:0;top:0}.cc-banner.cc-bottom{left:0;right:0;bottom:0}.cc-banner .cc-message{display:block;-ms-flex:1 1 auto;flex:1 1 auto;max-width:100%;margin-right:1em}.cc-compliance{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:justify;align-content:space-between}.cc-floating .cc-compliance>.cc-btn{-ms-flex:1;flex:1}.cc-btn+.cc-btn{margin-left:.5em}
4
+ @media print{.cc-revoke,.cc-window{display:none}}@media screen and (max-width:900px){.cc-btn{white-space:normal}}@media screen and (max-width:414px) and (orientation:portrait),screen and (max-width:736px) and (orientation:landscape){.cc-window.cc-top{top:0}.cc-window.cc-bottom{bottom:0}.cc-window.cc-banner,.cc-window.cc-floating,.cc-window.cc-left,.cc-window.cc-right{left:0;right:0}.cc-window.cc-banner{-ms-flex-direction:column;flex-direction:column}.cc-window.cc-banner .cc-compliance{-ms-flex:1 1 auto;flex:1 1 auto}.cc-window.cc-floating{max-width:none}.cc-window .cc-message{margin-bottom:1em}.cc-window.cc-banner{-ms-flex-align:unset;align-items:unset}.cc-window.cc-banner .cc-message{margin-right:0}}
5
+ .cc-floating.cc-theme-classic{padding:1.2em;border-radius:5px}.cc-floating.cc-type-info.cc-theme-classic .cc-compliance{text-align:center;display:inline;-ms-flex:none;flex:none}.cc-theme-classic .cc-btn{border-radius:5px}.cc-theme-classic .cc-btn:last-child{min-width:140px}.cc-floating.cc-type-info.cc-theme-classic .cc-btn{display:inline-block}
6
+ .cc-theme-edgeless.cc-window{padding:0}.cc-floating.cc-theme-edgeless .cc-message{margin:2em 2em 1.5em}.cc-banner.cc-theme-edgeless .cc-btn{margin:0;padding:.8em 1.8em;height:100%}.cc-banner.cc-theme-edgeless .cc-message{margin-left:1em}.cc-floating.cc-theme-edgeless .cc-btn+.cc-btn{margin-left:0}