You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2017/10/15 19:38:52 UTC

[1/8] airavata-django-portal git commit: AIRAVATA-2537 Fix next/previous urls when view called from other view

Repository: airavata-django-portal
Updated Branches:
  refs/heads/master 4ed82de91 -> c2df89a15


AIRAVATA-2537 Fix next/previous urls when view called from other view


Project: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/commit/f4367b0f
Tree: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/tree/f4367b0f
Diff: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/diff/f4367b0f

Branch: refs/heads/master
Commit: f4367b0ff465d98c853598d93fd28a9f9358383d
Parents: 4ed82de
Author: Marcus Christie <ma...@iu.edu>
Authored: Sat Oct 14 09:34:33 2017 -0400
Committer: Marcus Christie <ma...@iu.edu>
Committed: Sat Oct 14 10:07:22 2017 -0400

----------------------------------------------------------------------
 django_airavata/apps/api/views.py | 30 ++++++++++++++++++++++++++++--
 django_airavata/settings.py       |  1 +
 2 files changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/f4367b0f/django_airavata/apps/api/views.py
----------------------------------------------------------------------
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 088cc0a..4dc4d0f 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -7,7 +7,7 @@ from rest_framework.views import APIView
 from rest_framework.viewsets import GenericViewSet
 from rest_framework.response import Response
 from rest_framework.reverse import reverse
-from rest_framework.utils.urls import replace_query_param
+from rest_framework.utils.urls import replace_query_param, remove_query_param
 
 from django.conf import settings
 from django.http import JsonResponse, Http404
@@ -137,6 +137,12 @@ class APIResultPagination(pagination.LimitOffsetPagination):
         self.offset = self.get_offset(request)
         self.request = request
 
+        # When a paged view is called from another view (for example, to get the
+        # initial data to display), this pagination class needs to know the name
+        # of the view being paginated.
+        if view and hasattr(view, 'pagination_viewname'):
+            self.viewname = view.pagination_viewname
+
         return list(queryset[self.offset:self.offset + self.limit])
 
     def get_paginated_response(self, data):
@@ -148,17 +154,37 @@ class APIResultPagination(pagination.LimitOffsetPagination):
         ]))
 
     def get_next_link(self):
-        url = self.request.build_absolute_uri()
+        url = self.get_base_url()
         url = replace_query_param(url, self.limit_query_param, self.limit)
 
         offset = self.offset + self.limit
         return replace_query_param(url, self.offset_query_param, offset)
 
+    def get_previous_link(self):
+        if self.offset <= 0:
+            return None
+
+        url = self.get_base_url()
+        url = replace_query_param(url, self.limit_query_param, self.limit)
+
+        if self.offset - self.limit <= 0:
+            return remove_query_param(url, self.offset_query_param)
+
+        offset = self.offset - self.limit
+        return replace_query_param(url, self.offset_query_param, offset)
+
+    def get_base_url(self):
+        if hasattr(self, 'viewname'):
+            return self.request.build_absolute_uri(reverse(self.viewname))
+        else:
+            return self.request.build_absolute_uri()
+
 class ProjectViewSet(APIBackedViewSet):
 
     serializer_class = serializers.ProjectSerializer
     lookup_field = 'project_id'
     pagination_class = APIResultPagination
+    pagination_viewname = 'django_airavata_api:project-list'
 
     def get_list(self):
         view = self

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/f4367b0f/django_airavata/settings.py
----------------------------------------------------------------------
diff --git a/django_airavata/settings.py b/django_airavata/settings.py
index 7562cae..18fc1f2 100644
--- a/django_airavata/settings.py
+++ b/django_airavata/settings.py
@@ -137,6 +137,7 @@ REST_FRAMEWORK = {
     'DEFAULT_PERMISSION_CLASSES': (
         'rest_framework.permissions.IsAuthenticated',
     ),
+    'PAGE_SIZE': 10,
 }
 
 AUTHENTICATION_BACKENDS = [


[6/8] airavata-django-portal git commit: AIRAVATA-2537 Move models and services to common code

Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/apps/workspace/package-lock.json
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/package-lock.json b/django_airavata/apps/workspace/package-lock.json
index dbcf1e2..7f43c96 100644
--- a/django_airavata/apps/workspace/package-lock.json
+++ b/django_airavata/apps/workspace/package-lock.json
@@ -1706,6 +1706,6165 @@
         "randombytes": "2.0.5"
       }
     },
+    "django-airavata-common": {
+      "version": "file:../..",
+      "requires": {
+        "vue": "2.4.4"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "accepts": {
+          "version": "1.3.4",
+          "bundled": true,
+          "requires": {
+            "mime-types": "2.1.17",
+            "negotiator": "0.6.1"
+          }
+        },
+        "acorn": {
+          "version": "5.1.2",
+          "bundled": true
+        },
+        "acorn-dynamic-import": {
+          "version": "2.0.2",
+          "bundled": true,
+          "requires": {
+            "acorn": "4.0.13"
+          },
+          "dependencies": {
+            "acorn": {
+              "version": "4.0.13",
+              "bundled": true
+            }
+          }
+        },
+        "ajv": {
+          "version": "5.2.3",
+          "bundled": true,
+          "requires": {
+            "co": "4.6.0",
+            "fast-deep-equal": "1.0.0",
+            "json-schema-traverse": "0.3.1",
+            "json-stable-stringify": "1.0.1"
+          }
+        },
+        "ajv-keywords": {
+          "version": "2.1.0",
+          "bundled": true
+        },
+        "align-text": {
+          "version": "0.1.4",
+          "bundled": true,
+          "requires": {
+            "kind-of": "3.2.2",
+            "longest": "1.0.1",
+            "repeat-string": "1.6.1"
+          }
+        },
+        "alphanum-sort": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "amdefine": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "ansi-html": {
+          "version": "0.0.7",
+          "bundled": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "bundled": true
+        },
+        "anymatch": {
+          "version": "1.3.2",
+          "bundled": true,
+          "requires": {
+            "micromatch": "2.3.11",
+            "normalize-path": "2.1.1"
+          }
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.4",
+          "bundled": true,
+          "requires": {
+            "delegates": "1.0.0",
+            "readable-stream": "2.3.3"
+          }
+        },
+        "argparse": {
+          "version": "1.0.9",
+          "bundled": true,
+          "requires": {
+            "sprintf-js": "1.0.3"
+          }
+        },
+        "arr-diff": {
+          "version": "2.0.0",
+          "bundled": true,
+          "requires": {
+            "arr-flatten": "1.1.0"
+          }
+        },
+        "arr-flatten": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "array-find-index": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "array-flatten": {
+          "version": "2.1.1",
+          "bundled": true
+        },
+        "array-includes": {
+          "version": "3.0.3",
+          "bundled": true,
+          "requires": {
+            "define-properties": "1.1.2",
+            "es-abstract": "1.8.2"
+          }
+        },
+        "array-union": {
+          "version": "1.0.2",
+          "bundled": true,
+          "requires": {
+            "array-uniq": "1.0.3"
+          }
+        },
+        "array-uniq": {
+          "version": "1.0.3",
+          "bundled": true
+        },
+        "array-unique": {
+          "version": "0.2.1",
+          "bundled": true
+        },
+        "asn1": {
+          "version": "0.2.3",
+          "bundled": true
+        },
+        "asn1.js": {
+          "version": "4.9.1",
+          "bundled": true,
+          "requires": {
+            "bn.js": "4.11.8",
+            "inherits": "2.0.3",
+            "minimalistic-assert": "1.0.0"
+          }
+        },
+        "assert": {
+          "version": "1.4.1",
+          "bundled": true,
+          "requires": {
+            "util": "0.10.3"
+          }
+        },
+        "assert-plus": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "async": {
+          "version": "2.5.0",
+          "bundled": true,
+          "requires": {
+            "lodash": "4.17.4"
+          }
+        },
+        "async-each": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "async-foreach": {
+          "version": "0.1.3",
+          "bundled": true
+        },
+        "asynckit": {
+          "version": "0.4.0",
+          "bundled": true
+        },
+        "autoprefixer": {
+          "version": "6.7.7",
+          "bundled": true,
+          "requires": {
+            "browserslist": "1.7.7",
+            "caniuse-db": "1.0.30000738",
+            "normalize-range": "0.1.2",
+            "num2fraction": "1.2.2",
+            "postcss": "5.2.17",
+            "postcss-value-parser": "3.3.0"
+          },
+          "dependencies": {
+            "browserslist": {
+              "version": "1.7.7",
+              "bundled": true,
+              "requires": {
+                "caniuse-db": "1.0.30000738",
+                "electron-to-chromium": "1.3.22"
+              }
+            }
+          }
+        },
+        "aws-sign2": {
+          "version": "0.7.0",
+          "bundled": true
+        },
+        "aws4": {
+          "version": "1.6.0",
+          "bundled": true
+        },
+        "babel-code-frame": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "chalk": "1.1.3",
+            "esutils": "2.0.2",
+            "js-tokens": "3.0.2"
+          }
+        },
+        "babel-core": {
+          "version": "6.26.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-code-frame": "6.26.0",
+            "babel-generator": "6.26.0",
+            "babel-helpers": "6.24.1",
+            "babel-messages": "6.23.0",
+            "babel-register": "6.26.0",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0",
+            "babylon": "6.18.0",
+            "convert-source-map": "1.5.0",
+            "debug": "2.6.9",
+            "json5": "0.5.1",
+            "lodash": "4.17.4",
+            "minimatch": "3.0.4",
+            "path-is-absolute": "1.0.1",
+            "private": "0.1.7",
+            "slash": "1.0.0",
+            "source-map": "0.5.7"
+          }
+        },
+        "babel-generator": {
+          "version": "6.26.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-messages": "6.23.0",
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0",
+            "detect-indent": "4.0.0",
+            "jsesc": "1.3.0",
+            "lodash": "4.17.4",
+            "source-map": "0.5.7",
+            "trim-right": "1.0.1"
+          }
+        },
+        "babel-helper-builder-binary-assignment-operator-visitor": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-explode-assignable-expression": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-helper-call-delegate": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-hoist-variables": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-helper-define-map": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "babel-helper-function-name": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0",
+            "lodash": "4.17.4"
+          }
+        },
+        "babel-helper-explode-assignable-expression": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-helper-function-name": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-get-function-arity": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-helper-get-function-arity": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-helper-hoist-variables": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-helper-optimise-call-expression": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-helper-regex": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0",
+            "lodash": "4.17.4"
+          }
+        },
+        "babel-helper-remap-async-to-generator": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-function-name": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-helper-replace-supers": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-optimise-call-expression": "6.24.1",
+            "babel-messages": "6.23.0",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-helpers": {
+          "version": "6.24.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0"
+          }
+        },
+        "babel-loader": {
+          "version": "7.1.2",
+          "bundled": true,
+          "requires": {
+            "find-cache-dir": "1.0.0",
+            "loader-utils": "1.1.0",
+            "mkdirp": "0.5.1"
+          },
+          "dependencies": {
+            "loader-utils": {
+              "version": "1.1.0",
+              "bundled": true,
+              "requires": {
+                "big.js": "3.2.0",
+                "emojis-list": "2.1.0",
+                "json5": "0.5.1"
+              }
+            }
+          }
+        },
+        "babel-messages": {
+          "version": "6.23.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-check-es2015-constants": {
+          "version": "6.22.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-syntax-async-functions": {
+          "version": "6.13.0",
+          "bundled": true
+        },
+        "babel-plugin-syntax-exponentiation-operator": {
+          "version": "6.13.0",
+          "bundled": true
+        },
+        "babel-plugin-syntax-trailing-function-commas": {
+          "version": "6.22.0",
+          "bundled": true
+        },
+        "babel-plugin-transform-async-to-generator": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-remap-async-to-generator": "6.24.1",
+            "babel-plugin-syntax-async-functions": "6.13.0",
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-arrow-functions": {
+          "version": "6.22.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-block-scoped-functions": {
+          "version": "6.22.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-block-scoping": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0",
+            "lodash": "4.17.4"
+          }
+        },
+        "babel-plugin-transform-es2015-classes": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-define-map": "6.26.0",
+            "babel-helper-function-name": "6.24.1",
+            "babel-helper-optimise-call-expression": "6.24.1",
+            "babel-helper-replace-supers": "6.24.1",
+            "babel-messages": "6.23.0",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-computed-properties": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-destructuring": {
+          "version": "6.23.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-duplicate-keys": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-for-of": {
+          "version": "6.23.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-function-name": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-function-name": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-literals": {
+          "version": "6.22.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-modules-amd": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-modules-commonjs": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "babel-plugin-transform-strict-mode": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-modules-systemjs": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-hoist-variables": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-modules-umd": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-object-super": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-replace-supers": "6.24.1",
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-parameters": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-call-delegate": "6.24.1",
+            "babel-helper-get-function-arity": "6.24.1",
+            "babel-runtime": "6.26.0",
+            "babel-template": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-shorthand-properties": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-spread": {
+          "version": "6.22.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-sticky-regex": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-regex": "6.26.0",
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-template-literals": {
+          "version": "6.22.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-typeof-symbol": {
+          "version": "6.23.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-es2015-unicode-regex": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-regex": "6.26.0",
+            "babel-runtime": "6.26.0",
+            "regexpu-core": "2.0.0"
+          }
+        },
+        "babel-plugin-transform-exponentiation-operator": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+            "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+            "babel-runtime": "6.26.0"
+          }
+        },
+        "babel-plugin-transform-regenerator": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "regenerator-transform": "0.10.1"
+          }
+        },
+        "babel-plugin-transform-strict-mode": {
+          "version": "6.24.1",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0"
+          }
+        },
+        "babel-preset-env": {
+          "version": "1.6.0",
+          "bundled": true,
+          "requires": {
+            "babel-plugin-check-es2015-constants": "6.22.0",
+            "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+            "babel-plugin-transform-async-to-generator": "6.24.1",
+            "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+            "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+            "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+            "babel-plugin-transform-es2015-classes": "6.24.1",
+            "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+            "babel-plugin-transform-es2015-destructuring": "6.23.0",
+            "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+            "babel-plugin-transform-es2015-for-of": "6.23.0",
+            "babel-plugin-transform-es2015-function-name": "6.24.1",
+            "babel-plugin-transform-es2015-literals": "6.22.0",
+            "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+            "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+            "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+            "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+            "babel-plugin-transform-es2015-object-super": "6.24.1",
+            "babel-plugin-transform-es2015-parameters": "6.24.1",
+            "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+            "babel-plugin-transform-es2015-spread": "6.22.0",
+            "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+            "babel-plugin-transform-es2015-template-literals": "6.22.0",
+            "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+            "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+            "babel-plugin-transform-exponentiation-operator": "6.24.1",
+            "babel-plugin-transform-regenerator": "6.26.0",
+            "browserslist": "2.4.0",
+            "invariant": "2.2.2",
+            "semver": "5.4.1"
+          }
+        },
+        "babel-register": {
+          "version": "6.26.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "babel-core": "6.26.0",
+            "babel-runtime": "6.26.0",
+            "core-js": "2.5.1",
+            "home-or-tmp": "2.0.0",
+            "lodash": "4.17.4",
+            "mkdirp": "0.5.1",
+            "source-map-support": "0.4.18"
+          }
+        },
+        "babel-runtime": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "core-js": "2.5.1",
+            "regenerator-runtime": "0.11.0"
+          }
+        },
+        "babel-template": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "babel-traverse": "6.26.0",
+            "babel-types": "6.26.0",
+            "babylon": "6.18.0",
+            "lodash": "4.17.4"
+          }
+        },
+        "babel-traverse": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "babel-code-frame": "6.26.0",
+            "babel-messages": "6.23.0",
+            "babel-runtime": "6.26.0",
+            "babel-types": "6.26.0",
+            "babylon": "6.18.0",
+            "debug": "2.6.9",
+            "globals": "9.18.0",
+            "invariant": "2.2.2",
+            "lodash": "4.17.4"
+          }
+        },
+        "babel-types": {
+          "version": "6.26.0",
+          "bundled": true,
+          "requires": {
+            "babel-runtime": "6.26.0",
+            "esutils": "2.0.2",
+            "lodash": "4.17.4",
+            "to-fast-properties": "1.0.3"
+          }
+        },
+        "babylon": {
+          "version": "6.18.0",
+          "bundled": true
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "base64-js": {
+          "version": "1.2.1",
+          "bundled": true
+        },
+        "batch": {
+          "version": "0.6.1",
+          "bundled": true
+        },
+        "bcrypt-pbkdf": {
+          "version": "1.0.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "tweetnacl": "0.14.5"
+          }
+        },
+        "big.js": {
+          "version": "3.2.0",
+          "bundled": true
+        },
+        "binary-extensions": {
+          "version": "1.10.0",
+          "bundled": true
+        },
+        "block-stream": {
+          "version": "0.0.9",
+          "bundled": true,
+          "requires": {
+            "inherits": "2.0.3"
+          }
+        },
+        "bluebird": {
+          "version": "3.5.0",
+          "bundled": true
+        },
+        "bn.js": {
+          "version": "4.11.8",
+          "bundled": true
+        },
+        "bonjour": {
+          "version": "3.5.0",
+          "bundled": true,
+          "requires": {
+            "array-flatten": "2.1.1",
+            "deep-equal": "1.0.1",
+            "dns-equal": "1.0.0",
+            "dns-txt": "2.0.2",
+            "multicast-dns": "6.1.1",
+            "multicast-dns-service-types": "1.1.0"
+          }
+        },
+        "boom": {
+          "version": "4.3.1",
+          "bundled": true,
+          "requires": {
+            "hoek": "4.2.0"
+          }
+        },
+        "brace-expansion": {
+          "version": "1.1.8",
+          "bundled": true,
+          "requires": {
+            "balanced-match": "1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "braces": {
+          "version": "1.8.5",
+          "bundled": true,
+          "requires": {
+            "expand-range": "1.8.2",
+            "preserve": "0.2.0",
+            "repeat-element": "1.1.2"
+          }
+        },
+        "brorand": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "browserify-aes": {
+          "version": "1.0.8",
+          "bundled": true,
+          "requires": {
+            "buffer-xor": "1.0.3",
+            "cipher-base": "1.0.4",
+            "create-hash": "1.1.3",
+            "evp_bytestokey": "1.0.3",
+            "inherits": "2.0.3",
+            "safe-buffer": "5.1.1"
+          }
+        },
+        "browserify-cipher": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "browserify-aes": "1.0.8",
+            "browserify-des": "1.0.0",
+            "evp_bytestokey": "1.0.3"
+          }
+        },
+        "browserify-des": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "cipher-base": "1.0.4",
+            "des.js": "1.0.0",
+            "inherits": "2.0.3"
+          }
+        },
+        "browserify-rsa": {
+          "version": "4.0.1",
+          "bundled": true,
+          "requires": {
+            "bn.js": "4.11.8",
+            "randombytes": "2.0.5"
+          }
+        },
+        "browserify-sign": {
+          "version": "4.0.4",
+          "bundled": true,
+          "requires": {
+            "bn.js": "4.11.8",
+            "browserify-rsa": "4.0.1",
+            "create-hash": "1.1.3",
+            "create-hmac": "1.1.6",
+            "elliptic": "6.4.0",
+            "inherits": "2.0.3",
+            "parse-asn1": "5.1.0"
+          }
+        },
+        "browserify-zlib": {
+          "version": "0.1.4",
+          "bundled": true,
+          "requires": {
+            "pako": "0.2.9"
+          }
+        },
+        "browserslist": {
+          "version": "2.4.0",
+          "bundled": true,
+          "requires": {
+            "caniuse-lite": "1.0.30000738",
+            "electron-to-chromium": "1.3.22"
+          }
+        },
+        "buffer": {
+          "version": "4.9.1",
+          "bundled": true,
+          "requires": {
+            "base64-js": "1.2.1",
+            "ieee754": "1.1.8",
+            "isarray": "1.0.0"
+          }
+        },
+        "buffer-indexof": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "buffer-xor": {
+          "version": "1.0.3",
+          "bundled": true
+        },
+        "builtin-modules": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "builtin-status-codes": {
+          "version": "3.0.0",
+          "bundled": true
+        },
+        "bytes": {
+          "version": "2.5.0",
+          "bundled": true
+        },
+        "camelcase": {
+          "version": "2.1.1",
+          "bundled": true
+        },
+        "camelcase-keys": {
+          "version": "2.1.0",
+          "bundled": true,
+          "requires": {
+            "camelcase": "2.1.1",
+            "map-obj": "1.0.1"
+          }
+        },
+        "caniuse-api": {
+          "version": "1.6.1",
+          "bundled": true,
+          "requires": {
+            "browserslist": "1.7.7",
+            "caniuse-db": "1.0.30000738",
+            "lodash.memoize": "4.1.2",
+            "lodash.uniq": "4.5.0"
+          },
+          "dependencies": {
+            "browserslist": {
+              "version": "1.7.7",
+              "bundled": true,
+              "requires": {
+                "caniuse-db": "1.0.30000738",
+                "electron-to-chromium": "1.3.22"
+              }
+            }
+          }
+        },
+        "caniuse-db": {
+          "version": "1.0.30000738",
+          "bundled": true
+        },
+        "caniuse-lite": {
+          "version": "1.0.30000738",
+          "bundled": true
+        },
+        "caseless": {
+          "version": "0.12.0",
+          "bundled": true
+        },
+        "center-align": {
+          "version": "0.1.3",
+          "bundled": true,
+          "requires": {
+            "align-text": "0.1.4",
+            "lazy-cache": "1.0.4"
+          },
+          "dependencies": {
+            "lazy-cache": {
+              "version": "1.0.4",
+              "bundled": true
+            }
+          }
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "bundled": true,
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
+        "chokidar": {
+          "version": "1.7.0",
+          "bundled": true,
+          "requires": {
+            "anymatch": "1.3.2",
+            "async-each": "1.0.1",
+            "fsevents": "1.1.2",
+            "glob-parent": "2.0.0",
+            "inherits": "2.0.3",
+            "is-binary-path": "1.0.1",
+            "is-glob": "2.0.1",
+            "path-is-absolute": "1.0.1",
+            "readdirp": "2.1.0"
+          }
+        },
+        "cipher-base": {
+          "version": "1.0.4",
+          "bundled": true,
+          "requires": {
+            "inherits": "2.0.3",
+            "safe-buffer": "5.1.1"
+          }
+        },
+        "clap": {
+          "version": "1.2.3",
+          "bundled": true,
+          "requires": {
+            "chalk": "1.1.3"
+          }
+        },
+        "cliui": {
+          "version": "3.2.0",
+          "bundled": true,
+          "requires": {
+            "string-width": "1.0.2",
+            "strip-ansi": "3.0.1",
+            "wrap-ansi": "2.1.0"
+          }
+        },
+        "clone": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "clone-deep": {
+          "version": "0.3.0",
+          "bundled": true,
+          "requires": {
+            "for-own": "1.0.0",
+            "is-plain-object": "2.0.4",
+            "kind-of": "3.2.2",
+            "shallow-clone": "0.1.2"
+          },
+          "dependencies": {
+            "for-own": {
+              "version": "1.0.0",
+              "bundled": true,
+              "requires": {
+                "for-in": "1.0.2"
+              }
+            }
+          }
+        },
+        "co": {
+          "version": "4.6.0",
+          "bundled": true
+        },
+        "coa": {
+          "version": "1.0.4",
+          "bundled": true,
+          "requires": {
+            "q": "1.5.0"
+          }
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "color": {
+          "version": "0.11.4",
+          "bundled": true,
+          "requires": {
+            "clone": "1.0.2",
+            "color-convert": "1.9.0",
+            "color-string": "0.3.0"
+          }
+        },
+        "color-convert": {
+          "version": "1.9.0",
+          "bundled": true,
+          "requires": {
+            "color-name": "1.1.3"
+          }
+        },
+        "color-name": {
+          "version": "1.1.3",
+          "bundled": true
+        },
+        "color-string": {
+          "version": "0.3.0",
+          "bundled": true,
+          "requires": {
+            "color-name": "1.1.3"
+          }
+        },
+        "colormin": {
+          "version": "1.1.2",
+          "bundled": true,
+          "requires": {
+            "color": "0.11.4",
+            "css-color-names": "0.0.4",
+            "has": "1.0.1"
+          }
+        },
+        "colors": {
+          "version": "1.1.2",
+          "bundled": true
+        },
+        "combined-stream": {
+          "version": "1.0.5",
+          "bundled": true,
+          "requires": {
+            "delayed-stream": "1.0.0"
+          }
+        },
+        "commander": {
+          "version": "2.11.0",
+          "bundled": true
+        },
+        "commondir": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "compressible": {
+          "version": "2.0.11",
+          "bundled": true,
+          "requires": {
+            "mime-db": "1.30.0"
+          }
+        },
+        "compression": {
+          "version": "1.7.0",
+          "bundled": true,
+          "requires": {
+            "accepts": "1.3.4",
+            "bytes": "2.5.0",
+            "compressible": "2.0.11",
+            "debug": "2.6.8",
+            "on-headers": "1.0.1",
+            "safe-buffer": "5.1.1",
+            "vary": "1.1.2"
+          },
+          "dependencies": {
+            "debug": {
+              "version": "2.6.8",
+              "bundled": true,
+              "requires": {
+                "ms": "2.0.0"
+              }
+            }
+          }
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "config-chain": {
+          "version": "1.1.11",
+          "bundled": true,
+          "requires": {
+            "ini": "1.3.4",
+            "proto-list": "1.2.4"
+          }
+        },
+        "connect-history-api-fallback": {
+          "version": "1.3.0",
+          "bundled": true
+        },
+        "console-browserify": {
+          "version": "1.1.0",
+          "bundled": true,
+          "requires": {
+            "date-now": "0.1.4"
+          }
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "consolidate": {
+          "version": "0.14.5",
+          "bundled": true,
+          "requires": {
+            "bluebird": "3.5.0"
+          }
+        },
+        "constants-browserify": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "content-disposition": {
+          "version": "0.5.2",
+          "bundled": true
+        },
+        "content-type": {
+          "version": "1.0.4",
+          "bundled": true
+        },
+        "convert-source-map": {
+          "version": "1.5.0",
+          "bundled": true,
+          "dev": true
+        },
+        "cookie": {
+          "version": "0.3.1",
+          "bundled": true
+        },
+        "cookie-signature": {
+          "version": "1.0.6",
+          "bundled": true
+        },
+        "core-js": {
+          "version": "2.5.1",
+          "bundled": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "cosmiconfig": {
+          "version": "2.2.2",
+          "bundled": true,
+          "requires": {
+            "is-directory": "0.3.1",
+            "js-yaml": "3.7.0",
+            "minimist": "1.2.0",
+            "object-assign": "4.1.1",
+            "os-homedir": "1.0.2",
+            "parse-json": "2.2.0",
+            "require-from-string": "1.2.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true
+            }
+          }
+        },
+        "create-ecdh": {
+          "version": "4.0.0",
+          "bundled": true,
+          "requires": {
+            "bn.js": "4.11.8",
+            "elliptic": "6.4.0"
+          }
+        },
+        "create-hash": {
+          "version": "1.1.3",
+          "bundled": true,
+          "requires": {
+            "cipher-base": "1.0.4",
+            "inherits": "2.0.3",
+            "ripemd160": "2.0.1",
+            "sha.js": "2.4.9"
+          }
+        },
+        "create-hmac": {
+          "version": "1.1.6",
+          "bundled": true,
+          "requires": {
+            "cipher-base": "1.0.4",
+            "create-hash": "1.1.3",
+            "inherits": "2.0.3",
+            "ripemd160": "2.0.1",
+            "safe-buffer": "5.1.1",
+            "sha.js": "2.4.9"
+          }
+        },
+        "cross-env": {
+          "version": "3.2.4",
+          "bundled": true,
+          "requires": {
+            "cross-spawn": "5.1.0",
+            "is-windows": "1.0.1"
+          }
+        },
+        "cross-spawn": {
+          "version": "5.1.0",
+          "bundled": true,
+          "requires": {
+            "lru-cache": "4.1.1",
+            "shebang-command": "1.2.0",
+            "which": "1.3.0"
+          }
+        },
+        "cryptiles": {
+          "version": "3.1.2",
+          "bundled": true,
+          "requires": {
+            "boom": "5.2.0"
+          },
+          "dependencies": {
+            "boom": {
+              "version": "5.2.0",
+              "bundled": true,
+              "requires": {
+                "hoek": "4.2.0"
+              }
+            }
+          }
+        },
+        "crypto-browserify": {
+          "version": "3.11.1",
+          "bundled": true,
+          "requires": {
+            "browserify-cipher": "1.0.0",
+            "browserify-sign": "4.0.4",
+            "create-ecdh": "4.0.0",
+            "create-hash": "1.1.3",
+            "create-hmac": "1.1.6",
+            "diffie-hellman": "5.0.2",
+            "inherits": "2.0.3",
+            "pbkdf2": "3.0.14",
+            "public-encrypt": "4.0.0",
+            "randombytes": "2.0.5"
+          }
+        },
+        "css-color-names": {
+          "version": "0.0.4",
+          "bundled": true
+        },
+        "css-loader": {
+          "version": "0.25.0",
+          "bundled": true,
+          "requires": {
+            "babel-code-frame": "6.26.0",
+            "css-selector-tokenizer": "0.6.0",
+            "cssnano": "3.10.0",
+            "loader-utils": "0.2.17",
+            "lodash.camelcase": "3.0.1",
+            "object-assign": "4.1.1",
+            "postcss": "5.2.17",
+            "postcss-modules-extract-imports": "1.1.0",
+            "postcss-modules-local-by-default": "1.2.0",
+            "postcss-modules-scope": "1.1.0",
+            "postcss-modules-values": "1.3.0",
+            "source-list-map": "0.1.8"
+          }
+        },
+        "css-selector-tokenizer": {
+          "version": "0.6.0",
+          "bundled": true,
+          "requires": {
+            "cssesc": "0.1.0",
+            "fastparse": "1.1.1",
+            "regexpu-core": "1.0.0"
+          },
+          "dependencies": {
+            "regexpu-core": {
+              "version": "1.0.0",
+              "bundled": true,
+              "requires": {
+                "regenerate": "1.3.3",
+                "regjsgen": "0.2.0",
+                "regjsparser": "0.1.5"
+              }
+            }
+          }
+        },
+        "cssesc": {
+          "version": "0.1.0",
+          "bundled": true
+        },
+        "cssnano": {
+          "version": "3.10.0",
+          "bundled": true,
+          "requires": {
+            "autoprefixer": "6.7.7",
+            "decamelize": "1.2.0",
+            "defined": "1.0.0",
+            "has": "1.0.1",
+            "object-assign": "4.1.1",
+            "postcss": "5.2.17",
+            "postcss-calc": "5.3.1",
+            "postcss-colormin": "2.2.2",
+            "postcss-convert-values": "2.6.1",
+            "postcss-discard-comments": "2.0.4",
+            "postcss-discard-duplicates": "2.1.0",
+            "postcss-discard-empty": "2.1.0",
+            "postcss-discard-overridden": "0.1.1",
+            "postcss-discard-unused": "2.2.3",
+            "postcss-filter-plugins": "2.0.2",
+            "postcss-merge-idents": "2.1.7",
+            "postcss-merge-longhand": "2.0.2",
+            "postcss-merge-rules": "2.1.2",
+            "postcss-minify-font-values": "1.0.5",
+            "postcss-minify-gradients": "1.0.5",
+            "postcss-minify-params": "1.2.2",
+            "postcss-minify-selectors": "2.1.1",
+            "postcss-normalize-charset": "1.1.1",
+            "postcss-normalize-url": "3.0.8",
+            "postcss-ordered-values": "2.2.3",
+            "postcss-reduce-idents": "2.4.0",
+            "postcss-reduce-initial": "1.0.1",
+            "postcss-reduce-transforms": "1.0.4",
+            "postcss-svgo": "2.1.6",
+            "postcss-unique-selectors": "2.0.2",
+            "postcss-value-parser": "3.3.0",
+            "postcss-zindex": "2.2.0"
+          }
+        },
+        "csso": {
+          "version": "2.3.2",
+          "bundled": true,
+          "requires": {
+            "clap": "1.2.3",
+            "source-map": "0.5.7"
+          }
+        },
+        "currently-unhandled": {
+          "version": "0.4.1",
+          "bundled": true,
+          "requires": {
+            "array-find-index": "1.0.2"
+          }
+        },
+        "d": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "es5-ext": "0.10.30"
+          }
+        },
+        "dashdash": {
+          "version": "1.14.1",
+          "bundled": true,
+          "requires": {
+            "assert-plus": "1.0.0"
+          }
+        },
+        "date-now": {
+          "version": "0.1.4",
+          "bundled": true
+        },
+        "de-indent": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "bundled": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "decamelize": {
+          "version": "1.2.0",
+          "bundled": true
+        },
+        "deep-equal": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "default-gateway": {
+          "version": "2.5.0",
+          "bundled": true,
+          "requires": {
+            "execa": "0.7.0",
+            "ip-regex": "2.1.0"
+          }
+        },
+        "define-properties": {
+          "version": "1.1.2",
+          "bundled": true,
+          "requires": {
+            "foreach": "2.0.5",
+            "object-keys": "1.0.11"
+          }
+        },
+        "defined": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "del": {
+          "version": "3.0.0",
+          "bundled": true,
+          "requires": {
+            "globby": "6.1.0",
+            "is-path-cwd": "1.0.0",
+            "is-path-in-cwd": "1.0.0",
+            "p-map": "1.2.0",
+            "pify": "3.0.0",
+            "rimraf": "2.6.2"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "bundled": true
+            }
+          }
+        },
+        "delayed-stream": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "depd": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "des.js": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "inherits": "2.0.3",
+            "minimalistic-assert": "1.0.0"
+          }
+        },
+        "destroy": {
+          "version": "1.0.4",
+          "bundled": true
+        },
+        "detect-indent": {
+          "version": "4.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "repeating": "2.0.1"
+          }
+        },
+        "detect-node": {
+          "version": "2.0.3",
+          "bundled": true
+        },
+        "diffie-hellman": {
+          "version": "5.0.2",
+          "bundled": true,
+          "requires": {
+            "bn.js": "4.11.8",
+            "miller-rabin": "4.0.0",
+            "randombytes": "2.0.5"
+          }
+        },
+        "dns-equal": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "dns-packet": {
+          "version": "1.2.2",
+          "bundled": true,
+          "requires": {
+            "ip": "1.1.5",
+            "safe-buffer": "5.1.1"
+          }
+        },
+        "dns-txt": {
+          "version": "2.0.2",
+          "bundled": true,
+          "requires": {
+            "buffer-indexof": "1.1.1"
+          }
+        },
+        "domain-browser": {
+          "version": "1.1.7",
+          "bundled": true
+        },
+        "ecc-jsbn": {
+          "version": "0.1.1",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "jsbn": "0.1.1"
+          }
+        },
+        "editorconfig": {
+          "version": "0.13.3",
+          "bundled": true,
+          "requires": {
+            "bluebird": "3.5.0",
+            "commander": "2.11.0",
+            "lru-cache": "3.2.0",
+            "semver": "5.4.1",
+            "sigmund": "1.0.1"
+          },
+          "dependencies": {
+            "lru-cache": {
+              "version": "3.2.0",
+              "bundled": true,
+              "requires": {
+                "pseudomap": "1.0.2"
+              }
+            }
+          }
+        },
+        "ee-first": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "electron-to-chromium": {
+          "version": "1.3.22",
+          "bundled": true
+        },
+        "elliptic": {
+          "version": "6.4.0",
+          "bundled": true,
+          "requires": {
+            "bn.js": "4.11.8",
+            "brorand": "1.1.0",
+            "hash.js": "1.1.3",
+            "hmac-drbg": "1.0.1",
+            "inherits": "2.0.3",
+            "minimalistic-assert": "1.0.0",
+            "minimalistic-crypto-utils": "1.0.1"
+          }
+        },
+        "emojis-list": {
+          "version": "2.1.0",
+          "bundled": true
+        },
+        "encodeurl": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "enhanced-resolve": {
+          "version": "3.4.1",
+          "bundled": true,
+          "requires": {
+            "graceful-fs": "4.1.11",
+            "memory-fs": "0.4.1",
+            "object-assign": "4.1.1",
+            "tapable": "0.2.8"
+          }
+        },
+        "errno": {
+          "version": "0.1.4",
+          "bundled": true,
+          "requires": {
+            "prr": "0.0.0"
+          }
+        },
+        "error-ex": {
+          "version": "1.3.1",
+          "bundled": true,
+          "requires": {
+            "is-arrayish": "0.2.1"
+          }
+        },
+        "es-abstract": {
+          "version": "1.8.2",
+          "bundled": true,
+          "requires": {
+            "es-to-primitive": "1.1.1",
+            "function-bind": "1.1.1",
+            "has": "1.0.1",
+            "is-callable": "1.1.3",
+            "is-regex": "1.0.4"
+          }
+        },
+        "es-to-primitive": {
+          "version": "1.1.1",
+          "bundled": true,
+          "requires": {
+            "is-callable": "1.1.3",
+            "is-date-object": "1.0.1",
+            "is-symbol": "1.0.1"
+          }
+        },
+        "es5-ext": {
+          "version": "0.10.30",
+          "bundled": true,
+          "requires": {
+            "es6-iterator": "2.0.1",
+            "es6-symbol": "3.1.1"
+          }
+        },
+        "es6-iterator": {
+          "version": "2.0.1",
+          "bundled": true,
+          "requires": {
+            "d": "1.0.0",
+            "es5-ext": "0.10.30",
+            "es6-symbol": "3.1.1"
+          }
+        },
+        "es6-map": {
+          "version": "0.1.5",
+          "bundled": true,
+          "requires": {
+            "d": "1.0.0",
+            "es5-ext": "0.10.30",
+            "es6-iterator": "2.0.1",
+            "es6-set": "0.1.5",
+            "es6-symbol": "3.1.1",
+            "event-emitter": "0.3.5"
+          }
+        },
+        "es6-set": {
+          "version": "0.1.5",
+          "bundled": true,
+          "requires": {
+            "d": "1.0.0",
+            "es5-ext": "0.10.30",
+            "es6-iterator": "2.0.1",
+            "es6-symbol": "3.1.1",
+            "event-emitter": "0.3.5"
+          }
+        },
+        "es6-symbol": {
+          "version": "3.1.1",
+          "bundled": true,
+          "requires": {
+            "d": "1.0.0",
+            "es5-ext": "0.10.30"
+          }
+        },
+        "es6-weak-map": {
+          "version": "2.0.2",
+          "bundled": true,
+          "requires": {
+            "d": "1.0.0",
+            "es5-ext": "0.10.30",
+            "es6-iterator": "2.0.1",
+            "es6-symbol": "3.1.1"
+          }
+        },
+        "escape-html": {
+          "version": "1.0.3",
+          "bundled": true
+        },
+        "escape-string-regexp": {
+          "version": "1.0.5",
+          "bundled": true
+        },
+        "escope": {
+          "version": "3.6.0",
+          "bundled": true,
+          "requires": {
+            "es6-map": "0.1.5",
+            "es6-weak-map": "2.0.2",
+            "esrecurse": "4.2.0",
+            "estraverse": "4.2.0"
+          }
+        },
+        "esprima": {
+          "version": "2.7.3",
+          "bundled": true
+        },
+        "esrecurse": {
+          "version": "4.2.0",
+          "bundled": true,
+          "requires": {
+            "estraverse": "4.2.0",
+            "object-assign": "4.1.1"
+          }
+        },
+        "estraverse": {
+          "version": "4.2.0",
+          "bundled": true
+        },
+        "esutils": {
+          "version": "2.0.2",
+          "bundled": true
+        },
+        "etag": {
+          "version": "1.8.1",
+          "bundled": true
+        },
+        "event-emitter": {
+          "version": "0.3.5",
+          "bundled": true,
+          "requires": {
+            "d": "1.0.0",
+            "es5-ext": "0.10.30"
+          }
+        },
+        "eventemitter3": {
+          "version": "1.2.0",
+          "bundled": true
+        },
+        "events": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "eventsource": {
+          "version": "0.1.6",
+          "bundled": true,
+          "requires": {
+            "original": "1.0.0"
+          }
+        },
+        "evp_bytestokey": {
+          "version": "1.0.3",
+          "bundled": true,
+          "requires": {
+            "md5.js": "1.3.4",
+            "safe-buffer": "5.1.1"
+          }
+        },
+        "execa": {
+          "version": "0.7.0",
+          "bundled": true,
+          "requires": {
+            "cross-spawn": "5.1.0",
+            "get-stream": "3.0.0",
+            "is-stream": "1.1.0",
+            "npm-run-path": "2.0.2",
+            "p-finally": "1.0.0",
+            "signal-exit": "3.0.2",
+            "strip-eof": "1.0.0"
+          }
+        },
+        "expand-brackets": {
+          "version": "0.1.5",
+          "bundled": true,
+          "requires": {
+            "is-posix-bracket": "0.1.1"
+          }
+        },
+        "expand-range": {
+          "version": "1.8.2",
+          "bundled": true,
+          "requires": {
+            "fill-range": "2.2.3"
+          }
+        },
+        "express": {
+          "version": "4.15.5",
+          "bundled": true,
+          "requires": {
+            "accepts": "1.3.4",
+            "array-flatten": "1.1.1",
+            "content-disposition": "0.5.2",
+            "content-type": "1.0.4",
+            "cookie": "0.3.1",
+            "cookie-signature": "1.0.6",
+            "debug": "2.6.9",
+            "depd": "1.1.1",
+            "encodeurl": "1.0.1",
+            "escape-html": "1.0.3",
+            "etag": "1.8.1",
+            "finalhandler": "1.0.6",
+            "fresh": "0.5.2",
+            "merge-descriptors": "1.0.1",
+            "methods": "1.1.2",
+            "on-finished": "2.3.0",
+            "parseurl": "1.3.2",
+            "path-to-regexp": "0.1.7",
+            "proxy-addr": "1.1.5",
+            "qs": "6.5.0",
+            "range-parser": "1.2.0",
+            "send": "0.15.6",
+            "serve-static": "1.12.6",
+            "setprototypeof": "1.0.3",
+            "statuses": "1.3.1",
+            "type-is": "1.6.15",
+            "utils-merge": "1.0.0",
+            "vary": "1.1.2"
+          },
+          "dependencies": {
+            "array-flatten": {
+              "version": "1.1.1",
+              "bundled": true
+            }
+          }
+        },
+        "extend": {
+          "version": "3.0.1",
+          "bundled": true
+        },
+        "extglob": {
+          "version": "0.3.2",
+          "bundled": true,
+          "requires": {
+            "is-extglob": "1.0.0"
+          }
+        },
+        "extract-text-webpack-plugin": {
+          "version": "3.0.0",
+          "bundled": true,
+          "requires": {
+            "async": "2.5.0",
+            "loader-utils": "1.1.0",
+            "schema-utils": "0.3.0",
+            "webpack-sources": "1.0.1"
+          },
+          "dependencies": {
+            "loader-utils": {
+              "version": "1.1.0",
+              "bundled": true,
+              "requires": {
+                "big.js": "3.2.0",
+                "emojis-list": "2.1.0",
+                "json5": "0.5.1"
+              }
+            }
+          }
+        },
+        "extsprintf": {
+          "version": "1.3.0",
+          "bundled": true
+        },
+        "fast-deep-equal": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "fastparse": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "faye-websocket": {
+          "version": "0.10.0",
+          "bundled": true,
+          "requires": {
+            "websocket-driver": "0.7.0"
+          }
+        },
+        "file-loader": {
+          "version": "0.9.0",
+          "bundled": true,
+          "requires": {
+            "loader-utils": "0.2.17"
+          }
+        },
+        "filename-regex": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "fill-range": {
+          "version": "2.2.3",
+          "bundled": true,
+          "requires": {
+            "is-number": "2.1.0",
+            "isobject": "2.1.0",
+            "randomatic": "1.1.7",
+            "repeat-element": "1.1.2",
+            "repeat-string": "1.6.1"
+          }
+        },
+        "finalhandler": {
+          "version": "1.0.6",
+          "bundled": true,
+          "requires": {
+            "debug": "2.6.9",
+            "encodeurl": "1.0.1",
+            "escape-html": "1.0.3",
+            "on-finished": "2.3.0",
+            "parseurl": "1.3.2",
+            "statuses": "1.3.1",
+            "unpipe": "1.0.0"
+          }
+        },
+        "find-cache-dir": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "commondir": "1.0.1",
+            "make-dir": "1.0.0",
+            "pkg-dir": "2.0.0"
+          }
+        },
+        "find-up": {
+          "version": "1.1.2",
+          "bundled": true,
+          "requires": {
+            "path-exists": "2.1.0",
+            "pinkie-promise": "2.0.1"
+          }
+        },
+        "flatten": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "for-in": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "for-own": {
+          "version": "0.1.5",
+          "bundled": true,
+          "requires": {
+            "for-in": "1.0.2"
+          }
+        },
+        "foreach": {
+          "version": "2.0.5",
+          "bundled": true
+        },
+        "forever-agent": {
+          "version": "0.6.1",
+          "bundled": true
+        },
+        "form-data": {
+          "version": "2.3.1",
+          "bundled": true,
+          "requires": {
+            "asynckit": "0.4.0",
+            "combined-stream": "1.0.5",
+            "mime-types": "2.1.17"
+          }
+        },
+        "forwarded": {
+          "version": "0.1.2",
+          "bundled": true
+        },
+        "fresh": {
+          "version": "0.5.2",
+          "bundled": true
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "fsevents": {
+          "version": "1.1.2",
+          "bundled": true,
+          "optional": true,
+          "requires": {
+            "nan": "2.7.0",
+            "node-pre-gyp": "0.6.36"
+          },
+          "dependencies": {
+            "abbrev": {
+              "version": "1.1.0",
+              "bundled": true,
+              "optional": true
+            },
+            "ajv": {
+              "version": "4.11.8",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "co": "4.6.0",
+                "json-stable-stringify": "1.0.1"
+              }
+            },
+            "ansi-regex": {
+              "version": "2.1.1",
+              "bundled": true
+            },
+            "aproba": {
+              "version": "1.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "are-we-there-yet": {
+              "version": "1.1.4",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "delegates": "1.0.0",
+                "readable-stream": "2.2.9"
+              }
+            },
+            "asn1": {
+              "version": "0.2.3",
+              "bundled": true,
+              "optional": true
+            },
+            "assert-plus": {
+              "version": "0.2.0",
+              "bundled": true,
+              "optional": true
+            },
+            "asynckit": {
+              "version": "0.4.0",
+              "bundled": true,
+              "optional": true
+            },
+            "aws-sign2": {
+              "version": "0.6.0",
+              "bundled": true,
+              "optional": true
+            },
+            "aws4": {
+              "version": "1.6.0",
+              "bundled": true,
+              "optional": true
+            },
+            "balanced-match": {
+              "version": "0.4.2",
+              "bundled": true
+            },
+            "bcrypt-pbkdf": {
+              "version": "1.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "tweetnacl": "0.14.5"
+              }
+            },
+            "block-stream": {
+              "version": "0.0.9",
+              "bundled": true,
+              "requires": {
+                "inherits": "2.0.3"
+              }
+            },
+            "boom": {
+              "version": "2.10.1",
+              "bundled": true,
+              "requires": {
+                "hoek": "2.16.3"
+              }
+            },
+            "brace-expansion": {
+              "version": "1.1.7",
+              "bundled": true,
+              "requires": {
+                "balanced-match": "0.4.2",
+                "concat-map": "0.0.1"
+              }
+            },
+            "buffer-shims": {
+              "version": "1.0.0",
+              "bundled": true
+            },
+            "caseless": {
+              "version": "0.12.0",
+              "bundled": true,
+              "optional": true
+            },
+            "co": {
+              "version": "4.6.0",
+              "bundled": true,
+              "optional": true
+            },
+            "code-point-at": {
+              "version": "1.1.0",
+              "bundled": true
+            },
+            "combined-stream": {
+              "version": "1.0.5",
+              "bundled": true,
+              "requires": {
+                "delayed-stream": "1.0.0"
+              }
+            },
+            "concat-map": {
+              "version": "0.0.1",
+              "bundled": true
+            },
+            "console-control-strings": {
+              "version": "1.1.0",
+              "bundled": true
+            },
+            "core-util-is": {
+              "version": "1.0.2",
+              "bundled": true
+            },
+            "cryptiles": {
+              "version": "2.0.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "boom": "2.10.1"
+              }
+            },
+            "dashdash": {
+              "version": "1.14.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "assert-plus": "1.0.0"
+              },
+              "dependencies": {
+                "assert-plus": {
+                  "version": "1.0.0",
+                  "bundled": true,
+                  "optional": true
+                }
+              }
+            },
+            "debug": {
+              "version": "2.6.8",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ms": "2.0.0"
+              }
+            },
+            "deep-extend": {
+              "version": "0.4.2",
+              "bundled": true,
+              "optional": true
+            },
+            "delayed-stream": {
+              "version": "1.0.0",
+              "bundled": true
+            },
+            "delegates": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "ecc-jsbn": {
+              "version": "0.1.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "jsbn": "0.1.1"
+              }
+            },
+            "extend": {
+              "version": "3.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "extsprintf": {
+              "version": "1.0.2",
+              "bundled": true
+            },
+            "forever-agent": {
+              "version": "0.6.1",
+              "bundled": true,
+              "optional": true
+            },
+            "form-data": {
+              "version": "2.1.4",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "asynckit": "0.4.0",
+                "combined-stream": "1.0.5",
+                "mime-types": "2.1.15"
+              }
+            },
+            "fs.realpath": {
+              "version": "1.0.0",
+              "bundled": true
+            },
+            "fstream": {
+              "version": "1.0.11",
+              "bundled": true,
+              "requires": {
+                "graceful-fs": "4.1.11",
+                "inherits": "2.0.3",
+                "mkdirp": "0.5.1",
+                "rimraf": "2.6.1"
+              }
+            },
+            "fstream-ignore": {
+              "version": "1.0.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "fstream": "1.0.11",
+                "inherits": "2.0.3",
+                "minimatch": "3.0.4"
+              }
+            },
+            "gauge": {
+              "version": "2.7.4",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "aproba": "1.1.1",
+                "console-control-strings": "1.1.0",
+                "has-unicode": "2.0.1",
+                "object-assign": "4.1.1",
+                "signal-exit": "3.0.2",
+                "string-width": "1.0.2",
+                "strip-ansi": "3.0.1",
+                "wide-align": "1.1.2"
+              }
+            },
+            "getpass": {
+              "version": "0.1.7",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "assert-plus": "1.0.0"
+              },
+              "dependencies": {
+                "assert-plus": {
+                  "version": "1.0.0",
+                  "bundled": true,
+                  "optional": true
+                }
+              }
+            },
+            "glob": {
+              "version": "7.1.2",
+              "bundled": true,
+              "requires": {
+                "fs.realpath": "1.0.0",
+                "inflight": "1.0.6",
+                "inherits": "2.0.3",
+                "minimatch": "3.0.4",
+                "once": "1.4.0",
+                "path-is-absolute": "1.0.1"
+              }
+            },
+            "graceful-fs": {
+              "version": "4.1.11",
+              "bundled": true
+            },
+            "har-schema": {
+              "version": "1.0.5",
+              "bundled": true,
+              "optional": true
+            },
+            "har-validator": {
+              "version": "4.2.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ajv": "4.11.8",
+                "har-schema": "1.0.5"
+              }
+            },
+            "has-unicode": {
+              "version": "2.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "hawk": {
+              "version": "3.1.3",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "boom": "2.10.1",
+                "cryptiles": "2.0.5",
+                "hoek": "2.16.3",
+                "sntp": "1.0.9"
+              }
+            },
+            "hoek": {
+              "version": "2.16.3",
+              "bundled": true
+            },
+            "http-signature": {
+              "version": "1.1.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "assert-plus": "0.2.0",
+                "jsprim": "1.4.0",
+                "sshpk": "1.13.0"
+              }
+            },
+            "inflight": {
+              "version": "1.0.6",
+              "bundled": true,
+              "requires": {
+                "once": "1.4.0",
+                "wrappy": "1.0.2"
+              }
+            },
+            "inherits": {
+              "version": "2.0.3",
+              "bundled": true
+            },
+            "ini": {
+              "version": "1.3.4",
+              "bundled": true,
+              "optional": true
+            },
+            "is-fullwidth-code-point": {
+              "version": "1.0.0",
+              "bundled": true,
+              "requires": {
+                "number-is-nan": "1.0.1"
+              }
+            },
+            "is-typedarray": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "isarray": {
+              "version": "1.0.0",
+              "bundled": true
+            },
+            "isstream": {
+              "version": "0.1.2",
+              "bundled": true,
+              "optional": true
+            },
+            "jodid25519": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "jsbn": "0.1.1"
+              }
+            },
+            "jsbn": {
+              "version": "0.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "json-schema": {
+              "version": "0.2.3",
+              "bundled": true,
+              "optional": true
+            },
+            "json-stable-stringify": {
+              "version": "1.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "jsonify": "0.0.0"
+              }
+            },
+            "json-stringify-safe": {
+              "version": "5.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "jsonify": {
+              "version": "0.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "jsprim": {
+              "version": "1.4.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "assert-plus": "1.0.0",
+                "extsprintf": "1.0.2",
+                "json-schema": "0.2.3",
+                "verror": "1.3.6"
+              },
+              "dependencies": {
+                "assert-plus": {
+                  "version": "1.0.0",
+                  "bundled": true,
+                  "optional": true
+                }
+              }
+            },
+            "mime-db": {
+              "version": "1.27.0",
+              "bundled": true
+            },
+            "mime-types": {
+              "version": "2.1.15",
+              "bundled": true,
+              "requires": {
+                "mime-db": "1.27.0"
+              }
+            },
+            "minimatch": {
+              "version": "3.0.4",
+              "bundled": true,
+              "requires": {
+                "brace-expansion": "1.1.7"
+              }
+            },
+            "minimist": {
+              "version": "0.0.8",
+              "bundled": true
+            },
+            "mkdirp": {
+              "version": "0.5.1",
+              "bundled": true,
+              "requires": {
+                "minimist": "0.0.8"
+              }
+            },
+            "ms": {
+              "version": "2.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "node-pre-gyp": {
+              "version": "0.6.36",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "mkdirp": "0.5.1",
+                "nopt": "4.0.1",
+                "npmlog": "4.1.0",
+                "rc": "1.2.1",
+                "request": "2.81.0",
+                "rimraf": "2.6.1",
+                "semver": "5.3.0",
+                "tar": "2.2.1",
+                "tar-pack": "3.4.0"
+              }
+            },
+            "nopt": {
+              "version": "4.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "abbrev": "1.1.0",
+                "osenv": "0.1.4"
+              }
+            },
+            "npmlog": {
+              "version": "4.1.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "are-we-there-yet": "1.1.4",
+                "console-control-strings": "1.1.0",
+                "gauge": "2.7.4",
+                "set-blocking": "2.0.0"
+              }
+            },
+            "number-is-nan": {
+              "version": "1.0.1",
+              "bundled": true
+            },
+            "oauth-sign": {
+              "version": "0.8.2",
+              "bundled": true,
+              "optional": true
+            },
+            "object-assign": {
+              "version": "4.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "once": {
+              "version": "1.4.0",
+              "bundled": true,
+              "requires": {
+                "wrappy": "1.0.2"
+              }
+            },
+            "os-homedir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "os-tmpdir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "osenv": {
+              "version": "0.1.4",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "os-homedir": "1.0.2",
+                "os-tmpdir": "1.0.2"
+              }
+            },
+            "path-is-absolute": {
+              "version": "1.0.1",
+              "bundled": true
+            },
+            "performance-now": {
+              "version": "0.2.0",
+              "bundled": true,
+              "optional": true
+            },
+            "process-nextick-args": {
+              "version": "1.0.7",
+              "bundled": true
+            },
+            "punycode": {
+              "version": "1.4.1",
+              "bundled": true,
+              "optional": true
+            },
+            "qs": {
+              "version": "6.4.0",
+              "bundled": true,
+              "optional": true
+            },
+            "rc": {
+              "version": "1.2.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "deep-extend": "0.4.2",
+                "ini": "1.3.4",
+                "minimist": "1.2.0",
+                "strip-json-comments": "2.0.1"
+              },
+              "dependencies": {
+                "minimist": {
+                  "version": "1.2.0",
+                  "bundled": true,
+                  "optional": true
+                }
+              }
+            },
+            "readable-stream": {
+              "version": "2.2.9",
+              "bundled": true,
+              "requires": {
+                "buffer-shims": "1.0.0",
+                "core-util-is": "1.0.2",
+                "inherits": "2.0.3",
+                "isarray": "1.0.0",
+                "process-nextick-args": "1.0.7",
+                "string_decoder": "1.0.1",
+                "util-deprecate": "1.0.2"
+              }
+            },
+            "request": {
+              "version": "2.81.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "aws-sign2": "0.6.0",
+                "aws4": "1.6.0",
+                "caseless": "0.12.0",
+                "combined-stream": "1.0.5",
+                "extend": "3.0.1",
+                "forever-agent": "0.6.1",
+                "form-data": "2.1.4",
+                "har-validator": "4.2.1",
+                "hawk": "3.1.3",
+                "http-signature": "1.1.1",
+                "is-typedarray": "1.0.0",
+                "isstream": "0.1.2",
+                "json-stringify-safe": "5.0.1",
+                "mime-types": "2.1.15",
+                "oauth-sign": "0.8.2",
+                "performance-now": "0.2.0",
+                "qs": "6.4.0",
+                "safe-buffer": "5.0.1",
+                "stringstream": "0.0.5",
+                "tough-cookie": "2.3.2",
+                "tunnel-agent": "0.6.0",
+                "uuid": "3.0.1"
+              }
+            },
+            "rimraf": {
+              "version": "2.6.1",
+              "bundled": true,
+              "requires": {
+                "glob": "7.1.2"
+              }
+            },
+            "safe-buffer": {
+              "version": "5.0.1",
+              "bundled": true
+            },
+            "semver": {
+              "version": "5.3.0",
+              "bundled": true,
+              "optional": true
+            },
+            "set-blocking": {
+              "version": "2.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "signal-exit": {
+              "version": "3.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "sntp": {
+              "version": "1.0.9",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "hoek": "2.16.3"
+              }
+            },
+            "sshpk": {
+              "version": "1.13.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "asn1": "0.2.3",
+                "assert-plus": "1.0.0",
+                "bcrypt-pbkdf": "1.0.1",
+                "dashdash": "1.14.1",
+                "ecc-jsbn": "0.1.1",
+                "getpass": "0.1.7",
+                "jodid25519": "1.0.2",
+                "jsbn": "0.1.1",
+                "tweetnacl": "0.14.5"
+              },
+              "dependencies": {
+                "assert-plus": {
+                  "version": "1.0.0",
+                  "bundled": true,
+                  "optional": true
+                }
+              }
+            },
+            "string_decoder": {
+              "version": "1.0.1",
+              "bundled": true,
+              "requires": {
+                "safe-buffer": "5.0.1"
+              }
+            },
+            "string-width": {
+              "version": "1.0.2",
+              "bundled": true,
+              "requires": {
+                "code-point-at": "1.1.0",
+                "is-fullwidth-code-point": "1.0.0",
+                "strip-ansi": "3.0.1"
+              }
+            },
+            "stringstream": {
+              "version": "0.0.5",
+              "bundled": true,
+              "optional": true
+            },
+            "strip-ansi": {
+              "version": "3.0.1",
+              "bundled": true,
+              "requires": {
+                "ansi-regex": "2.1.1"
+              }
+            },
+            "strip-json-comments": {
+              "version": "2.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "tar": {
+              "version": "2.2.1",
+              "bundled": true,
+              "requires": {
+                "block-stream": "0.0.9",
+                "fstream": "1.0.11",
+                "inherits": "2.0.3"
+              }
+            },
+            "tar-pack": {
+              "version": "3.4.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "debug": "2.6.8",
+                "fstream": "1.0.11",
+                "fstream-ignore": "1.0.5",
+                "once": "1.4.0",
+                "readable-stream": "2.2.9",
+                "rimraf": "2.6.1",
+                "tar": "2.2.1",
+                "uid-number": "0.0.6"
+              }
+            },
+            "tough-cookie": {
+              "version": "2.3.2",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "punycode": "1.4.1"
+              }
+            },
+            "tunnel-agent": {
+              "version": "0.6.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "safe-buffer": "5.0.1"
+              }
+            },
+            "tweetnacl": {
+              "version": "0.14.5",
+              "bundled": true,
+              "optional": true
+            },
+            "uid-number": {
+              "version": "0.0.6",
+              "bundled": true,
+              "optional": true
+            },
+            "util-deprecate": {
+              "version": "1.0.2",
+              "bundled": true
+            },
+            "uuid": {
+              "version": "3.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "verror": {
+              "version": "1.3.6",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "extsprintf": "1.0.2"
+              }
+            },
+            "wide-align": {
+              "version": "1.1.2",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "string-width": "1.0.2"
+              }
+            },
+            "wrappy": {
+              "version": "1.0.2",
+              "bundled": true
+            }
+          }
+        },
+        "fstream": {
+          "version": "1.0.11",
+          "bundled": true,
+          "requires": {
+            "graceful-fs": "4.1.11",
+            "inherits": "2.0.3",
+            "mkdirp": "0.5.1",
+            "rimraf": "2.6.2"
+          }
+        },
+        "function-bind": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "requires": {
+            "aproba": "1.2.0",
+            "console-control-strings": "1.1.0",
+            "has-unicode": "2.0.1",
+            "object-assign": "4.1.1",
+            "signal-exit": "3.0.2",
+            "string-width": "1.0.2",
+            "strip-ansi": "3.0.1",
+            "wide-align": "1.1.2"
+          }
+        },
+        "gaze": {
+          "version": "1.1.2",
+          "bundled": true,
+          "requires": {
+            "globule": "1.2.0"
+          }
+        },
+        "get-caller-file": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "get-stdin": {
+          "version": "4.0.1",
+          "bundled": true
+        },
+        "get-stream": {
+          "version": "3.0.0",
+          "bundled": true
+        },
+        "getpass": {
+          "version": "0.1.7",
+          "bundled": true,
+          "requires": {
+            "assert-plus": "1.0.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.2",
+          "bundled": true,
+          "requires": {
+            "fs.realpath": "1.0.0",
+            "inflight": "1.0.6",
+            "inherits": "2.0.3",
+            "minimatch": "3.0.4",
+            "once": "1.4.0",
+            "path-is-absolute": "1.0.1"
+          }
+        },
+        "glob-base": {
+          "version": "0.3.0",
+          "bundled": true,
+          "requires": {
+            "glob-parent": "2.0.0",
+            "is-glob": "2.0.1"
+          }
+        },
+        "glob-parent": {
+          "version": "2.0.0",
+          "bundled": true,
+          "requires": {
+            "is-glob": "2.0.1"
+          }
+        },
+        "globals": {
+          "version": "9.18.0",
+          "bundled": true
+        },
+        "globby": {
+          "version": "6.1.0",
+          "bundled": true,
+          "requires": {
+            "array-union": "1.0.2",
+            "glob": "7.1.2",
+            "object-assign": "4.1.1",
+            "pify": "2.3.0",
+            "pinkie-promise": "2.0.1"
+          }
+        },
+        "globule": {
+          "version": "1.2.0",
+          "bundled": true,
+          "requires": {
+            "glob": "7.1.2",
+            "lodash": "4.17.4",
+            "minimatch": "3.0.4"
+          }
+        },
+        "graceful-fs": {
+          "version": "4.1.11",
+          "bundled": true
+        },
+        "handle-thing": {
+          "version": "1.2.5",
+          "bundled": true
+        },
+        "har-schema": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "har-validator": {
+          "version": "5.0.3",
+          "bundled": true,
+          "requires": {
+            "ajv": "5.2.3",
+            "har-schema": "2.0.0"
+          }
+        },
+        "has": {
+          "version": "1.0.1",
+          "bundled": true,
+          "requires": {
+            "function-bind": "1.1.1"
+          }
+        },
+        "has-ansi": {
+          "version": "2.0.0",
+          "bundled": true,
+          "requires": {
+            "ansi-regex": "2.1.1"
+          }
+        },
+        "has-flag": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "hash-base": {
+          "version": "2.0.2",
+          "bundled": true,
+          "requires": {
+            "inherits": "2.0.3"
+          }
+        },
+        "hash-sum": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "hash.js": {
+          "version": "1.1.3",
+          "bundled": true,
+          "requires": {
+            "inherits": "2.0.3",
+            "minimalistic-assert": "1.0.0"
+          }
+        },
+        "hawk": {
+          "version": "6.0.2",
+          "bundled": true,
+          "requires": {
+            "boom": "4.3.1",
+            "cryptiles": "3.1.2",
+            "hoek": "4.2.0",
+            "sntp": "2.0.2"
+          }
+        },
+        "he": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "hmac-drbg": {
+          "version": "1.0.1",
+          "bundled": true,
+          "requires": {
+            "hash.js": "1.1.3",
+            "minimalistic-assert": "1.0.0",
+            "minimalistic-crypto-utils": "1.0.1"
+          }
+        },
+        "hoek": {
+          "version": "4.2.0",
+          "bundled": true
+        },
+        "home-or-tmp": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "os-homedir": "1.0.2",
+            "os-tmpdir": "1.0.2"
+          }
+        },
+        "hosted-git-info": {
+          "version": "2.5.0",
+          "bundled": true
+        },
+        "hpack.js": {
+          "version": "2.1.6",
+          "bundled": true,
+          "requires": {
+            "inherits": "2.0.3",
+            "obuf": "1.1.1",
+            "readable-stream": "2.3.3",
+            "wbuf": "1.7.2"
+          }
+        },
+        "html-comment-regex": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "html-entities": {
+          "version": "1.2.1",
+          "bundled": true
+        },
+        "http-deceiver": {
+          "version": "1.2.7",
+          "bundled": true
+        },
+        "http-errors": {
+          "version": "1.6.2",
+          "bundled": true,
+          "requires": {
+            "depd": "1.1.1",
+            "inherits": "2.0.3",
+            "setprototypeof": "1.0.3",
+            "statuses": "1.3.1"
+          }
+        },
+        "http-parser-js": {
+          "version": "0.4.8",
+          "bundled": true
+        },
+        "http-proxy": {
+          "version": "1.16.2",
+          "bundled": true,
+          "requires": {
+            "eventemitter3": "1.2.0",
+            "requires-port": "1.0.0"
+          }
+        },
+        "http-proxy-middleware": {
+          "version": "0.17.4",
+          "bundled": true,
+          "requires": {
+            "http-proxy": "1.16.2",
+            "is-glob": "3.1.0",
+            "lodash": "4.17.4",
+            "micromatch": "2.3.11"
+          },
+          "dependencies": {
+            "is-extglob": {
+              "version": "2.1.1",
+              "bundled": true
+            },
+            "is-glob": {
+              "version": "3.1.0",
+              "bundled": true,
+              "requires": {
+                "is-extglob": "2.1.1"
+              }
+            }
+          }
+        },
+        "http-signature": {
+          "version": "1.2.0",
+          "bundled": true,
+          "requires": {
+            "assert-plus": "1.0.0",
+            "jsprim": "1.4.1",
+            "sshpk": "1.13.1"
+          }
+        },
+        "https-browserify": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "icss-replace-symbols": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "ieee754": {
+          "version": "1.1.8",
+          "bundled": true
+        },
+        "in-publish": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "indent-string": {
+          "version": "2.1.0",
+          "bundled": true,
+          "requires": {
+            "repeating": "2.0.1"
+          }
+        },
+        "indexes-of": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "indexof": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "requires": {
+            "once": "1.4.0",
+            "wrappy": "1.0.2"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true
+        },
+        "ini": {
+          "version": "1.3.4",
+          "bundled": true
+        },
+        "internal-ip": {
+          "version": "2.0.3",
+          "bundled": true,
+          "requires": {
+           

<TRUNCATED>

[8/8] airavata-django-portal git commit: AIRAVATA-2537 Show index of projects being displayed

Posted by ma...@apache.org.
AIRAVATA-2537 Show index of projects being displayed


Project: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/commit/c2df89a1
Tree: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/tree/c2df89a1
Diff: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/diff/c2df89a1

Branch: refs/heads/master
Commit: c2df89a15a4d8fa0df6d2398ddc6384ac4ac103a
Parents: 5397f67
Author: Marcus Christie <ma...@iu.edu>
Authored: Sun Oct 15 15:38:44 2017 -0400
Committer: Marcus Christie <ma...@iu.edu>
Committed: Sun Oct 15 15:38:44 2017 -0400

----------------------------------------------------------------------
 django_airavata/apps/api/views.py                      |  4 +++-
 .../js/views/ProjectListContainer.vue                  | 13 +++++++++++++
 .../static/common/js/utils/PaginationIterator.js       |  2 ++
 3 files changed, 18 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/c2df89a1/django_airavata/apps/api/views.py
----------------------------------------------------------------------
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 4dc4d0f..cc9c37e 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -150,7 +150,9 @@ class APIResultPagination(pagination.LimitOffsetPagination):
         return Response(OrderedDict([
             ('next', self.get_next_link() if has_next_link else None),
             ('previous', self.get_previous_link()),
-            ('results', data)
+            ('results', data),
+            ('limit', self.limit),
+            ('offset', self.offset)
         ]))
 
     def get_next_link(self):

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/c2df89a1/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
index 46b2e21..171b882 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
@@ -1,6 +1,9 @@
 <template>
     <div>
         <project-list v-bind:projects="projects"></project-list>
+        <div>
+            Showing {{ first }} - {{ last }}
+        </div>
         <div v-if="hasNext">
             <a href="#" v-on:click.prevent="nextProjects">Next</a>
         </div>
@@ -43,6 +46,16 @@ export default {
         },
         hasPrevious: function() {
             return this.projectsPaginator && this.projectsPaginator.hasPrevious();
+        },
+        first: function() {
+            return this.projectsPaginator ? this.projectsPaginator.offset + 1 : null;
+        },
+        last: function() {
+            if (this.projectsPaginator) {
+                return this.projectsPaginator.offset + this.projectsPaginator.results.length;
+            } else {
+                return null;
+            }
         }
     },
     beforeMount: function () {

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/c2df89a1/django_airavata/static/common/js/utils/PaginationIterator.js
----------------------------------------------------------------------
diff --git a/django_airavata/static/common/js/utils/PaginationIterator.js b/django_airavata/static/common/js/utils/PaginationIterator.js
index 438c616..d27855b 100644
--- a/django_airavata/static/common/js/utils/PaginationIterator.js
+++ b/django_airavata/static/common/js/utils/PaginationIterator.js
@@ -38,6 +38,8 @@ export default class PaginationIterator {
         } else {
             this.results = pagedResponse.results;
         }
+        this.offset = pagedResponse.offset;
+        this.limit = pagedResponse.limit;
         return this;
     }
 }
\ No newline at end of file


[5/8] airavata-django-portal git commit: AIRAVATA-2537 Move models and services to common code

Posted by ma...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/apps/workspace/package.json
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/package.json b/django_airavata/apps/workspace/package.json
index 5a2c4de..fd77e9f 100644
--- a/django_airavata/apps/workspace/package.json
+++ b/django_airavata/apps/workspace/package.json
@@ -10,6 +10,7 @@
     "build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
   },
   "dependencies": {
+    "django-airavata-common": "file:../..",
     "moment": "^2.18.1",
     "vue": "^2.3.3"
   },

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/BaseModel.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/BaseModel.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/BaseModel.js
deleted file mode 100644
index e61a1bc..0000000
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/BaseModel.js
+++ /dev/null
@@ -1,6 +0,0 @@
-
-export default class BaseModel {
-    constructor(data = {}) {
-        Object.assign(this, data);
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/Project.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/Project.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/Project.js
deleted file mode 100644
index 04b2ad4..0000000
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/Project.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import BaseModel from './BaseModel';
-
-export default class Project extends BaseModel {
-    constructor(data = {}) {
-        super(data);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
deleted file mode 100644
index 3712181..0000000
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
+++ /dev/null
@@ -1,32 +0,0 @@
-
-import Project from '../models/Project'
-import PaginationIterator from '../utils/PaginationIterator'
-
-class ProjectService {
-    list(data = {}) {
-        if (data && data.results) {
-            return Promise.resolve(new PaginationIterator(data, Project));
-        } else {
-            return fetch('/api/projects', {
-                credentials: 'include'
-            })
-            .then(response => response.json())
-            .then(json => new PaginationIterator(json, Project));
-        }
-    }
-
-    create() {
-        // TODO
-    }
-
-    update() {
-        // TODO
-    }
-
-    get() {
-        // TODO
-    }
-}
-
-// Export as a singleton
-export default new ProjectService();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/PaginationIterator.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/PaginationIterator.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/PaginationIterator.js
deleted file mode 100644
index 438c616..0000000
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/PaginationIterator.js
+++ /dev/null
@@ -1,43 +0,0 @@
-
-export default class PaginationIterator {
-
-    constructor(pagedResponse, resultType = null) {
-        this.resultType = resultType;
-        this.processResponse(pagedResponse);
-    }
-
-    next() {
-        return fetch(this._next, {
-            credentials: 'include'
-        })
-        .then(response => response.json())
-        .then(json => this.processResponse(json));
-    }
-
-    hasNext() {
-        return this._next != null;
-    }
-
-    previous() {
-        return fetch(this._previous, {
-            credentials: 'include'
-        })
-        .then(response => response.json())
-        .then(json => this.processResponse(json));
-    }
-
-    hasPrevious() {
-        return this._previous != null;
-    }
-
-    processResponse(pagedResponse) {
-        this._next = pagedResponse.next;
-        this._previous = pagedResponse.previous;
-        if (this.resultType) {
-            this.results = pagedResponse.results.map(result => new this.resultType(result));
-        } else {
-            this.results = pagedResponse.results;
-        }
-        return this;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
index 3785d38..46b2e21 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
@@ -11,9 +11,9 @@
 </template>
 
 <script>
-import Project from '../models/Project'
 import ProjectList from './ProjectList.vue'
-import ProjectService from '../services/ProjectService'
+
+import { services } from 'django-airavata-common'
 
 export default {
     props: ['initialProjectsData'],
@@ -46,7 +46,7 @@ export default {
         }
     },
     beforeMount: function () {
-        ProjectService.list(this.initialProjectsData)
+        services.ProjectService.list(this.initialProjectsData)
             .then(result => this.projectsPaginator = result);
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/package.json
----------------------------------------------------------------------
diff --git a/django_airavata/package.json b/django_airavata/package.json
index 6099bfd..c44a0c2 100644
--- a/django_airavata/package.json
+++ b/django_airavata/package.json
@@ -4,6 +4,7 @@
   "version": "1.0.0",
   "author": "Marcus Christie <ma...@apache.org>",
   "private": true,
+  "main": "./static/common/dist/main.js",
   "scripts": {
     "dev": "cross-env NODE_ENV=development webpack --progress --hide-modules",
     "watch": "cross-env NODE_ENV=development webpack --watch",

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/static/common/js/index.js
----------------------------------------------------------------------
diff --git a/django_airavata/static/common/js/index.js b/django_airavata/static/common/js/index.js
index e69de29..6ee1d22 100644
--- a/django_airavata/static/common/js/index.js
+++ b/django_airavata/static/common/js/index.js
@@ -0,0 +1,17 @@
+import Project from './models/Project'
+
+import ProjectService from './services/ProjectService'
+
+import PaginationIterator from './utils/PaginationIterator'
+
+exports.models = {
+    Project: Project
+}
+
+exports.services = {
+    ProjectService: ProjectService
+}
+
+exports.utils = {
+    PaginationIterator: PaginationIterator
+}

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/static/common/js/models/BaseModel.js
----------------------------------------------------------------------
diff --git a/django_airavata/static/common/js/models/BaseModel.js b/django_airavata/static/common/js/models/BaseModel.js
new file mode 100644
index 0000000..e61a1bc
--- /dev/null
+++ b/django_airavata/static/common/js/models/BaseModel.js
@@ -0,0 +1,6 @@
+
+export default class BaseModel {
+    constructor(data = {}) {
+        Object.assign(this, data);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/static/common/js/models/Project.js
----------------------------------------------------------------------
diff --git a/django_airavata/static/common/js/models/Project.js b/django_airavata/static/common/js/models/Project.js
new file mode 100644
index 0000000..04b2ad4
--- /dev/null
+++ b/django_airavata/static/common/js/models/Project.js
@@ -0,0 +1,7 @@
+import BaseModel from './BaseModel';
+
+export default class Project extends BaseModel {
+    constructor(data = {}) {
+        super(data);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/static/common/js/services/ProjectService.js
----------------------------------------------------------------------
diff --git a/django_airavata/static/common/js/services/ProjectService.js b/django_airavata/static/common/js/services/ProjectService.js
new file mode 100644
index 0000000..3712181
--- /dev/null
+++ b/django_airavata/static/common/js/services/ProjectService.js
@@ -0,0 +1,32 @@
+
+import Project from '../models/Project'
+import PaginationIterator from '../utils/PaginationIterator'
+
+class ProjectService {
+    list(data = {}) {
+        if (data && data.results) {
+            return Promise.resolve(new PaginationIterator(data, Project));
+        } else {
+            return fetch('/api/projects', {
+                credentials: 'include'
+            })
+            .then(response => response.json())
+            .then(json => new PaginationIterator(json, Project));
+        }
+    }
+
+    create() {
+        // TODO
+    }
+
+    update() {
+        // TODO
+    }
+
+    get() {
+        // TODO
+    }
+}
+
+// Export as a singleton
+export default new ProjectService();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/static/common/js/utils/PaginationIterator.js
----------------------------------------------------------------------
diff --git a/django_airavata/static/common/js/utils/PaginationIterator.js b/django_airavata/static/common/js/utils/PaginationIterator.js
new file mode 100644
index 0000000..438c616
--- /dev/null
+++ b/django_airavata/static/common/js/utils/PaginationIterator.js
@@ -0,0 +1,43 @@
+
+export default class PaginationIterator {
+
+    constructor(pagedResponse, resultType = null) {
+        this.resultType = resultType;
+        this.processResponse(pagedResponse);
+    }
+
+    next() {
+        return fetch(this._next, {
+            credentials: 'include'
+        })
+        .then(response => response.json())
+        .then(json => this.processResponse(json));
+    }
+
+    hasNext() {
+        return this._next != null;
+    }
+
+    previous() {
+        return fetch(this._previous, {
+            credentials: 'include'
+        })
+        .then(response => response.json())
+        .then(json => this.processResponse(json));
+    }
+
+    hasPrevious() {
+        return this._previous != null;
+    }
+
+    processResponse(pagedResponse) {
+        this._next = pagedResponse.next;
+        this._previous = pagedResponse.previous;
+        if (this.resultType) {
+            this.results = pagedResponse.results.map(result => new this.resultType(result));
+        } else {
+            this.results = pagedResponse.results;
+        }
+        return this;
+    }
+}
\ No newline at end of file


[3/8] airavata-django-portal git commit: AIRAVATA-2537 Introduce service for loading projects

Posted by ma...@apache.org.
AIRAVATA-2537 Introduce service for loading projects


Project: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/commit/4df20b6e
Tree: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/tree/4df20b6e
Diff: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/diff/4df20b6e

Branch: refs/heads/master
Commit: 4df20b6e16ac7b6a517b66e00640092e8ae0b592
Parents: 30e9ce3
Author: Marcus Christie <ma...@iu.edu>
Authored: Sun Oct 15 12:09:56 2017 -0400
Committer: Marcus Christie <ma...@iu.edu>
Committed: Sun Oct 15 12:09:56 2017 -0400

----------------------------------------------------------------------
 .../js/entry-project-list.js                    |  2 +-
 .../js/services/ProjectService.js               | 55 ++++++++++++++++++++
 .../js/views/ProjectListContainer.vue           | 28 ++++++++--
 3 files changed, 80 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/4df20b6e/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js
index e130aea..784b7cc 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js
@@ -5,7 +5,7 @@ new Vue({
   el: '#project-list',
   template: '<project-list-container v-bind:initialProjectsData="projectsData"></project-list-container>',
   data: {
-      projects: null
+      projectsData: null
   },
   components: {
       ProjectListContainer

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/4df20b6e/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
new file mode 100644
index 0000000..4d51c59
--- /dev/null
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
@@ -0,0 +1,55 @@
+
+import Project from '../models/Project'
+
+class ProjectService {
+    list(data = {}) {
+        if (data && data.results) {
+            let projects = data.results.map(result => new Project(result));
+            this.next = data.next;
+            this.previous = data.previous;
+            return Promise.resolve({
+                projects: projects,
+                next: this.next,
+                previous: this.previous
+            });
+        } else {
+            return fetch('/api/projects', {
+                credentials: 'include'
+            })
+            .then(response => response.json())
+            .then(json => {
+                this.next = json.next;
+                this.previous = json.previous;
+                let projects = json.results.map(project => new Project(project));
+                return {
+                    projects: projects,
+                    next: this.next,
+                    previous: this.previous
+                }
+            });
+        }
+    }
+
+    listNext() {
+        // TODO
+    }
+
+    listPrevious() {
+        // TODO
+    }
+
+    create() {
+        // TODO
+    }
+
+    update() {
+        // TODO
+    }
+
+    get() {
+        // TODO
+    }
+}
+
+// Export as a singleton
+export default new ProjectService();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/4df20b6e/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
index 271dd5d..b384a00 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
@@ -11,17 +11,18 @@
 </template>
 
 <script>
-import Project from '../models/Project';
+import Project from '../models/Project'
 import ProjectList from './ProjectList.vue'
+import ProjectService from '../services/ProjectService'
 
 export default {
     props: ['initialProjectsData'],
     name: 'project-list-container',
     data () {
         return {
-            projects: this.initialProjectsData.results,
-            next: this.initialProjectsData.next,
-            previous: this.initialProjectsData.previous,
+            projects: null,
+            next: null,
+            previous: null,
         }
     },
     components: {
@@ -51,6 +52,25 @@ export default {
                 this.projects = json.results.map(project => new Project(project));
             });
         },
+    },
+    beforeMount: function () {
+        if (this.initialProjectsData) {
+            // TODO: Initialize project list iterator
+            ProjectService.list(this.initialProjectsData)
+                .then(result => {
+                    this.projects = result.projects;
+                    this.next = result.next;
+                    this.previous = result.previous;
+                });
+        } else {
+            ProjectService.list()
+                .then(result => {
+                    this.projects = result.projects;
+                    this.next = result.next;
+                    this.previous = result.previous;
+                });
+        }
+        // TODO: load projects if initialProjectsData is null
     }
 }
 </script>


[2/8] airavata-django-portal git commit: AIRAVATA-2537 Implement simple pagination

Posted by ma...@apache.org.
AIRAVATA-2537 Implement simple pagination


Project: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/commit/30e9ce3c
Tree: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/tree/30e9ce3c
Diff: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/diff/30e9ce3c

Branch: refs/heads/master
Commit: 30e9ce3c6f35d51d7416da9da772b3b83f8cb26c
Parents: f4367b0
Author: Marcus Christie <ma...@iu.edu>
Authored: Sat Oct 14 10:09:16 2017 -0400
Committer: Marcus Christie <ma...@iu.edu>
Committed: Sat Oct 14 10:09:16 2017 -0400

----------------------------------------------------------------------
 .../js/entry-project-list.js                    |  6 +--
 .../js/models/BaseModel.js                      |  6 +++
 .../js/models/Project.js                        |  7 ++++
 .../js/views/ProjectListContainer.vue           | 42 ++++++++++++++++++--
 .../projects_list.html                          |  2 +-
 5 files changed, 56 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/30e9ce3c/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js
index 7d771c2..e130aea 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/entry-project-list.js
@@ -3,7 +3,7 @@ import ProjectListContainer from './views/ProjectListContainer.vue'
 
 new Vue({
   el: '#project-list',
-  template: '<project-list-container v-bind:initialProjects="projects"></project-list-container>',
+  template: '<project-list-container v-bind:initialProjectsData="projectsData"></project-list-container>',
   data: {
       projects: null
   },
@@ -11,8 +11,8 @@ new Vue({
       ProjectListContainer
   },
   beforeMount: function () {
-      if (this.$el.dataset.projects) {
-          this.projects = JSON.parse(this.$el.dataset.projects);
+      if (this.$el.dataset.projectsData) {
+          this.projectsData = JSON.parse(this.$el.dataset.projectsData);
       }
   }
 })

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/30e9ce3c/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/BaseModel.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/BaseModel.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/BaseModel.js
new file mode 100644
index 0000000..e61a1bc
--- /dev/null
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/BaseModel.js
@@ -0,0 +1,6 @@
+
+export default class BaseModel {
+    constructor(data = {}) {
+        Object.assign(this, data);
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/30e9ce3c/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/Project.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/Project.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/Project.js
new file mode 100644
index 0000000..04b2ad4
--- /dev/null
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/models/Project.js
@@ -0,0 +1,7 @@
+import BaseModel from './BaseModel';
+
+export default class Project extends BaseModel {
+    constructor(data = {}) {
+        super(data);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/30e9ce3c/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
index 47d1b5f..271dd5d 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
@@ -1,20 +1,56 @@
 <template>
-    <project-list v-bind:projects="projects"></project-list>
+    <div>
+        <project-list v-bind:projects="projects"></project-list>
+        <div v-if="next">
+            <a href="#" v-on:click.prevent="nextProjects">Next</a>
+        </div>
+        <div v-if="previous">
+            <a href="#" v-on:click.prevent="previousProjects">Previous</a>
+        </div>
+    </div>
 </template>
 
 <script>
+import Project from '../models/Project';
 import ProjectList from './ProjectList.vue'
 
 export default {
-    props: ['initialProjects'],
+    props: ['initialProjectsData'],
     name: 'project-list-container',
     data () {
         return {
-            projects: this.initialProjects
+            projects: this.initialProjectsData.results,
+            next: this.initialProjectsData.next,
+            previous: this.initialProjectsData.previous,
         }
     },
     components: {
         ProjectList
+    },
+    methods: {
+        // TODO: refactor these two methods since they are practically the same
+        nextProjects: function(event) {
+            fetch(this.next, {
+                credentials: 'include'
+            })
+            .then(response => response.json())
+            .then(json => {
+                this.next = json.next;
+                this.previous = json.previous;
+                this.projects = json.results.map(project => new Project(project));
+            });
+        },
+        previousProjects: function(event) {
+            fetch(this.previous, {
+                credentials: 'include'
+            })
+            .then(response => response.json())
+            .then(json => {
+                this.next = json.next;
+                this.previous = json.previous;
+                this.projects = json.results.map(project => new Project(project));
+            });
+        },
     }
 }
 </script>

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/30e9ce3c/django_airavata/apps/workspace/templates/django_airavata_workspace/projects_list.html
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/templates/django_airavata_workspace/projects_list.html b/django_airavata/apps/workspace/templates/django_airavata_workspace/projects_list.html
index 02943e7..e596c0c 100644
--- a/django_airavata/apps/workspace/templates/django_airavata_workspace/projects_list.html
+++ b/django_airavata/apps/workspace/templates/django_airavata_workspace/projects_list.html
@@ -6,7 +6,7 @@
 
 <h4>Browse Projects</h4>
 
-<div id="project-list" data-projects="{{ projects_data }}"></div>
+<div id="project-list" data-projects-data="{{ projects_data }}"></div>
 
 {% endblock content %}
 


[4/8] airavata-django-portal git commit: AIRAVATA-2537 Factored pagination logic into helper class

Posted by ma...@apache.org.
AIRAVATA-2537 Factored pagination logic into helper class


Project: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/commit/d18376ba
Tree: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/tree/d18376ba
Diff: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/diff/d18376ba

Branch: refs/heads/master
Commit: d18376ba11775d33f2f16af8729d2c9d40ca5346
Parents: 4df20b6
Author: Marcus Christie <ma...@iu.edu>
Authored: Sun Oct 15 13:46:03 2017 -0400
Committer: Marcus Christie <ma...@iu.edu>
Committed: Sun Oct 15 13:46:03 2017 -0400

----------------------------------------------------------------------
 .../js/services/ProjectService.js               | 29 +---------
 .../js/utils/PaginationIterator.js              | 43 ++++++++++++++
 .../js/views/ProjectListContainer.vue           | 59 ++++++--------------
 3 files changed, 64 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/d18376ba/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
index 4d51c59..3712181 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/services/ProjectService.js
@@ -1,43 +1,20 @@
 
 import Project from '../models/Project'
+import PaginationIterator from '../utils/PaginationIterator'
 
 class ProjectService {
     list(data = {}) {
         if (data && data.results) {
-            let projects = data.results.map(result => new Project(result));
-            this.next = data.next;
-            this.previous = data.previous;
-            return Promise.resolve({
-                projects: projects,
-                next: this.next,
-                previous: this.previous
-            });
+            return Promise.resolve(new PaginationIterator(data, Project));
         } else {
             return fetch('/api/projects', {
                 credentials: 'include'
             })
             .then(response => response.json())
-            .then(json => {
-                this.next = json.next;
-                this.previous = json.previous;
-                let projects = json.results.map(project => new Project(project));
-                return {
-                    projects: projects,
-                    next: this.next,
-                    previous: this.previous
-                }
-            });
+            .then(json => new PaginationIterator(json, Project));
         }
     }
 
-    listNext() {
-        // TODO
-    }
-
-    listPrevious() {
-        // TODO
-    }
-
     create() {
         // TODO
     }

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/d18376ba/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/PaginationIterator.js
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/PaginationIterator.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/PaginationIterator.js
new file mode 100644
index 0000000..438c616
--- /dev/null
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/PaginationIterator.js
@@ -0,0 +1,43 @@
+
+export default class PaginationIterator {
+
+    constructor(pagedResponse, resultType = null) {
+        this.resultType = resultType;
+        this.processResponse(pagedResponse);
+    }
+
+    next() {
+        return fetch(this._next, {
+            credentials: 'include'
+        })
+        .then(response => response.json())
+        .then(json => this.processResponse(json));
+    }
+
+    hasNext() {
+        return this._next != null;
+    }
+
+    previous() {
+        return fetch(this._previous, {
+            credentials: 'include'
+        })
+        .then(response => response.json())
+        .then(json => this.processResponse(json));
+    }
+
+    hasPrevious() {
+        return this._previous != null;
+    }
+
+    processResponse(pagedResponse) {
+        this._next = pagedResponse.next;
+        this._previous = pagedResponse.previous;
+        if (this.resultType) {
+            this.results = pagedResponse.results.map(result => new this.resultType(result));
+        } else {
+            this.results = pagedResponse.results;
+        }
+        return this;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/d18376ba/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
----------------------------------------------------------------------
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
index b384a00..3785d38 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue
@@ -1,10 +1,10 @@
 <template>
     <div>
         <project-list v-bind:projects="projects"></project-list>
-        <div v-if="next">
+        <div v-if="hasNext">
             <a href="#" v-on:click.prevent="nextProjects">Next</a>
         </div>
-        <div v-if="previous">
+        <div v-if="hasPrevious">
             <a href="#" v-on:click.prevent="previousProjects">Previous</a>
         </div>
     </div>
@@ -20,57 +20,34 @@ export default {
     name: 'project-list-container',
     data () {
         return {
-            projects: null,
-            next: null,
-            previous: null,
+            projectsPaginator: null,
         }
     },
     components: {
         ProjectList
     },
     methods: {
-        // TODO: refactor these two methods since they are practically the same
         nextProjects: function(event) {
-            fetch(this.next, {
-                credentials: 'include'
-            })
-            .then(response => response.json())
-            .then(json => {
-                this.next = json.next;
-                this.previous = json.previous;
-                this.projects = json.results.map(project => new Project(project));
-            });
+            this.projectsPaginator.next();
         },
         previousProjects: function(event) {
-            fetch(this.previous, {
-                credentials: 'include'
-            })
-            .then(response => response.json())
-            .then(json => {
-                this.next = json.next;
-                this.previous = json.previous;
-                this.projects = json.results.map(project => new Project(project));
-            });
+            this.projectsPaginator.previous();
         },
     },
-    beforeMount: function () {
-        if (this.initialProjectsData) {
-            // TODO: Initialize project list iterator
-            ProjectService.list(this.initialProjectsData)
-                .then(result => {
-                    this.projects = result.projects;
-                    this.next = result.next;
-                    this.previous = result.previous;
-                });
-        } else {
-            ProjectService.list()
-                .then(result => {
-                    this.projects = result.projects;
-                    this.next = result.next;
-                    this.previous = result.previous;
-                });
+    computed: {
+        projects: function() {
+            return this.projectsPaginator ? this.projectsPaginator.results : null;
+        },
+        hasNext: function() {
+            return this.projectsPaginator && this.projectsPaginator.hasNext();
+        },
+        hasPrevious: function() {
+            return this.projectsPaginator && this.projectsPaginator.hasPrevious();
         }
-        // TODO: load projects if initialProjectsData is null
+    },
+    beforeMount: function () {
+        ProjectService.list(this.initialProjectsData)
+            .then(result => this.projectsPaginator = result);
     }
 }
 </script>


[7/8] airavata-django-portal git commit: AIRAVATA-2537 Move models and services to common code

Posted by ma...@apache.org.
AIRAVATA-2537 Move models and services to common code


Project: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/commit/5397f677
Tree: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/tree/5397f677
Diff: http://git-wip-us.apache.org/repos/asf/airavata-django-portal/diff/5397f677

Branch: refs/heads/master
Commit: 5397f67731d28b2c45c645dad980a6dafb3868d1
Parents: d18376b
Author: Marcus Christie <ma...@iu.edu>
Authored: Sun Oct 15 15:27:24 2017 -0400
Committer: Marcus Christie <ma...@iu.edu>
Committed: Sun Oct 15 15:27:24 2017 -0400

----------------------------------------------------------------------
 django_airavata/.babelrc                        |    5 +
 .../apps/workspace/package-lock.json            | 6159 ++++++++++++++++++
 django_airavata/apps/workspace/package.json     |    1 +
 .../js/models/BaseModel.js                      |    6 -
 .../js/models/Project.js                        |    7 -
 .../js/services/ProjectService.js               |   32 -
 .../js/utils/PaginationIterator.js              |   43 -
 .../js/views/ProjectListContainer.vue           |    6 +-
 django_airavata/package.json                    |    1 +
 django_airavata/static/common/js/index.js       |   17 +
 .../static/common/js/models/BaseModel.js        |    6 +
 .../static/common/js/models/Project.js          |    7 +
 .../static/common/js/services/ProjectService.js |   32 +
 .../common/js/utils/PaginationIterator.js       |   43 +
 14 files changed, 6274 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata-django-portal/blob/5397f677/django_airavata/.babelrc
----------------------------------------------------------------------
diff --git a/django_airavata/.babelrc b/django_airavata/.babelrc
new file mode 100644
index 0000000..3ed94df
--- /dev/null
+++ b/django_airavata/.babelrc
@@ -0,0 +1,5 @@
+{
+  "presets": [
+    ["env", { "modules": false }]
+  ]
+}