Skip to content

Repository files navigation

lists GitHub users

Minimal app demonstrating cross-platform app development (Web, Android, iOS) where core logic is shared and transpiled from Java to JavaScript and Objective-C. This project delivers Web version.

Note: shared logic is provided by the github-users project.

Demo

https://github-users-web.appspot.com/

Status

As you can see from the demo, this project already delivers the full build toolchain for Web application. Still there are several things TODO.

Development

Running the project during development requires starting the codeserver (GWT Super Dev Mode) in parallel with regular Jetty servlet container serving static resources and in the future also server part of the application.

/!\ Note: In order to start jetty from within the github-users-web-server module you will need to install dependant modules first:

$ mvn install

It's one time action which will also verify if the project builds correctly in your environment.

Open 2 terminals and invoke these commands:

$ mvn gwt:codeserver -pl *-client -am -Denv=dev

And then:

$ cd *-server
$ mvn jetty:run -Denv=dev

Head your browser to:

http://localhost:8080/index-dev.html

The regular index.html will work as well after invoking the whole toolchain (e.g. mvn package), but it will server the JS code which is already compiled and minified by the Closure Compiler, making it a bit more cumbersome to debug, but closer to expected production environment.

If you are planing to extend this project or to borrow the toolchain and use it somewhere else, than check conventions used in this project.

Project objectives

Establish toolchain

Interoperability between pure JS code, GWT compiled code, Closure Library and Closure Compiler requires quite complex setup. Especially when development process is based on uncompiled JavaScript and GWT Super Dev Mode but highly processed version of these sources will be used in production. This projects attempts to cover all the tools needed when developing and building such a project and also automate as much as possible in the process.

Maven archetype with predefined toolchain

Once this project proofs to fulfill all the requirements, it might be used as a base for generalized maven archetype automating creation of such an application.

Project modules

github-users-web-client

GWT client code which will be transpiled to JS. When building the project, this module will provide an artifact in the form of WAR archive containing only compiled static web resources.

During development the codeserver can be started out of this module as well.

github-users-web-server

This module contains rest of the JavaScript code and resources and is responsible for the final packaging of application WAR archive which might be deployed on the servlet container.

As this application does not provide any server-side logic at the moment, it is also possible to extract web resources from the WAR archive and serve them statically.

toolchain modules

This project contains special technical modules:

  • github-users-web-install-tools
  • github-users-web-install-js
  • github-users-web-compiler-templates
  • github-users-web-compiler-js

They should be a part of github-users-web-server build definition, but are separated as a workaround to inflexibility of the maven-exec-plugin which does not allow separate classpaths for each forked java process, unless it is separate maven module. These tools should be also executed in specified order which is achieved thanks to explicit dependency chain.

github-users-web-appengine

The appengine module will take care of deploying this project in the Google App Engine.

It is separated from the github-users-web-server module to allow stripping down the WAR file from all excessive JS sources. In the future only files listed in the compiled.js.map should be retained.

Deployment

$ mvn clean install
$ mvn -pl github-users-web-appengine appengine:deploy
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - morisil/github-users-web: Web frontend of the github-users project https://github-users-web.appspot.com/ · GitHub
Skip to content

Repository files navigation

lists GitHub users

Minimal app demonstrating cross-platform app development (Web, Android, iOS) where core logic is shared and transpiled from Java to JavaScript and Objective-C. This project delivers Web version.

Note: shared logic is provided by the github-users project.

Demo

https://github-users-web.appspot.com/

Status

As you can see from the demo, this project already delivers the full build toolchain for Web application. Still there are several things TODO.

Development

Running the project during development requires starting the codeserver (GWT Super Dev Mode) in parallel with regular Jetty servlet container serving static resources and in the future also server part of the application.

/!\ Note: In order to start jetty from within the github-users-web-server module you will need to install dependant modules first:

$ mvn install

It's one time action which will also verify if the project builds correctly in your environment.

Open 2 terminals and invoke these commands:

$ mvn gwt:codeserver -pl *-client -am -Denv=dev

And then:

$ cd *-server
$ mvn jetty:run -Denv=dev

Head your browser to:

http://localhost:8080/index-dev.html

The regular index.html will work as well after invoking the whole toolchain (e.g. mvn package), but it will server the JS code which is already compiled and minified by the Closure Compiler, making it a bit more cumbersome to debug, but closer to expected production environment.

If you are planing to extend this project or to borrow the toolchain and use it somewhere else, than check conventions used in this project.

Project objectives

Establish toolchain

Interoperability between pure JS code, GWT compiled code, Closure Library and Closure Compiler requires quite complex setup. Especially when development process is based on uncompiled JavaScript and GWT Super Dev Mode but highly processed version of these sources will be used in production. This projects attempts to cover all the tools needed when developing and building such a project and also automate as much as possible in the process.

Maven archetype with predefined toolchain

Once this project proofs to fulfill all the requirements, it might be used as a base for generalized maven archetype automating creation of such an application.

Project modules

github-users-web-client

GWT client code which will be transpiled to JS. When building the project, this module will provide an artifact in the form of WAR archive containing only compiled static web resources.

During development the codeserver can be started out of this module as well.

github-users-web-server

This module contains rest of the JavaScript code and resources and is responsible for the final packaging of application WAR archive which might be deployed on the servlet container.

As this application does not provide any server-side logic at the moment, it is also possible to extract web resources from the WAR archive and serve them statically.

toolchain modules

This project contains special technical modules:

  • github-users-web-install-tools
  • github-users-web-install-js
  • github-users-web-compiler-templates
  • github-users-web-compiler-js

They should be a part of github-users-web-server build definition, but are separated as a workaround to inflexibility of the maven-exec-plugin which does not allow separate classpaths for each forked java process, unless it is separate maven module. These tools should be also executed in specified order which is achieved thanks to explicit dependency chain.

github-users-web-appengine

The appengine module will take care of deploying this project in the Google App Engine.

It is separated from the github-users-web-server module to allow stripping down the WAR file from all excessive JS sources. In the future only files listed in the compiled.js.map should be retained.

Deployment

$ mvn clean install
$ mvn -pl github-users-web-appengine appengine:deploy
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - morisil/github-users-web: Web frontend of the github-users project https://github-users-web.appspot.com/ · GitHub
Skip to content

Repository files navigation

lists GitHub users

Minimal app demonstrating cross-platform app development (Web, Android, iOS) where core logic is shared and transpiled from Java to JavaScript and Objective-C. This project delivers Web version.

Note: shared logic is provided by the github-users project.

Demo

https://github-users-web.appspot.com/

Status

As you can see from the demo, this project already delivers the full build toolchain for Web application. Still there are several things TODO.

Development

Running the project during development requires starting the codeserver (GWT Super Dev Mode) in parallel with regular Jetty servlet container serving static resources and in the future also server part of the application.

/!\ Note: In order to start jetty from within the github-users-web-server module you will need to install dependant modules first:

$ mvn install

It's one time action which will also verify if the project builds correctly in your environment.

Open 2 terminals and invoke these commands:

$ mvn gwt:codeserver -pl *-client -am -Denv=dev

And then:

$ cd *-server
$ mvn jetty:run -Denv=dev

Head your browser to:

http://localhost:8080/index-dev.html

The regular index.html will work as well after invoking the whole toolchain (e.g. mvn package), but it will server the JS code which is already compiled and minified by the Closure Compiler, making it a bit more cumbersome to debug, but closer to expected production environment.

If you are planing to extend this project or to borrow the toolchain and use it somewhere else, than check conventions used in this project.

Project objectives

Establish toolchain

Interoperability between pure JS code, GWT compiled code, Closure Library and Closure Compiler requires quite complex setup. Especially when development process is based on uncompiled JavaScript and GWT Super Dev Mode but highly processed version of these sources will be used in production. This projects attempts to cover all the tools needed when developing and building such a project and also automate as much as possible in the process.

Maven archetype with predefined toolchain

Once this project proofs to fulfill all the requirements, it might be used as a base for generalized maven archetype automating creation of such an application.

Project modules

github-users-web-client

GWT client code which will be transpiled to JS. When building the project, this module will provide an artifact in the form of WAR archive containing only compiled static web resources.

During development the codeserver can be started out of this module as well.

github-users-web-server

This module contains rest of the JavaScript code and resources and is responsible for the final packaging of application WAR archive which might be deployed on the servlet container.

As this application does not provide any server-side logic at the moment, it is also possible to extract web resources from the WAR archive and serve them statically.

toolchain modules

This project contains special technical modules:

  • github-users-web-install-tools
  • github-users-web-install-js
  • github-users-web-compiler-templates
  • github-users-web-compiler-js

They should be a part of github-users-web-server build definition, but are separated as a workaround to inflexibility of the maven-exec-plugin which does not allow separate classpaths for each forked java process, unless it is separate maven module. These tools should be also executed in specified order which is achieved thanks to explicit dependency chain.

github-users-web-appengine

The appengine module will take care of deploying this project in the Google App Engine.

It is separated from the github-users-web-server module to allow stripping down the WAR file from all excessive JS sources. In the future only files listed in the compiled.js.map should be retained.

Deployment

$ mvn clean install
$ mvn -pl github-users-web-appengine appengine:deploy
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - morisil/github-users-web: Web frontend of the github-users project https://github-users-web.appspot.com/ · GitHub
Skip to content

Repository files navigation

lists GitHub users

Minimal app demonstrating cross-platform app development (Web, Android, iOS) where core logic is shared and transpiled from Java to JavaScript and Objective-C. This project delivers Web version.

Note: shared logic is provided by the github-users project.

Demo

https://github-users-web.appspot.com/

Status

As you can see from the demo, this project already delivers the full build toolchain for Web application. Still there are several things TODO.

Development

Running the project during development requires starting the codeserver (GWT Super Dev Mode) in parallel with regular Jetty servlet container serving static resources and in the future also server part of the application.

/!\ Note: In order to start jetty from within the github-users-web-server module you will need to install dependant modules first:

$ mvn install

It's one time action which will also verify if the project builds correctly in your environment.

Open 2 terminals and invoke these commands:

$ mvn gwt:codeserver -pl *-client -am -Denv=dev

And then:

$ cd *-server
$ mvn jetty:run -Denv=dev

Head your browser to:

http://localhost:8080/index-dev.html

The regular index.html will work as well after invoking the whole toolchain (e.g. mvn package), but it will server the JS code which is already compiled and minified by the Closure Compiler, making it a bit more cumbersome to debug, but closer to expected production environment.

If you are planing to extend this project or to borrow the toolchain and use it somewhere else, than check conventions used in this project.

Project objectives

Establish toolchain

Interoperability between pure JS code, GWT compiled code, Closure Library and Closure Compiler requires quite complex setup. Especially when development process is based on uncompiled JavaScript and GWT Super Dev Mode but highly processed version of these sources will be used in production. This projects attempts to cover all the tools needed when developing and building such a project and also automate as much as possible in the process.

Maven archetype with predefined toolchain

Once this project proofs to fulfill all the requirements, it might be used as a base for generalized maven archetype automating creation of such an application.

Project modules

github-users-web-client

GWT client code which will be transpiled to JS. When building the project, this module will provide an artifact in the form of WAR archive containing only compiled static web resources.

During development the codeserver can be started out of this module as well.

github-users-web-server

This module contains rest of the JavaScript code and resources and is responsible for the final packaging of application WAR archive which might be deployed on the servlet container.

As this application does not provide any server-side logic at the moment, it is also possible to extract web resources from the WAR archive and serve them statically.

toolchain modules

This project contains special technical modules:

  • github-users-web-install-tools
  • github-users-web-install-js
  • github-users-web-compiler-templates
  • github-users-web-compiler-js

They should be a part of github-users-web-server build definition, but are separated as a workaround to inflexibility of the maven-exec-plugin which does not allow separate classpaths for each forked java process, unless it is separate maven module. These tools should be also executed in specified order which is achieved thanks to explicit dependency chain.

github-users-web-appengine

The appengine module will take care of deploying this project in the Google App Engine.

It is separated from the github-users-web-server module to allow stripping down the WAR file from all excessive JS sources. In the future only files listed in the compiled.js.map should be retained.

Deployment

$ mvn clean install
$ mvn -pl github-users-web-appengine appengine:deploy
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - morisil/github-users-web: Web frontend of the github-users project https://github-users-web.appspot.com/ · GitHub
Skip to content

Repository files navigation

lists GitHub users

Minimal app demonstrating cross-platform app development (Web, Android, iOS) where core logic is shared and transpiled from Java to JavaScript and Objective-C. This project delivers Web version.

Note: shared logic is provided by the github-users project.

Demo

https://github-users-web.appspot.com/

Status

As you can see from the demo, this project already delivers the full build toolchain for Web application. Still there are several things TODO.

Development

Running the project during development requires starting the codeserver (GWT Super Dev Mode) in parallel with regular Jetty servlet container serving static resources and in the future also server part of the application.

/!\ Note: In order to start jetty from within the github-users-web-server module you will need to install dependant modules first:

$ mvn install

It's one time action which will also verify if the project builds correctly in your environment.

Open 2 terminals and invoke these commands:

$ mvn gwt:codeserver -pl *-client -am -Denv=dev

And then:

$ cd *-server
$ mvn jetty:run -Denv=dev

Head your browser to:

http://localhost:8080/index-dev.html

The regular index.html will work as well after invoking the whole toolchain (e.g. mvn package), but it will server the JS code which is already compiled and minified by the Closure Compiler, making it a bit more cumbersome to debug, but closer to expected production environment.

If you are planing to extend this project or to borrow the toolchain and use it somewhere else, than check conventions used in this project.

Project objectives

Establish toolchain

Interoperability between pure JS code, GWT compiled code, Closure Library and Closure Compiler requires quite complex setup. Especially when development process is based on uncompiled JavaScript and GWT Super Dev Mode but highly processed version of these sources will be used in production. This projects attempts to cover all the tools needed when developing and building such a project and also automate as much as possible in the process.

Maven archetype with predefined toolchain

Once this project proofs to fulfill all the requirements, it might be used as a base for generalized maven archetype automating creation of such an application.

Project modules

github-users-web-client

GWT client code which will be transpiled to JS. When building the project, this module will provide an artifact in the form of WAR archive containing only compiled static web resources.

During development the codeserver can be started out of this module as well.

github-users-web-server

This module contains rest of the JavaScript code and resources and is responsible for the final packaging of application WAR archive which might be deployed on the servlet container.

As this application does not provide any server-side logic at the moment, it is also possible to extract web resources from the WAR archive and serve them statically.

toolchain modules

This project contains special technical modules:

  • github-users-web-install-tools
  • github-users-web-install-js
  • github-users-web-compiler-templates
  • github-users-web-compiler-js

They should be a part of github-users-web-server build definition, but are separated as a workaround to inflexibility of the maven-exec-plugin which does not allow separate classpaths for each forked java process, unless it is separate maven module. These tools should be also executed in specified order which is achieved thanks to explicit dependency chain.

github-users-web-appengine

The appengine module will take care of deploying this project in the Google App Engine.

It is separated from the github-users-web-server module to allow stripping down the WAR file from all excessive JS sources. In the future only files listed in the compiled.js.map should be retained.

Deployment

$ mvn clean install
$ mvn -pl github-users-web-appengine appengine:deploy
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - morisil/github-users-web: Web frontend of the github-users project https://github-users-web.appspot.com/ · GitHub
Skip to content

Repository files navigation

lists GitHub users

Minimal app demonstrating cross-platform app development (Web, Android, iOS) where core logic is shared and transpiled from Java to JavaScript and Objective-C. This project delivers Web version.

Note: shared logic is provided by the github-users project.

Demo

https://github-users-web.appspot.com/

Status

As you can see from the demo, this project already delivers the full build toolchain for Web application. Still there are several things TODO.

Development

Running the project during development requires starting the codeserver (GWT Super Dev Mode) in parallel with regular Jetty servlet container serving static resources and in the future also server part of the application.

/!\ Note: In order to start jetty from within the github-users-web-server module you will need to install dependant modules first:

$ mvn install

It's one time action which will also verify if the project builds correctly in your environment.

Open 2 terminals and invoke these commands:

$ mvn gwt:codeserver -pl *-client -am -Denv=dev

And then:

$ cd *-server
$ mvn jetty:run -Denv=dev

Head your browser to:

http://localhost:8080/index-dev.html

The regular index.html will work as well after invoking the whole toolchain (e.g. mvn package), but it will server the JS code which is already compiled and minified by the Closure Compiler, making it a bit more cumbersome to debug, but closer to expected production environment.

If you are planing to extend this project or to borrow the toolchain and use it somewhere else, than check conventions used in this project.

Project objectives

Establish toolchain

Interoperability between pure JS code, GWT compiled code, Closure Library and Closure Compiler requires quite complex setup. Especially when development process is based on uncompiled JavaScript and GWT Super Dev Mode but highly processed version of these sources will be used in production. This projects attempts to cover all the tools needed when developing and building such a project and also automate as much as possible in the process.

Maven archetype with predefined toolchain

Once this project proofs to fulfill all the requirements, it might be used as a base for generalized maven archetype automating creation of such an application.

Project modules

github-users-web-client

GWT client code which will be transpiled to JS. When building the project, this module will provide an artifact in the form of WAR archive containing only compiled static web resources.

During development the codeserver can be started out of this module as well.

github-users-web-server

This module contains rest of the JavaScript code and resources and is responsible for the final packaging of application WAR archive which might be deployed on the servlet container.

As this application does not provide any server-side logic at the moment, it is also possible to extract web resources from the WAR archive and serve them statically.

toolchain modules

This project contains special technical modules:

  • github-users-web-install-tools
  • github-users-web-install-js
  • github-users-web-compiler-templates
  • github-users-web-compiler-js

They should be a part of github-users-web-server build definition, but are separated as a workaround to inflexibility of the maven-exec-plugin which does not allow separate classpaths for each forked java process, unless it is separate maven module. These tools should be also executed in specified order which is achieved thanks to explicit dependency chain.

github-users-web-appengine

The appengine module will take care of deploying this project in the Google App Engine.

It is separated from the github-users-web-server module to allow stripping down the WAR file from all excessive JS sources. In the future only files listed in the compiled.js.map should be retained.

Deployment

$ mvn clean install
$ mvn -pl github-users-web-appengine appengine:deploy
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - morisil/github-users-web: Web frontend of the github-users project https://github-users-web.appspot.com/ · GitHub
Skip to content

Repository files navigation

lists GitHub users

Minimal app demonstrating cross-platform app development (Web, Android, iOS) where core logic is shared and transpiled from Java to JavaScript and Objective-C. This project delivers Web version.

Note: shared logic is provided by the github-users project.

Demo

https://github-users-web.appspot.com/

Status

As you can see from the demo, this project already delivers the full build toolchain for Web application. Still there are several things TODO.

Development

Running the project during development requires starting the codeserver (GWT Super Dev Mode) in parallel with regular Jetty servlet container serving static resources and in the future also server part of the application.

/!\ Note: In order to start jetty from within the github-users-web-server module you will need to install dependant modules first:

$ mvn install

It's one time action which will also verify if the project builds correctly in your environment.

Open 2 terminals and invoke these commands:

$ mvn gwt:codeserver -pl *-client -am -Denv=dev

And then:

$ cd *-server
$ mvn jetty:run -Denv=dev

Head your browser to:

http://localhost:8080/index-dev.html

The regular index.html will work as well after invoking the whole toolchain (e.g. mvn package), but it will server the JS code which is already compiled and minified by the Closure Compiler, making it a bit more cumbersome to debug, but closer to expected production environment.

If you are planing to extend this project or to borrow the toolchain and use it somewhere else, than check conventions used in this project.

Project objectives

Establish toolchain

Interoperability between pure JS code, GWT compiled code, Closure Library and Closure Compiler requires quite complex setup. Especially when development process is based on uncompiled JavaScript and GWT Super Dev Mode but highly processed version of these sources will be used in production. This projects attempts to cover all the tools needed when developing and building such a project and also automate as much as possible in the process.

Maven archetype with predefined toolchain

Once this project proofs to fulfill all the requirements, it might be used as a base for generalized maven archetype automating creation of such an application.

Project modules

github-users-web-client

GWT client code which will be transpiled to JS. When building the project, this module will provide an artifact in the form of WAR archive containing only compiled static web resources.

During development the codeserver can be started out of this module as well.

github-users-web-server

This module contains rest of the JavaScript code and resources and is responsible for the final packaging of application WAR archive which might be deployed on the servlet container.

As this application does not provide any server-side logic at the moment, it is also possible to extract web resources from the WAR archive and serve them statically.

toolchain modules

This project contains special technical modules:

  • github-users-web-install-tools
  • github-users-web-install-js
  • github-users-web-compiler-templates
  • github-users-web-compiler-js

They should be a part of github-users-web-server build definition, but are separated as a workaround to inflexibility of the maven-exec-plugin which does not allow separate classpaths for each forked java process, unless it is separate maven module. These tools should be also executed in specified order which is achieved thanks to explicit dependency chain.

github-users-web-appengine

The appengine module will take care of deploying this project in the Google App Engine.

It is separated from the github-users-web-server module to allow stripping down the WAR file from all excessive JS sources. In the future only files listed in the compiled.js.map should be retained.

Deployment

$ mvn clean install
$ mvn -pl github-users-web-appengine appengine:deploy