[pgAdmin4]: Webpacking of static JS/CSS

From: Surinder Kumar <surinder(dot)kumar(at)enterprisedb(dot)com>
To: pgadmin-hackers <pgadmin-hackers(at)postgresql(dot)org>
Subject: [pgAdmin4]: Webpacking of static JS/CSS
Date: 2017-06-26 19:37:15
Message-ID: CAM5-9D9aBNs33CUYGWOF=dUCfSZcSS6L=4Fd4vO5dSv3RYwbog@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

Hi All,

I and Ashesh come up with following approach;

*Divide the JS modules in following components:*

​1. ​
Tools
​(tools.js)​ - It will contain all JS modules under tools directory

​2. ​
Browser
​(browser.js)​ - It will contain all JS modules under browser directory

​3. ​
grid.js
- It will contains ​
Query tool & Datagrid
​ JS modules​
Done

​4. Common.js and/or vendor.js - Common.js will contains all common js
files/libraries shared by modules like backform, backbone, underscore etc.

Entry points JS: main.js - It will load above modules ascynchronusly or it
will be minified version of all.
define('', ['common', 'tools', 'browser', 'grid'], function(...) {});

or these modules can also be loaded using dependency; For example, load
grid.js on database node expand.

*Worked so far:*

- Removed CodeMirror out of vendors directory and instead using
node_modules/codemirror files. I didn't sent its patch as codemirror CSS is
inserted directly into markup.

- The file grid.js(datagrid.js and sqleditor.js) is generated including
all of its dependency, resolved all errors(dependency/JS errors) occurred
while running in browser. Modules like explain, file manager, history tab
and grid rendering is working except grid tool menu expand not working(will
look into this).

- The file common.js is generated which contains JS files shared among
modules.

- The template JS modules such as node.js, browser.js are not included in
webpack since they are templates containing Jinja syntax, they are added as
dependency and loaded dynamically.

As discussed with Ashesh, we need to determine which file is 'static' JS or
dynamic JS as we cannot hardcode, till now I didn't find any way to use
is_template flag introduced in def get_own_javascripts(self):
​​
will search how can I use this variable.

​Currently I am working on converting 'requirejs config shim dependency
into webpack' using imports-loader and exports-loader which is taking time
and will look for alternative if it doesn't works. Once dependency is
properly defined, the task to generate other module JS will become quite
easy.

I also found, the CSS imported using import
'slickgrid/slick.grid.css'; statement
is put into <style></style> tags
​ in html​
, instead must be loaded separately as a file so overrides.css can work.

Thoughts?

Thanks,
Surinder

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Dave Page 2017-06-26 19:49:12 pgAdmin 4 commit: Add support for the hostaddr connection parameter. Th
Previous Message Dave Page 2017-06-26 19:25:29 Re: [pgAdmin4][Patch]: Using client-side 'url_for' implementation in the datagrid module