Skip to content

Commit ada0667

Browse files
authored
Merge pull request #3671 from Laravel-Backpack/fix-conflicting-code
Add back IE support (fix conflicting code)
2 parents 756173c + 0b378b4 commit ada0667

13 files changed

+214
-164
lines changed

src/resources/views/base/inc/alerts.blade.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,25 @@
1919
? JSON.parse(localStorage.getItem('backpack_alerts')) : {};
2020
2121
// merge both php alerts and localstorage alerts
22-
Object.entries($alerts_from_php).forEach(([type, messages]) => {
23-
if(typeof $alerts_from_localstorage[type] !== 'undefined') {
24-
$alerts_from_localstorage[type].push(...messages);
22+
Object.entries($alerts_from_php).forEach(function(type) {
23+
if(typeof $alerts_from_localstorage[type[0]] !== 'undefined') {
24+
type[1].forEach(function(msg) {
25+
$alerts_from_localstorage[type[0]].push(msg);
26+
});
2527
} else {
26-
$alerts_from_localstorage[type] = messages;
28+
$alerts_from_localstorage[type[0]] = type[1];
2729
}
2830
});
2931
3032
for (var type in $alerts_from_localstorage) {
3133
let messages = new Set($alerts_from_localstorage[type]);
32-
messages.forEach(text => new Noty({type, text}).show());
34+
35+
messages.forEach(function(text) {
36+
let alert = {};
37+
alert['type'] = type;
38+
alert['text'] = text;
39+
new Noty(alert).show()
40+
});
3341
}
3442
3543
// in the end, remove backpack alerts from localStorage

src/resources/views/base/inc/scripts.blade.php

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,38 @@
1717
// To make Pace works on Ajax calls
1818
$(document).ajaxStart(function() { Pace.restart(); });
1919
20+
// polyfill for `startsWith` from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
21+
if (!String.prototype.startsWith) {
22+
Object.defineProperty(String.prototype, 'startsWith', {
23+
value: function(search, rawPos) {
24+
var pos = rawPos > 0 ? rawPos|0 : 0;
25+
return this.substring(pos, pos + search.length) === search;
26+
}
27+
});
28+
}
29+
30+
31+
32+
// polyfill for entries and keys from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#polyfill
33+
if (!Object.keys) Object.keys = function(o) {
34+
if (o !== Object(o))
35+
throw new TypeError('Object.keys called on a non-object');
36+
var k=[],p;
37+
for (p in o) if (Object.prototype.hasOwnProperty.call(o,p)) k.push(p);
38+
return k;
39+
}
40+
41+
if (!Object.entries) {
42+
Object.entries = function( obj ){
43+
var ownProps = Object.keys( obj ),
44+
i = ownProps.length,
45+
resArray = new Array(i); // preallocate the Array
46+
while (i--)
47+
resArray[i] = [ownProps[i], obj[ownProps[i]]];
48+
return resArray;
49+
};
50+
}
51+
2052
// Ajax calls should always have the CSRF token attached to them, otherwise they won't work
2153
$.ajaxSetup({
2254
headers: {
@@ -30,4 +62,4 @@
3062
$('.nav-tabs a').on('shown.bs.tab', function (e) {
3163
location.hash = e.target.hash.replace("#tab_", "#");
3264
});
33-
</script>
65+
</script>

src/resources/views/base/inc/sidebar.blade.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
<script type="text/javascript">
2626
// Save default sidebar class
2727
let sidebarClass = (document.body.className.match(/sidebar-(sm|md|lg|xl)-show/) || ['sidebar-lg-show'])[0];
28-
let sidebarTransition = value => document.querySelector('.app-body > .sidebar').style.transition = value || '';
28+
let sidebarTransition = function(value) {
29+
document.querySelector('.app-body > .sidebar').style.transition = value || '';
30+
};
2931
3032
// Recover sidebar state
3133
let sessionState = sessionStorage.getItem('sidebar-collapsed');
@@ -44,11 +46,11 @@
4446
@push('after_scripts')
4547
<script>
4648
// Store sidebar state
47-
document.querySelectorAll('.sidebar-toggler').forEach(toggler =>
48-
toggler.addEventListener('click', () =>
49+
document.querySelectorAll('.sidebar-toggler').forEach(function(toggler) {
50+
toggler.addEventListener('click', function() {
4951
sessionStorage.setItem('sidebar-collapsed', Number(!document.body.classList.contains(sidebarClass)))
50-
)
51-
);
52+
})
53+
});
5254
// Set active state on menu element
5355
var full_url = "{{ Request::fullUrl() }}";
5456
var $navLinks = $(".sidebar-nav li a, .app-header li a");
@@ -73,7 +75,7 @@ function() { return $(this).attr('href') === full_url; }
7375
});
7476
}
7577
76-
// for the found links that can be considered current, make sure
78+
// for the found links that can be considered current, make sure
7779
// - the parent item is open
7880
$curentPageLink.parents('li').addClass('open');
7981
// - the actual element is active

src/resources/views/crud/fields/image.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ function bpFieldInitCropperImageElement(element) {
238238
const maxImageSize = {{ $max_image_size_in_bytes }};
239239
if(maxImageSize > 0 && file.size > maxImageSize) {
240240
241-
alert(`Please pick an image smaller than ${maxImageSize} bytes.`);
241+
alert('Please pick an image smaller than '+maxImageSize+' bytes.');
242242
} else if (/^image\/\w+$/.test(file.type)) {
243243
244244
fileReader.readAsDataURL(file);

src/resources/views/crud/fields/relationship/fetch.blade.php

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@
155155
$value = processItemText(result[0], $relatedAttribute);
156156
}
157157
158-
$pair = { [$relatedKeyName] : $key, [$relatedAttribute] : $value}
159-
$return = {...$return, ...$pair};
158+
$return[$relatedKeyName] = $key;
159+
$return[$relatedAttribute] = $value;
160160
161161
$(element).attr('data-current-value', JSON.stringify($return));
162162
resolve($return);
@@ -225,7 +225,7 @@ function bpFieldInitFetchElement(element) {
225225
$selectedOptions != [])
226226
{
227227
var optionsForSelect = [];
228-
FetchAjaxFetchSelectedEntry(element).then(result => {
228+
FetchAjaxFetchSelectedEntry(element).then(function(result) {
229229
result.forEach(function(item) {
230230
$itemText = processItemText(item, $fieldAttribute);
231231
$itemValue = item[$connectedEntityKeyName];
@@ -255,17 +255,20 @@ function bpFieldInitFetchElement(element) {
255255
//we reselect the previously selected options if any.
256256
var selectedOptions = [];
257257
258-
for (const [key, value] of Object.entries($currentValue)) {
259-
selectedOptions.push(key);
260-
var $option = new Option(value, key);
258+
var $currentValue = $item ? $value : {};
259+
260+
//we reselect the previously selected options if any.
261+
Object.entries($currentValue).forEach(function(option) {
262+
selectedOptions.push(option[0]);
263+
var $option = new Option(option[1], option[0]);
261264
$(element).append($option);
262-
}
265+
});
263266
264267
$(element).val(selectedOptions);
265268
266269
267270
if (!$allows_null && $item === false && $selectedOptions == null) {
268-
fetchDefaultEntry(element).then(result => {
271+
fetchDefaultEntry(element).then(function(result) {
269272
var $item = JSON.parse(element.attr('data-current-value'));
270273
$(element).append('<option value="'+$item[$modelKey]+'">'+$item[$fieldAttribute]+'</option>');
271274
$(element).val($item[$modelKey]);
@@ -349,7 +352,7 @@ function bpFieldInitFetchElement(element) {
349352
var $dependency = $dependencies[i];
350353
//if element does not have a custom-selector attribute we use the name attribute
351354
if(typeof element.attr('data-custom-selector') == 'undefined') {
352-
form.find(`[name="${$dependency}"], [name="${$dependency}[]"]`).change(function(el) {
355+
form.find('[name="'+$dependency+'"], [name="'+$dependency+'[]"]').change(function(el) {
353356
$(element.find('option:not([value=""])')).remove();
354357
element.val(null).trigger("change");
355358
});
@@ -381,7 +384,7 @@ function processItemText(item, $fieldAttribute) {
381384
382385
// try to retreive the item in app language; then fallback language; then first entry; if nothing found empty translation string
383386
return typeof $itemField === 'object' && $itemField !== null
384-
? $itemField[$appLang] ?? $itemField[$appLangFallback] ?? Object.values($itemField)[0] ?? $emptyTranslation
387+
? $itemField[$appLang] ? $itemField[$appLang] : $itemField[$appLangFallback] ? $itemField[$appLangFallback] : Object.values($itemField)[0] ? Object.values($itemField)[0] : $emptyTranslation
385388
: $itemField;
386389
}
387390
}

0 commit comments

Comments
 (0)