Skip to content

Commit 131b1cb

Browse files
committed
fix escaping in JS url helper
1 parent e60add1 commit 131b1cb

File tree

8 files changed

+45
-72
lines changed

8 files changed

+45
-72
lines changed

demos/init-app.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public static function get_class(\Closure $createAnonymousClassFx): string
169169
$layout->addMenuItem(['Pop-up'], [$path . 'popup'], $menu);
170170
$layout->addMenuItem(['Toast'], [$path . 'toast'], $menu);
171171
$layout->addMenuItem('Paginator', [$path . 'paginator'], $menu);
172-
$layout->addMenuItem(['Drag n Drop sorting'], [$path . 'jssortable'], $menu);
172+
$layout->addMenuItem(['Drag sorting'], [$path . 'jssortable'], $menu);
173173

174174
$path = $demosUrl . 'javascript/';
175175
$menu = $layout->addMenuGroup(['Javascript', 'icon' => 'code']);

demos/interactive/jssortable.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
// -----------------------------------------------------------------------------
5151

5252
View::addTo($app, ['ui' => 'divider']);
53-
Header::addTo($app, ['Add drag n drop to grid']);
53+
Header::addTo($app, ['Add drag sorting to grid']);
5454

5555
$grid = Grid::addTo($app, ['paginator' => false]);
5656
$grid->setModel((new Country($app->db))->setLimit(6));

js/src/helpers/url.helper.js

+22-28
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,22 @@ export default {
66
*
77
* @returns {object}
88
*/
9-
parseParams: function (str) {
10-
if (str.split('?')[1]) {
11-
return decodeURIComponent(str.split('?')[1])
12-
.split('&')
13-
.reduce((obj, unsplitArg) => {
14-
const arg = unsplitArg.split('=');
15-
obj[arg[0]] = arg[1]; // eslint-disable-line prefer-destructuring
9+
parseParams: function (url) {
10+
const query = url.includes('?') ? url.substring(url.indexOf('?') + 1) : '';
1611

17-
return obj;
18-
}, {});
19-
}
12+
return (query.length > 0 ? query.split('&') : [])
13+
.reduce((obj, queryPart) => {
14+
let k = queryPart;
15+
let v = null;
16+
if (k.includes('=')) {
17+
v = k.substring(k.indexOf('=') + 1);
18+
k = k.substring(0, k.indexOf('='));
19+
}
20+
21+
obj[decodeURIComponent(k)] = decodeURIComponent(v);
2022

21-
return {};
23+
return obj;
24+
}, {});
2225
},
2326

2427
/**
@@ -30,8 +33,9 @@ export default {
3033
* @returns {string}
3134
*/
3235
appendParams: function (url, data) {
33-
if (!$.isEmptyObject(data)) {
34-
url += (url.indexOf('?') >= 0 ? '&' : '?') + $.param(data);
36+
const query = $.param(data);
37+
if (query !== '') {
38+
url += (url.includes('?') ? '&' : '?') + query;
3539
}
3640

3741
return url;
@@ -46,22 +50,12 @@ export default {
4650
* @returns {string}
4751
*/
4852
removeParam: function (url, param) {
49-
const splitUrl = url.split('?');
50-
if (splitUrl.length === 0) {
51-
return url;
52-
}
53-
54-
const urlBase = splitUrl[0];
55-
if (splitUrl.length === 1) {
56-
return urlBase;
57-
}
58-
59-
const newParams = splitUrl[1].split('&').filter((item) => item.split('=')[0] !== param);
60-
if (newParams.length > 0) {
61-
return urlBase + '?' + newParams.join('&');
62-
}
53+
const query = url.includes('?') ? url.substring(url.indexOf('?') + 1) : '';
54+
const newParams = (query.length > 0 ? query.split('&') : [])
55+
.filter((queryPart) => decodeURIComponent(queryPart.split('=')[0]) !== param);
6356

64-
return urlBase;
57+
return url.substring(0, url.indexOf('?'))
58+
+ (newParams.length > 0 ? '?' + newParams.join('&') : '');
6559
},
6660

6761
/**

js/src/plugins/scroll.plugin.js

-6
Original file line numberDiff line numberDiff line change
@@ -164,17 +164,11 @@ export default class AtkScrollPlugin extends AtkPlugin {
164164
}
165165
}
166166

167-
/**
168-
* Add loader.
169-
*/
170167
addLoader() {
171168
const $parent = this.$inner.parent().hasClass('atk-overflow-auto') ? this.$inner.parent().parent() : this.$inner.parent();
172169
$parent.append($('<div id="atkScrollLoader"><div class="ui section hidden divider"></div><div class="ui active centered inline loader basic segment"></div></div>'));
173170
}
174171

175-
/**
176-
* Remove loader.
177-
*/
178172
removeLoader() {
179173
$('#atkScrollLoader').remove();
180174
}

public/js/atkjs-ui.js

+18-33
Original file line numberDiff line numberDiff line change
@@ -139,16 +139,18 @@ __webpack_require__.r(__webpack_exports__);
139139
*
140140
* @returns {object}
141141
*/
142-
parseParams: function (str) {
143-
if (str.split('?')[1]) {
144-
return decodeURIComponent(str.split('?')[1]).split('&').reduce((obj, unsplitArg) => {
145-
const arg = unsplitArg.split('=');
146-
obj[arg[0]] = arg[1]; // eslint-disable-line prefer-destructuring
147-
148-
return obj;
149-
}, {});
150-
}
151-
return {};
142+
parseParams: function (url) {
143+
const query = url.includes('?') ? url.substring(url.indexOf('?') + 1) : '';
144+
return (query.length > 0 ? query.split('&') : []).reduce((obj, queryPart) => {
145+
let k = queryPart;
146+
let v = null;
147+
if (k.includes('=')) {
148+
v = k.substring(k.indexOf('=') + 1);
149+
k = k.substring(0, k.indexOf('='));
150+
}
151+
obj[decodeURIComponent(k)] = decodeURIComponent(v);
152+
return obj;
153+
}, {});
152154
},
153155
/**
154156
* Add param to an URL string.
@@ -159,8 +161,9 @@ __webpack_require__.r(__webpack_exports__);
159161
* @returns {string}
160162
*/
161163
appendParams: function (url, data) {
162-
if (!external_jquery__WEBPACK_IMPORTED_MODULE_5___default().isEmptyObject(data)) {
163-
url += (url.indexOf('?') >= 0 ? '&' : '?') + external_jquery__WEBPACK_IMPORTED_MODULE_5___default().param(data);
164+
const query = external_jquery__WEBPACK_IMPORTED_MODULE_5___default().param(data);
165+
if (query !== '') {
166+
url += (url.includes('?') ? '&' : '?') + query;
164167
}
165168
return url;
166169
},
@@ -173,19 +176,9 @@ __webpack_require__.r(__webpack_exports__);
173176
* @returns {string}
174177
*/
175178
removeParam: function (url, param) {
176-
const splitUrl = url.split('?');
177-
if (splitUrl.length === 0) {
178-
return url;
179-
}
180-
const urlBase = splitUrl[0];
181-
if (splitUrl.length === 1) {
182-
return urlBase;
183-
}
184-
const newParams = splitUrl[1].split('&').filter(item => item.split('=')[0] !== param);
185-
if (newParams.length > 0) {
186-
return urlBase + '?' + newParams.join('&');
187-
}
188-
return urlBase;
179+
const query = url.includes('?') ? url.substring(url.indexOf('?') + 1) : '';
180+
const newParams = (query.length > 0 ? query.split('&') : []).filter(queryPart => decodeURIComponent(queryPart.split('=')[0]) !== param);
181+
return url.substring(0, url.indexOf('?')) + (newParams.length > 0 ? '?' + newParams.join('&') : '');
189182
},
190183
/**
191184
* Remove whole query string from an URL string.
@@ -1629,18 +1622,10 @@ class AtkScrollPlugin extends _atk_plugin__WEBPACK_IMPORTED_MODULE_4__["default"
16291622
response.id = null;
16301623
}
16311624
}
1632-
1633-
/**
1634-
* Add loader.
1635-
*/
16361625
addLoader() {
16371626
const $parent = this.$inner.parent().hasClass('atk-overflow-auto') ? this.$inner.parent().parent() : this.$inner.parent();
16381627
$parent.append(external_jquery__WEBPACK_IMPORTED_MODULE_3___default()('<div id="atkScrollLoader"><div class="ui section hidden divider"></div><div class="ui active centered inline loader basic segment"></div></div>'));
16391628
}
1640-
1641-
/**
1642-
* Remove loader.
1643-
*/
16441629
removeLoader() {
16451630
external_jquery__WEBPACK_IMPORTED_MODULE_3___default()('#atkScrollLoader').remove();
16461631
}

public/js/atkjs-ui.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/js/atkjs-ui.min.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Grid.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,7 @@ public function addSelection()
619619

620620
/**
621621
* Add column with drag handler on each row.
622-
* Drag handler allow to reorder table via drag n drop.
622+
* Drag handler allow to reorder table via drag and drop.
623623
*
624624
* @return Table\Column
625625
*/

0 commit comments

Comments
 (0)