Hi I'm currently working on first TODO: "Automatically handle static and template JS files"
As discussed with Ashesh, currently the paths to module id are written manually in webpack.config.js, instead the path defined in moudle's `def get_own_javascript()` should be used. So, we will be generating a paths.json file which will contain: 1. resolve > alias - path with reference to module id.(Static files) 2. externals - list of modules to be loaded dynamically on demand(Template files) 3. Shim module dependency 4. List of JS modules to be loaded in specified order. *Implementation:* To generate `paths.json` file, we will be using `Flask's test_client` to make an http request internally within the app context so we can call `current_app.javascripts` property and return the list of JS paths and write those into paths.json file and then use it in webpack.shim.js before the execution of `yarn run bundle` in `javascript_bundler.py` *For example:* @app.route('/get_script_paths') def get_script_paths(): from flask import current_app from pgadmin.utils.ajax import make_json_response return make_json_response(data=current_app.javascripts) if config.DEBUG: with app.test_client() as client: import simplejson as json list_scripts = client.get('/get_script_paths') scripts = json.loads(list_scripts.data) javascriptBundler = JavascriptBundler() javascriptBundler.bundle(scripts['data']) This also needs little change in module dependency we defined using 'When': 'node_name' in `def get_own_javascripts(...)` method the module specified(name: module_name) is loaded when module given in `When` is expanded in node. Since we are using Webpack in which behaviour to load module is little different. Now in webpack we are using `imports-loader` to load specific modules. So this is how it should work. 1. First load all modules which do not have dependency on any node like 'about', 'dashboard', 'server-group', 'server' etc. 2. Load module such as `Databases` node first before its child nodes are loaded. Similarly load `Schemas` node before its child nodes are loaded as they are dependent on parent node. Thanks, Surinder On Wed, Jul 5, 2017 at 8:22 PM, Sarah McAlear <smcal...@pivotal.io> wrote: > Hello, > > >> *Things to discuss:* >> >> How to differentiate between a static and template JS >> >> . >> > > What is the advantage of webpacking templated JS? It seems as though this > creates a system in which the bundled dependencies have to refer back to > the backend to load the templates. > Templated JS will not be part of generated bundle JS, they will load externally( an extra request will be made to server For example: translations.js) > > If there is a performance win in packing templated JS then looking at it > makes sense. Otherwise it may make sense to put off until it is clear that > the templated files should be dealt with by either de-templating them or > bundling them where there is a clear reason. > Template JS cannot be bundled, so i extract the <Jinja> code from template files and put into a separate file - ABC.js (also moved template files to static directory) and then load ABC.js dynamically as dependency of other modules. > > However, we're wondering about possible performance penalties with > templating larger files (as opposed to templating on-demand.) Since jinja > templates can execute arbitrary python, this could get time expensive and > further slow things like initial page-load. > Another concern is: what happens when a template gets out of date (e.g. if > browser.js had previously filled in the content for 'panel_item.content' > and had been cached, would it render a new version with the new values when > needed? Or is it possible that we would get old content?) > That file will always gets new content when loaded dynamically, the content is not cached. > > >> *Taks remaining:* >> >> 1. >> Fix local variables which are declared without using var, have to check >> in each file >> by >> running eslint (For now, i will fix only errors which are giving error >> in browser). >> >> 2. >> Move non-template files from ’templates’ to ’static’ directory. List of >> pending >> modules is here: >> >> - Tools (mostly all modules - 9 modules) >> - Browser nodes - 3 modules(resource group, roles, tablespace) >> - About >> >> >> Also can we move >> ' >> dashboard, statistic >> s >> , preferences and help >> ' >> modules inside misc to preserve modularity as pgAdmin is modular >> ? >> > > Is there anything from a organization stance you discussed in the previous > email that needs to be done to make this usable and consistent? > No > > > Thanks, > > George & Sarah >