You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by er...@apache.org on 2013/06/10 18:26:06 UTC
svn commit: r1491527 [3/3] - in
/rave/branches/angular/rave-portal-resources/src/main/webapp:
WEB-INF/jsp/views/ static/html/portal/ static/script/_common/
static/script/core/ static/script/portal/
Added: rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/routing.js
URL: http://svn.apache.org/viewvc/rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/routing.js?rev=1491527&view=auto
==============================================================================
--- rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/routing.js (added)
+++ rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/routing.js Mon Jun 10 16:26:06 2013
@@ -0,0 +1,70 @@
+define(['app', 'core/rave_core'], function (app, rave) {
+
+ app.config([function () {
+ rave.RegionWidget.defaultView = 'home';
+ rave.api.setContext('/portal/app/');
+ }]).
+ config(['$routeProvider', '$locationProvider', '$httpProvider', function ($routeProvider, $locationProvider, $httpProvider) {
+
+ //The routes that our angular app will handle
+ $routeProvider
+ .when('/', {
+ controller: 'PortalController',
+ resolve: {
+ pages: ['PagesLoader', function (PagesLoader) {
+ return PagesLoader();
+ }]
+ },
+ templateUrl: "/portal/static/html/portal/tabs.html"
+ })
+ .when('/:tabId', {
+ controller: 'PortalController',
+ resolve: {
+ pages: ['PagesLoader', function (PagesLoader) {
+ return PagesLoader();
+ }]
+ },
+ templateUrl: "/portal/static/html/portal/tabs.html"
+ })
+ .otherwise({ templateUrl: '/portal/static/html/portal/404.html'});
+
+
+ //gets rid of the # in urls
+ $locationProvider.html5Mode(true);
+
+ /*
+ Set up an interceptor to watch for 401 errors.
+ The server, rather than redirect to a login page (or whatever), just returns a 401 error
+ if it receives a request that should have a user session going. Angular catches the error below
+ and says what happens - in this case, we just redirect to a login page. You can get a little more
+ complex with this strategy, such as queueing up failed requests and re-trying them once the user logs in.
+ Read all about it here: http://www.espeo.pl/2012/02/26/authentication-in-angularjs-application
+ */
+ var interceptor = ['$q', '$location', '$rootScope', function ($q, $location, $rootScope) {
+ function success(response) {
+ return response;
+ }
+
+ function error(response) {
+ var status = response.status;
+ if (status == 401) {
+ $rootScope.redirect = $location.url(); // save the current url so we can redirect the user back
+ $rootScope.user = {}
+ $location.path('/login');
+ }
+ return $q.reject(response);
+ }
+
+ return function (promise) {
+ return promise.then(success, error);
+ }
+ }];
+ $httpProvider.responseInterceptors.push(interceptor);
+ }])
+ .run(['$route', '$rootScope', function ($route, $rootScope) {
+// $rootScope.$on('$routeChangeSuccess', function (oldRoute, newRoute) {
+// $rootScope.templateUrl = newRoute.templateUrl;
+// });
+ }]);
+
+})
\ No newline at end of file
Added: rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/services.js
URL: http://svn.apache.org/viewvc/rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/services.js?rev=1491527&view=auto
==============================================================================
--- rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/services.js (added)
+++ rave/branches/angular/rave-portal-resources/src/main/webapp/static/script/portal/services.js Mon Jun 10 16:26:06 2013
@@ -0,0 +1,184 @@
+define(['app', 'core/rave_core', 'angularResource'], function (app, rave) {
+ app.requires.push('ngResource');
+
+ app.factory('Pages', ['$resource',
+ function ($resource) {
+ return $resource('/portal/api/rest/pages/:context/:identifier/:id', {})
+ }
+ ])
+ .factory('PagesLoader', ['Pages', '$q',
+ function (Pages, $q) {
+ return function () {
+ var deferred = $q.defer();
+
+ Pages.get({context: 'portal', identifier: '@self'}, function (pages) {
+ deferred.resolve(pages.Page);
+ });
+
+ return deferred.promise;
+ }
+
+ }
+ ])
+// .service('Pages', ['$http', '$interpolate', '$q', '$rootScope',
+// function ($http, $interpolate, $q, $rootScope) {
+// var urlTemplate = $interpolate('/portal/api/rest/pages/{{context}}/{{identifier}}'),
+// pages;
+// var Pages = {};
+//
+// /*
+// TODO: this works for now but I dont like the get() approach
+// Probably a better approach is autodetecting context and requesting the data object - return that promise
+// and attach modification functions to the promise
+// */
+// Pages.get = function (context, identifier, id) {
+// var url = urlTemplate({context: context, identifier: identifier});
+// if (id) {
+// url += '/' + id
+// }
+// pages = $http.get(url).then(function (response) {
+// return response.data.Page;
+// });
+// return pages;
+// }
+//
+// Pages.add = function (name, layout) {
+// var deferred = $q.defer();
+//
+// rave.api.rpc.addPage({
+// pageName: name,
+// pageLayoutCode: layout,
+// successCallback: function (result) {
+// if (result == 'DUPLICATE_ITEM') {
+// $rootScope.$apply(deferred.reject('DUPLICATE_ITEM'));
+// }
+// else {
+// var newPage = result.result;
+// pages.then(function (pages) {
+// /*
+// TODO: newPage object returned by rpc api is different format from rest api,
+// screws up pagelayout code and possibly more
+// */
+// newPage.pageLayoutCode = newPage.pageLayout.code;
+// pages.push(newPage);
+// });
+// $rootScope.$apply(deferred.resolve(newPage));
+// }
+// }
+// });
+//
+// return deferred.promise;
+// }
+//
+// Pages.move = function (pageId, afterPageId) {
+// var deferred = $q.defer();
+//
+// rave.api.rpc.movePage({
+// pageId: pageId,
+// moveAfterPageId: afterPageId,
+// successCallback: function (result) {
+// pages.then(function (pages) {
+// var movingPage = _.findWhere(pages, {id: pageId})
+// var fromIdx = _.indexOf(pages, movingPage);
+// var toIdx = _.indexOf(pages, _.findWhere(pages, {id: afterPageId}));
+// pages.splice(fromIdx, 1)
+// pages.splice(toIdx, 0, movingPage);
+// });
+// $rootScope.$apply(deferred.resolve(result));
+// }
+// });
+//
+// return deferred.promise;
+// }
+//
+// Pages.edit = function (pageId, title, layout) {
+// var deferred = $q.defer();
+//
+// rave.api.rpc.updatePagePrefs({
+// pageId: pageId,
+// title: title,
+// layout: layout,
+// successCallback: function (result) {
+// var newPage = result.result;
+// //TODO: this probably will not end up working - we are not getting rendered context back
+// pages.then(function (pages) {
+// var edited = _.findWhere(pages, {id: pageId});
+// var idx = _.indexOf(pages, edited);
+// pages.splice(idx, 1, newPage);
+// });
+// $rootScope.$apply(deferred.resolve(result));
+// }
+// });
+//
+// return deferred.promise;
+// }
+//
+// Pages.delete = function (pageId) {
+// var deferred = $q.defer();
+//
+// rave.api.rest.deletePage({
+// pageId: pageId,
+// successCallback: function (result) {
+// pages.then(function (pages) {
+// var deleted = _.findWhere(pages, {id: pageId});
+// var idx = _.indexOf(pages, deleted);
+// pages.splice(idx, 1);
+// });
+// $rootScope.$apply(deferred.resolve(result));
+// }
+// });
+//
+//
+// return deferred.promise;
+// }
+//
+// Pages.deleteRegionWidget = function (regionWidget) {
+// //TODO: we need a better way to represent & keep data in sync
+// pages.then(function (pages) {
+// _.find(pages, function (page) {
+// return _.find(page.regions, function (region) {
+// return _.find(region.regionWidgets, function (widget, i) {
+// if (widget.id == regionWidget.id) {
+// region.regionWidgets.splice(i, 1);
+// regionWidget.close();
+// return true;
+// }
+// })
+// })
+// })
+// });
+// }
+//
+// Pages.share = function (pageId, userId, role) {
+// }
+//
+// return Pages;
+// }
+// ])
+ .service('user', ['$q',
+ function ($q) {
+ var deferred = $q.defer();
+
+ deferred.resolve({
+
+ });
+
+ return deferred.promise;
+ }
+ ])
+ .service('Users', [
+ function () {
+
+ }
+ ])
+ .service('settings', [
+ function () {
+
+ }
+ ])
+ .service('views', [
+ function () {
+ //TODO: write a view service to be more robust than ng-include, probably with a corresponding directive
+ }
+ ]);
+});