alchemy_cms 5.3.2 → 5.3.3

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.

Potentially problematic release.


This version of alchemy_cms might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e2df8b8b8a114a3c838038e49ed3f464fdb45aca2706d7a691aa9674a6d0fceb
4
- data.tar.gz: e94ecf5d831ada56e030d86f83e98e79dca35a9cd8638349aca7d3376ad20cd0
3
+ metadata.gz: 0f18c2fd116b7cecb0091d78a0e3d7bdad8a996e03b04c53e56e04a651a5d47b
4
+ data.tar.gz: 35f9e7ed5ef6c525348a5d885c50d448376ce03f2ce0955037ed3a05c4733ade
5
5
  SHA512:
6
- metadata.gz: 24b96afb3447382b6d66cdf47be50ba012e83c86236fd9bd8b45a83b8685752c8820a938829920ba615c45217863966a7e46af07db027b04cff24ee9227879ae
7
- data.tar.gz: e2206807c7a623254540441742d1017c40d75fabd8cc097793d040c55271f0c33a6feedee3994deb68d75dc3fddcf0f1b2a8ad98205ce254852f164877d5940a
6
+ metadata.gz: 23b529d54cdc27a766208ee9750e282349b184feec1cc21f398a01caccd970d2dc5a9bdd7f500f52fe165f306bf32052d8d48f2e892b83af92037d65fcec33c9
7
+ data.tar.gz: f733eee0bb31d47a489657d66c741fb983f1a363e017756f3be0ced53a589e3978e51f5240c8bdd3fa6d405a89bf8c89d6a7ff3b17d6de4631d638f7206dcb90
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 5.3.3 (2022-03-24)
2
+
3
+ - fix admin sitemap feature specs ([tvdeyen](https://github.com/tvdeyen))
4
+ - fix: Add support for ajax.get query params ([tvdeyen](https://github.com/tvdeyen))
5
+ - fix(Sitemap): Use response data ([tvdeyen](https://github.com/tvdeyen))
6
+ - Revert "Ajax: Send method override" ([tvdeyen](https://github.com/tvdeyen))
7
+
1
8
  ## 5.3.2 (2022-03-24)
2
9
 
3
10
  - ImageLoader: Add error handling ([tvdeyen](https://github.com/tvdeyen))
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "5.3.2"
4
+ VERSION = "5.3.3"
5
5
 
6
6
  def self.version
7
7
  VERSION
@@ -11,7 +11,7 @@ function onFinishDragging(evt) {
11
11
 
12
12
  patch(url, data)
13
13
  .then(async (response) => {
14
- const pageData = await response.json()
14
+ const pageData = await response.data
15
15
  const pageEl = document.getElementById(`page_${pageId}`)
16
16
  const urlPathEl = pageEl.querySelector(".sitemap_url")
17
17
 
@@ -1,7 +1,7 @@
1
1
  // The admin sitemap Alchemy class
2
2
  import PageSorter from "./page_sorter"
3
3
  import { on } from "./utils/events"
4
- import { patch } from "./utils/ajax"
4
+ import { get, patch } from "./utils/ajax"
5
5
  import { createSortables, displayPageFolders } from "./page_sorter"
6
6
 
7
7
  export default class Sitemap {
@@ -31,9 +31,9 @@ export default class Sitemap {
31
31
  const spinTarget = this.sitemap_wrapper
32
32
  spinTarget.innerHTML = ""
33
33
  spinner.spin(spinTarget)
34
- fetch(`${this.options.url}?id=${pageId}`)
34
+ get(this.options.url, { id: pageId })
35
35
  .then(async (response) => {
36
- this.render(await response.json())
36
+ this.render(await response.data)
37
37
  this.handlePageFolders()
38
38
  spinner.stop()
39
39
  })
@@ -55,7 +55,7 @@ export default class Sitemap {
55
55
 
56
56
  patch(Alchemy.routes.fold_admin_page_path(pageId))
57
57
  .then(async (response) => {
58
- this.reRender(pageId, await response.json())
58
+ this.reRender(pageId, await response.data)
59
59
  spinner.stop()
60
60
  })
61
61
  .catch(this.errorHandler)
@@ -10,7 +10,7 @@ beforeEach(() => {
10
10
 
11
11
  describe("get", () => {
12
12
  it("sends X-CSRF-TOKEN header", async () => {
13
- xhrMock.get("/users", (req, res) => {
13
+ xhrMock.get("http://localhost/users", (req, res) => {
14
14
  expect(req.header("X-CSRF-TOKEN")).toEqual(token)
15
15
  return res.status(200).body('{"message":"Ok"}')
16
16
  })
@@ -18,7 +18,7 @@ describe("get", () => {
18
18
  })
19
19
 
20
20
  it("sends Content-Type header", async () => {
21
- xhrMock.get("/users", (req, res) => {
21
+ xhrMock.get("http://localhost/users", (req, res) => {
22
22
  expect(req.header("Content-Type")).toEqual(
23
23
  "application/json; charset=utf-8"
24
24
  )
@@ -28,7 +28,7 @@ describe("get", () => {
28
28
  })
29
29
 
30
30
  it("sends Accept header", async () => {
31
- xhrMock.get("/users", (req, res) => {
31
+ xhrMock.get("http://localhost/users", (req, res) => {
32
32
  expect(req.header("Accept")).toEqual("application/json")
33
33
  return res.status(200).body('{"message":"Ok"}')
34
34
  })
@@ -36,7 +36,7 @@ describe("get", () => {
36
36
  })
37
37
 
38
38
  it("returns JSON", async () => {
39
- xhrMock.get("/users", (_req, res) => {
39
+ xhrMock.get("http://localhost/users", (_req, res) => {
40
40
  return res.status(200).body('{"email":"mail@example.com"}')
41
41
  })
42
42
  await get("/users").then((res) => {
@@ -45,7 +45,7 @@ describe("get", () => {
45
45
  })
46
46
 
47
47
  it("JSON parse errors get rejected", async () => {
48
- xhrMock.get("/users", (_req, res) => {
48
+ xhrMock.get("http://localhost/users", (_req, res) => {
49
49
  return res.status(200).body('email => "mail@example.com"')
50
50
  })
51
51
  expect.assertions(1)
@@ -55,7 +55,7 @@ describe("get", () => {
55
55
  })
56
56
 
57
57
  it("network errors get rejected", async () => {
58
- xhrMock.get("/users", () => {
58
+ xhrMock.get("http://localhost/users", () => {
59
59
  return Promise.reject(new Error())
60
60
  })
61
61
  expect.assertions(1)
@@ -65,7 +65,7 @@ describe("get", () => {
65
65
  })
66
66
 
67
67
  it("server errors get rejected", async () => {
68
- xhrMock.get("/users", (_req, res) => {
68
+ xhrMock.get("http://localhost/users", (_req, res) => {
69
69
  return res.status(401).body('{"error":"Unauthorized"}')
70
70
  })
71
71
  expect.assertions(1)
@@ -75,7 +75,7 @@ describe("get", () => {
75
75
  })
76
76
 
77
77
  it("server errors parsing errors get rejected", async () => {
78
- xhrMock.get("/users", (_req, res) => {
78
+ xhrMock.get("http://localhost/users", (_req, res) => {
79
79
  return res.status(401).body("Unauthorized")
80
80
  })
81
81
  expect.assertions(1)
@@ -83,11 +83,19 @@ describe("get", () => {
83
83
  expect(e.message).toMatch("Unexpected token")
84
84
  })
85
85
  })
86
+
87
+ it("params get attached as query string", async () => {
88
+ xhrMock.get("http://localhost/users?name=foo", (_req, res) => {
89
+ return res.status(200).body(`{"name":"foo"}`)
90
+ })
91
+ const { data } = await get("/users", { name: "foo" })
92
+ expect(data.name).toEqual("foo")
93
+ })
86
94
  })
87
95
 
88
96
  describe("patch", () => {
89
97
  it("sends X-CSRF-TOKEN header", async () => {
90
- xhrMock.post("/users", (req, res) => {
98
+ xhrMock.patch("http://localhost/users", (req, res) => {
91
99
  expect(req.header("X-CSRF-TOKEN")).toEqual(token)
92
100
  return res.status(200).body('{"message":"Ok"}')
93
101
  })
@@ -95,7 +103,7 @@ describe("patch", () => {
95
103
  })
96
104
 
97
105
  it("sends Content-Type header", async () => {
98
- xhrMock.post("/users", (req, res) => {
106
+ xhrMock.patch("http://localhost/users", (req, res) => {
99
107
  expect(req.header("Content-Type")).toEqual(
100
108
  "application/json; charset=utf-8"
101
109
  )
@@ -105,26 +113,16 @@ describe("patch", () => {
105
113
  })
106
114
 
107
115
  it("sends Accept header", async () => {
108
- xhrMock.post("/users", (req, res) => {
116
+ xhrMock.patch("http://localhost/users", (req, res) => {
109
117
  expect(req.header("Accept")).toEqual("application/json")
110
118
  return res.status(200).body('{"message":"Ok"}')
111
119
  })
112
120
  await patch("/users")
113
121
  })
114
122
 
115
- it("sends method override data", async () => {
116
- xhrMock.post("/users", (req, res) => {
117
- expect(req.body()).toEqual('{"_method":"patch"}')
118
- return res.status(200).body('{"message":"Ok"}')
119
- })
120
- await patch("/users")
121
- })
122
-
123
123
  it("sends JSON data", async () => {
124
- xhrMock.post("/users", (req, res) => {
125
- expect(req.body()).toEqual(
126
- '{"email":"mail@example.com","_method":"patch"}'
127
- )
124
+ xhrMock.patch("http://localhost/users", (req, res) => {
125
+ expect(req.body()).toEqual('{"email":"mail@example.com"}')
128
126
  return res.status(200).body('{"message":"Ok"}')
129
127
  })
130
128
  await patch("/users", { email: "mail@example.com" })
@@ -133,7 +131,7 @@ describe("patch", () => {
133
131
 
134
132
  describe("post", () => {
135
133
  it("sends X-CSRF-TOKEN header", async () => {
136
- xhrMock.post("/users", (req, res) => {
134
+ xhrMock.post("http://localhost/users", (req, res) => {
137
135
  expect(req.header("X-CSRF-TOKEN")).toEqual(token)
138
136
  return res.status(200).body('{"message":"Ok"}')
139
137
  })
@@ -141,7 +139,7 @@ describe("post", () => {
141
139
  })
142
140
 
143
141
  it("sends Content-Type header", async () => {
144
- xhrMock.post("/users", (req, res) => {
142
+ xhrMock.post("http://localhost/users", (req, res) => {
145
143
  expect(req.header("Content-Type")).toEqual(
146
144
  "application/json; charset=utf-8"
147
145
  )
@@ -151,7 +149,7 @@ describe("post", () => {
151
149
  })
152
150
 
153
151
  it("sends Accept header", async () => {
154
- xhrMock.post("/users", (req, res) => {
152
+ xhrMock.post("http://localhost/users", (req, res) => {
155
153
  expect(req.header("Accept")).toEqual("application/json")
156
154
  return res.status(200).body('{"message":"Ok"}')
157
155
  })
@@ -159,7 +157,7 @@ describe("post", () => {
159
157
  })
160
158
 
161
159
  it("sends JSON data", async () => {
162
- xhrMock.post("/users", (req, res) => {
160
+ xhrMock.post("http://localhost/users", (req, res) => {
163
161
  expect(req.body()).toEqual('{"email":"mail@example.com"}')
164
162
  return res.status(200).body('{"message":"Ok"}')
165
163
  })
@@ -33,24 +33,29 @@ export function get(url, params) {
33
33
  return ajax("GET", url, params)
34
34
  }
35
35
 
36
- export function patch(url, data = {}) {
37
- return ajax("POST", url, { ...data, _method: "patch" })
36
+ export function patch(url, data) {
37
+ return ajax("PATCH", url, data)
38
38
  }
39
39
 
40
40
  export function post(url, data) {
41
41
  return ajax("POST", url, data)
42
42
  }
43
43
 
44
- export default function ajax(method, url, data) {
44
+ export default function ajax(method, path, data) {
45
45
  const xhr = new XMLHttpRequest()
46
46
  const promise = buildPromise(xhr)
47
+ const url = new URL(window.location.origin + path)
47
48
 
48
- xhr.open(method, url)
49
+ if (data && method.toLowerCase() === "get") {
50
+ url.search = new URLSearchParams(data).toString()
51
+ }
52
+
53
+ xhr.open(method, url.toString())
49
54
  xhr.setRequestHeader("Content-type", "application/json; charset=utf-8")
50
55
  xhr.setRequestHeader("Accept", "application/json")
51
56
  xhr.setRequestHeader("X-CSRF-Token", getToken())
52
57
 
53
- if (data) {
58
+ if (data && method.toLowerCase() !== "get") {
54
59
  xhr.send(JSON.stringify(data))
55
60
  } else {
56
61
  xhr.send()
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alchemy_cms/admin",
3
- "version": "5.3.2",
3
+ "version": "5.3.3",
4
4
  "description": "AlchemyCMS",
5
5
  "browser": "package/admin.js",
6
6
  "files": [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.2
4
+ version: 5.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen