Renamed GUI folder in VIEWS
diff --git a/views/ngXosLib/xosHelpers/spec/csrftoken.test.js b/views/ngXosLib/xosHelpers/spec/csrftoken.test.js
new file mode 100644
index 0000000..6a74040
--- /dev/null
+++ b/views/ngXosLib/xosHelpers/spec/csrftoken.test.js
@@ -0,0 +1,20 @@
+'use strict';
+
+describe('The xos.helper module', () => {
+  
+  var app, httpProvider;
+
+  beforeEach(module('xos.helpers'));
+  beforeEach(function(){
+    module(function($httpProvider){
+      httpProvider = $httpProvider;
+    });
+  });
+
+
+
+  it('should set SetCSRFToken interceptor', inject(($http) => {
+    expect(httpProvider.interceptors).toContain('SetCSRFToken');
+  }));
+
+});
\ No newline at end of file
diff --git a/views/ngXosLib/xosHelpers/src/services/api.services.js b/views/ngXosLib/xosHelpers/src/services/api.services.js
new file mode 100644
index 0000000..c7384f8
--- /dev/null
+++ b/views/ngXosLib/xosHelpers/src/services/api.services.js
@@ -0,0 +1,32 @@
+(function() {
+  'use strict';
+
+    angular
+        .module('xos.helpers')
+        .service('XosApi', xosApi)
+        .service('XoslibApi', xoslibApi)
+        .service('HpcApi', hpcApi);
+
+    var xosApiCache, xoslibApiCache, hpcApiCache;
+
+    function xosApi(xos) { 
+      if(!xosApiCache){
+        xosApiCache = new xos({domain: ''});
+      }
+      return xosApiCache;
+    }
+
+    function xoslibApi(xoslib) { 
+      if(!xoslibApiCache){
+        xoslibApiCache = new xoslib({domain: ''});
+      }
+      return xoslibApiCache;
+    }
+
+    function hpcApi(hpcapi) { 
+      if(!hpcApiCache){
+        hpcApiCache = new hpcapi({domain: ''});
+      }
+      return hpcApiCache;
+    }
+})();
diff --git a/views/ngXosLib/xosHelpers/src/services/csrfToken.interceptor.js b/views/ngXosLib/xosHelpers/src/services/csrfToken.interceptor.js
new file mode 100644
index 0000000..283e90d
--- /dev/null
+++ b/views/ngXosLib/xosHelpers/src/services/csrfToken.interceptor.js
@@ -0,0 +1,18 @@
+(function() {
+    'use strict';
+
+    angular
+        .module('xos.helpers')
+        .factory('SetCSRFToken', setCSRFToken);
+
+    function setCSRFToken($cookies) {
+      return {
+        request: function(request){
+          if(request.method !== 'GET'){
+            request.headers['X-CSRFToken'] = $cookies.get('xoscsrftoken');
+          }
+          return request;
+        }
+      };
+    }
+})();
diff --git a/views/ngXosLib/xosHelpers/src/services/noHyperlinks.interceptor.js b/views/ngXosLib/xosHelpers/src/services/noHyperlinks.interceptor.js
new file mode 100644
index 0000000..6059f99
--- /dev/null
+++ b/views/ngXosLib/xosHelpers/src/services/noHyperlinks.interceptor.js
@@ -0,0 +1,18 @@
+(function() {
+    'use strict';
+
+    angular
+        .module('xos.helpers')
+        .factory('NoHyperlinks', noHyperlinks);
+
+    function noHyperlinks() { 
+      return {
+        request: function(request){
+          if(request.url.indexOf('.html') === -1){
+            request.url += '?no_hyperlinks=1';
+          }
+          return request;
+        }
+      };
+    }
+})();
\ No newline at end of file
diff --git a/views/ngXosLib/xosHelpers/src/xosHelpers.module.js b/views/ngXosLib/xosHelpers/src/xosHelpers.module.js
new file mode 100644
index 0000000..1f73be1
--- /dev/null
+++ b/views/ngXosLib/xosHelpers/src/xosHelpers.module.js
@@ -0,0 +1,22 @@
+(function() {
+    'use strict';
+
+    angular
+        .module('xos.helpers',[
+          'ngCookies',
+          'xos.xos',
+          'xos.hpcapi',
+          'xos.xoslib'
+        ])
+        .config(config);
+
+    function config($httpProvider, $interpolateProvider, $resourceProvider) { 
+      $httpProvider.interceptors.push('SetCSRFToken');
+
+      $interpolateProvider.startSymbol('{$');
+      $interpolateProvider.endSymbol('$}');
+
+      // NOTE http://www.masnun.com/2013/09/18/django-rest-framework-angularjs-resource-trailing-slash-problem.html
+      $resourceProvider.defaults.stripTrailingSlashes = false;
+    }
+})();
\ No newline at end of file