browser-extension-manager 1.0.14 → 1.1.1

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 (242) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/CLAUDE.md +672 -0
  3. package/TODO.md +3 -0
  4. package/dist/assets/css/browser-extension-manager.scss +18 -0
  5. package/dist/assets/css/components/content/index.scss +5 -0
  6. package/dist/assets/css/components/options/index.scss +5 -0
  7. package/dist/assets/css/components/pages/index.scss +5 -0
  8. package/dist/assets/css/components/popup/index.scss +5 -0
  9. package/dist/assets/css/core/_animations.scss +64 -0
  10. package/dist/assets/css/core/_initialize.scss +23 -0
  11. package/dist/assets/css/core/_utilities.scss +80 -0
  12. package/dist/assets/themes/_template/_theme.js +5 -0
  13. package/dist/assets/themes/_template/_theme.scss +5 -0
  14. package/dist/assets/themes/bootstrap/_theme.js +16 -0
  15. package/dist/assets/themes/bootstrap/_theme.scss +232 -0
  16. package/dist/assets/themes/bootstrap/js/index.esm.js +19 -0
  17. package/dist/assets/themes/bootstrap/js/index.umd.js +34 -0
  18. package/dist/assets/themes/bootstrap/js/src/alert.js +87 -0
  19. package/dist/assets/themes/bootstrap/js/src/base-component.js +86 -0
  20. package/dist/assets/themes/bootstrap/js/src/button.js +72 -0
  21. package/dist/assets/themes/bootstrap/js/src/carousel.js +474 -0
  22. package/dist/assets/themes/bootstrap/js/src/collapse.js +297 -0
  23. package/dist/assets/themes/bootstrap/js/src/dom/data.js +55 -0
  24. package/dist/assets/themes/bootstrap/js/src/dom/event-handler.js +317 -0
  25. package/dist/assets/themes/bootstrap/js/src/dom/manipulator.js +71 -0
  26. package/dist/assets/themes/bootstrap/js/src/dom/selector-engine.js +126 -0
  27. package/dist/assets/themes/bootstrap/js/src/dropdown.js +458 -0
  28. package/dist/assets/themes/bootstrap/js/src/modal.js +378 -0
  29. package/dist/assets/themes/bootstrap/js/src/offcanvas.js +282 -0
  30. package/dist/assets/themes/bootstrap/js/src/popover.js +97 -0
  31. package/dist/assets/themes/bootstrap/js/src/scrollspy.js +296 -0
  32. package/dist/assets/themes/bootstrap/js/src/tab.js +315 -0
  33. package/dist/assets/themes/bootstrap/js/src/toast.js +224 -0
  34. package/dist/assets/themes/bootstrap/js/src/tooltip.js +632 -0
  35. package/dist/assets/themes/bootstrap/js/src/util/backdrop.js +151 -0
  36. package/dist/assets/themes/bootstrap/js/src/util/component-functions.js +35 -0
  37. package/dist/assets/themes/bootstrap/js/src/util/config.js +65 -0
  38. package/dist/assets/themes/bootstrap/js/src/util/focustrap.js +115 -0
  39. package/dist/assets/themes/bootstrap/js/src/util/index.js +306 -0
  40. package/dist/assets/themes/bootstrap/js/src/util/sanitizer.js +117 -0
  41. package/dist/assets/themes/bootstrap/js/src/util/scrollbar.js +114 -0
  42. package/dist/assets/themes/bootstrap/js/src/util/swipe.js +146 -0
  43. package/dist/assets/themes/bootstrap/js/src/util/template-factory.js +160 -0
  44. package/dist/assets/themes/bootstrap/scss/_accordion.scss +153 -0
  45. package/dist/assets/themes/bootstrap/scss/_alert.scss +68 -0
  46. package/dist/assets/themes/bootstrap/scss/_badge.scss +38 -0
  47. package/dist/assets/themes/bootstrap/scss/_breadcrumb.scss +40 -0
  48. package/dist/assets/themes/bootstrap/scss/_button-group.scss +147 -0
  49. package/dist/assets/themes/bootstrap/scss/_buttons.scss +216 -0
  50. package/dist/assets/themes/bootstrap/scss/_card.scss +238 -0
  51. package/dist/assets/themes/bootstrap/scss/_carousel.scss +226 -0
  52. package/dist/assets/themes/bootstrap/scss/_close.scss +66 -0
  53. package/dist/assets/themes/bootstrap/scss/_containers.scss +41 -0
  54. package/dist/assets/themes/bootstrap/scss/_dropdown.scss +250 -0
  55. package/dist/assets/themes/bootstrap/scss/_forms.scss +9 -0
  56. package/dist/assets/themes/bootstrap/scss/_functions.scss +302 -0
  57. package/dist/assets/themes/bootstrap/scss/_grid.scss +39 -0
  58. package/dist/assets/themes/bootstrap/scss/_helpers.scss +12 -0
  59. package/dist/assets/themes/bootstrap/scss/_images.scss +42 -0
  60. package/dist/assets/themes/bootstrap/scss/_list-group.scss +199 -0
  61. package/dist/assets/themes/bootstrap/scss/_maps.scss +174 -0
  62. package/dist/assets/themes/bootstrap/scss/_mixins.scss +42 -0
  63. package/dist/assets/themes/bootstrap/scss/_modal.scss +240 -0
  64. package/dist/assets/themes/bootstrap/scss/_nav.scss +197 -0
  65. package/dist/assets/themes/bootstrap/scss/_navbar.scss +289 -0
  66. package/dist/assets/themes/bootstrap/scss/_offcanvas.scss +147 -0
  67. package/dist/assets/themes/bootstrap/scss/_pagination.scss +109 -0
  68. package/dist/assets/themes/bootstrap/scss/_placeholders.scss +51 -0
  69. package/dist/assets/themes/bootstrap/scss/_popover.scss +196 -0
  70. package/dist/assets/themes/bootstrap/scss/_progress.scss +68 -0
  71. package/dist/assets/themes/bootstrap/scss/_reboot.scss +611 -0
  72. package/dist/assets/themes/bootstrap/scss/_root.scss +187 -0
  73. package/dist/assets/themes/bootstrap/scss/_spinners.scss +85 -0
  74. package/dist/assets/themes/bootstrap/scss/_tables.scss +171 -0
  75. package/dist/assets/themes/bootstrap/scss/_toasts.scss +73 -0
  76. package/dist/assets/themes/bootstrap/scss/_tooltip.scss +119 -0
  77. package/dist/assets/themes/bootstrap/scss/_transitions.scss +27 -0
  78. package/dist/assets/themes/bootstrap/scss/_type.scss +106 -0
  79. package/dist/assets/themes/bootstrap/scss/_utilities.scss +806 -0
  80. package/dist/assets/themes/bootstrap/scss/_variables-dark.scss +102 -0
  81. package/dist/assets/themes/bootstrap/scss/_variables.scss +1753 -0
  82. package/dist/assets/themes/bootstrap/scss/bootstrap-grid.scss +62 -0
  83. package/dist/assets/themes/bootstrap/scss/bootstrap-reboot.scss +10 -0
  84. package/dist/assets/themes/bootstrap/scss/bootstrap-utilities.scss +19 -0
  85. package/dist/assets/themes/bootstrap/scss/bootstrap.scss +52 -0
  86. package/dist/assets/themes/bootstrap/scss/forms/_floating-labels.scss +97 -0
  87. package/dist/assets/themes/bootstrap/scss/forms/_form-check.scss +189 -0
  88. package/dist/assets/themes/bootstrap/scss/forms/_form-control.scss +214 -0
  89. package/dist/assets/themes/bootstrap/scss/forms/_form-range.scss +91 -0
  90. package/dist/assets/themes/bootstrap/scss/forms/_form-select.scss +80 -0
  91. package/dist/assets/themes/bootstrap/scss/forms/_form-text.scss +11 -0
  92. package/dist/assets/themes/bootstrap/scss/forms/_input-group.scss +132 -0
  93. package/dist/assets/themes/bootstrap/scss/forms/_labels.scss +36 -0
  94. package/dist/assets/themes/bootstrap/scss/forms/_validation.scss +12 -0
  95. package/dist/assets/themes/bootstrap/scss/helpers/_clearfix.scss +3 -0
  96. package/dist/assets/themes/bootstrap/scss/helpers/_color-bg.scss +7 -0
  97. package/dist/assets/themes/bootstrap/scss/helpers/_colored-links.scss +30 -0
  98. package/dist/assets/themes/bootstrap/scss/helpers/_focus-ring.scss +5 -0
  99. package/dist/assets/themes/bootstrap/scss/helpers/_icon-link.scss +25 -0
  100. package/dist/assets/themes/bootstrap/scss/helpers/_position.scss +36 -0
  101. package/dist/assets/themes/bootstrap/scss/helpers/_ratio.scss +26 -0
  102. package/dist/assets/themes/bootstrap/scss/helpers/_stacks.scss +15 -0
  103. package/dist/assets/themes/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  104. package/dist/assets/themes/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  105. package/dist/assets/themes/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  106. package/dist/assets/themes/bootstrap/scss/helpers/_vr.scss +8 -0
  107. package/dist/assets/themes/bootstrap/scss/mixins/_alert.scss +18 -0
  108. package/dist/assets/themes/bootstrap/scss/mixins/_backdrop.scss +14 -0
  109. package/dist/assets/themes/bootstrap/scss/mixins/_banner.scss +7 -0
  110. package/dist/assets/themes/bootstrap/scss/mixins/_border-radius.scss +78 -0
  111. package/dist/assets/themes/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  112. package/dist/assets/themes/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  113. package/dist/assets/themes/bootstrap/scss/mixins/_buttons.scss +70 -0
  114. package/dist/assets/themes/bootstrap/scss/mixins/_caret.scss +69 -0
  115. package/dist/assets/themes/bootstrap/scss/mixins/_clearfix.scss +9 -0
  116. package/dist/assets/themes/bootstrap/scss/mixins/_color-mode.scss +21 -0
  117. package/dist/assets/themes/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  118. package/dist/assets/themes/bootstrap/scss/mixins/_container.scss +11 -0
  119. package/dist/assets/themes/bootstrap/scss/mixins/_deprecate.scss +10 -0
  120. package/dist/assets/themes/bootstrap/scss/mixins/_forms.scss +163 -0
  121. package/dist/assets/themes/bootstrap/scss/mixins/_gradients.scss +47 -0
  122. package/dist/assets/themes/bootstrap/scss/mixins/_grid.scss +151 -0
  123. package/dist/assets/themes/bootstrap/scss/mixins/_image.scss +16 -0
  124. package/dist/assets/themes/bootstrap/scss/mixins/_list-group.scss +26 -0
  125. package/dist/assets/themes/bootstrap/scss/mixins/_lists.scss +7 -0
  126. package/dist/assets/themes/bootstrap/scss/mixins/_pagination.scss +10 -0
  127. package/dist/assets/themes/bootstrap/scss/mixins/_reset-text.scss +17 -0
  128. package/dist/assets/themes/bootstrap/scss/mixins/_resize.scss +6 -0
  129. package/dist/assets/themes/bootstrap/scss/mixins/_table-variants.scss +24 -0
  130. package/dist/assets/themes/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  131. package/dist/assets/themes/bootstrap/scss/mixins/_transition.scss +26 -0
  132. package/dist/assets/themes/bootstrap/scss/mixins/_utilities.scss +97 -0
  133. package/dist/assets/themes/bootstrap/scss/mixins/_visually-hidden.scss +38 -0
  134. package/dist/assets/themes/bootstrap/scss/tests/jasmine.js +16 -0
  135. package/dist/assets/themes/bootstrap/scss/tests/mixins/_auto-import-of-variables-dark.test.scss +7 -0
  136. package/dist/assets/themes/bootstrap/scss/tests/mixins/_color-modes.test.scss +69 -0
  137. package/dist/assets/themes/bootstrap/scss/tests/mixins/_media-query-color-mode-full.test.scss +8 -0
  138. package/dist/assets/themes/bootstrap/scss/tests/mixins/_utilities.test.scss +393 -0
  139. package/dist/assets/themes/bootstrap/scss/tests/sass-true/register.js +14 -0
  140. package/dist/assets/themes/bootstrap/scss/tests/sass-true/runner.js +17 -0
  141. package/dist/assets/themes/bootstrap/scss/tests/utilities/_api.test.scss +75 -0
  142. package/dist/assets/themes/bootstrap/scss/utilities/_api.scss +47 -0
  143. package/dist/assets/themes/bootstrap/scss/vendor/_rfs.scss +348 -0
  144. package/dist/assets/themes/classy/README.md +75 -0
  145. package/dist/assets/themes/classy/_config.scss +185 -0
  146. package/dist/assets/themes/classy/_theme.js +29 -0
  147. package/dist/assets/themes/classy/_theme.scss +34 -0
  148. package/dist/assets/themes/classy/css/base/_animations.scss +27 -0
  149. package/dist/assets/themes/classy/css/base/_backgrounds.scss +191 -0
  150. package/dist/assets/themes/classy/css/base/_borders.scss +65 -0
  151. package/dist/assets/themes/classy/css/base/_root.scss +58 -0
  152. package/dist/assets/themes/classy/css/base/_soft-colors.scss +92 -0
  153. package/dist/assets/themes/classy/css/base/_spacing.scss +64 -0
  154. package/dist/assets/themes/classy/css/base/_typography.scss +179 -0
  155. package/dist/assets/themes/classy/css/base/_utilities.scss +77 -0
  156. package/dist/assets/themes/classy/css/components/_accordion.scss +33 -0
  157. package/dist/assets/themes/classy/css/components/_avatars.scss +32 -0
  158. package/dist/assets/themes/classy/css/components/_badges.scss +25 -0
  159. package/dist/assets/themes/classy/css/components/_buttons.scss +397 -0
  160. package/dist/assets/themes/classy/css/components/_cards.scss +33 -0
  161. package/dist/assets/themes/classy/css/components/_carousel.scss +41 -0
  162. package/dist/assets/themes/classy/css/components/_forms.scss +115 -0
  163. package/dist/assets/themes/classy/css/components/_links.scss +19 -0
  164. package/dist/assets/themes/classy/css/components/_logo-scroll.scss +57 -0
  165. package/dist/assets/themes/classy/css/components/_spinners.scss +19 -0
  166. package/dist/assets/themes/classy/css/components/_text.scss +41 -0
  167. package/dist/assets/themes/classy/css/layout/_blog.scss +42 -0
  168. package/dist/assets/themes/classy/css/layout/_general.scss +139 -0
  169. package/dist/assets/themes/classy/css/layout/_navigation.scss +576 -0
  170. package/dist/assets/themes/classy/css/layout/_team.scss +18 -0
  171. package/dist/assets/themes/classy/js/logo-scroll.js +83 -0
  172. package/dist/assets/themes/classy/js/navbar-scroll.js +65 -0
  173. package/dist/background.js +235 -261
  174. package/dist/build.js +93 -4
  175. package/dist/commands/setup.js +0 -268
  176. package/dist/config/manifest.json +11 -3
  177. package/dist/config/page-template.html +24 -0
  178. package/dist/defaults/.nvmrc +1 -1
  179. package/dist/defaults/CLAUDE.md +8 -0
  180. package/dist/defaults/config/browser-extension-manager.json +37 -0
  181. package/dist/defaults/src/assets/css/components/content/index.scss +11 -0
  182. package/dist/defaults/src/assets/css/components/options/index.scss +14 -0
  183. package/dist/defaults/src/assets/css/components/pages/index.scss +10 -0
  184. package/dist/defaults/src/assets/css/components/popup/index.scss +10 -0
  185. package/dist/defaults/src/assets/css/components/sidepanel/index.scss +6 -0
  186. package/dist/defaults/src/assets/css/main.scss +32 -0
  187. package/dist/defaults/src/assets/js/components/background/index.js +22 -0
  188. package/dist/defaults/src/assets/js/components/content/index.js +22 -0
  189. package/dist/defaults/src/assets/js/components/options/index.js +22 -0
  190. package/dist/defaults/src/assets/js/components/pages/index.js +22 -0
  191. package/dist/defaults/src/assets/js/components/popup/index.js +22 -0
  192. package/dist/defaults/src/assets/js/components/sidepanel/index.js +20 -0
  193. package/dist/defaults/src/assets/vendor/.gitkeep +0 -0
  194. package/dist/defaults/src/manifest.json +11 -6
  195. package/dist/defaults/src/views/options/index.html +8 -0
  196. package/dist/defaults/src/views/pages/index.html +10 -0
  197. package/dist/defaults/src/views/popup/index.html +4 -0
  198. package/dist/defaults/src/views/sidepanel/index.html +4 -0
  199. package/dist/gulp/main.js +11 -5
  200. package/dist/gulp/plugins/webpack/strip-dev-blocks.js +53 -0
  201. package/dist/gulp/tasks/{_package.js → BU/_package.js} +1 -1
  202. package/dist/gulp/tasks/{developmentRebuild.js → BU/developmentRebuild.js} +1 -1
  203. package/dist/gulp/tasks/{themes.js → BU/themes.js} +2 -1
  204. package/dist/gulp/tasks/{test.js → _.js} +3 -3
  205. package/dist/gulp/tasks/audit.js +154 -0
  206. package/dist/gulp/tasks/defaults.js +308 -0
  207. package/dist/gulp/tasks/distribute.js +71 -78
  208. package/dist/gulp/tasks/html.js +150 -0
  209. package/dist/gulp/tasks/icons.js +3 -2
  210. package/dist/gulp/tasks/package.js +194 -13
  211. package/dist/gulp/tasks/sass.js +188 -43
  212. package/dist/gulp/tasks/serve.js +1 -0
  213. package/dist/gulp/tasks/utils/template-transform.js +50 -0
  214. package/dist/gulp/tasks/webpack.js +341 -134
  215. package/dist/index.js +34 -34
  216. package/dist/options.js +40 -0
  217. package/dist/page.js +40 -0
  218. package/dist/popup.js +40 -0
  219. package/dist/sidepanel.js +40 -0
  220. package/firebase-debug.log +350 -0
  221. package/package.json +25 -18
  222. package/dist/assets/css/main.scss +0 -3
  223. package/dist/assets/themes/bootstrap/5.3.3/css/bootstrap.css +0 -12057
  224. package/dist/assets/themes/bootstrap/5.3.3/css/bootstrap.css.map +0 -1
  225. package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.bundle.js +0 -6314
  226. package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.bundle.js.map +0 -1
  227. package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.js +0 -4494
  228. package/dist/assets/themes/bootstrap/5.3.3/js/bootstrap.js.map +0 -1
  229. package/dist/defaults/src/assets/css/content.scss +0 -2
  230. package/dist/defaults/src/assets/css/options.scss +0 -11
  231. package/dist/defaults/src/assets/css/popup.scss +0 -14
  232. package/dist/defaults/src/assets/js/background.js +0 -18
  233. package/dist/defaults/src/assets/js/content.js +0 -15
  234. package/dist/defaults/src/assets/js/options.js +0 -17
  235. package/dist/defaults/src/assets/js/popup.js +0 -17
  236. package/dist/defaults/src/pages/options.html +0 -26
  237. package/dist/defaults/src/pages/popup.html +0 -26
  238. /package/dist/{defaults/src/assets/images/_ → assets/css/bundles/.gitkeep} +0 -0
  239. /package/dist/assets/css/{fontawesome.scss → core/_fontawesome.scss} +0 -0
  240. /package/dist/defaults/src/assets/{vendor/_ → images/.gitkeep} +0 -0
  241. /package/dist/gulp/tasks/{_importer.js → BU/_importer.js} +0 -0
  242. /package/dist/gulp/tasks/{_vendor.js → BU/_vendor.js} +0 -0
@@ -0,0 +1,22 @@
1
+ // ============================================
2
+ // Content Script Component
3
+ // ============================================
4
+
5
+ // Import Browser Extension Manager
6
+ import Manager from 'browser-extension-manager/content';
7
+
8
+ // Create instance
9
+ const manager = new Manager();
10
+
11
+ // Initialize
12
+ manager.initialize()
13
+ .then(() => {
14
+ // Shortcuts
15
+ const { extension, messenger, logger } = manager;
16
+
17
+ // Add your project-specific content script logic here
18
+ // ...
19
+
20
+ // Log the initialization
21
+ logger.log('Content script initialized!');
22
+ });
@@ -0,0 +1,22 @@
1
+ // ============================================
2
+ // Options Component
3
+ // ============================================
4
+
5
+ // Import Browser Extension Manager
6
+ import Manager from 'browser-extension-manager/options';
7
+
8
+ // Create instance
9
+ const manager = new Manager();
10
+
11
+ // Initialize
12
+ manager.initialize()
13
+ .then(() => {
14
+ // Shortcuts
15
+ const { extension, messenger, logger, webManager } = manager;
16
+
17
+ // Add your project-specific options logic here
18
+ // ...
19
+
20
+ // Log the initialization
21
+ logger.log('Options initialized!');
22
+ });
@@ -0,0 +1,22 @@
1
+ // ============================================
2
+ // Index Page (Main Extension Page)
3
+ // ============================================
4
+
5
+ // Import Browser Extension Manager
6
+ import Manager from 'browser-extension-manager/page';
7
+
8
+ // Create instance
9
+ const manager = new Manager();
10
+
11
+ // Initialize
12
+ manager.initialize()
13
+ .then(() => {
14
+ // Shortcuts
15
+ const { extension, messenger, logger, webManager } = manager;
16
+
17
+ // Add your project-specific page logic here
18
+ // ...
19
+
20
+ // Log the initialization
21
+ logger.log('Index page initialized!');
22
+ });
@@ -0,0 +1,22 @@
1
+ // ============================================
2
+ // Popup Component
3
+ // ============================================
4
+
5
+ // Import Browser Extension Manager
6
+ import Manager from 'browser-extension-manager/popup';
7
+
8
+ // Create instance
9
+ const manager = new Manager();
10
+
11
+ // Initialize
12
+ manager.initialize()
13
+ .then(() => {
14
+ // Shortcuts
15
+ const { extension, messenger, logger, webManager } = manager;
16
+
17
+ // Add your project-specific popup logic here
18
+ // ...
19
+
20
+ // Log the initialization
21
+ logger.log('Popup initialized!');
22
+ });
@@ -0,0 +1,20 @@
1
+ // ============================================
2
+ // Sidepanel Component
3
+ // ============================================
4
+ // Default functionality for the sidepanel view
5
+
6
+ // Import Browser Extension Manager
7
+ import Manager from 'browser-extension-manager/sidepanel';
8
+
9
+ // Create instance
10
+ const manager = new Manager();
11
+
12
+ // Initialize
13
+ manager.initialize()
14
+ .then(() => {
15
+ // Shortcuts
16
+ const { extension, messenger, logger, webManager } = manager;
17
+
18
+ // Add your sidepanel-specific JavaScript here
19
+ logger.log('Sidepanel initialized!');
20
+ });
File without changes
@@ -5,7 +5,7 @@
5
5
 
6
6
  // Background script
7
7
  background: {
8
- service_worker: 'assets/js/background.bundle.js',
8
+ service_worker: 'assets/js/components/background.bundle.js',
9
9
  },
10
10
 
11
11
  // Permissions
@@ -22,7 +22,7 @@
22
22
 
23
23
  // Options page
24
24
  options_ui: {
25
- page: 'pages/options.html',
25
+ page: 'views/options/index.html',
26
26
  },
27
27
 
28
28
  // Content scripts
@@ -33,10 +33,10 @@
33
33
  // 'https://*/*',
34
34
  // ],
35
35
  // js: [
36
- // 'assets/js/content.bundle.js',
36
+ // 'assets/js/components/content.bundle.js',
37
37
  // ],
38
38
  // css: [
39
- // 'assets/css/content.bundle.css',
39
+ // 'assets/css/components/content.bundle.css',
40
40
  // ],
41
41
  // run_at: 'document_end',
42
42
  // all_frames: false,
@@ -46,7 +46,12 @@
46
46
  // Browser action
47
47
  action: {
48
48
  default_title: '__MSG_appName__',
49
- default_popup: 'pages/popup.html',
49
+ default_popup: 'views/popup/index.html',
50
+ },
51
+
52
+ // Side panel
53
+ side_panel: {
54
+ default_path: 'views/sidepanel/index.html',
50
55
  },
51
56
 
52
57
  // Content security policy
@@ -85,7 +90,7 @@
85
90
  // Sandbox
86
91
  sandbox: {
87
92
  pages: [
88
- // 'pages/sandbox.html',
93
+ // 'views/sandbox/index.html',
89
94
  ],
90
95
  },
91
96
 
@@ -0,0 +1,8 @@
1
+ <div class="options-container p-4">
2
+ <h1 class="h2 mb-4">Settings</h1>
3
+
4
+ <section class="settings-section mb-4">
5
+ <h2 class="h5 mb-3">General Settings</h2>
6
+ <p class="text-muted">Configure your extension settings here.</p>
7
+ </section>
8
+ </div>
@@ -0,0 +1,10 @@
1
+ <div class="page-container p-4">
2
+ <header class="page-header mb-4">
3
+ <h1 class="h2">Welcome</h1>
4
+ <p class="lead text-muted">Your extension page is ready.</p>
5
+ </header>
6
+
7
+ <main class="page-content">
8
+ <p>Add your page content here.</p>
9
+ </main>
10
+ </div>
@@ -0,0 +1,4 @@
1
+ <div class="popup-container p-3">
2
+ <h1 class="h4 mb-3">Popup</h1>
3
+ <p class="text-muted">Add your popup content here.</p>
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <div class="sidepanel-container p-3">
2
+ <h1 class="h4 mb-3">Side Panel</h1>
3
+ <p class="text-muted">Add your sidepanel content here.</p>
4
+ </div>
package/dist/gulp/main.js CHANGED
@@ -2,15 +2,19 @@
2
2
  const Manager = new (require('../build.js'));
3
3
  const logger = Manager.logger('main');
4
4
  const argv = Manager.getArguments();
5
- const { series, parallel, watch } = require('gulp');
5
+ const { series, parallel } = require('gulp');
6
6
  const path = require('path');
7
- const jetpack = require('fs-jetpack');
7
+ const glob = require('glob').globSync;
8
+
9
+ // Load package
10
+ const package = Manager.getPackage('main');
11
+ const project = Manager.getPackage('project');
8
12
 
9
13
  // Log
10
14
  logger.log('Starting...', argv);
11
15
 
12
16
  // Load tasks
13
- const tasks = jetpack.list(path.join(__dirname, 'tasks'));
17
+ const tasks = glob('*.js', { cwd: `${__dirname}/tasks` });
14
18
 
15
19
  // Init global
16
20
  global.tasks = {};
@@ -35,9 +39,11 @@ exports.build = series(
35
39
  // exports.setup,
36
40
  // exports.clean,
37
41
  // exports.themes,
42
+ exports.defaults,
38
43
  exports.distribute,
39
- parallel(exports.sass, exports.webpack, exports.icons),
44
+ parallel(exports.sass, exports.webpack, exports.icons, exports.html),
40
45
  exports.package,
46
+ exports.audit,
41
47
  );
42
48
 
43
49
  // Compose task scheduler
@@ -46,6 +52,6 @@ exports.default = series(
46
52
  // exports.clean,
47
53
  exports.serve,
48
54
  exports.build,
49
- exports.developmentRebuild,
55
+ // exports.developmentRebuild,
50
56
  // exports.watcher,
51
57
  );
@@ -0,0 +1,53 @@
1
+ // Plugin: StripDevBlocksPlugin
2
+ class StripDevBlocksPlugin {
3
+ constructor(options = {}) {
4
+ this.options = Object.assign(
5
+ {
6
+ fileTest: /\.js$/,
7
+ startMarker: '/* @dev-only:start */',
8
+ endMarker: '/* @dev-only:end */',
9
+ },
10
+ options
11
+ )
12
+ this.enabled = process.env.BEM_BUILD_MODE === 'true'
13
+ }
14
+
15
+ apply(compiler) {
16
+ if (!this.enabled) return
17
+
18
+ compiler.hooks.compilation.tap('StripDevBlocksPlugin', (compilation) => {
19
+ compilation.hooks.processAssets.tap(
20
+ {
21
+ name: 'StripDevBlocksPlugin',
22
+ stage: compilation.PROCESS_ASSETS_STAGE_OPTIMIZE,
23
+ },
24
+ (assets) => {
25
+ for (const filename in assets) {
26
+ if (!this.options.fileTest.test(filename)) continue
27
+
28
+ let source = assets[filename].source()
29
+
30
+ // Strip everything between start and end marker
31
+ const pattern = new RegExp(
32
+ `${this.escape(this.options.startMarker)}[\\s\\S]*?${this.escape(this.options.endMarker)}`,
33
+ 'g'
34
+ )
35
+ source = source.replace(pattern, '')
36
+
37
+ compilation.updateAsset(
38
+ filename,
39
+ new compiler.webpack.sources.RawSource(source)
40
+ )
41
+ }
42
+ }
43
+ )
44
+ })
45
+ }
46
+
47
+ escape(str) {
48
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
49
+ }
50
+ }
51
+
52
+ // Export
53
+ module.exports = StripDevBlocksPlugin
@@ -155,7 +155,7 @@ function packageWatcher(complete) {
155
155
  logger.log('[watcher] Watching for changes...');
156
156
 
157
157
  // Watch for changes in the dist folder
158
- watch(input, { delay: delay }, parallel(...tasks))
158
+ watch(input, { delay: delay, dot: true }, parallel(...tasks))
159
159
  .on('change', function (path) {
160
160
  logger.log(`[watcher] File ${path} was changed`);
161
161
  });
@@ -82,7 +82,7 @@ function developmentRebuildWatcher(complete) {
82
82
  logger.log('[watcher] Watching for changes...');
83
83
 
84
84
  // Watch for changes
85
- watch(input, { delay: delay }, developmentRebuild)
85
+ watch(input, { delay: delay, dot: true }, developmentRebuild)
86
86
  .on('change', function(path) {
87
87
  logger.log(`[watcher] File ${path} was changed`);
88
88
  });
@@ -7,6 +7,7 @@ const { src, dest, watch, series } = require('gulp');
7
7
  const package = Manager.getPackage('main');
8
8
  const project = Manager.getPackage('project');
9
9
  const manifest = Manager.getManifest();
10
+ const config = Manager.getConfig('project');
10
11
  const rootPathPackage = Manager.getRootPath('main');
11
12
  const rootPathProject = Manager.getRootPath('project');
12
13
 
@@ -56,7 +57,7 @@ function themesWatcher(complete) {
56
57
  logger.log('[watcher] Watching for changes...');
57
58
 
58
59
  // Watch for changes
59
- watch(input, { delay: delay }, themes)
60
+ watch(input, { delay: delay, dot: true }, themes)
60
61
  .on('change', function(path) {
61
62
  logger.log(`[watcher] File ${path} was changed`);
62
63
  });
@@ -1,6 +1,6 @@
1
1
  // Libraries
2
2
  const Manager = new (require('../../build.js'));
3
- const logger = Manager.logger('test');
3
+ const logger = Manager.logger('XXX');
4
4
 
5
5
  // Load package
6
6
  const package = Manager.getPackage('main');
@@ -9,9 +9,9 @@ const rootPathPackage = Manager.getRootPath('main');
9
9
  const rootPathProject = Manager.getRootPath('project');
10
10
 
11
11
  // Task
12
- module.exports = function test(complete) {
12
+ module.exports = function XXX(complete) {
13
13
  // Log
14
- logger.log('Starting test...');
14
+ logger.log('Starting XXX...');
15
15
 
16
16
  // Complete
17
17
  return complete();
@@ -0,0 +1,154 @@
1
+ // Libraries
2
+ const Manager = new (require('../../build.js'));
3
+ const logger = Manager.logger('audit');
4
+ const path = require('path');
5
+ const jetpack = require('fs-jetpack');
6
+ const { series } = require('gulp');
7
+ const chalk = require('chalk');
8
+
9
+ // Load package
10
+ const package = Manager.getPackage('main');
11
+ const project = Manager.getPackage('project');
12
+ const rootPathPackage = Manager.getRootPath('main');
13
+ const rootPathProject = Manager.getRootPath('project');
14
+
15
+ // Audit results tracker
16
+ const auditResults = {
17
+ externalScripts: [],
18
+ };
19
+
20
+ // Patterns to detect external script references
21
+ const EXTERNAL_SCRIPT_PATTERNS = [
22
+ // Script tags
23
+ /<script[^>]*src=["'](https?:\/\/[^"']+)["']/gi,
24
+ // Dynamic script creation
25
+ /createElement\s*\(\s*["']script["']\s*\)[^}]*src\s*=\s*["'](https?:\/\/[^"']+)["']/gi,
26
+ // Direct URL assignments to src
27
+ /\.src\s*=\s*["'](https?:\/\/[^"']+)["']/gi,
28
+ // fetch/XMLHttpRequest calls to external URLs (common pattern for loading scripts)
29
+ /fetch\s*\(\s*["'](https?:\/\/[^"']+\.js[^"']*)["']/gi,
30
+ /XMLHttpRequest[^}]*open\s*\([^,]*,\s*["'](https?:\/\/[^"']+\.js[^"']*)["']/gi,
31
+ // import() dynamic imports of external URLs
32
+ /import\s*\(\s*["'](https?:\/\/[^"']+)["']/gi,
33
+ // require() of external URLs
34
+ /require\s*\(\s*["'](https?:\/\/[^"']+)["']/gi,
35
+ ];
36
+
37
+ // Check a single file for external script references
38
+ function checkFileForExternalScripts(filePath) {
39
+ try {
40
+ const content = jetpack.read(filePath);
41
+ if (!content) {
42
+ return [];
43
+ }
44
+
45
+ const found = [];
46
+ const lines = content.split('\n');
47
+
48
+ EXTERNAL_SCRIPT_PATTERNS.forEach(pattern => {
49
+ let match;
50
+ const globalPattern = new RegExp(pattern.source, pattern.flags);
51
+
52
+ while ((match = globalPattern.exec(content)) !== null) {
53
+ const url = match[1];
54
+ const lineNumber = content.substring(0, match.index).split('\n').length;
55
+
56
+ found.push({
57
+ file: path.relative(rootPathProject, filePath),
58
+ url: url,
59
+ line: lineNumber,
60
+ pattern: pattern.source.substring(0, 50) + '...',
61
+ });
62
+ }
63
+ });
64
+
65
+ return found;
66
+ } catch (e) {
67
+ logger.error(`Error reading file ${filePath}:`, e.message);
68
+ return [];
69
+ }
70
+ }
71
+
72
+ // Main audit task
73
+ async function auditFn(complete) {
74
+ // Log
75
+ logger.log('Starting audit...');
76
+
77
+ // Skip if not in build mode
78
+ if (!Manager.isBuildMode()) {
79
+ logger.log('Skipping audit (not in build mode)');
80
+ return complete();
81
+ }
82
+
83
+ // Reset results
84
+ auditResults.externalScripts = [];
85
+
86
+ try {
87
+ // Find all files in packaged directory (JS, HTML, etc.)
88
+ const packagedDir = path.join(rootPathProject, 'packaged', 'raw');
89
+
90
+ if (!jetpack.exists(packagedDir)) {
91
+ logger.log(chalk.yellow('⚠️ Packaged directory not found. Run package task first.'));
92
+ return complete();
93
+ }
94
+
95
+ const files = jetpack.find(packagedDir, { matching: ['**/*.js', '**/*.html'] });
96
+
97
+ logger.log(`Auditing ${files.length} files (JS, HTML)...`);
98
+
99
+ // Check each file
100
+ files.forEach(filePath => {
101
+ const externalScripts = checkFileForExternalScripts(filePath);
102
+ if (externalScripts.length > 0) {
103
+ auditResults.externalScripts.push(...externalScripts);
104
+ }
105
+ });
106
+
107
+ // Display results
108
+ displayAuditResults();
109
+
110
+ // Log
111
+ logger.log('Audit completed!');
112
+
113
+ // Complete
114
+ return complete();
115
+ } catch (e) {
116
+ logger.error('Error during audit:', e);
117
+ return complete();
118
+ }
119
+ }
120
+
121
+ // Display audit results
122
+ function displayAuditResults() {
123
+ console.log('\n' + chalk.bold('═══════════════════════════════════════════════════'));
124
+ console.log(chalk.bold(' AUDIT RESULTS'));
125
+ console.log(chalk.bold('═══════════════════════════════════════════════════') + '\n');
126
+
127
+ // External Scripts
128
+ if (auditResults.externalScripts.length > 0) {
129
+ console.log(chalk.red.bold('❌ EXTERNAL SCRIPTS DETECTED'));
130
+ console.log(chalk.gray('Chrome extensions do not allow external scripts to be loaded.\n'));
131
+
132
+ auditResults.externalScripts.forEach((item, index) => {
133
+ console.log(chalk.red(` ${index + 1}. ${item.file}:${item.line}`));
134
+ console.log(chalk.gray(` URL: ${item.url}`));
135
+ console.log('');
136
+ });
137
+ } else {
138
+ console.log(chalk.green('✅ No external scripts detected'));
139
+ }
140
+
141
+ // Summary
142
+ console.log(chalk.bold('\n───────────────────────────────────────────────────'));
143
+ console.log(chalk.bold('SUMMARY'));
144
+ console.log(chalk.bold('───────────────────────────────────────────────────'));
145
+
146
+ const externalScriptCount = auditResults.externalScripts.length;
147
+ const externalScriptColor = externalScriptCount > 0 ? chalk.red : chalk.green;
148
+ console.log(externalScriptColor(`External Scripts: ${externalScriptCount}`));
149
+
150
+ console.log(chalk.bold('═══════════════════════════════════════════════════\n'));
151
+ }
152
+
153
+ // Export task
154
+ module.exports = series(auditFn);