angular
.module('entities', ['ngSanitize', 'ui'])
+ /* Router */
+
.config(function($stateProvider, $locationProvider) {
$stateProvider
.state('doc', {
url: '/doc/:id',
- templateUrl: 'views/doc.html',
- controller: 'EntityCtrl',
- controllerAs: 'entityCtrl',
+ templateUrl: 'views/doc/index.html',
+ resolve: {
+ mentity: function(Model, $q, $stateParams, $state) {
+ var d = $q.defer();
+ Model.loadEntity($stateParams.id, d.resolve,
+ function() {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ }
+ },
+ controller: function(mentity) {
+ this.mentity = mentity;
+ },
+ controllerAs: 'vm',
+ abstract: true
+ })
+ .state('doc.entity', {
+ url: '',
+ templateUrl: 'views/doc/entity.html',
+ controller: function(mentity) {
+ this.mentity = mentity;
+ },
+ controllerAs: 'vm',
+ abstract: true
+ })
+ .state('doc.entity.doc', {
+ url: '',
+ templateUrl: 'views/doc/doc.html',
+ resolve: {
+ doc: function(Model, $q, $stateParams, $state) {
+ var d = $q.defer();
+ Model.loadEntityDoc($stateParams.id, d.resolve,
+ function() {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ }
+ },
+ controller: function(mentity, doc) {
+ this.mentity = mentity;
+ this.doc = doc;
+
+ this.date = function(date) {
+ return new Date(date);
+ }
+ },
+ controllerAs: 'vm',
+ })
+ .state('doc.entity.graph', {
+ url: '/graph',
+ templateUrl: 'views/doc/graph.html',
+ resolve: {
+ graph: function(Model, $q, $stateParams, $state) {
+ var d = $q.defer();
+ Model.loadEntityGraph($stateParams.id, d.resolve,
+ function() {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ },
+ inh: function(Model, $q, $stateParams, $state) {
+ var d = $q.defer();
+ Model.loadEntityInh($stateParams.id, d.resolve,
+ function() {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ }
+ },
+ controller: function(inh, graph, $sce) {
+ this.graph = $sce.trustAsHtml(graph);
+ this.inh = inh;
+ },
+ controllerAs: 'vm',
+ })
+ .state('doc.entity.metrics', {
+ url: '/metrics',
+ templateUrl: 'views/doc/metrics.html',
+ resolve: {
+ metrics: function(Metrics, $q, $stateParams, $state) {
+ var d = $q.defer();
+ Metrics.loadStructuralMetrics($stateParams.id, d.resolve,
+ function() {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ }
+ },
+ controller: function(mentity, metrics) {
+ this.mentity = mentity;
+ this.metrics = metrics;
+ },
+ controllerAs: 'vm',
+ })
+ .state('doc.entity.code', {
+ url: '/code',
+ templateUrl: 'views/doc/code.html',
+ resolve: {
+ code: function(Model, $q, $stateParams, $state) {
+ var d = $q.defer();
+ Model.loadEntityCode($stateParams.id, d.resolve,
+ function() {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ }
+ },
+ controller: function(mentity, code) {
+ this.mentity = mentity;
+ this.code = code;
+ },
+ controllerAs: 'vm',
+ })
+ .state('doc.entity.defs', {
+ url: '/defs',
+ templateUrl: 'views/doc/defs.html',
+ resolve: {
+ defs: function(Model, $q, $stateParams, $state) {
+ var d = $q.defer();
+ Model.loadEntityDefs($stateParams.id, d.resolve,
+ function() {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ }
+ },
+ controller: function(mentity, defs) {
+ this.mentity = mentity;
+ this.defs = defs;
+ },
+ controllerAs: 'vm',
+ })
+ .state('doc.entity.lin', {
+ url: '/lin',
+ templateUrl: 'views/doc/lin.html',
+ resolve: {
+ lin: function(Model, $q, $stateParams, $state) {
+ var d = $q.defer();
+ Model.loadEntityLinearization($stateParams.id, d.resolve,
+ function() {
+ $state.go('404', null, { location: false })
+ });
+ return d.promise;
+ }
+ },
+ controller: function(mentity, lin, $scope, $location, $anchorScroll) {
+ var vm = this;
+ vm.focus = $location.hash() ?
+ $location.hash() : mentity.intro.full_name;
+ vm.mentity = mentity;
+ vm.linearization = lin;
+ setTimeout(function() {
+ $anchorScroll();
+ }, 400);
+ $scope.$watch(function () {
+ return $location.hash();
+ }, function (value) {
+ vm.focus = $location.hash() ?
+ $location.hash() : mentity.intro.full_name;
+ $anchorScroll();
+ });
+ },
+ controllerAs: 'vm'
+ })
+ .state('doc.entity.all', {
+ url: '/all',
+ templateUrl: 'views/doc/all.html',
+ controller: function(mentity) {
+ this.mentity = mentity;
+ },
+ controllerAs: 'vm',
})
})
+ /* Model */
+
.factory('Model', [ '$http', function($http) {
return {
.error(cbErr);
},
+ loadEntityDoc: function(id, cb, cbErr) {
+ $http.get('/api/entity/' + id + '/doc')
+ .success(cb)
+ .error(cbErr);
+ },
+
loadEntityLinearization: function(id, cb, cbErr) {
$http.get('/api/linearization/' + id)
.success(cb)
.error(cbErr);
},
- search: function(q, n, cb, cbErr) {
- $http.get('/api/search?q=' + q + '&n=' + n)
+ loadEntityInh: function(id, cb, cbErr) {
+ $http.get('/api/inheritance/' + id)
+ .success(cb)
+ .error(cbErr);
+ },
+ search: function(q, p, n, cb, cbErr) {
+ $http.get('/api/search?q=' + q + '&p=' + p + '&n=' + n)
.success(cb)
.error(cbErr);
}
};
}])
- .controller('EntityCtrl', ['Model', 'Metrics', 'Feedback', '$stateParams', '$scope', '$sce', function(Model, Metrics, Feedback, $stateParams, $scope, $sce) {
- $scope.entityId = $stateParams.id;
-
- this.loadEntityLinearization = function() {
- Model.loadEntityLinearization($stateParams.id,
- function(data) {
- $scope.linearization = data;
- }, function(err) {
- $scope.error = err;
- });
- };
-
- this.loadEntityDefs = function() {
- Model.loadEntityDefs($stateParams.id,
- function(data) {
- $scope.defs = data;
- }, function(err) {
- $scope.error = err;
- });
- };
-
- this.loadEntityCode = function() {
- Model.loadEntityCode($stateParams.id,
- function(data) {
- $scope.code = data;
- }, function(err) {
- $scope.code = err;
- });
- };
-
- this.loadEntityGraph = function(e) {
- Model.loadEntityGraph($stateParams.id,
- function(data) {
- $scope.graph = $sce.trustAsHtml(data);
- }, function(err) {
- $scope.error = err;
- });
- };
-
- this.loadStructuralMetrics = function() {
- Metrics.loadStructuralMetrics($stateParams.id,
- function(data) {
- $scope.metrics = data;
- }, function(message, status) {
- $scope.error = {message: message, status: status};
- });
- };
-
- Model.loadEntity($stateParams.id,
- function(data) {
- $scope.mentity = data;
- }, function(message, status) {
- $scope.error = {message: message, status: status};
- });
- }])
+ /* Directives */
.directive('entityLink', function() {
return {
return {
restrict: 'E',
scope: {
- mentity: '=',
- defaultTab: '@',
- noSynopsis: '='
+ mentity: '='
},
replace: true,
- templateUrl: '/directives/entity/card.html',
- link: function ($scope, element, attrs) {
- $scope.currentTab = $scope.defaultTab ? $scope.defaultTab : 'signature';
-
- $scope.loadEntityStars = function() {
- Feedback.loadEntityStars($scope.mentity.full_name,
- function(data) {
- $scope.ratings = data;
- }, function(message, status) {
- $scope.error = {message: message, status: status};
- });
- };
- }
+ templateUrl: '/directives/entity/card.html'
};
}])
$scope.codeId = 'code_' + $scope.definition.full_name.replace(/[^a-zA-Z0-9]/g, '_');
$scope.isActive = function() {
- return $scope.focus.full_name == $scope.definition.full_name;
+ return $scope.focus == $scope.definition.full_name;
}
$scope.loadCardCode = function() {
}
};
- if($scope.isActive()) $scope.loadCardCode();
+ $scope.$watch('focus', function() {
+ if($scope.isActive()) $scope.loadCardCode();
+ });
}
};
}])