|
|
var app = angular.module('onlineJudgeApp', [ 'ngRoute', 'appCtrls' ]);
|
|
|
// 让子页面里面可以动态加载script的标签
|
|
|
app.directive('loadScript', function() {
|
|
|
return {
|
|
|
restrict : 'EA',
|
|
|
terminal : true,
|
|
|
link : function(scope, element, attr) {
|
|
|
if (attr.ngSrc) {
|
|
|
var s = document.createElement('script');
|
|
|
s.src = attr.ngSrc;
|
|
|
document.body.appendChild(s);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
});
|
|
|
|
|
|
// 转换日期显示样式的过滤器
|
|
|
app.filter("stringDateFormat", function($filter) {
|
|
|
return function(self, format) {
|
|
|
if (self != null) {
|
|
|
return $filter('date')(new Date(self), format);
|
|
|
}
|
|
|
return "";
|
|
|
};
|
|
|
});
|
|
|
|
|
|
// 编译文件内容为html元素的的过滤器
|
|
|
app.filter("formatToHtml", function($sce) {
|
|
|
return function(html, id) {
|
|
|
$("#" + id).html(html);
|
|
|
return "";
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// session存储数据
|
|
|
app.factory('sessionDataBase', [ '$window', function($window) {
|
|
|
return { // 存储单个属性
|
|
|
set : function(key, value) {
|
|
|
$window.sessionStorage.setItem(key, value);
|
|
|
}, // 读取单个属性
|
|
|
get : function(key, defaultValue) {
|
|
|
return $window.sessionStorage.getItem(key) || defaultValue;
|
|
|
}, // 存储对象,以JSON格式存储
|
|
|
setObject : function(key, value) {
|
|
|
$window.sessionStorage.setItem(key, angular.toJson(value));
|
|
|
}, // 读取对象
|
|
|
getObject : function(key) {
|
|
|
return angular.fromJson($window.sessionStorage.getItem(key));
|
|
|
},
|
|
|
remove : function(key) {
|
|
|
return $window.sessionStorage.removeItem(key);
|
|
|
},
|
|
|
clear : function() {
|
|
|
$window.sessionStorage.clear();
|
|
|
}
|
|
|
|
|
|
}
|
|
|
} ]);
|
|
|
|
|
|
// 定义一个 拦截器 ,稍等将会把它作为 Interceptors 的处理函数
|
|
|
app.factory('httpInterceptor', [ '$q', '$injector', '$rootScope',
|
|
|
'sessionDataBase',
|
|
|
function($q, $injector, $rootScope, sessionDataBase) {
|
|
|
var httpInterceptor = {
|
|
|
'responseError' : function(response) {
|
|
|
if (response.status == 301) {
|
|
|
alert("请登录");
|
|
|
sessionDataBase.remove("user");
|
|
|
$rootScope.userData = null;
|
|
|
}
|
|
|
return $q.reject(response);
|
|
|
},
|
|
|
'response' : function(response) {
|
|
|
return response;
|
|
|
},
|
|
|
'request' : function(config) {
|
|
|
return config;
|
|
|
},
|
|
|
'requestError' : function(config) {
|
|
|
return $q.reject(config);
|
|
|
}
|
|
|
}
|
|
|
return httpInterceptor;
|
|
|
} ]);
|
|
|
|
|
|
app
|
|
|
.config(function($httpProvider, $routeProvider) {
|
|
|
// 添加对应的 Interceptors
|
|
|
$httpProvider.interceptors.push("httpInterceptor");
|
|
|
if (!$httpProvider.defaults.headers.get) {
|
|
|
$httpProvider.defaults.headers.get = {};
|
|
|
}
|
|
|
$httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
|
|
|
// 禁用IE对ajax的缓存
|
|
|
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
|
|
|
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
|
|
|
|
|
|
$routeProvider.when('/welcome', {
|
|
|
templateUrl : 'welcome.html'
|
|
|
}).when('/announcement/index', {
|
|
|
templateUrl : 'announcement/announcement.html'
|
|
|
}).when('/problem/index', {
|
|
|
templateUrl : 'problem/index.html'
|
|
|
}).when('/problem/detail', {
|
|
|
templateUrl : 'problem/detail.html'
|
|
|
}).when('/user/index', {
|
|
|
templateUrl : 'user/index.html'
|
|
|
}).when('/competition/index', {
|
|
|
templateUrl : 'competition/index.html'
|
|
|
}).when('/competition/answer', {
|
|
|
templateUrl : 'competition/answer.html'
|
|
|
}).when('/announcement/index', {
|
|
|
templateUrl : 'announcement/index.html'
|
|
|
}).when('/leaderboard/index', {
|
|
|
templateUrl : 'leaderboard/index.html'
|
|
|
}).otherwise({
|
|
|
redirectTo : '/welcome'
|
|
|
});
|
|
|
});
|
|
|
|
|
|
// 定义一个通用的分页service
|
|
|
app.service('$pageService', [ '$http', function($http) {
|
|
|
this.loadingData = function($scope, wantPageNumber, url) {
|
|
|
$http({
|
|
|
method : "get",
|
|
|
url : url,
|
|
|
params : {
|
|
|
pageShowCount : $scope.page.pageShowCount,
|
|
|
wantPageNumber : wantPageNumber
|
|
|
}
|
|
|
}).success(function(response) {
|
|
|
$scope.isLoadingData = false;
|
|
|
$scope.page.currentPage = response.currentPage;
|
|
|
$scope.page.totalCount = response.totalCount;
|
|
|
$scope.page.totalPage = response.totalPage;
|
|
|
$scope.page.datas = response.result;
|
|
|
$scope.isCanNext = false;
|
|
|
$scope.isCanPre = false;
|
|
|
|
|
|
if ($scope.page.totalPage > $scope.page.currentPage) {
|
|
|
$scope.isCanNext = true;
|
|
|
}
|
|
|
|
|
|
if ($scope.page.currentPage > 1) {
|
|
|
$scope.isCanPre = true;
|
|
|
}
|
|
|
}).error(function(response) {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
this.changePage = function(isNext, $scope, url) {
|
|
|
var page = $scope.page.currentPage;
|
|
|
if (isNext) {
|
|
|
page++;
|
|
|
} else {
|
|
|
page--;
|
|
|
}
|
|
|
|
|
|
this.loadingData($scope, page, url)
|
|
|
};
|
|
|
} ]); |