js: fix Javascript failures in Seamonkey/Palemoon.

Fix site Javascript failing to load in Seamonkey, Palemoon, and other
older browsers.

The @alpinejs/morph library uses public instance fields, which is ES2022
syntax not supported in older browsers. This is the code:

    var DomManager = class {
        el = void 0; // `el` is a public instance field
    }
    // => SyntaxError: bad method definition

The fix here is to separate the Alpine code into a separate bundle so
that a failure to load it doesn't cause the rest of the site's
Javascript to fail to load.

A better fix would be to either transpile the @alpinejs/morph library to
ES5 (which seems difficult to do in webpacker), or to fix the library
upstream to not use this syntax.

* https://inspiredwebdev.com/everything-new-in-es2022/
* https://blog.saeloun.com/2021/10/21/ecmacscript-public-instance-fields-and-private-instance-fields.html
* https://caniuse.com/?search=public%20class%20fields
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Public_class_fields#public_instance_fields
This commit is contained in:
evazion
2022-03-01 18:07:18 -06:00
parent ad3f3fdce3
commit 68c92b4536
3 changed files with 8 additions and 8 deletions

View File

@@ -0,0 +1,6 @@
import Alpine from 'alpinejs';
import morph from '@alpinejs/morph';
window.Alpine = Alpine;
Alpine.plugin(morph);
Alpine.start();

View File

@@ -10,8 +10,6 @@ require('@rails/ujs').start();
require('hammerjs');
require('jquery-hotkeys');
import morphdom from 'morphdom';
import Alpine from 'alpinejs';
import morph from '@alpinejs/morph';
// should start looking for nodejs replacements
importAll(require.context('../vendor', true, /\.js$/));
@@ -95,8 +93,4 @@ Danbooru.error = Utility.error;
window.$ = jQuery;
window.jQuery = jQuery;
window.morphdom = morphdom;
window.Alpine = Alpine;
window.Danbooru = Danbooru;
Alpine.plugin(morph);
Alpine.start();