{"action":"created","comment":{"url":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/comments/69999337","id":69999337,"diff_hunk":"@@ -0,0 +1,18 @@\n+\"use strict\";\n+\n+var webpack = require('webpack'),\n+    config = require('./webpack.common.config.js');\n+\n+// Only use the test entry file\n+config.entry = {\n+    'js/testRunner': __dirname + '/assets/tests/testRunner.js'\n+};\n+// Put a dummy value in place of the django reverse module in test mode\n+config.externals = {\n+    reverse: \"undefined\"\n+};\n+\n+// We only want the ProvidePlugin for tests\n+config.plugins = [config.plugins[0]];","path":"webpack.test.config.js","position":16,"original_position":16,"commit_id":"775a17349c6496060830480d639c0c5e748620e0","original_commit_id":"8a78499d49afb5b31ec2d4ddedbd3c74638acab2","user":{"login":"jwalgran","id":17363,"avatar_url":"https://avatars.githubusercontent.com/u/17363?v=3","gravatar_id":"","url":"https://api.github.com/users/jwalgran","html_url":"https://github.com/jwalgran","followers_url":"https://api.github.com/users/jwalgran/followers","following_url":"https://api.github.com/users/jwalgran/following{/other_user}","gists_url":"https://api.github.com/users/jwalgran/gists{/gist_id}","starred_url":"https://api.github.com/users/jwalgran/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jwalgran/subscriptions","organizations_url":"https://api.github.com/users/jwalgran/orgs","repos_url":"https://api.github.com/users/jwalgran/repos","events_url":"https://api.github.com/users/jwalgran/events{/privacy}","received_events_url":"https://api.github.com/users/jwalgran/received_events","type":"User","site_admin":false},"body":"Are we guaranteed that the `ProvidePlugin` will always be at index 0?","created_at":"2016-07-07T22:28:43Z","updated_at":"2016-07-07T22:28:43Z","html_url":"https://github.com/OpenTreeMap/otm-core/pull/2643#discussion_r69999337","pull_request_url":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/2643","_links":{"self":{"href":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/comments/69999337"},"html":{"href":"https://github.com/OpenTreeMap/otm-core/pull/2643#discussion_r69999337"},"pull_request":{"href":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/2643"}}},"pull_request":{"url":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/2643","id":76456315,"html_url":"https://github.com/OpenTreeMap/otm-core/pull/2643","diff_url":"https://github.com/OpenTreeMap/otm-core/pull/2643.diff","patch_url":"https://github.com/OpenTreeMap/otm-core/pull/2643.patch","issue_url":"https://api.github.com/repos/OpenTreeMap/otm-core/issues/2643","number":2643,"state":"open","locked":false,"title":"Switch from Grunt+Browserify to Webpack","user":{"login":"maurizi","id":4432106,"avatar_url":"https://avatars.githubusercontent.com/u/4432106?v=3","gravatar_id":"","url":"https://api.github.com/users/maurizi","html_url":"https://github.com/maurizi","followers_url":"https://api.github.com/users/maurizi/followers","following_url":"https://api.github.com/users/maurizi/following{/other_user}","gists_url":"https://api.github.com/users/maurizi/gists{/gist_id}","starred_url":"https://api.github.com/users/maurizi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maurizi/subscriptions","organizations_url":"https://api.github.com/users/maurizi/orgs","repos_url":"https://api.github.com/users/maurizi/repos","events_url":"https://api.github.com/users/maurizi/events{/privacy}","received_events_url":"https://api.github.com/users/maurizi/received_events","type":"User","site_admin":false},"body":"Work-in-progress branch for switching from Grunt and Browserify to Webpack for our front-end asset toolchain.\r\n\r\nWhat has been done:\r\n - Files were moved around.  Shared assets are now in `assets/` instead of `opentreemap/treemap/`, and the `lib/` directory was renamed to `vendor/`.\r\n - JS modules were rewritten.\r\n   - Non-entry modules were moved from `<app>/js/src/` to `<app>/js/src/lib/` and are aliased as `<app>/lib/<filename>.js`.\r\n   - Entry modules were rewritten to remove their exported `init()` functions.  Instead, the modules are executed when included in the page. I made the templated `settings.js` file accessible as a module, and also brought in the `django-js-reverse` library to make this easier.\r\n   - On some pages, options are still being passed from the template to the JS module, but this is now done via a JS global variable.\r\n - CSS files were rewritten to reference static assets from a `$staticUrl` variable, which defaults to `../../` for webpack, but is changed to `/static/` for map-branded CSS builds.\r\n - `webpack-dev-server` support was added.  If the `WEBPACK_DEV_SERVER` environment variable is present and `settings.DEBUG` is false, all requests for static assets will go through `webpack-dev-server`.\r\n - The webpack configuration files are present and should work for one-time builds for both development and production\r\n\r\nWhat remains to be done:\r\n- [x] JS tests are totally broken.\r\n- [x] Travis CI and Circle CI files need to be updated\r\n- [x] Performance could be better.  ~~I suspect a vendor JS bundle may help.~~ After switching source maps to use `eval` incremental rebuilds are very speedy\r\n- [x] Documentation needs updating.\r\n- [x] Source map support and hot reload support is a bit spotty and needs further investigation.\r\n- [x] Fix UI test failures.\r\n- [x] Integration with Django to support long term caching.\r\n\r\nDepends on https://github.com/OpenTreeMap/otm-cloud/pull/241\r\nDepends on https://github.com/OpenTreeMap/otm-addons/pull/1204\r\n\r\nConnects to OpenTreeMap/otm-addons#1198","created_at":"2016-07-06T15:54:12Z","updated_at":"2016-07-07T22:28:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"22167567147a33465e3dea8596b3aaaccb933940","assignee":{"login":"RickMohr","id":2162993,"avatar_url":"https://avatars.githubusercontent.com/u/2162993?v=3","gravatar_id":"","url":"https://api.github.com/users/RickMohr","html_url":"https://github.com/RickMohr","followers_url":"https://api.github.com/users/RickMohr/followers","following_url":"https://api.github.com/users/RickMohr/following{/other_user}","gists_url":"https://api.github.com/users/RickMohr/gists{/gist_id}","starred_url":"https://api.github.com/users/RickMohr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RickMohr/subscriptions","organizations_url":"https://api.github.com/users/RickMohr/orgs","repos_url":"https://api.github.com/users/RickMohr/repos","events_url":"https://api.github.com/users/RickMohr/events{/privacy}","received_events_url":"https://api.github.com/users/RickMohr/received_events","type":"User","site_admin":false},"assignees":[{"login":"RickMohr","id":2162993,"avatar_url":"https://avatars.githubusercontent.com/u/2162993?v=3","gravatar_id":"","url":"https://api.github.com/users/RickMohr","html_url":"https://github.com/RickMohr","followers_url":"https://api.github.com/users/RickMohr/followers","following_url":"https://api.github.com/users/RickMohr/following{/other_user}","gists_url":"https://api.github.com/users/RickMohr/gists{/gist_id}","starred_url":"https://api.github.com/users/RickMohr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RickMohr/subscriptions","organizations_url":"https://api.github.com/users/RickMohr/orgs","repos_url":"https://api.github.com/users/RickMohr/repos","events_url":"https://api.github.com/users/RickMohr/events{/privacy}","received_events_url":"https://api.github.com/users/RickMohr/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/2643/commits","review_comments_url":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/2643/comments","review_comment_url":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenTreeMap/otm-core/issues/2643/comments","statuses_url":"https://api.github.com/repos/OpenTreeMap/otm-core/statuses/775a17349c6496060830480d639c0c5e748620e0","head":{"label":"maurizi:webpack","ref":"webpack","sha":"775a17349c6496060830480d639c0c5e748620e0","user":{"login":"maurizi","id":4432106,"avatar_url":"https://avatars.githubusercontent.com/u/4432106?v=3","gravatar_id":"","url":"https://api.github.com/users/maurizi","html_url":"https://github.com/maurizi","followers_url":"https://api.github.com/users/maurizi/followers","following_url":"https://api.github.com/users/maurizi/following{/other_user}","gists_url":"https://api.github.com/users/maurizi/gists{/gist_id}","starred_url":"https://api.github.com/users/maurizi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maurizi/subscriptions","organizations_url":"https://api.github.com/users/maurizi/orgs","repos_url":"https://api.github.com/users/maurizi/repos","events_url":"https://api.github.com/users/maurizi/events{/privacy}","received_events_url":"https://api.github.com/users/maurizi/received_events","type":"User","site_admin":false},"repo":{"id":11374160,"name":"otm-core","full_name":"maurizi/otm-core","owner":{"login":"maurizi","id":4432106,"avatar_url":"https://avatars.githubusercontent.com/u/4432106?v=3","gravatar_id":"","url":"https://api.github.com/users/maurizi","html_url":"https://github.com/maurizi","followers_url":"https://api.github.com/users/maurizi/followers","following_url":"https://api.github.com/users/maurizi/following{/other_user}","gists_url":"https://api.github.com/users/maurizi/gists{/gist_id}","starred_url":"https://api.github.com/users/maurizi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maurizi/subscriptions","organizations_url":"https://api.github.com/users/maurizi/orgs","repos_url":"https://api.github.com/users/maurizi/repos","events_url":"https://api.github.com/users/maurizi/events{/privacy}","received_events_url":"https://api.github.com/users/maurizi/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/maurizi/otm-core","description":"","fork":true,"url":"https://api.github.com/repos/maurizi/otm-core","forks_url":"https://api.github.com/repos/maurizi/otm-core/forks","keys_url":"https://api.github.com/repos/maurizi/otm-core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/maurizi/otm-core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/maurizi/otm-core/teams","hooks_url":"https://api.github.com/repos/maurizi/otm-core/hooks","issue_events_url":"https://api.github.com/repos/maurizi/otm-core/issues/events{/number}","events_url":"https://api.github.com/repos/maurizi/otm-core/events","assignees_url":"https://api.github.com/repos/maurizi/otm-core/assignees{/user}","branches_url":"https://api.github.com/repos/maurizi/otm-core/branches{/branch}","tags_url":"https://api.github.com/repos/maurizi/otm-core/tags","blobs_url":"https://api.github.com/repos/maurizi/otm-core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/maurizi/otm-core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/maurizi/otm-core/git/refs{/sha}","trees_url":"https://api.github.com/repos/maurizi/otm-core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/maurizi/otm-core/statuses/{sha}","languages_url":"https://api.github.com/repos/maurizi/otm-core/languages","stargazers_url":"https://api.github.com/repos/maurizi/otm-core/stargazers","contributors_url":"https://api.github.com/repos/maurizi/otm-core/contributors","subscribers_url":"https://api.github.com/repos/maurizi/otm-core/subscribers","subscription_url":"https://api.github.com/repos/maurizi/otm-core/subscription","commits_url":"https://api.github.com/repos/maurizi/otm-core/commits{/sha}","git_commits_url":"https://api.github.com/repos/maurizi/otm-core/git/commits{/sha}","comments_url":"https://api.github.com/repos/maurizi/otm-core/comments{/number}","issue_comment_url":"https://api.github.com/repos/maurizi/otm-core/issues/comments{/number}","contents_url":"https://api.github.com/repos/maurizi/otm-core/contents/{+path}","compare_url":"https://api.github.com/repos/maurizi/otm-core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/maurizi/otm-core/merges","archive_url":"https://api.github.com/repos/maurizi/otm-core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/maurizi/otm-core/downloads","issues_url":"https://api.github.com/repos/maurizi/otm-core/issues{/number}","pulls_url":"https://api.github.com/repos/maurizi/otm-core/pulls{/number}","milestones_url":"https://api.github.com/repos/maurizi/otm-core/milestones{/number}","notifications_url":"https://api.github.com/repos/maurizi/otm-core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/maurizi/otm-core/labels{/name}","releases_url":"https://api.github.com/repos/maurizi/otm-core/releases{/id}","deployments_url":"https://api.github.com/repos/maurizi/otm-core/deployments","created_at":"2013-07-12T17:26:29Z","updated_at":"2015-06-15T19:13:56Z","pushed_at":"2016-07-07T22:11:25Z","git_url":"git://github.com/maurizi/otm-core.git","ssh_url":"git@github.com:maurizi/otm-core.git","clone_url":"https://github.com/maurizi/otm-core.git","svn_url":"https://github.com/maurizi/otm-core","homepage":null,"size":13569,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"OpenTreeMap:develop","ref":"develop","sha":"c5f2890963d9d22b51f9eb095fc58a9a55a46518","user":{"login":"OpenTreeMap","id":1125635,"avatar_url":"https://avatars.githubusercontent.com/u/1125635?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenTreeMap","html_url":"https://github.com/OpenTreeMap","followers_url":"https://api.github.com/users/OpenTreeMap/followers","following_url":"https://api.github.com/users/OpenTreeMap/following{/other_user}","gists_url":"https://api.github.com/users/OpenTreeMap/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenTreeMap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenTreeMap/subscriptions","organizations_url":"https://api.github.com/users/OpenTreeMap/orgs","repos_url":"https://api.github.com/users/OpenTreeMap/repos","events_url":"https://api.github.com/users/OpenTreeMap/events{/privacy}","received_events_url":"https://api.github.com/users/OpenTreeMap/received_events","type":"Organization","site_admin":false},"repo":{"id":8292625,"name":"otm-core","full_name":"OpenTreeMap/otm-core","owner":{"login":"OpenTreeMap","id":1125635,"avatar_url":"https://avatars.githubusercontent.com/u/1125635?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenTreeMap","html_url":"https://github.com/OpenTreeMap","followers_url":"https://api.github.com/users/OpenTreeMap/followers","following_url":"https://api.github.com/users/OpenTreeMap/following{/other_user}","gists_url":"https://api.github.com/users/OpenTreeMap/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenTreeMap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenTreeMap/subscriptions","organizations_url":"https://api.github.com/users/OpenTreeMap/orgs","repos_url":"https://api.github.com/users/OpenTreeMap/repos","events_url":"https://api.github.com/users/OpenTreeMap/events{/privacy}","received_events_url":"https://api.github.com/users/OpenTreeMap/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenTreeMap/otm-core","description":"OpenTreeMap is a collaborative platform for crowdsourced tree inventory, ecosystem services calculations, urban forestry analysis, and community engagement.","fork":false,"url":"https://api.github.com/repos/OpenTreeMap/otm-core","forks_url":"https://api.github.com/repos/OpenTreeMap/otm-core/forks","keys_url":"https://api.github.com/repos/OpenTreeMap/otm-core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenTreeMap/otm-core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenTreeMap/otm-core/teams","hooks_url":"https://api.github.com/repos/OpenTreeMap/otm-core/hooks","issue_events_url":"https://api.github.com/repos/OpenTreeMap/otm-core/issues/events{/number}","events_url":"https://api.github.com/repos/OpenTreeMap/otm-core/events","assignees_url":"https://api.github.com/repos/OpenTreeMap/otm-core/assignees{/user}","branches_url":"https://api.github.com/repos/OpenTreeMap/otm-core/branches{/branch}","tags_url":"https://api.github.com/repos/OpenTreeMap/otm-core/tags","blobs_url":"https://api.github.com/repos/OpenTreeMap/otm-core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenTreeMap/otm-core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenTreeMap/otm-core/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenTreeMap/otm-core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenTreeMap/otm-core/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenTreeMap/otm-core/languages","stargazers_url":"https://api.github.com/repos/OpenTreeMap/otm-core/stargazers","contributors_url":"https://api.github.com/repos/OpenTreeMap/otm-core/contributors","subscribers_url":"https://api.github.com/repos/OpenTreeMap/otm-core/subscribers","subscription_url":"https://api.github.com/repos/OpenTreeMap/otm-core/subscription","commits_url":"https://api.github.com/repos/OpenTreeMap/otm-core/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenTreeMap/otm-core/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenTreeMap/otm-core/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenTreeMap/otm-core/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenTreeMap/otm-core/contents/{+path}","compare_url":"https://api.github.com/repos/OpenTreeMap/otm-core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenTreeMap/otm-core/merges","archive_url":"https://api.github.com/repos/OpenTreeMap/otm-core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenTreeMap/otm-core/downloads","issues_url":"https://api.github.com/repos/OpenTreeMap/otm-core/issues{/number}","pulls_url":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenTreeMap/otm-core/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenTreeMap/otm-core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenTreeMap/otm-core/labels{/name}","releases_url":"https://api.github.com/repos/OpenTreeMap/otm-core/releases{/id}","deployments_url":"https://api.github.com/repos/OpenTreeMap/otm-core/deployments","created_at":"2013-02-19T15:11:04Z","updated_at":"2016-06-15T07:10:35Z","pushed_at":"2016-07-07T22:11:26Z","git_url":"git://github.com/OpenTreeMap/otm-core.git","ssh_url":"git@github.com:OpenTreeMap/otm-core.git","clone_url":"https://github.com/OpenTreeMap/otm-core.git","svn_url":"https://github.com/OpenTreeMap/otm-core","homepage":"www.opentreemap.org","size":13889,"stargazers_count":77,"watchers_count":77,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":48,"mirror_url":null,"open_issues_count":335,"forks":48,"open_issues":335,"watchers":77,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/2643"},"html":{"href":"https://github.com/OpenTreeMap/otm-core/pull/2643"},"issue":{"href":"https://api.github.com/repos/OpenTreeMap/otm-core/issues/2643"},"comments":{"href":"https://api.github.com/repos/OpenTreeMap/otm-core/issues/2643/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/2643/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenTreeMap/otm-core/pulls/2643/commits"},"statuses":{"href":"https://api.github.com/repos/OpenTreeMap/otm-core/statuses/775a17349c6496060830480d639c0c5e748620e0"}}}}
{"actor":{"display_login":"jwalgran"}}