> IMO, it is just a database. That statement triggered a thought: Why not use sessionStorage or localStorage as a “ResourceManager” in JS?[1]
Alternatively IndexedDB.[2] (although sessionStorage is probably sufficient). Using localStorage instead of sessionStorage might enable caching. [1]https://developer.mozilla.org/en-US/docs/Web/API/Storage <https://developer.mozilla.org/en-US/docs/Web/API/Storage> [2]https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API <https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API> > On Oct 2, 2017, at 9:07 PM, Alex Harui <[email protected]> wrote: > > The Flash runtime doesn't know anything about resources. In regular Flex, > and Resource Module is a SWF full of compiled Resource Bundles which are > classes that wrap the resource data. IMO, that's too heavy for strings > and I believe there are many apps where the only things that change per > locale are strings, especially if images are not embedded and loaded via > URLs. > > So, for Royale, for only Strings, I would propose that we teach the > compiler to take the same arguments, but maybe produce JSON or embedded > .properties files. Not sure which one or both until we see how it works. > > ClassReference already works in CSS files, so I suspect we can make it > work for Resources, but once you introduce ClassReference, JSON and or > embedded strings aren't sufficient, so I think we'd have to produce a .js > file instead. > > A ResourceManager that is fully equivalent of the regular Flex > ResourceManager is not PAYG. That's why I earlier suggested different > implementations that are PAYG. The smallest would count on all resources > being inlined. A fancier one would support loadable resources. > > Today, the CSS information in each SWC is collected at compile time. Type > Selectors are examined to make sure the class they represent is being > linked into the app, and all of that information is encoded. CSS > implementations like SimpleCSSValuesImpl know how to find that encoded > information and turn it into data structures. I think that is PAYG, > although we could experiment with it doing lazy loading or just-in-time > parsing of the encoded data. > > I think we'd do roughly the same thing for Resources. Encode the data as > embedded Strings and/or JSON. Not sure we'd need to wrap a bead around > each bundle or locale. IMO, it is just a database. And then > SimpleCSSAndLocalesValuesImpl would know how to look for that data. > > Of course, I could be wrong... > -Alex > > On 10/2/17, 12:24 AM, "Harbs" <[email protected] > <mailto:[email protected]>> wrote: > >> Thanks for the links. >> >> Some thoughts/questions: >> >> The loading of the resource modules is something handled by the Flash >> runtime, or is that internal to Flex? >> >> Currently, do the compiler options do anything for the JS side of things? >> >> If I understand correctly, the “inlining” option adds the resources to >> the ResourceManager. I’m suggesting the ResourceManager is not >> necessarily needed if locales are configured at compile time. A more PAYG >> way would be to inline the resource directly into a variable of a bead >> which knows what to do with the resource. I don’t see any current >> annotation which could do that (either in MXML or AS). >> >> I don’t see how class references (and image references) could work in >> Royale (in JS). If we could get that working, it would be huge. >> >> Harbs >> >>> On Oct 2, 2017, at 9:57 AM, Alex Harui <[email protected]> wrote: >>> >>> See the Adobe docs: [1][2] >>> >>> I think the functionality you are looking forward is supported by the >>> compiler. The compiler already has a set of options that dictate what >>> bundles are "inline" in the app and I think they can be re-used to >>> output >>> different things. >>> >>> [ResourceBundle] metadata tells the compiler which bundles to link. The >>> compiler's -locale option dictates which language bundles for the >>> [ResourceBundles] it saw when linking the app need to be baked into the >>> app. Separately, the ResourceManager in regular Flex has a way to load >>> a >>> SWF of other bundles. The compiler has options to build a SWF with >>> certain bundles. >>> >>> For JS, JSON might be a good format for a "ResourceModule". >>> >>> I've seen the packages be accepted by Flash Builder on both Mac and >>> Windows. There's a separate thread about when to merge packaging into >>> develop, and how to do the "big rename". >>> >>> Later, >>> -Alex >>> >>> [1] >>> >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob >>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob> >>> e.com >>> <http://e.com/>%2Fen_US%2Fflex%2Fusing%2FWS2db454920e96a9e51e63e3d11c0bf69084&data= >>> 02%7C01%7C%7C0889dd3b253c45d9126d08d50966a728%7Cfa7b1b5a7b34438794aed2c17 >>> 8decee1%7C0%7C0%7C636425258895710848&sdata=ovLxTjMA4dcJUbWvTu6JSWF%2F9VH1 >>> uciPIthGxL%2FF5H8%3D&reserved=0 >>> -7f3a.html >>> [2] >>> >>> https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob >>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fhelp.adob> >>> e.com >>> <http://e.com/>%2Fen_US%2Fflex%2Fusing%2FWS2db454920e96a9e51e63e3d11c0bf69084&data= >>> 02%7C01%7C%7C0889dd3b253c45d9126d08d50966a728%7Cfa7b1b5a7b34438794aed2c17 >>> 8decee1%7C0%7C0%7C636425258895710848&sdata=ovLxTjMA4dcJUbWvTu6JSWF%2F9VH1 >>> uciPIthGxL%2FF5H8%3D&reserved=0 >>> -7f3c.html >>> >>> On 10/1/17, 11:34 PM, "Harbs" <[email protected]> wrote: >>> >>>> I should probably spend some time to learn how resource bundles worked >>>> in >>>> Flex… ;-) >>>> >>>> Metadata seems like a good solution, but it seems to me like there >>>> needs >>>> to be two sets of metadata tags. Some comments and questions I have: >>>> >>>> 1. We’d need metadata tags which would just inline the resource into >>>> the >>>> compiled code for cases where a full-blown ResourceManager is overkill. >>>> 2. We’d need the [ResourceBundle] tag for compiling downloadable >>>> resource >>>> bundles. What would that look like in Javascript? A JS file which >>>> evaluates to the resources? A JSON file? Would default resources get >>>> auto-included in the main JS? >>>> >>>> BTW, if there’s something I can do to help you with the packaging >>>> branch, >>>> please let me know. >>>> >>>> Harbs >>>> >>>>> On Oct 2, 2017, at 2:28 AM, Alex Harui <[email protected]> >>>>> wrote: >>>>> >>>>> >>>>> >>>>> On 10/1/17, 7:31 AM, "Harbs" <[email protected]> wrote: >>>>> >>>>>> I’d really like for the compiler to include resources as strings, but >>>>>> I’m >>>>>> not sure what the best way to declare it is. >>>>>> >>>>>> How can we declare a reference to the resource and have the compiler >>>>>> include it? >>>>> >>>>> Well, that depends... >>>>> >>>>> The [ResourceBundle] metadata and the compiler's -locale option seemed >>>>> to >>>>> make people happy. I don't remember any complaints about it, my only >>>>> issue was that it didn't seem to be efficient for String-only >>>>> resources. >>>>> [ResourceBundle] allows the strings to be managed in separate >>>>> .properties >>>>> files that are packaged with a SWC. That's probably important because >>>>> you >>>>> probably don't want to have to list out every component's resources as >>>>> beads in your app. It probably needs to be driven automatically by >>>>> metadata. >>>>> >>>>> So, if we decide to stick with it, the challenge will be to teach the >>>>> compiler to do something different with the resource properties. >>>>> >>>>> Thoughts? >>>>> -Alex
