@lexho111/plainblog 0.5.27 → 0.6.0

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 (65) hide show
  1. package/Article.js +73 -4
  2. package/Blog.js +348 -149
  3. package/Formatter.js +5 -12
  4. package/README.md +5 -1
  5. package/{blog → blog_test_empty.db} +0 -0
  6. package/blog_test_load.db +0 -0
  7. package/build-scripts.js +54 -0
  8. package/coverage/clover.xml +1043 -0
  9. package/coverage/coverage-final.json +20 -0
  10. package/coverage/lcov-report/base.css +224 -0
  11. package/coverage/lcov-report/block-navigation.js +87 -0
  12. package/coverage/lcov-report/favicon.png +0 -0
  13. package/coverage/lcov-report/index.html +161 -0
  14. package/coverage/lcov-report/package/Article.js.html +406 -0
  15. package/coverage/lcov-report/package/Blog.js.html +2635 -0
  16. package/coverage/lcov-report/package/Formatter.js.html +379 -0
  17. package/coverage/lcov-report/package/build-scripts.js.html +247 -0
  18. package/coverage/lcov-report/package/build-styles.js.html +367 -0
  19. package/coverage/lcov-report/package/index.html +191 -0
  20. package/coverage/lcov-report/package/model/APIModel.js.html +190 -0
  21. package/coverage/lcov-report/package/model/ArrayList.js.html +382 -0
  22. package/coverage/lcov-report/package/model/ArrayListHashMap.js.html +379 -0
  23. package/coverage/lcov-report/package/model/BinarySearchTree.js.html +856 -0
  24. package/coverage/lcov-report/package/model/BinarySearchTreeHashMap.js.html +346 -0
  25. package/coverage/lcov-report/package/model/DataModel.js.html +307 -0
  26. package/coverage/lcov-report/package/model/DatabaseModel.js.html +232 -0
  27. package/coverage/lcov-report/package/model/FileAdapter.js.html +394 -0
  28. package/coverage/lcov-report/package/model/FileList.js.html +244 -0
  29. package/coverage/lcov-report/package/model/FileModel.js.html +358 -0
  30. package/coverage/lcov-report/package/model/SequelizeAdapter.js.html +538 -0
  31. package/coverage/lcov-report/package/model/SqliteAdapter.js.html +247 -0
  32. package/coverage/lcov-report/package/model/datastructures/ArrayList.js.html +439 -0
  33. package/coverage/lcov-report/package/model/datastructures/ArrayListHashMap.js.html +196 -0
  34. package/coverage/lcov-report/package/model/datastructures/BinarySearchTree.js.html +913 -0
  35. package/coverage/lcov-report/package/model/datastructures/BinarySearchTreeHashMap.js.html +346 -0
  36. package/coverage/lcov-report/package/model/datastructures/FileList.js.html +244 -0
  37. package/coverage/lcov-report/package/model/datastructures/index.html +176 -0
  38. package/coverage/lcov-report/package/model/index.html +206 -0
  39. package/coverage/lcov-report/package/utilities.js.html +511 -0
  40. package/coverage/lcov-report/prettify.css +1 -0
  41. package/coverage/lcov-report/prettify.js +2 -0
  42. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  43. package/coverage/lcov-report/sorter.js +210 -0
  44. package/coverage/lcov.info +2063 -0
  45. package/index.js +25 -1
  46. package/model/DataModel.js +79 -0
  47. package/model/DatabaseModel.js +20 -8
  48. package/model/FileAdapter.js +43 -4
  49. package/model/FileModel.js +47 -9
  50. package/model/SequelizeAdapter.js +11 -3
  51. package/model/datastructures/ArrayList.js +118 -0
  52. package/model/datastructures/ArrayListHashMap.js +37 -0
  53. package/model/datastructures/ArrayListHashMap.js.bk +90 -0
  54. package/model/datastructures/BinarySearchTree.js +276 -0
  55. package/model/datastructures/BinarySearchTreeHashMap.js +89 -0
  56. package/model/datastructures/BinarySearchTreeTest.js +16 -0
  57. package/model/datastructures/FileList.js +53 -0
  58. package/package.json +11 -2
  59. package/postinstall.js +89 -0
  60. package/public/fetchData.js +0 -0
  61. package/public/scripts.min.js +2 -1
  62. package/public/styles.min.css +2 -2
  63. package/src/fetchData.js +150 -30
  64. package/src/styles.css +47 -0
  65. package/utilities.js +142 -0
package/Formatter.js CHANGED
@@ -27,37 +27,30 @@ export function formatHTML(data) {
27
27
  let form1 = "";
28
28
  if (data.loggedin) {
29
29
  form1 = `<form action="/" method="POST">
30
+ <div class="box">
30
31
  <h3>Add a New Article</h3>
31
32
  <input type="text" id="title" name="title" placeholder="Article Title" required style="display: block; width: 300px; margin-bottom: 10px;">
32
33
  <textarea id="content" name="content" placeholder="Article Content" required style="display: block; width: 300px; height: 100px; margin-bottom: 10px;"></textarea>
33
34
  <button type="submit">Add Article</button>${button}
34
35
  </form>
36
+ </div>
35
37
  <hr>`;
36
38
  }
37
39
  const form = form1;
38
40
  return `${header(data.title)}
39
41
  <body>
40
42
  <nav>
43
+ <input type="text" id="search" placeholder="Search..." style="float:right; margin: 5px;">
41
44
  ${data.login}
42
45
  </nav>
43
46
  <div id="header">
44
47
  <h1>${data.title}</h1>
45
- <!--<img src="headerphoto.jpg"/>-->
48
+ <img src="headerphoto.jpg" onerror="this.classList.add('hide-image')" />
46
49
  </div>
47
50
  <div id="wrapper">
48
51
  ${form}
49
52
  <section id="articles" class="grid">
50
- ${data.articles
51
- .map((article) => {
52
- let html = article.toHTML();
53
- if (article.id != null)
54
- html = html.replace(
55
- "<article",
56
- `<article data-id="${article.id}" `
57
- );
58
- return html;
59
- })
60
- .join("")}
53
+ ${data.articles.map((article) => article.toHTML(data.loggedin)).join("")}
61
54
  </section>
62
55
  </div>
63
56
  <script src="scripts.min.js">
package/README.md CHANGED
@@ -17,7 +17,7 @@ const blog = new Blog();
17
17
  blog.title = "My Blog";
18
18
  blog.style = "body { font-family: Arial, sans-serif; } h1 { color: #333; }";
19
19
  blog.password = "mypassword"
20
- blog.init();
20
+ await blog.init();
21
21
 
22
22
  blog.startServer(8080);
23
23
  ```
@@ -26,6 +26,10 @@ Now you can open your blog in your webbrowser on `http://localhost:8080`. Login
26
26
 
27
27
  ## More Features
28
28
 
29
+ ### add a header photo
30
+
31
+ To add a headerphoto to your blog simply name it "headerphoto.jpg" and put it in the _public_ folder.
32
+
29
33
  ### set a Database Adapter
30
34
 
31
35
  #### connect to a sqlite database
Binary file
Binary file
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Compiles JS scripts from file content objects.
3
+ * @param {Array<{path: string, content: string}>} fileData - An array of objects containing file paths and content.
4
+ * @returns {Promise<string>} The compiled and minified JS.
5
+ */
6
+ export async function compileScripts(fileData) {
7
+ let combinedJs = "";
8
+ try {
9
+ if (fileData) {
10
+ // concat
11
+ for (const file of fileData) {
12
+ combinedJs += file.content + "\n;\n";
13
+ }
14
+ }
15
+
16
+ if (combinedJs) {
17
+ return await runBabelAndUglify(combinedJs);
18
+ }
19
+ return "";
20
+ } catch (error) {
21
+ if (error.message !== "Missing optional dependencies") {
22
+ console.error("Build scripts failed:", error);
23
+ }
24
+ return combinedJs;
25
+ }
26
+ }
27
+
28
+ async function runBabelAndUglify(js) {
29
+ let babel, uglify;
30
+ try {
31
+ babel = await import("@babel/core");
32
+ uglify = await import("uglify-js");
33
+ await import("@babel/preset-env");
34
+ } catch (error) {
35
+ console.error("Build scripts failed. Missing dependencies.");
36
+ console.error("Please run: npm install");
37
+ throw new Error("Missing optional dependencies");
38
+ }
39
+
40
+ const babelResult = await babel.transformAsync(js, {
41
+ presets: [["@babel/preset-env", { targets: "defaults", debug: false }]],
42
+ sourceType: "script",
43
+ configFile: false,
44
+ babelrc: false,
45
+ });
46
+
47
+ if (!babelResult || !babelResult.code) return js;
48
+
49
+ // Handle potential CJS default export wrapping
50
+ const minify = uglify.minify || (uglify.default && uglify.default.minify);
51
+ const uglifyResult = minify(babelResult.code);
52
+ if (uglifyResult.error) throw uglifyResult.error;
53
+ return uglifyResult.code;
54
+ }