> @inject_script path/to/script.js
> @inject_styles path/to/styles.css

+1 to this (or something along the lines).

While we’re at it, some way to specify order of files would be in order.

We really need a full solution of including (i.e. png,svg) files as well.

> On May 19, 2020, at 7:19 PM, Josh Tynjala <joshtynj...@bowlerhat.dev> wrote:
> 
> I'm not a fan of this syntax. It's a weird mix between HTML/XML and... some
> kind of flat configuration file?
> 
> I'd rather use a separate <inject_script> for each JS file and a separate
> <inject_styles> for each CSS file.
> 
> Or maybe something like this:
> 
> @inject_script path/to/script.js
> @inject_styles path/to/styles.css
> 
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
> 
> 
> On Tue, May 19, 2020 at 12:22 AM Yishay Weiss <yishayj...@hotmail.com>
> wrote:
> 
>> I propose to change the syntax to
>> 
>> <inject_sources>
>>                js=http://js1.js
>>                js=http://js2.js
>>                css=http://css1.js
>> <inject_sources>
>> 
>> If it’s in the main app the compiler will parse this and inject html, same
>> way it did before. Injected html is ensured to load serially, so it should
>> load before App.js.
>> 
>> If it’s in a module the compiler will parse this and inject a script to
>> the __deps file we create for modules, similar to what’s being done now. It
>> may be that we’ll need to add to the script some mechanism to ensure serial
>> loading, similar to what gcl does.
>> 
>> I can explore this when I have more time, probably next week, or someone
>> else is welcome to fix this differently.
>> 
>> Thanks.
>> 
>> 
>> 
>> From: Alex Harui<mailto:aha...@adobe.com.INVALID>
>> Sent: Monday, May 18, 2020 7:53 PM
>> To: dev@royale.apache.org<mailto:dev@royale.apache.org>
>> Subject: Re: Script Loading Order (Continuing Heads-Up thread from Users)
>> 
>> Ah, ok.  I thought that closure was injecting the main app's script block
>> so the dynamic script would be in front of it but it makes sense that
>> wouldn't happen at release time.
>> 
>> IIRC, we control the launch of the app.  I thought there is one more
>> script somewhere that calls app.start() that is generated by the compiler.
>> IMO, that script can be altered to wait for scripts to load.
>> 
>> HTH,
>> -Alex
>> 
>> 
>> On 5/18/20, 8:44 AM, "Yishay Weiss" <yishayj...@hotmail.com> wrote:
>> 
>>    Unless I missed something that’s what it’s doing right now after my
>> fix. I’ll try to explain the scenario as I see it (no modules).
>> 
>>    Suppose we have an app that compiles to the following html.
>> 
>>    <html>
>>                    <head>
>>                                    <script type="text/javascript">
>>                                                    var script =
>> document.createElement("script");
>> 
>> script.setAttribute("src", "hljs.min.js");
>> 
>> document.head.appendChild(script);
>>                                    </script>
>>                                    <script type=”text/JavaScript”
>> src=”App.js”></script>
>>                    </head>
>>                    <body></body>
>>    </html>
>> 
>>    After the first script element is loaded, the dom will look like:
>> 
>>    <html>
>>                    <head>
>>                                    <script type="text/javascript">
>>                                                    var script =
>> document.createElement("script");
>> 
>> script.setAttribute("src", "hljs.min.js");
>> 
>> document.head.appendChild(script);
>>                                    </script>
>>                                    <script type=”text/JavaScript”
>> src=”hljs.min.js”></script>
>>                                    <script type=”text/JavaScript”
>> src=”App.js”></script>
>>                    </head>
>>                    <body></body>
>>    </html>
>> 
>>    However, App.js will still be loaded before hljs.min.js because it was
>> not created dynamically. App.js will fail because it depends on hljs.
>> 
>>    From: Alex Harui<mailto:aha...@adobe.com.INVALID>
>>    Sent: Monday, May 18, 2020 6:21 PM
>>    To: dev@royale.apache.org<mailto:dev@royale.apache.org>
>>    Subject: Re: Script Loading Order (Continuing Heads-Up thread from
>> Users)
>> 
>>    I don't think we have to inject these scripts into the main .js file.
>> The compiler knows when it is compiling the main app or a module.  When
>> compiling the main app, it should inject the script in the HEAD of the html
>> wrapper.  For modules, it can inject the script into a separate file.  The
>> ModuleLoader already loads extra files before loading the module.  It can
>> load one more file.
>> 
>>    Of course, I could be wrong...
>>    -Alex
>> 
>>    On 5/18/20, 7:38 AM, "Yishay Weiss" <yishayj...@hotmail.com> wrote:
>> 
>>        From what I’ve read [1] scripts injected dynamically will always
>> load after static script elements. So I don’t think there’s a good way to
>> ensure the proper order in run-time unless we do something like
>> 99a8c8356573ff16b668f2d39a447355c673fee3 , but that’s verbose and working
>> with libs should be simple.
>> 
>>        Any ideas?
>> 
>>        [1]
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.html5rocks.com%2Fen%2Ftutorials%2Fspeed%2Fscript-loading%2F%23disqus_thread&amp;data=02%7C01%7Caharui%40adobe.com%7C11eca28410ab4d377cb408d7fb4254da%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637254134629069170&amp;sdata=NuGReT8L9tH9K1VQNxgN%2BctVG3WDACYxMsaSywrTOSc%3D&amp;reserved=0
>> 
>>        From: Alex Harui<mailto:aha...@adobe.com.INVALID>
>>        Sent: Monday, May 18, 2020 8:03 AM
>>        To: dev@royale.apache.org<mailto:dev@royale.apache.org>
>> 
>> 
>>        Subject: Re: Script Loading Order (Continuing Heads-Up thread from
>> Users)
>> 
>>        Every time I look, closure seems to change how it works.  It looks
>> like they are using callbacks and UIDs.  I assume they can't use await or
>> Promise because of IE support.  I haven't looked at the code you generate,
>> but might have to do something similar, IOW, wait for the callback or known
>> value before continuing.
>> 
>>        I think that if we create the script during the running of another
>> script that we have to find a way to wait for that created script.
>> 
>>        It might help to know what kind of initialization code needed the
>> definition so early.  One alternative is that such code needs to be
>> responsible for waiting.
>> 
>>        Most of our Application classes have a wait mechanism.  We could
>> leverage that, but that's also pretty late.
>> 
>>        It could be that for Applications we generate the script in the
>> head, and for modules we generate a separate script that is preloaded.
>> 
>>        HTH,
>>        -Alex
>> 
>>        On 5/17/20, 9:03 AM, "Yishay Weiss" <yishayj...@hotmail.com>
>> wrote:
>> 
>> 
>>> Is the script tag from inject_script going before or after
>> the script tag for the application (should be before, >IMO)?
>> 
>>            It’s going before but the network shows it’s loaded after.
>> 
>>> Make sure the script tag has the same settings as the script
>> tags google closure uses in js-debug.  I think they set some options so the
>> scripts load in order.
>> 
>>            I see type being specified in the gcl script elements, while
>> inject ones don’t. I suppose it’s worth seeing if that makes a difference,
>> though I couldn’t find evidence for that on the web.
>> 
>> 
>> 
>> 
>> 
>> 
>> 

Reply via email to