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:53 UTC

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

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 %}