Commit 19636306 authored by Evren Kutar's avatar Evren Kutar

Merge branch 'feature/issue-5120' into develop

parents 6fea70a1 0e4aa8eb
......@@ -124,6 +124,7 @@ module.exports = function (grunt) {
"app/zetalib/interceptors.js",
"app/zetalib/general.js",
"app/zetalib/form_service.js",
"app/zetalib/error_service.js",
"app/zetalib/action_service.js",
"app/zetalib/socket.js",
"app/shared/directives.js",
......@@ -150,6 +151,8 @@ module.exports = function (grunt) {
"app/bower_components/angular-resource/angular-resource.js",
"app/bower_components/angular-bootstrap/ui-bootstrap.js",
"app/bower_components/angular-bootstrap/ui-bootstrap-tpls.js",
"app/bower_components/showdown/dist/showdown.min.js",
"app/bower_components/angular-markdown-filter/markdown.js",
"app/bower_components/angular-sanitize/angular-sanitize.js",
"app/bower_components/tv4/tv4.js",
"app/bower_components/objectpath/lib/ObjectPath.js",
......
......@@ -36,6 +36,7 @@ angular.module(
'ulakbus.devSettings',
'ulakbus.version',
'gettext',
'markdown',
])
/**
* @memberof ulakbus
......@@ -55,6 +56,8 @@ angular.module(
angular.forEach(cookiearray, function (item) {
if (item.indexOf("backendurl") > -1) {
backendurl = item.split('=')[1];
if (backendurl.slice(-1) !== '/') {backendurl += '/'}
if (backendurl.substring(0,4) !== 'http') {backendurl = 'http://'+backendurl}
}
});
}
......@@ -62,6 +65,8 @@ angular.module(
if (location.href.indexOf("backendurl") > -1) {
var urlfromqstr = location.href.split('?')[1].split('=')[1];
backendurl = decodeURIComponent(urlfromqstr.replace(/\+/g, " "));
if (backendurl.slice(-1) !== '/') {backendurl += '/'}
if (backendurl.substring(0,4) !== 'http') {backendurl = 'http://'+backendurl}
document.cookie = "backendurl=" + backendurl;
window.location.href = window.location.href.split('?')[0];
}
......@@ -69,6 +74,12 @@ angular.module(
return {url: backendurl};
})())
.constant('toastr', window.toastr)
.constant('WS', window.WebSocket)
.config(function ($logProvider) {
$logProvider.debugEnabled(true);
})
.config(function(markdownProvider) {
//markdownProvider.config({
// extensions: ['table']
//});
});
\ No newline at end of file
......@@ -53,6 +53,8 @@ angular.module('ulakbus')
$rootScope.loggedInUser = true;
$rootScope.loginAttempt = 0;
$rootScope.websocketIsOpen = false;
$rootScope.current_user = true;
$rootScope.$on("$routeChangeStart", function (event, next, current) {
// will be used when needed
});
......
......@@ -25,19 +25,17 @@ angular.module('ulakbus.auth', ['ngRoute', 'ngCookies'])
* @description LoginCtrl responsible to handle login process.<br>
* Using 'ulakbus.formService.get_form' function generates the login form and post it to the API with input datas.
*/
.controller('LoginController', function ($scope, $q, $timeout, $routeParams, $rootScope, $log, Generator, AuthService) {
.controller('LoginController', function ($scope, $q, $timeout, $location, $routeParams, $rootScope, $log, Generator, AuthService) {
$scope.url = 'login';
$scope.form_params = {};
$scope.form_params['clear_wf'] = 1;
Generator.get_form($scope).then(function (data) {
AuthService.get_form($scope).then(function (data) {
if (data.login) { $location.path('/'); }
$scope.form = [
{key: "username", type: "string", title: "Kullanıcı Adı"},
{key: "password", type: "password", title: "Şifre"},
{type: 'submit', title: 'Giriş Yap'}
];
// to show page items showApp must be set to true
// it prevents to show empty nonsense page items when http401/403
//$rootScope.showApp = true;
});
$scope.loggingIn = false;
$scope.onSubmit = function (form) {
......@@ -47,6 +45,10 @@ angular.module('ulakbus.auth', ['ngRoute', 'ngCookies'])
$rootScope.loginAttempt = 1;
Generator.button_switch(false);
AuthService.login($scope.url, $scope.model)
.success(function (data) {
$scope.message = data.title;
$scope.loggingIn = false;
})
.error(function (data) {
$scope.message = data.title;
$scope.loggingIn = false;
......
......@@ -15,9 +15,17 @@ angular.module('ulakbus.auth')
* @name AuthService
* @description provides generic functions for authorization process.
*/
.factory('AuthService', function ($http, $rootScope, $location, $log, Generator, RESTURL) {
.factory('AuthService', function ($http, $rootScope, $location, $log, $route, Generator, RESTURL, WSOps) {
var authService = {};
authService.get_form = function (scope) {
return $http
.post(Generator.makeUrl(scope), scope.form_params)
.then(function (res) {
return Generator.generate(scope, res.data);
});
};
/**
* @memberof ulakbus.auth
* @ngdoc function
......@@ -36,11 +44,19 @@ angular.module('ulakbus.auth')
.success(function (data, status, headers, config) {
//$window.sessionStorage.token = data.token;
Generator.button_switch(true);
$rootScope.loggedInUser = true;
if (data.status_code !== 403) {
$rootScope.loggedInUser = true;
$rootScope.$broadcast("regenerate_menu");
$location.path('/dashboard');
}
if (data.status_code === 403) {
data.title = "İşlem başarısız oldu. Lütfen girdiğiniz bilgileri kontrol ediniz.";
return data;
}
})
.error(function (data, status, headers, config) {
// Handle login errors here
data.title = "İşlem başarısız oldu. Lütfen girdiğiniz bilgileri kontrol ediniz."
data.title = "İşlem başarısız oldu. Lütfen girdiğiniz bilgileri kontrol ediniz.";
return data;
});
};
......@@ -54,8 +70,9 @@ angular.module('ulakbus.auth')
* @returns {*}
*/
authService.logout = function () {
$log.debug("logout");
return $http.post(RESTURL.url + 'logout', {}).success(function (data) {
$rootScope.loginAttempt = 0;
WSOps.request({wf: 'logout'}).then(function (data) {
$rootScope.loggedInUser = false;
$log.debug("loggedout");
$location.path("/login");
......
<div ng-app="ulakbus.auth" class="container">
<div class="row">
<div class="col-md-4 col-md-offset-4">
<div class="login-panel panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Giriş Yap <span ng-if="loggingIn" class="loader pull-right"></span></h3>
</div>
<div class="panel-body">
<span class="label label-warning">{{message}}</span>
<form name="loginForm" sf-schema="schema" sf-form="form" sf-model="model" ng-submit="onSubmit(loginForm)"></form>
<div style="width: 100%; height: 100%; position: fixed; z-index: 1100; top:0; left:0; background: #fff;">
<div ng-app="ulakbus.auth" class="container">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="login-panel panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Giriş Yap <span ng-if="loggingIn" class="loader pull-right"></span></h3>
</div>
<div class="panel-body">
<form name="loginForm" sf-schema="schema" sf-form="form" sf-model="model"
ng-submit="onSubmit(loginForm)"></form>
</div>
</div>
<span class="label label-inverse label-warning">{{message}}</span>
</div>
</div>
</div>
......
......@@ -152,8 +152,14 @@ angular.module('ulakbus.crud', ['schemaForm', 'ulakbus.formService'])
*
* @returns {object}
*/
.controller('CRUDListFormController', function ($scope, $rootScope, $location, $http, $log, $uibModal, $timeout, Generator, $routeParams, CrudUtility) {
.controller('CRUDListFormController', function ($scope, $rootScope, $location, $sce, $http, $log, $uibModal, $timeout, Generator, $routeParams, CrudUtility) {
$scope.paginate = function (reloadData) {
$scope.form_params.cmd = $scope.reload_cmd;
$scope.form_params = angular.extend($scope.form_params, reloadData);
$log.debug('reload data', $scope);
Generator.get_wf($scope);
};
$scope.$on('reload_cmd', function(event, data){
$scope.reload_cmd = data;
$scope.reloadCmd();
......
......@@ -34,8 +34,8 @@
<td ng-repeat="field in object.fields track by $index">
<a role="button" ng-if="field.type==='link'"
ng-click="do_action(object.key, field)">{{field.content}}</a>
<span ng-if="field.type==='str'">{{field.content}}</span>
ng-click="do_action(object.key, field)" ng-bind-html="field.content | markdown"></a>
<span ng-if="field.type==='str'" ng-bind-html="field.content | markdown"></span>
</td>
<td>
......@@ -55,16 +55,16 @@
<nav ng-if="pagination && pagination.total_pages > 1" class="text-center">
<ul class="pagination">
<li ng-class="{disabled:pagination.page===1}">
<a aria-label="Önceki" ng-click="reload({page:pagination.page-1})">
<a role="button" aria-label="Önceki" ng-click="paginate({page:pagination.page-1})">
<span aria-hidden="true">&laquo;</span>
</a>
</li>
<li ng-repeat="page in getNumber(pagination.total_pages) track by $index"
ng-class="{active:$index+1===pagination.page}">
<a ng-click="reload({page:$index+1})">{{$index+1}}</a>
<a role="button" ng-click="paginate({page:$index+1})">{{$index+1}}</a>
</li>
<li ng-class="{disabled:pagination.page===pagination.total_pages}">
<a aria-label="Sonraki" ng-click="reload({page:pagination.page+1})">
<a role="button" aria-label="Sonraki" ng-click="paginate({page:pagination.page+1})">
<span aria-hidden="true">&raquo;</span>
</a>
</li>
......
<div ng-app="ulakbus.dashboard" class="dashboard student-dashboard">
<div class="starter-template">
<!-- STUDENT DASHBOARD -->
<div class="row">
<!-- STUDENT COURSES -->
<div class="col-lg-6 col-md-12 student-course-list">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Dersler</div>
</div>
<div class="panel-body">
<ul>
<li><a href="#"><span>181</span> Basic Physics</a></li>
<li><a href="#"><span>421</span> Research and Development</a></li>
<li><a href="#"><span>435</span> Project Management and Development</a></li>
<li><a href="#"><span>207</span> Design and Use of Instructional Material</a></li>
<li><a href="#"><span>323</span> Multimedia Design and Development</a></li>
<li><a href="#"><span>475</span> Climate Change Education for Sustainability</a></li>
</ul>
</div>
</div>
</div>
<!-- END OF STUDENT COURSES -->
<!-- STUDENT ASSIGNMENTS -->
<div class="col-lg-6 col-md-12 student-assignment-list">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Görevler</div>
</div>
<div class="panel-body">
<ul>
<li class="urgent-assignment">
<a href="#" class="clearfix">
<span class="assignment-status">
<div class="assignment-circle" uib-tooltip="Acil"></div>
</span>
<span class="assignment-title">
<div>Needs Assessment Document</div>
<div>435 - Project Management and Development</div>
</span>
<span class="assignment-due-date">
<div>18</div>
<div>ŞUB</div>
</span>
</a>
</li>
<!-- end of urgent-assignment -->
<li class="approaching-assignment">
<a href="#" class="clearfix">
<span class="assignment-status">
<div class="assignment-circle" uib-tooltip="Yaklaşıyor"></div>
</span>
<span class="assignment-title">
<div>Storyboard Design</div>
<div>435 - Project Management and Development</div>
</span>
<span class="assignment-due-date">
<div>27</div>
<div>ŞUB</div>
</span>
</a>
</li>
<!-- end of approaching-assignment -->
<li class="non-urgent-assignment">
<a href="#" class="clearfix">
<span class="assignment-status">
<div class="assignment-circle" uib-tooltip="Acil olmayan"></div>
</span>
<span class="assignment-title">
<div>Design Report</div>
<div>435 - Project Management and Development</div>
</span>
<span class="assignment-due-date">
<div>05</div>
<div>MAR</div>
</span>
</a>
</li>
<!-- end of non-urgent-assignment -->
<li class="last-assignment">
<div class="panel-heading">
<div class="panel-title">Tamamlanan Son Görevler</div>
</div>
<a href="#" class="clearfix">
<span class="assignment-status">
<div></div>
</span>
<span class="assignment-title">
<div>Design Report</div>
<div>435 - Project Management and Development</div>
</span>
<span class="assignment-due-date">
<div><i class="fa fa-check"></i></div>
</span>
</a>
</li>
<!-- end of last-assignment -->
</ul>
</div>
</div>
</div>
<!-- END OF STUDENT ASSIGNMENTS -->
</div>
<div class="row">
<!-- STUDENT ANNOUNCEMENTS -->
<div class="col-lg-6 col-md-12 student-announcement-list">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Duyurular</div>
</div>
<div class="panel-body">
<ul>
<li>
<a href="#" class="clearfix">
<span class="announcement-date">
<div>05</div>
<div>MAR</div>
</span>
<span class="announcement-text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus non molestie est. Phasellus suscipit ut quam pulvinar tincidunt. Etiam accumsan vel turpis vitae vehicula. Quisque vel est nisl. In massa sapien, congue at dapibus sed, maximus eu urna.
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="announcement-date">
<div>24</div>
<div>MAR</div>
</span>
<span class="announcement-text">
Donec nec purus et nunc imperdiet vulputate quis vel turpis. Suspendisse nec bibendum odio. Praesent et enim blandit, varius diam
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="announcement-date">
<div>11</div>
<div>NİS</div>
</span>
<span class="announcement-text">
Etiam eget libero sapien. Nulla vitae ultricies quam. Aliquam gravida ligula eu leo ullamcorper tristique. Donec accumsan nec odio non viverra.
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="announcement-date">
<div>19</div>
<div>MAY</div>
</span>
<span class="announcement-text">
Maecenas fermentum, metus sed feugiat lacinia, massa sem facilisis erat, eget sollicitudin ante ipsum id dolor. Curabitur id odio eleifend, lobortis ipsum id, lacinia lacus. Morbi ac rutrum nisl, id auctor purus. Fusce vulputate elit sed massa pellentesque convallis.
</span>
</a>
</li>
</ul>
</div>
</div>
</div>
<!-- END OF STUDENT ANNOUNCEMENTS -->
<!-- STUDENT MESSAGES -->
<div class="col-lg-6 col-md-12 student-message-list">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Görevler</div>
</div>
<div class="panel-body">
<ul>
<li>
<a href="#" class="clearfix">
<span class="profile-pic">
<img src="../../img/gokhan.jpg">
</span>
<span class="message-content">
<div>Gökhan Boranalp</div>
<div>Lorem ipsum dolor sit amet.</div>
</span>
<span class="message-time">
14:40
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="profile-pic">
<img src="../../img/evren.jpg">
</span>
<span class="message-content">
<div>Evren Kutar</div>
<div>Donec nec purus et nunc imperdiet vulputate quis vel turpis. Suspendisse nec bibendum odio. Praesent et enim blandit, varius diam in.</div>
</span>
<span class="message-time">
12:36
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="profile-pic">
<img src="../../img/erkan.jpg">
</span>
<span class="message-content">
<div>Erkan Öğümsöğütlü</div>
<div>Duis mi sem, euismod ut dui eget, egestas tincidunt ex. Aliquam id iaculis risus.</div>
</span>
<span class="message-time">
Yesterday
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="profile-pic">
<img src="../../img/sample-profile-pic.jpg">
</span>
<span class="message-content">
<div>Teddy Joyner</div>
<div>Nulla vitae ultricies quam.</div>
</span>
<span class="message-time">
16.02.2016
</span>
</a>
</li>
</ul>
</div>
</div>
</div>
<!-- END OF STUDENT MESSAGES -->
</div>
<!-- END OF STUDENT DASHBOARD -->
<div class="dashboard-main-search clearfix">
<div class="row" ng-show="$root.current_user.can_search">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Arama</div>
</div>
<div class="panel-body">
<div class="dashboard-student-search" data-step="2"
data-intro="isim veya tcno ile öğrenci araması yapabilirsiniz."
ng-show="$root.searchInputs.ogrenci">
<div class="text-center">
<h3>ÖĞRENCİ</h3>
<input type="text" placeholder="Öğrenci ara" ng-model="keyword.student"
ng-keyup="search('ogrenci')">
<span class="bordered-fa-icon fa fa-search" ng-click="search('ogrenci')"></span>
</div>
<div class="dashboard-search-results" ng-show="showResults">
<ul ng-if="students.length > 0">
<li ng-repeat="student in students">
<a role="button">
<span ng-click="select(student, 'ogrenci')">{{student[0]}}</span>
<i class="fa fa-fw fa-info-circle pull-right" popover-placement="bottom"
uib-popover-template="userPopover.templateUrl"
ng-click="get_info('Ogrenci', student[2])"></i></a>
</li>
</ul>
</div>
<!-- end of dashboard-student-search-results -->
</div>
<!-- end of dashboard-student-search -->
<div class="dashboard-personnel-search" data-step="3"
data-intro="isim veya tcno ile personel araması yapabilirsiniz."
ng-show="$root.searchInputs.personel">
<div class="text-center">
<h3>PERSONEL</h3>
<input type="text" placeholder="Personel ara" ng-model="keyword.staff"
ng-keyup="search('personel')">
<span class="bordered-fa-icon fa fa-search" ng-click="search('personel')"></span>
</div>
<div class="dashboard-search-results" ng-show="showResults">
<ul ng-if="staffs.length > 0">
<li ng-repeat="staff in staffs">
<a role="button">
<span ng-click="select(staff, 'personel')">{{staff[0]}}</span>
<i class="fa fa-fw fa-info-circle pull-right"
popover-placement="bottom"
uib-popover-template="userPopover.templateUrl"
ng-click="get_info('Personel', staff[2])"></i></a>
</li>
</ul>
</div>
<!-- end of dashboard-personnel-search-results -->
</div>
<!-- end of dashboard-personnel-search -->
</div>
</div>
</div>
</div>
</div>
<!-- end of dashboard-main-search -->
<div class="row">
<div class="col-md-12 quick-links">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Hızlı İşlemler</div>
<div class="panel-action pull-right"><i class="fa fa-edit fa-fw"></i> Düzenle</div>
</div>
<div class="panel-body">
<div class="col-md-6 text-center link-buttons"
ng-repeat="item in $root.quick_menu track by $index">
<a
ng-href="#/{{item.wf}}/{{item.model}}?{{item.param}}={{selectedUser.key}}">
{{item.text}}
</a>
</div>
</div>
</div>
</div>
</div>
<!-- end of row -->
<div class="dashboard-main-anouncement clearfix">
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Duyurular</div>
</div>
<div class="panel-body">
<a ng-click="markAsRead(notify)"
ng-repeat="notify in notifications[3] | limitTo:5">{{notify
.body}}</a>
</div>
</div>
</div>
</div>
</div>
<!-- end of dashboard-main-anouncement -->
<!--<div class="right-sidebar selected-person-field">-->
<!--<div class="right-sidebar-header">-->
<!--<span class="bar-title">Kişi seçildi</span>-->
<!--<span class="unselect-person"><i class="fa fa-times"></i></span>-->
<!--</div>-->
<!--&lt;!&ndash; end of right-sidebaer-header &ndash;&gt;-->
<!---->
<!--<div class="selected-person-info">-->
<!--<img src="../../img/sample-profile-pic.jpg" class="selected-person-img">-->
<!--<div class="selected-person-name">Erkan Öğümsöğütlü</div>-->
<!--</div>-->
<!--&lt;!&ndash; end of selected-person-info &ndash;&gt;-->
<!--</div>-->
<!-- end of right-sidebar -->
<ng-include src="'components/dashboard/user-templates/student.html'" ng-if="$root.current_user.is_student"></ng-include>
<ng-include src="'components/dashboard/user-templates/staff.html'" ng-if="$root.current_user.is_staff"></ng-include>
</div>
</div>
\ No newline at end of file
......@@ -21,7 +21,8 @@ angular.module('ulakbus.dashboard', [])
$uibTooltipProvider.setTriggers({'click': 'mouseleave'});
})
.controller('DashController', function ($scope, $rootScope, $timeout, $http, $cookies, RESTURL, Generator) {
.controller('DashController', function ($scope, $rootScope, $routeParams, $route, $timeout, $http, $cookies, RESTURL, Generator, WSOps) {
$scope.section = function (section_index) {
$rootScope.section = section_index;
};
......@@ -37,28 +38,27 @@ angular.module('ulakbus.dashboard', [])
$scope.staffs = [];
$scope.search = function (where) {
$timeout(function () {
if (where === 'personel') {
// if input length greater than 2 search for the value
if ($scope.keyword.staff.length > 2) {
$scope.getItems(where, $scope.keyword.staff).success(function (data) {
if ($scope.keyword.staff.length > 2 || $scope.keyword.student.length > 2) {
$timeout(function () {
if (where === 'personel') {
// if input length greater than 2 search for the value
$scope.getItems(where, $scope.keyword.staff).then(function (data) {
$scope.staffs = data.results;
});
}
}
if (where === 'ogrenci') {
if ($scope.keyword.student.length > 2) {
$scope.getItems(where, $scope.keyword.student).success(function (data) {
if (where === 'ogrenci') {
$scope.getItems(where, $scope.keyword.student).then(function (data) {
$scope.students = data.results;
})
}
}
}, 500);
}, 500);
}
};
$scope.getItems = function (where, what) {
$scope.showResults = true;
return $http.get(RESTURL.url + 'ara/' + where + '/' + what);
return WSOps.request({view: where + '_ara', query: what});
};
$scope.userPopover = {templateUrl: 'components/dashboard/user-info.html'};
......@@ -96,7 +96,11 @@ angular.module('ulakbus.dashboard', [])
$scope.markAsRead = function (items) {
$rootScope.$broadcast("markasread", items);
}
};
//if ($routeParams.cmd = 'reload') {
// $route.reload();
//}
})
.directive('sidebarNotifications', function () {
......
<div class="dashboard-main-search clearfix">
<div class="row" ng-if="$root.current_user.can_search">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Arama</div>
</div>
<div class="panel-body">
<div class="dashboard-student-search" data-step="2"
data-intro="isim veya tcno ile öğrenci araması yapabilirsiniz."
ng-show="$root.searchInputs.ogrenci">
<div class="text-center">
<h3>ÖĞRENCİ</h3>
<input type="text" placeholder="Öğrenci ara" ng-model="keyword.student"
ng-keyup="search('ogrenci')">
<span class="bordered-fa-icon fa fa-search" ng-click="search('ogrenci')"></span>
</div>
<div class="dashboard-search-results" ng-show="showResults">
<ul ng-if="students.length > 0">
<li ng-repeat="student in students">
<a role="button">
<span ng-click="select(student, 'ogrenci')">{{student[0]}}</span>
<i class="fa fa-fw fa-info-circle pull-right" popover-placement="bottom"
uib-popover-template="userPopover.templateUrl"
ng-click="get_info('Ogrenci', student[2])"></i></a>
</li>
</ul>
</div>
<!-- end of dashboard-student-search-results -->
</div>
<!-- end of dashboard-student-search -->
<div class="dashboard-personnel-search" data-step="3"
data-intro="isim veya tcno ile personel araması yapabilirsiniz."
ng-show="$root.searchInputs.personel">
<div class="text-center">
<h3>PERSONEL</h3>
<input type="text" placeholder="Personel ara" ng-model="keyword.staff"
ng-keyup="search('personel')">
<span class="bordered-fa-icon fa fa-search" ng-click="search('personel')"></span>
</div>
<div class="dashboard-search-results" ng-show="showResults">
<ul ng-if="staffs.length > 0">
<li ng-repeat="staff in staffs">
<a role="button">
<span ng-click="select(staff, 'personel')">{{staff[0]}}</span>
<i class="fa fa-fw fa-info-circle pull-right"
popover-placement="bottom"
uib-popover-template="userPopover.templateUrl"
ng-click="get_info('Personel', staff[2])"></i></a>
</li>
</ul>
</div>
<!-- end of dashboard-personnel-search-results -->
</div>
<!-- end of dashboard-personnel-search -->
</div>
</div>
</div>
</div>
</div>
<!-- end of dashboard-main-search -->
<div class="row">
<div class="col-md-12 quick-links">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Hızlı İşlemler</div>
<div class="panel-action pull-right"><i class="fa fa-edit fa-fw"></i> Düzenle</div>
</div>
<div class="panel-body">
<div class="col-md-6 text-center link-buttons"
ng-repeat="item in $root.quick_menu track by $index">
<a
ng-href="#/{{item.wf}}/{{item.model}}?{{item.param}}={{selectedUser.key}}">
{{item.text}}
</a>
</div>
</div>
</div>
</div>
</div>
<!-- end of row -->
<div class="dashboard-main-anouncement clearfix">
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Duyurular</div>
</div>
<div class="panel-body">
<a ng-click="markAsRead(notify)"
ng-repeat="notify in notifications[3] | limitTo:5">{{notify
.body}}</a>
</div>
</div>
</div>
</div>
</div>
<!-- end of dashboard-main-anouncement -->
\ No newline at end of file
<!-- STUDENT DASHBOARD -->
<div class="row">
<!-- STUDENT COURSES -->
<div class="col-lg-6 col-md-12 student-course-list">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Dersler</div>
</div>
<div class="panel-body">
<ul>
<li><a href="#"><span>181</span> Basic Physics</a></li>
<li><a href="#"><span>421</span> Research and Development</a></li>
<li><a href="#"><span>435</span> Project Management and Development</a></li>
<li><a href="#"><span>207</span> Design and Use of Instructional Material</a></li>
<li><a href="#"><span>323</span> Multimedia Design and Development</a></li>
<li><a href="#"><span>475</span> Climate Change Education for Sustainability</a></li>
</ul>
</div>
</div>
</div>
<!-- END OF STUDENT COURSES -->
<!-- STUDENT ASSIGNMENTS -->
<div class="col-lg-6 col-md-12 student-assignment-list">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Görevler</div>
</div>
<div class="panel-body">
<ul>
<li class="urgent-assignment">
<a href="#" class="clearfix">
<span class="assignment-status">
<div class="assignment-circle" uib-tooltip="Acil"></div>
</span>
<span class="assignment-title">
<div>Needs Assessment Document</div>
<div>435 - Project Management and Development</div>
</span>
<span class="assignment-due-date">
<div>18</div>
<div>ŞUB</div>
</span>
</a>
</li>
<!-- end of urgent-assignment -->
<li class="approaching-assignment">
<a href="#" class="clearfix">
<span class="assignment-status">
<div class="assignment-circle" uib-tooltip="Yaklaşıyor"></div>
</span>
<span class="assignment-title">
<div>Storyboard Design</div>
<div>435 - Project Management and Development</div>
</span>
<span class="assignment-due-date">
<div>27</div>
<div>ŞUB</div>
</span>
</a>
</li>
<!-- end of approaching-assignment -->
<li class="non-urgent-assignment">
<a href="#" class="clearfix">
<span class="assignment-status">
<div class="assignment-circle" uib-tooltip="Acil olmayan"></div>
</span>
<span class="assignment-title">
<div>Design Report</div>
<div>435 - Project Management and Development</div>
</span>
<span class="assignment-due-date">
<div>05</div>
<div>MAR</div>
</span>
</a>
</li>
<!-- end of non-urgent-assignment -->
<li class="last-assignment">
<div class="panel-heading">
<div class="panel-title">Tamamlanan Son Görevler</div>
</div>
<a href="#" class="clearfix">
<span class="assignment-status">
<div></div>
</span>
<span class="assignment-title">
<div>Design Report</div>
<div>435 - Project Management and Development</div>
</span>
<span class="assignment-due-date">
<div><i class="fa fa-check"></i></div>
</span>
</a>
</li>
<!-- end of last-assignment -->
</ul>
</div>
</div>
</div>
<!-- END OF STUDENT ASSIGNMENTS -->
</div>
<div class="row">
<!-- STUDENT ANNOUNCEMENTS -->
<div class="col-lg-6 col-md-12 student-announcement-list">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Duyurular</div>
</div>
<div class="panel-body">
<ul>
<li>
<a href="#" class="clearfix">
<span class="announcement-date">
<div>05</div>
<div>MAR</div>
</span>
<span class="announcement-text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus non molestie est. Phasellus suscipit ut quam pulvinar tincidunt. Etiam accumsan vel turpis vitae vehicula. Quisque vel est nisl. In massa sapien, congue at dapibus sed, maximus eu urna.
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="announcement-date">
<div>24</div>
<div>MAR</div>
</span>
<span class="announcement-text">
Donec nec purus et nunc imperdiet vulputate quis vel turpis. Suspendisse nec bibendum odio. Praesent et enim blandit, varius diam
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="announcement-date">
<div>11</div>
<div>NİS</div>
</span>
<span class="announcement-text">
Etiam eget libero sapien. Nulla vitae ultricies quam. Aliquam gravida ligula eu leo ullamcorper tristique. Donec accumsan nec odio non viverra.
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="announcement-date">
<div>19</div>
<div>MAY</div>
</span>
<span class="announcement-text">
Maecenas fermentum, metus sed feugiat lacinia, massa sem facilisis erat, eget sollicitudin ante ipsum id dolor. Curabitur id odio eleifend, lobortis ipsum id, lacinia lacus. Morbi ac rutrum nisl, id auctor purus. Fusce vulputate elit sed massa pellentesque convallis.
</span>
</a>
</li>
</ul>
</div>
</div>
</div>
<!-- END OF STUDENT ANNOUNCEMENTS -->
<!-- STUDENT MESSAGES -->
<div class="col-lg-6 col-md-12 student-message-list">
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">Görevler</div>
</div>
<div class="panel-body">
<ul>
<li>
<a href="#" class="clearfix">
<span class="profile-pic">
<img src="../../img/gokhan.jpg">
</span>
<span class="message-content">
<div>Gökhan Boranalp</div>
<div>Lorem ipsum dolor sit amet.</div>
</span>
<span class="message-time">
14:40
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="profile-pic">
<img src="../../img/evren.jpg">
</span>
<span class="message-content">
<div>Evren Kutar</div>
<div>Donec nec purus et nunc imperdiet vulputate quis vel turpis. Suspendisse nec bibendum odio. Praesent et enim blandit, varius diam in.</div>
</span>
<span class="message-time">
12:36
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="profile-pic">
<img src="../../img/erkan.jpg">
</span>
<span class="message-content">
<div>Erkan Öğümsöğütlü</div>
<div>Duis mi sem, euismod ut dui eget, egestas tincidunt ex. Aliquam id iaculis risus.</div>
</span>
<span class="message-time">
Yesterday
</span>
</a>
</li>
<li>
<a href="#" class="clearfix">
<span class="profile-pic">
<img src="../../img/sample-profile-pic.jpg">
</span>
<span class="message-content">
<div>Teddy Joyner</div>
<div>Nulla vitae ultricies quam.</div>
</span>
<span class="message-time">
16.02.2016
</span>
</a>
</li>
</ul>
</div>
</div>
</div>
<!-- END OF STUDENT MESSAGES -->
</div>
<!-- END OF STUDENT DASHBOARD -->
\ No newline at end of file
......@@ -5,4 +5,4 @@ angular.module('ulakbus.version', [
'ulakbus.version.version-directive'
])
.value('version', '0.6.10');
\ No newline at end of file
.value('version', '0.8.0');
\ No newline at end of file
......@@ -5,7 +5,7 @@ describe('ulakbus.version module', function() {
describe('version service', function() {
it('should return current version', inject(function(version) {
expect(version).toEqual('0.6.10');
expect(version).toEqual('0.8.0');
}));
});
});
\ No newline at end of file
......@@ -30,7 +30,7 @@
</head>
<body ng-controller="KeyListenController" ng-keydown="down($event)">
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0" ng-if="$root.loggedInUser">
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0" ng-if="$root.current_user">
<collapse-menu></collapse-menu>
<!--<ul class="header-menu">-->
<!--<li><a href="">Mesajlar</a></li>-->
......@@ -53,12 +53,12 @@
<header-notification></header-notification>
</nav>
<sidebar ng-if="$root.loggedInUser"></sidebar>
<sidebar ng-if="$root.current_user"></sidebar>
<div class="manager-view">
<div class="manager-view-inner">
<!-- manager-header -->
<header-sub-menu ng-if="$root.loggedInUser"></header-sub-menu>
<header-sub-menu ng-if="$root.current_user"></header-sub-menu>
<!-- end of manager-header -->
<div class="manager-view-content">
<div class="row">
......@@ -82,10 +82,12 @@
<!--<script src="bower_components/angular-resource/angular-resource.min.js"></script>-->
<!--<script src="bower_components/angular-bootstrap/ui-bootstrap.min.js"></script>-->
<script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
<script src="bower_components/showdown/dist/showdown.min.js"></script>
<script src="bower_components/angular-markdown-filter/markdown.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.min.js"></script>
<script src="bower_components/tv4/tv4.js"></script>
<script src="bower_components/objectpath/lib/ObjectPath.js"></script>
<script src="bower_components/angular-schema-form/dist/schema-form.min.js"></script>
<script src="bower_components/angular-schema-form/dist/schema-form.js"></script>
<script src="bower_components/angular-schema-form/dist/bootstrap-decorator.min.js"></script>
<script src="bower_components/angular-gettext/dist/angular-gettext.min.js"></script>
<script src="bower_components/moment/min/moment.min.js"></script>
......@@ -106,6 +108,7 @@
<script src="zetalib/interceptors.js"></script>
<script src="zetalib/form_service.js"></script>
<script src="zetalib/action_service.js"></script>
<script src="zetalib/error_service.js"></script>
<script src="zetalib/socket.js"></script>
<!-- components -->
......
......@@ -37,7 +37,7 @@
</head>
<body ng-controller="KeyListenController" ng-keydown="down($event)">
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0" ng-if="$root.loggedInUser">
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0" ng-if="$root.current_user">
<collapse-menu></collapse-menu>
<!--<ul class="header-menu">-->
<!--<li><a href="">Mesajlar</a></li>-->
......@@ -60,12 +60,12 @@
<header-notification></header-notification>
</nav>
<sidebar ng-if="$root.loggedInUser"></sidebar>
<sidebar ng-if="$root.current_user"></sidebar>
<div class="manager-view">
<div class="manager-view-inner">
<!-- manager-header -->
<header-sub-menu ng-if="$root.loggedInUser"></header-sub-menu>
<header-sub-menu ng-if="$root.current_user"></header-sub-menu>
<!-- end of manager-header -->
<div class="manager-view-content">
<div class="row">
......@@ -90,10 +90,12 @@
<!--<script src="bower_components/angular-resource/angular-resource.min.js"></script>-->
<!--<script src="bower_components/angular-bootstrap/ui-bootstrap.min.js"></script>-->
<script src="bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>
<script src="bower_components/showdown/dist/showdown.min.js"></script>
<script src="bower_components/angular-markdown-filter/markdown.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.min.js"></script>
<script src="bower_components/tv4/tv4.js"></script>
<script src="bower_components/objectpath/lib/ObjectPath.js"></script>
<script src="bower_components/angular-schema-form/dist/schema-form.min.js"></script>
<script src="bower_components/angular-schema-form/dist/schema-form.js"></script>
<script src="bower_components/angular-schema-form/dist/bootstrap-decorator.min.js"></script>
<script src="bower_components/angular-gettext/dist/angular-gettext.min.js"></script>
<script src="bower_components/moment/min/moment.min.js"></script>
......@@ -114,6 +116,7 @@
<script src="zetalib/interceptors.js"></script>
<script src="zetalib/form_service.js"></script>
<script src="zetalib/action_service.js"></script>
<script src="zetalib/error_service.js"></script>
<script src="zetalib/socket.js"></script>
<!-- components -->
......
......@@ -36,6 +36,7 @@ angular.module(
'ulakbus.devSettings',
'ulakbus.version',
'gettext',
'markdown',
// @if NODE_ENV='PRODUCTION'
'templates-prod',
// @endif
......@@ -60,6 +61,8 @@ angular.module(
angular.forEach(cookiearray, function (item) {
if (item.indexOf("backendurl") > -1) {
backendurl = item.split('=')[1];
if (backendurl.slice(-1) !== '/') {backendurl += '/'}
if (backendurl.substring(0,4) !== 'http') {backendurl = 'http://'+backendurl}
}
});
}
......@@ -67,6 +70,8 @@ angular.module(
if (location.href.indexOf("backendurl") > -1) {
var urlfromqstr = location.href.split('?')[1].split('=')[1];
backendurl = decodeURIComponent(urlfromqstr.replace(/\+/g, " "));
if (backendurl.slice(-1) !== '/') {backendurl += '/'}
if (backendurl.substring(0,4) !== 'http') {backendurl = 'http://'+backendurl}
document.cookie = "backendurl=" + backendurl;
window.location.href = window.location.href.split('?')[0];
}
......@@ -74,6 +79,7 @@ angular.module(
return {url: backendurl};
})())
.constant('toastr', window.toastr)
.constant('WS', window.WebSocket)
.config(function ($logProvider) {
// @if NODE_ENV='PRODUCTION'
$logProvider.debugEnabled(false);
......@@ -81,4 +87,9 @@ angular.module(
// @if NODE_ENV='DEVELOPMENT'
$logProvider.debugEnabled(true);
// @endif
})
.config(function(markdownProvider) {
//markdownProvider.config({
// extensions: ['table']
//});
});
\ No newline at end of file
......@@ -14,14 +14,15 @@ angular.module('ulakbus')
* @description logout directive provides a button with click event. When triggered it post to
* '/logout' path of the API.
*/
.directive('logout', function ($http, $location, RESTURL) {
.directive('logout', function ($http, $location, RESTURL, AuthService) {
return {
link: function ($scope, $element, $rootScope) {
$element.on('click', function () {
$http.post(RESTURL.url + 'logout', {}).then(function () {
$rootScope.loggedInUser = false;
$location.path("/login");
});
AuthService.logout();
//$http.post(RESTURL.url + 'logout', {}).then(function () {
// $rootScope.loggedInUser = false;
// $location.path("/login");
//});
});
}
};
......@@ -61,10 +62,10 @@ angular.module('ulakbus')
*/
$scope.getNotifications = function () {
// ignore loading bar here
$http.get(RESTURL.url + "notify", {ignoreLoadingBar: true}).success(function (data) {
$scope.groupNotifications(data.notifications);
$rootScope.$broadcast("notifications", $scope.notifications);
});
//$http.get(RESTURL.url + "notify", {ignoreLoadingBar: true}).success(function (data) {
// $scope.groupNotifications(data.notifications);
// $rootScope.$broadcast("notifications", $scope.notifications);
//});
};
$scope.getNotifications();
......@@ -82,11 +83,11 @@ angular.module('ulakbus')
* @todo: do it in detail page of notification
*/
$scope.markAsRead = function (items) {
$http.post(RESTURL.url + "notify", {ignoreLoadingBar: true, read: [items]})
.success(function (data) {
$scope.groupNotifications(data.notifications);
$rootScope.$broadcast("notifications", $scope.notifications);
});
//$http.post(RESTURL.url + "notify", {ignoreLoadingBar: true, read: [items]})
// .success(function (data) {
// $scope.groupNotifications(data.notifications);
// $rootScope.$broadcast("notifications", $scope.notifications);
// });
};
// if markasread triggered outside the directive
......@@ -133,10 +134,10 @@ angular.module('ulakbus')
$scope.$broadcast('schemaFormValidate');
if (form.$valid) {
var searchparams = {
url: $scope.wf,
token: $scope.$parent.token,
object_id: $scope.$parent.object_id,
form_params: {
wf: $scope.$parent.wf,
model: $scope.$parent.form_params.model,
cmd: $scope.$parent.reload_cmd,
flow: $scope.$parent.form_params.flow,
......@@ -144,10 +145,7 @@ angular.module('ulakbus')
}
};
Generator.submit(searchparams).success(function (data) {
// update objects item of page scope
$rootScope.$broadcast('updateObjects', data.objects);
});
Generator.submit(searchparams);
}
};
}
......@@ -310,59 +308,66 @@ angular.module('ulakbus')
return newMenuItems;
};
var sidebarmenu = $('#side-menu');
sidebarmenu.metisMenu();
$http.get(RESTURL.url + 'menu/')
.success(function (data) {
$scope.allMenuItems = angular.copy(data);
// regroup menu items based on their category
function reGroupMenuItems(items, baseCategory) {
var newItems = {};
angular.forEach(items, function (value, key) {
newItems[value.kategori] = newItems[value.kategori] || [];
value['baseCategory'] = baseCategory;
newItems[value.kategori].push(value);
});
return newItems;
}
angular.forEach($scope.allMenuItems, function (value, key) {
if (key !== 'current_user' && key !== 'settings') {
$scope.allMenuItems[key] = reGroupMenuItems(value, key);
var generate_menu = function () {
var sidebarmenu = $('#side-menu');
sidebarmenu.metisMenu();
$http.get(RESTURL.url + 'menu', {ignoreLoadingBar: true})
.success(function (data) {
$scope.allMenuItems = angular.copy(data);
// regroup menu items based on their category
function reGroupMenuItems(items, baseCategory) {
var newItems = {};
angular.forEach(items, function (value, key) {
newItems[value.kategori] = newItems[value.kategori] || [];
value['baseCategory'] = baseCategory;
newItems[value.kategori].push(value);
});
return newItems;
}
});
// quick menus to dashboard via rootscope
angular.forEach($scope.allMenuItems, function (value, key) {
if (key !== 'current_user' && key !== 'settings') {
$scope.allMenuItems[key] = reGroupMenuItems(value, key);
}
});
$rootScope.quick_menu = reGroupMenuItems(data.quick_menu, 'quick_menus');
$rootScope.quick_menu = data.quick_menu;
delete data.quick_menu;
$log.debug('quick menu', $rootScope.quick_menu);
// quick menus to dashboard via rootscope
// broadcast for authorized menu items, consume in dashboard to show search inputs and/or
// related items
$rootScope.$broadcast("authz", data);
$rootScope.searchInputs = data;
$rootScope.quick_menu = reGroupMenuItems(data.quick_menu, 'quick_menus');
$rootScope.quick_menu = data.quick_menu;
delete data.quick_menu;
$log.debug('quick menu', $rootScope.quick_menu);
$rootScope.current_user = data.current_user;
if (data.ogrenci || data.personel) {
$rootScope.current_user.can_search = true;
}
$rootScope.settings = data.settings;
// broadcast for authorized menu items, consume in dashboard to show search inputs and/or
// related items
$rootScope.$broadcast("authz", data);
$rootScope.$broadcast("ws_turn_on");
$rootScope.searchInputs = data;
$scope.menuItems = $scope.prepareMenu({other: $scope.allMenuItems.other});
$rootScope.current_user = data.current_user;
if (data.ogrenci || data.personel) {
$rootScope.current_user.can_search = true;
}
$rootScope.settings = data.settings;
$timeout(function () {
sidebarmenu.metisMenu();
// to show page items showApp must be set to true
// it prevents to show empty nonsense page items when http401/403
//$rootScope.showApp = true;
$scope.menuItems = $scope.prepareMenu({other: $scope.allMenuItems.other});
$timeout(function () {
sidebarmenu.metisMenu();
});
})
.error(function (data, status, headers, config) {
$log.error('menu not retrieved', data);
$location.path('/login');
});
});
};
$scope.$on("regenerate_menu", function () {
generate_menu();
});
generate_menu();
// changing menu items by listening for broadcast
$scope.$on("menuitems", function (event, data) {
var menu = {};
menu[data] = $scope.allMenuItems[data];
......
......@@ -4,7 +4,7 @@
<label class="control-label {{form.labelHtmlClass}}" ng-show="showTitle()">
{{form.title}}
</label>
<a role="button"><i class="fa fa-plus-circle fa-fw" add-modal-for-linked-model="{{form.formName}}"></i></a>
<!--<a role="button"><i class="fa fa-plus-circle fa-fw" add-modal-for-linked-model="{{form.formName}}"></i></a>-->
<div class="row">
<div class="col-md-12">
......
/**
* Copyright (C) 2015 ZetaOps Inc.
*
* This file is licensed under the GNU General Public License v3
* (GPLv3). See LICENSE.txt for details.
*
* @author Evren Kutar
*/
angular.module('ulakbus')
.factory('ErrorService', function (toastr, $rootScope, $location, $log) {
var error_service = {};
error_service.handle = function (rejection, prtcl) {
var errorInModal;
if (prtcl === 'http') {
if (rejection.data) {
errorInModal = ('error' in rejection.data);
} else {
errorInModal = false;
}
}
if (prtcl === 'ws') {
rejection.status = rejection.status || rejection.code;
rejection.data = {error: rejection.error};
errorInModal = true;
}
var errorModal = function () {
if ($rootScope.loginAttempt === 0 && prtcl === 'http') {
$log.debug('not logged in, no alert message triggered');
return;
}
var codefield = "";
if (rejection.data.error) {
codefield = '<p><pre>' +
rejection.data.error +
'</pre></p>';
}
$('<div class="modal">' +
'<div class="modal-dialog" style="width:100%;" role="document">' +
'<div class="modal-content">' +
'<div class="modal-header">' +
'<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span' +
' aria-hidden="true">&times;</span></button>' +
'<h4 class="modal-title" id="exampleModalLabel">' +
"Error Status: " + rejection.status + "<br>Error Title: " + rejection.data.title +
'</h4>' +
'</div>' +
'<div class="modal-body">' +
'<div class="alert alert-danger">' +
'<strong>' +
rejection.data.description +
'</strong>' +
codefield +
'</div>' +
'</div>' +
'<div class="modal-footer">' +
'<button type="button" class="btn btn-default" data-dismiss="modal">Kapat</button>' +
'</div>' +
'</div>' +
'</div>' +
'</div>').modal();
try {
$('pre:not(.hljs)').each(function (i, block) {
hljs.highlightBlock(block);
});
}
catch (e) {
$log.debug('Exception: ', e.message);
}
};
var errorInAlertBox = function (alertContent) {
if (errorInModal) {
errorModal();
} else {
if ($rootScope.loginAttempt > 0) {
toastr.error(alertContent.msg, alertContent.title);
}
}
};
var errorForAlertBox = {
title: rejection.status,
msg: rejection.data ? rejection.data.description : 'Error',
type: 'error'
};
var errorDispatch = {
"-1": function () {
//rejection.status = 'Sunucu hatası';
//rejection.data = rejection.data || {};
//rejection.data.title = rejection.data.title || "Sunucu Hatası";
//rejection.data.description = rejection.data.description || 'Sunucu bağlantısında bir hata oluştu. Lütfen yetkili personelle iletişime geçiniz.';
$log.error('-1 returned:', rejection);
//errorInAlertBox(errorForAlertBox);
//$location.path('/login');
},
"400": function () {
$location.reload();
},
"401": function () {
$location.path('/login');
if ($location.path() === "/login") {
$log.debug("show errors on login form");
}
},
"403": function () {
if (rejection.data.is_login === true) {
$rootScope.loggedInUser = true;
if ($location.path() === "/login") {
$location.path("/dashboard");
}
}
},
"404": function () {
errorInAlertBox(errorForAlertBox);
},
"500": function () {
errorInAlertBox(errorForAlertBox);
},
"503": function () {
rejection.data = {description: "Servise erişilemiyor."};
errorInAlertBox(errorForAlertBox);
}
};
errorDispatch[rejection.status]();
};
return error_service;
});
\ No newline at end of file
......@@ -182,10 +182,11 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
)
});
$log.debug('grouped form: ', newForm);
$log.debug('rest of form: ', scope.form);
$log.debug('form united: ', newForm.concat(scope.form));
if (newForm.length > 0) {
$log.debug('grouped form: ', newForm);
$log.debug('rest of form: ', scope.form);
$log.debug('form united: ', newForm.concat(scope.form));
}
scope.form = newForm.concat(scope.form);
return scope;
};
......@@ -379,8 +380,8 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
var _node_filter_interface = function (scope, v, k) {
var formitem = scope.form[scope.form.indexOf(k)];
var modelScope = {
"url": v.wf || scope.wf, "wf": v.wf || scope.wf,
"form_params": {
wf: v.wf || scope.wf,
model: v.model_name || v.schema[0].model_name,
cmd: v.list_cmd || 'select_list',
query: ''
......@@ -390,7 +391,7 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
scope.generateTitleMap = function (modelScope) {
generator.get_list(modelScope).then(function (res) {
formitem.titleMap = [];
angular.forEach(res.data.objects, function (item) {
angular.forEach(res.objects, function (item) {
if (item !== "-1") {
formitem.titleMap.push({
"value": item.key,
......@@ -421,10 +422,10 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
title: v.title,
// formName will be used in modal return to save item on form
formName: k,
wf: v.wf,
wf: v.wf || scope.wf,
add_cmd: v.add_cmd,
name: v.model_name,
model_name: v.model_name,
name: v.model_name || v.schema[0].model_name,
model_name: v.model_name || v.schema[0].model_name,
filterValue: '',
selected_item: {},
filteredItems: [],
......@@ -479,7 +480,8 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
var generate_fields = {
button: {default: _buttons},
submit: {default: _buttons},
file: {default: function (scope, v, k) {
file: {
default: function (scope, v, k) {
scope.form[scope.form.indexOf(k)] = {
type: "template",
title: v.title,
......@@ -493,8 +495,10 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
avatar: k === 'avatar'
};
v.type = 'string';
}},
select: {default: function (scope, v, k) {
}
},
select: {
default: function (scope, v, k) {
scope.form[scope.form.indexOf(k)] = {
type: "template",
title: v.title,
......@@ -503,8 +507,10 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
key: k,
titleMap: v.titleMap
};
}},
date: {default: function (scope, v, k) {
}
},
date: {
default: function (scope, v, k) {
$log.debug('date:', scope.model[k]);
scope.model[k] = generator.dateformatter(scope.model[k]);
scope.form[scope.form.indexOf(k)] = {
......@@ -547,44 +553,53 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
scope.model[k] = angular.copy(generator.dateformatter(scope.model[k]));
}
};
}},
}
},
int: {default: _numbers},
boolean: {default: function () {}},
string: {default: function () {}},
typeahead: {default: function (scope, v, k) {
scope.form[scope.form.indexOf(k)] = {
type: "template",
title: v.title,
titleMap: v.titleMap,
templateUrl: "shared/templates/typeahead.html",
name: k,
key: k,
onDropdownSelect: function (item, inputname) {
scope.model[k] = item.value;
$timeout(function () {
document.querySelector('input[name=' + inputname + ']').value = item.name;
});
}
};
v.type = 'string';
}},
boolean: {
default: function () {
}
},
string: {
default: function () {
}
},
typeahead: {
default: function (scope, v, k) {
scope.form[scope.form.indexOf(k)] = {
type: "template",
title: v.title,
titleMap: v.titleMap,
templateUrl: "shared/templates/typeahead.html",
name: k,
key: k,
onDropdownSelect: function (item, inputname) {
scope.model[k] = item.value;
$timeout(function () {
document.querySelector('input[name=' + inputname + ']').value = item.name;
});
}
};
v.type = 'string';
}
},
text_general: {
default:
function (scope, v, k) {
v.type = 'string',
default: function (scope, v, k) {
v.type = 'string',
v["x-schema-form"] = {
"type": "textarea"
}
}
}
},
float: {default: _numbers},
model: {default: function (scope, v, k) {
model: {
default: function (scope, v, k) {
var formitem = scope.form[scope.form.indexOf(k)];
var modelScope = {
"url": v.wf,
"wf": v.wf,
"form_params": {model: v.model_name, cmd: v.list_cmd}
"form_params": {wf: v.wf, model: v.model_name, cmd: v.list_cmd}
};
//scope.$on('refreshTitleMap', function (event, data) {
......@@ -594,7 +609,7 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
scope.generateTitleMap = function (modelScope) {
return generator.get_list(modelScope).then(function (res) {
formitem.titleMap = [];
angular.forEach(res.data.objects, function (item) {
angular.forEach(res.objects, function (item) {
if (item !== -1) {
formitem.titleMap.push({
"value": item.key,
......@@ -610,28 +625,6 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
});
};
// get selected item from titleMap using model value
if (scope.model[k]) {
generator.get_list({
url: 'crud',
form_params: {model: v.model_name, object_id: scope.model[k], cmd: 'object_name'}
})
.then(function (data) {
try {
scope.$watch(document.querySelector('input[name=' + v.model_name + ']'),
function () {
document.querySelector('input[name=' + k + ']').value = data.data.object_name;
}
);
}
catch (e) {
document.querySelector('input[name=' + k + ']').value = data.data.object_name;
$log.debug('exception', e);
}
});
}
formitem = {
type: "template",
templateUrl: "shared/templates/foreignKey.html",
......@@ -675,7 +668,34 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
};
scope.form[scope.form.indexOf(k)] = formitem;
}},
// get selected item from titleMap using model value
if (scope.model[k]) {
generator.get_list({
url: 'crud',
form_params: {
wf: v.wf,
model: v.model_name,
object_id: scope.model[k],
cmd: 'object_name'
}
})
.then(function (data) {
try {
$timeout(function () {
document.querySelector('input[name=' + k + ']').value = data.object_name;
}, 200);
}
catch (e) {
document.querySelector('input[name=' + k + ']').value = data.object_name;
$log.debug('exception', e);
}
});
}
}
},
Node: {
default: _node_default,
filter_interface: _node_filter_interface
......@@ -745,6 +765,7 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
normal: function () {
$log.debug('normal mode starts');
$scope.form_params.cmd = todo.cmd;
$scope.form_params.wf = $scope.wf;
if (todo.wf) {
$scope.url = todo.wf;
$scope.form_params.wf = todo.wf;
......@@ -796,13 +817,22 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
* @returns {*}
*/
generator.get_form = function (scope) {
//generator.button_switch(false);
return $http
.post(generator.makeUrl(scope), scope.form_params)
.then(function (res) {
//generator.button_switch(true);
return generator.generate(scope, res.data);
});
if ($rootScope.websocketIsOpen === true) {
return WSOps.request(scope.form_params)
.then(function (data) {
return generator.generate(scope, data);
});
} else {
$timeout(function () {
generator.get_form(scope);
}, 500);
}
//return $http
// .post(generator.makeUrl(scope), scope.form_params)
// .then(function (res) {
// //generator.button_switch(true);
// return generator.generate(scope, res.data);
// });
};
/**
* @memberof ulakbus.formService
......@@ -813,13 +843,23 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
* @returns {*}
*/
generator.get_list = function (scope) {
//generator.button_switch(false);
return $http
.post(generator.makeUrl(scope), scope.form_params)
.then(function (res) {
//generator.button_switch(true);
return res;
});
//return $http
// .post(generator.makeUrl(scope), scope.form_params)
// .then(function (res) {
// //generator.button_switch(true);
// return res;
// });
if ($rootScope.websocketIsOpen === true) {
return WSOps.request(scope.form_params)
.then(function (data) {
return data;
});
} else {
$timeout(function () {
generator.get_list(scope);
}, 500);
}
};
/**
* @memberof ulakbus.formService
......@@ -831,13 +871,23 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
* @returns {*}
*/
generator.get_wf = function (scope) {
//generator.button_switch(false);
return $http
.post(generator.makeUrl(scope), scope.form_params)
.then(function (res) {
//generator.button_switch(true);
return generator.pathDecider(res.data.client_cmd, scope, res.data);
});
if ($rootScope.websocketIsOpen === true) {
WSOps.request(scope.form_params)
.then(function (data) {
return generator.pathDecider(data.client_cmd || ['list'], scope, data);
});
} else {
$timeout(function () {
generator.get_wf(scope);
}, 500);
}
//return $http
// .post(generator.makeUrl(scope), scope.form_params)
// .then(function (res) {
// return generator.pathDecider(res.data.client_cmd, scope, res.data);
// });
};
/**
* @memberof ulakbus.formService
......@@ -912,7 +962,7 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
data['param'] = $scope.form_params.param;
data['param_id'] = $scope.form_params.id;
data['pageData'] = true;
data['second_client_cmd'] = client_cmd[1];
//data['second_client_cmd'] = client_cmd[1];
generator.setPageData(data);
redirectTo($scope, client_cmd[0]);
......@@ -1053,11 +1103,13 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
angular.forEach($scope.Node, function (value, key) {
$scope.model[key] = value.model;
});
var data = {
// todo: unused var delete
var send_data = {
"form": $scope.model,
"object_key": $scope.object_key,
"token": $scope.token,
"model": $scope.form_params.model,
"wf": $scope.form_params.wf,
"cmd": $scope.form_params.cmd,
"flow": $scope.form_params.flow,
"object_id": $scope.object_id,
......@@ -1065,32 +1117,43 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
"query": $scope.form_params.query
};
return $http.post(generator.makeUrl($scope), data)
.success(function (data, status, headers) {
if (headers('content-type') === "application/pdf") {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
var file = new Blob([data], {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
var fileName = $scope.schema.title;
a.href = fileURL;
a.download = fileName;
a.click();
}
if (redirectTo === true) {
if (data.client_cmd) {
generator.pathDecider(data.client_cmd, $scope, data);
}
if (data.msgbox) {
$scope.msgbox = data.msgbox;
var newElement = $compile("<msgbox></msgbox>")($scope);
// this is the default action, which is removing page items and reload page with msgbox
angular.element(document.querySelector('.main.ng-scope')).children().remove();
angular.element(document.querySelector('.main.ng-scope')).append(newElement);
}
}
});
if ($rootScope.websocketIsOpen === true) {
WSOps.request(send_data)
.then(function (data) {
return generator.pathDecider(data.client_cmd || ['list'], $scope, data);
});
} else {
$timeout(function () {
generator.scope($scope, redirectTo);
}, 500);
}
//return $http.post(generator.makeUrl($scope), data)
// .success(function (data, status, headers) {
// if (headers('content-type') === "application/pdf") {
// var a = document.createElement("a");
// document.body.appendChild(a);
// a.style = "display: none";
// var file = new Blob([data], {type: 'application/pdf'});
// var fileURL = URL.createObjectURL(file);
// var fileName = $scope.schema.title;
// a.href = fileURL;
// a.download = fileName;
// a.click();
// }
// if (redirectTo === true) {
// if (data.client_cmd) {
// generator.pathDecider(data.client_cmd, $scope, data);
// }
// if (data.msgbox) {
// $scope.msgbox = data.msgbox;
// var newElement = $compile("<msgbox></msgbox>")($scope);
// // this is the default action, which is removing page items and reload page with msgbox
// angular.element(document.querySelector('.main.ng-scope')).children().remove();
// angular.element(document.querySelector('.main.ng-scope')).append(newElement);
// }
// }
// });
};
return generator;
})
......@@ -1294,9 +1357,11 @@ angular.module('ulakbus.formService', ['ui.bootstrap'])
items: function () {
var formName = attributes.addModalForLinkedModel;
return Generator.get_form({
url: scope.form.wf,
wf: scope.form.wf,
form_params: {model: scope.form.model_name, cmd: scope.form.add_cmd},
form_params: {
wf: scope.form.wf,
model: scope.form.model_name,
cmd: scope.form.add_cmd
},
modalElements: {
// define button position properties
buttonPositions: {
......
......@@ -21,7 +21,7 @@ angular.module('ulakbus')
* - API returns `is_login` key to check if current user is authenticated. Interceptor checks and if not logged
* in redirects to login page.
*/
$httpProvider.interceptors.push(function ($q, $rootScope, $location, $timeout, $log, toastr) {
$httpProvider.interceptors.push(function (ErrorService, $q, $rootScope, $location, $timeout, $log, toastr) {
return {
'request': function (config) {
if (config.method === "POST") {
......@@ -62,101 +62,7 @@ angular.module('ulakbus')
return response;
},
'responseError': function (rejection) {
var errorInModal = ('error' in rejection.data);
var errorModal = function () {
if ($rootScope.loginAttempt === 0) {
$log.debug('not logged in, no alert message triggered');
return;
}
var codefield = "";
if (rejection.data.error) {
codefield = '<p><pre>' +
rejection.data.error +
'</pre></p>';
}
$('<div class="modal">' +
'<div class="modal-dialog" style="width:100%;" role="document">' +
'<div class="modal-content">' +
'<div class="modal-header">' +
'<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span' +
' aria-hidden="true">&times;</span></button>' +
'<h4 class="modal-title" id="exampleModalLabel">' +
"Error Status: " + rejection.status + "<br>Error Title: " + rejection.data.title +
'</h4>' +
'</div>' +
'<div class="modal-body">' +
'<div class="alert alert-danger">' +
'<strong>' +
rejection.data.description +
'</strong>' +
codefield +
'</div>' +
'</div>' +
'<div class="modal-footer">' +
'<button type="button" class="btn btn-default" data-dismiss="modal">Kapat</button>' +
'</div>' +
'</div>' +
'</div>' +
'</div>').modal();
try {
$('pre:not(.hljs)').each(function (i, block) {
hljs.highlightBlock(block);
});
}
catch (e) {
$log.debug('Exception: ', e.message);
}
};
var errorInAlertBox = function (alertContent) {
if (errorInModal) {
errorModal();
} else {
//$rootScope.$broadcast('alertBox', alertContent);
toastr.error(alertContent.msg, alertContent.title);
}
};
var errorForAlertBox = {
title: rejection.status,
msg: rejection.data.description,
type: 'error'
};
var errorDispatch = {
"-1" : function () {
rejection.status = 'Sunucu hatası';
rejection.data.title = rejection.data.title || "Sunucu Hatası";
rejection.data.description = rejection.data.description || 'Sunucu bağlantısında bir hata oluştu. Lütfen yetkili personelle iletişime geçiniz.';
errorInAlertBox(errorForAlertBox);
},
"400": function () {
$location.reload();
},
"401": function () {
$location.path('/login');
if ($location.path() === "/login") {
$log.debug("show errors on login form");
}
},
"403": function () {
if (rejection.data.is_login === true) {
$rootScope.loggedInUser = true;
if ($location.path() === "/login") {
$location.path("/dashboard");
}
}
},
"404": function () {
errorInAlertBox(errorForAlertBox);
},
"500": function () {
errorInAlertBox(errorForAlertBox);
}
};
errorDispatch[rejection.status]();
ErrorService.handle(rejection, 'http');
return $q.reject(rejection);
}
......
......@@ -11,43 +11,116 @@ angular.module('ulakbus')
/**
* WSUri returns websocket uri
*/
.service('WSUri', function () {
return {url: 'ws://localhost:9001/ws'}
.service('WSUri', function (RESTURL) {
var base = RESTURL.url.replace('http', 'ws');
return {url: base + 'ws'}
})
/**
* websocket with callbackId
* use when need to retrieve special data
*/
.service('WSWithCallback', function () {
return {"cbs": []};
})
/**
* WSOps operates all websocket interactions
*/
.service('WSOps', function (WSUri, $log) {
var websocket = new WebSocket(WSUri.url);
websocket.onopen = function (evt) {
wsOps.onOpen(evt)
};
websocket.onclose = function (evt) {
wsOps.onClose(evt)
};
websocket.onmessage = function (evt) {
wsOps.onMessage(evt)
};
websocket.onerror = function (evt) {
wsOps.onError(evt)
.factory('WSOps', function (WSUri, $q, $log, $rootScope, $timeout, ErrorService, WS) {
$rootScope.$on('ws_turn_on', function () {
generate_ws();
});
var websocket;
var generate_ws = function () {
$log.info('Openning web socket...');
websocket = new WS(WSUri.url);
websocket.onopen = function (evt) {
wsOps.onOpen(evt)
};
websocket.onclose = function (evt) {
wsOps.onClose(evt);
generate_ws();
};
websocket.onmessage = function (evt) {
wsOps.onMessage(evt)
};
websocket.onerror = function (evt) {
wsOps.onError(evt)
};
};
var wsOps = {};
wsOps.onOpen = function(evt) {
wsOps.onOpen = function (evt) {
$rootScope.websocketIsOpen = true;
$log.info("CONNECTED", evt);
};
wsOps.onClose = function(event) {
wsOps.onClose = function (event) {
$rootScope.websocketIsOpen = false;
$log.info("DISCONNEDTED", event);
};
wsOps.onMessage = function(event) {
$log.info("MESSAGE:", event.data);
// two types of data can be come from websocket: with / without callback
//
wsOps.callbacks = {};
wsOps.onMessage = function (event) {
var data = angular.fromJson(event.data);
if (data.hasOwnProperty('error')) {
ErrorService.handle(data, 'ws');
}
if (angular.isDefined(wsOps.callbacks[data.callbackID])) {
var callback = wsOps.callbacks[data.callbackID];
delete wsOps.callbacks[data.callbackID];
callback.resolve(data);
} else {
$log.info("Data without callback: %o", data);
}
$log.info("MESSAGE:", event, "Data:", JSON.parse(event.data));
};
wsOps.onError = function(evt) {
$log.error("Error :: " + evt);
wsOps.onError = function (evt) {
$log.error("ERROR :: " + evt);
};
wsOps.doSend = function(data) {
wsOps.doSend = function (data) {
websocket.send(data);
$log.info('SENT:', data);
};
wsOps.retryCount = 0;
// reactor with promise
wsOps.request = function (data) {
var request = {
callbackID: Math.random().toString(36).substring(7),
data: data
};
var deferred = $q.defer();
wsOps.callbacks[request.callbackID] = deferred;
websocket.send(angular.toJson(request));
$log.info('SENT:', data);
return deferred.promise.then(function (response) {
request.response = response;
return response;
}
);
};
wsOps.waitForSocketConnection = function (socket, callback) {
$timeout(
function () {
if (angular.isDefined(socket)) {
if (socket.readyState === 1) {
$log.info("Connection made.");
if (callback != null) {
callback();
}
} else {
$log.info("waiting for connection...");
wsOps.waitForSocketConnection(socket, callback);
}
} else {
$log.info("waiting for connection...");
wsOps.waitForSocketConnection(socket, callback);
}
}, 50); // wait 50 milisecond for the connection...
};
return wsOps;
});
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -32,6 +32,13 @@ body {
background-color:#999;
}
.tooltip {
font-family:'robotolight';
font-size:13px;
letter-spacing:0.3px;
padding:15px;
}
.badge {
border-radius: 100%;
width: 22px;
......@@ -1584,6 +1591,225 @@ table.dataTable thead .sorting:after {
/* END OF SIDEBAR COLLAPSE */
/* STUDENT DASHBOARD */
.student-dashboard a:hover {
text-decoration:none;
background-color:#f9f9f9;
}
.student-dashboard .panel-body ul,
.student-dashboard .panel-body {
padding:0;
margin:0;
}
.student-dashboard .panel-body ul li {
list-style: none;
border-bottom: 1px solid #f5f5f5;
font-size:16px;
}
.student-dashboard .panel-body ul li a {
padding:25px;
display:block;
color:#333;
}
.student-dashboard .panel-body ul li:last-child {
border:none;
}
.student-course-list .panel-body,
.student-assignment-list .panel-body {
height:437px;
overflow-y:auto;
}
.student-course-list .panel-body ul li span {
margin-right:15px;
}
.student-assignment-list .assignment-status {
width:35px;
float:left;
}
.student-assignment-list .assignment-status .assignment-circle {
width:10px;
height:10px;
border-radius:100%;
margin-top: 7px;
margin-left: 3px;
}
.student-assignment-list .urgent-assignment .assignment-circle {
background-color:#D4244B;
}
.student-assignment-list .urgent-assignment .assignment-due-date {
color:#D4244B;
}
.student-assignment-list .approaching-assignment .assignment-circle {
background-color:#F7941E;
}
.student-assignment-list .approaching-assignment .assignment-due-date {
color:#F7941E;
}
.student-assignment-list .non-urgent-assignment .assignment-circle {
background-color:#01AEEE;
}
.student-assignment-list .non-urgent-assignment .assignment-due-date {
color:#01AEEE;
}
.student-assignment-list .assignment-title {
width:calc(100% - 100px);
float:left;
}
.student-assignment-list .assignment-title {
font-family:'robotomedium';
}
.student-assignment-list .assignment-title div:nth-child(1) {
font-family:'robotomedium';
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
padding-right: 15px;
}
.student-assignment-list .assignment-title div:nth-child(2) {
font-size:15px;
font-family:'robotolight';
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
padding-right: 15px;
}
.student-assignment-list .assignment-due-date {
width:65px;
float:left;
font-family:'robotolight';
position:relative;
}
.student-assignment-list .assignment-due-date div:nth-child(1) {
width:65px;
font-size:22px;
position:absolute;
text-align:center;
}
.student-assignment-list .assignment-due-date div:nth-child(2) {
width:65px;
font-size:13px;
position:absolute;
margin-top:25px;
text-align:center;
}
.student-assignment-list .last-assignment .assignment-status div {
width:3px;
height:47px;
background-color: #00A650;
margin-left: 6px;
}
.student-assignment-list .last-assignment .panel-title {
background-color: #fff;
border-color: #F2F2F2;
font-family: 'robotolight';
color: rgb(95, 95, 95);
padding: 12px 0 0;
font-size: 18px;
}
.student-assignment-list .last-assignment .assignment-due-date i {
color:#01A550;
margin-top: 16px;
}
.student-announcement-list .announcement-date {
float:left;
font-family:'robotolight';
margin-right:25px;
width:30px;
}
.student-announcement-list .announcement-text {
float:left;
width:calc(100% - 55px);
margin-top:3px;
}
.student-announcement-list .announcement-date div:first-child {
font-size: 22px;
text-align: center;
}
.student-announcement-list .announcement-date div:last-child {
font-size: 13px;
text-align: center;
}
.student-message-list .profile-pic {
width: 65px;
display: block;
margin-right: 20px;
float: left;
}
.student-message-list .profile-pic img {
width: 100%;
border-radius: 100%;
}
.student-message-list .message-content {
width: calc(100% - 200px);
float: left;
}
.student-message-list .message-content div:first-child {
margin-top:7px;
font-family:'robotomedium';
font-size:18px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.student-message-list .message-content div:last-child {
margin-top: 5px;
color: #848484;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.student-message-list .message-time {
width: 100px;
float: right;
text-align:right;
padding-top: 21px;
color: #B3B3B3;
font-size: 14px;
}
/* END OF STUDENT DASHBOARD */
/* Responsive: Portrait tablets and up */
@media screen and (min-width: 768px) {
/* Remove the padding we set earlier */
......
......@@ -21,7 +21,7 @@
</head>
<body ng-controller="KeyListenController" ng-keydown="down($event)">
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0" ng-if="$root.loggedInUser">
<nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0" ng-if="$root.current_user">
<collapse-menu></collapse-menu>
<!--<ul class="header-menu">-->
<!--<li><a href="">Mesajlar</a></li>-->
......@@ -44,12 +44,12 @@
<header-notification></header-notification>
</nav>
<sidebar ng-if="$root.loggedInUser"></sidebar>
<sidebar ng-if="$root.current_user"></sidebar>
<div class="manager-view">
<div class="manager-view-inner">
<!-- manager-header -->
<header-sub-menu ng-if="$root.loggedInUser"></header-sub-menu>
<header-sub-menu ng-if="$root.current_user"></header-sub-menu>
<!-- end of manager-header -->
<div class="manager-view-content">
<div class="row">
......
angular.module('templates-prod', ['components/auth/login.html', 'components/crud/templates/crud.html', 'components/crud/templates/filter.html', 'components/crud/templates/form.html', 'components/crud/templates/list.html', 'components/crud/templates/nodeTable.html', 'components/crud/templates/show.html', 'components/dashboard/dashboard.html', 'components/dashboard/user-info.html', 'components/debug/debug.html', 'components/devSettings/devSettings.html', 'components/error_pages/404.html', 'components/error_pages/500.html', 'components/uitemplates/404.html', 'components/uitemplates/500.html', 'shared/templates/actionsModalContent.html', 'shared/templates/add.html', 'shared/templates/datefield.html', 'shared/templates/directives/alert.html', 'shared/templates/directives/chat.html', 'shared/templates/directives/guide-help.html', 'shared/templates/directives/header-breadcrumb.html', 'shared/templates/directives/header-notification.html', 'shared/templates/directives/header-sub-menu.html', 'shared/templates/directives/menuCollapse.html', 'shared/templates/directives/msgbox.html', 'shared/templates/directives/notifications.html', 'shared/templates/directives/right-sidebar.html', 'shared/templates/directives/search.html', 'shared/templates/directives/selected-user.html', 'shared/templates/directives/selectedUserPopover.html', 'shared/templates/directives/sidebar-notification.html', 'shared/templates/directives/sidebar-search.html', 'shared/templates/directives/sidebar.html', 'shared/templates/directives/sort.html', 'shared/templates/directives/stats.html', 'shared/templates/directives/timeline.html', 'shared/templates/fieldset.html', 'shared/templates/filefield.html', 'shared/templates/foreignKey.html', 'shared/templates/linkedModelModalContent.html', 'shared/templates/listnodeModalContent.html', 'shared/templates/modalContent.html', 'shared/templates/multiselect.html', 'shared/templates/select.html', 'shared/templates/translate.html', 'shared/templates/typeahead.html']);
angular.module('templates-prod', ['components/auth/login.html', 'components/crud/templates/crud.html', 'components/crud/templates/filter.html', 'components/crud/templates/form.html', 'components/crud/templates/list.html', 'components/crud/templates/nodeTable.html', 'components/crud/templates/show.html', 'components/dashboard/dashboard.html', 'components/dashboard/user-info.html', 'components/dashboard/user-templates/staff.html', 'components/dashboard/user-templates/student.html', 'components/debug/debug.html', 'components/devSettings/devSettings.html', 'components/error_pages/404.html', 'components/error_pages/500.html', 'components/uitemplates/404.html', 'components/uitemplates/500.html', 'shared/templates/actionsModalContent.html', 'shared/templates/add.html', 'shared/templates/datefield.html', 'shared/templates/directives/alert.html', 'shared/templates/directives/chat.html', 'shared/templates/directives/guide-help.html', 'shared/templates/directives/header-breadcrumb.html', 'shared/templates/directives/header-notification.html', 'shared/templates/directives/header-sub-menu.html', 'shared/templates/directives/menuCollapse.html', 'shared/templates/directives/msgbox.html', 'shared/templates/directives/notifications.html', 'shared/templates/directives/right-sidebar.html', 'shared/templates/directives/search.html', 'shared/templates/directives/selected-user.html', 'shared/templates/directives/selectedUserPopover.html', 'shared/templates/directives/sidebar-notification.html', 'shared/templates/directives/sidebar-search.html', 'shared/templates/directives/sidebar.html', 'shared/templates/directives/sort.html', 'shared/templates/directives/stats.html', 'shared/templates/directives/timeline.html', 'shared/templates/fieldset.html', 'shared/templates/filefield.html', 'shared/templates/foreignKey.html', 'shared/templates/linkedModelModalContent.html', 'shared/templates/listnodeModalContent.html', 'shared/templates/modalContent.html', 'shared/templates/multiselect.html', 'shared/templates/select.html', 'shared/templates/translate.html', 'shared/templates/typeahead.html']);
angular.module("components/auth/login.html", []).run(["$templateCache", function($templateCache) {
$templateCache.put("components/auth/login.html",
"<div ng-app=\"ulakbus.auth\" class=\"container\">\n" +
" <div class=\"row\">\n" +
" <div class=\"col-md-4 col-md-offset-4\">\n" +
" <div class=\"login-panel panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <h3 class=\"panel-title\">Giriş Yap <span ng-if=\"loggingIn\" class=\"loader pull-right\"></span></h3>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
" <span class=\"label label-warning\">{{message}}</span>\n" +
" <form name=\"loginForm\" sf-schema=\"schema\" sf-form=\"form\" sf-model=\"model\" ng-submit=\"onSubmit(loginForm)\"></form>\n" +
"<div style=\"width: 100%; height: 100%; position: fixed; z-index: 1100; top:0; left:0; background: #fff;\">\n" +
" <div ng-app=\"ulakbus.auth\" class=\"container\">\n" +
" <div class=\"row\">\n" +
" <div class=\"col-md-6 col-md-offset-3\">\n" +
" <div class=\"login-panel panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <h3 class=\"panel-title\">Giriş Yap <span ng-if=\"loggingIn\" class=\"loader pull-right\"></span></h3>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
" <form name=\"loginForm\" sf-schema=\"schema\" sf-form=\"form\" sf-model=\"model\"\n" +
" ng-submit=\"onSubmit(loginForm)\"></form>\n" +
" </div>\n" +
" </div>\n" +
" <span class=\"label label-inverse label-warning\">{{message}}</span>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
......@@ -204,8 +207,8 @@ angular.module("components/crud/templates/list.html", []).run(["$templateCache",
"\n" +
" <td ng-repeat=\"field in object.fields track by $index\">\n" +
" <a role=\"button\" ng-if=\"field.type==='link'\"\n" +
" ng-click=\"do_action(object.key, field)\">{{field.content}}</a>\n" +
" <span ng-if=\"field.type==='str'\">{{field.content}}</span>\n" +
" ng-click=\"do_action(object.key, field)\" ng-bind-html=\"field.content | markdown\"></a>\n" +
" <span ng-if=\"field.type==='str'\" ng-bind-html=\"field.content | markdown\"></span>\n" +
" </td>\n" +
"\n" +
" <td>\n" +
......@@ -225,16 +228,16 @@ angular.module("components/crud/templates/list.html", []).run(["$templateCache",
" <nav ng-if=\"pagination && pagination.total_pages > 1\" class=\"text-center\">\n" +
" <ul class=\"pagination\">\n" +
" <li ng-class=\"{disabled:pagination.page===1}\">\n" +
" <a aria-label=\"Önceki\" ng-click=\"reload({page:pagination.page-1})\">\n" +
" <a aria-label=\"Önceki\" ng-click=\"paginate({page:pagination.page-1})\">\n" +
" <span aria-hidden=\"true\">&laquo;</span>\n" +
" </a>\n" +
" </li>\n" +
" <li ng-repeat=\"page in getNumber(pagination.total_pages) track by $index\"\n" +
" ng-class=\"{active:$index+1===pagination.page}\">\n" +
" <a ng-click=\"reload({page:$index+1})\">{{$index+1}}</a>\n" +
" <a ng-click=\"paginate({page:$index+1})\">{{$index+1}}</a>\n" +
" </li>\n" +
" <li ng-class=\"{disabled:pagination.page===pagination.total_pages}\">\n" +
" <a aria-label=\"Sonraki\" ng-click=\"reload({page:pagination.page+1})\">\n" +
" <a aria-label=\"Sonraki\" ng-click=\"paginate({page:pagination.page+1})\">\n" +
" <span aria-hidden=\"true\">&raquo;</span>\n" +
" </a>\n" +
" </li>\n" +
......@@ -360,135 +363,10 @@ angular.module("components/crud/templates/show.html", []).run(["$templateCache",
angular.module("components/dashboard/dashboard.html", []).run(["$templateCache", function($templateCache) {
$templateCache.put("components/dashboard/dashboard.html",
"<div ng-app=\"ulakbus.dashboard\" class=\"dashboard\">\n" +
"<div ng-app=\"ulakbus.dashboard\" class=\"dashboard student-dashboard\">\n" +
" <div class=\"starter-template\">\n" +
"\n" +
" <div class=\"dashboard-main-search clearfix\">\n" +
"\n" +
" <div class=\"row\" ng-show=\"$root.current_user.can_search\">\n" +
" <div class=\"col-md-12\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Arama</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
" <div class=\"dashboard-student-search\" data-step=\"2\"\n" +
" data-intro=\"isim veya tcno ile öğrenci araması yapabilirsiniz.\"\n" +
" ng-show=\"$root.searchInputs.ogrenci\">\n" +
" <div class=\"text-center\">\n" +
" <h3>ÖĞRENCİ</h3>\n" +
" <input type=\"text\" placeholder=\"Öğrenci ara\" ng-model=\"keyword.student\"\n" +
" ng-keyup=\"search('ogrenci')\">\n" +
" <span class=\"bordered-fa-icon fa fa-search\" ng-click=\"search('ogrenci')\"></span>\n" +
" </div>\n" +
" <div class=\"dashboard-search-results\" ng-show=\"showResults\">\n" +
" <ul ng-if=\"students.length > 0\">\n" +
" <li ng-repeat=\"student in students\">\n" +
" <a role=\"button\">\n" +
" <span ng-click=\"select(student, 'ogrenci')\">{{student[0]}}</span>\n" +
" <i class=\"fa fa-fw fa-info-circle pull-right\" popover-placement=\"bottom\"\n" +
" uib-popover-template=\"userPopover.templateUrl\"\n" +
" ng-click=\"get_info('Ogrenci', student[2])\"></i></a>\n" +
" </li>\n" +
" </ul>\n" +
" </div>\n" +
" <!-- end of dashboard-student-search-results -->\n" +
" </div>\n" +
" <!-- end of dashboard-student-search -->\n" +
" <div class=\"dashboard-personnel-search\" data-step=\"3\"\n" +
" data-intro=\"isim veya tcno ile personel araması yapabilirsiniz.\"\n" +
" ng-show=\"$root.searchInputs.personel\">\n" +
" <div class=\"text-center\">\n" +
" <h3>PERSONEL</h3>\n" +
" <input type=\"text\" placeholder=\"Personel ara\" ng-model=\"keyword.staff\"\n" +
" ng-keyup=\"search('personel')\">\n" +
" <span class=\"bordered-fa-icon fa fa-search\" ng-click=\"search('personel')\"></span>\n" +
" </div>\n" +
" <div class=\"dashboard-search-results\" ng-show=\"showResults\">\n" +
" <ul ng-if=\"staffs.length > 0\">\n" +
" <li ng-repeat=\"staff in staffs\">\n" +
" <a role=\"button\">\n" +
" <span ng-click=\"select(staff, 'personel')\">{{staff[0]}}</span>\n" +
" <i class=\"fa fa-fw fa-info-circle pull-right\"\n" +
" popover-placement=\"bottom\"\n" +
" uib-popover-template=\"userPopover.templateUrl\"\n" +
" ng-click=\"get_info('Personel', staff[2])\"></i></a>\n" +
" </li>\n" +
" </ul>\n" +
" </div>\n" +
" <!-- end of dashboard-personnel-search-results -->\n" +
" </div>\n" +
" <!-- end of dashboard-personnel-search -->\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
"\n" +
" </div>\n" +
" <!-- end of dashboard-main-search -->\n" +
"\n" +
" <div class=\"row\">\n" +
"\n" +
" <div class=\"col-md-12 quick-links\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Hızlı İşlemler</div>\n" +
" <div class=\"panel-action pull-right\"><i class=\"fa fa-edit fa-fw\"></i> Düzenle</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
" <div class=\"col-md-6 text-center link-buttons\"\n" +
" ng-repeat=\"item in $root.quick_menu track by $index\">\n" +
" <a\n" +
" ng-href=\"#/{{item.wf}}/{{item.model}}?{{item.param}}={{selectedUser.key}}\">\n" +
" {{item.text}}\n" +
" </a>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
"\n" +
" </div>\n" +
" <!-- end of row -->\n" +
"\n" +
" <div class=\"dashboard-main-anouncement clearfix\">\n" +
"\n" +
" <div class=\"row\">\n" +
" <div class=\"col-md-12\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Duyurular</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
" <a ng-click=\"markAsRead(notify)\"\n" +
" ng-repeat=\"notify in notifications[3] | limitTo:5\">{{notify\n" +
" .body}}</a>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
"\n" +
" </div>\n" +
" <!-- end of dashboard-main-anouncement -->\n" +
"\n" +
" <!--<div class=\"right-sidebar selected-person-field\">-->\n" +
"\n" +
" <!--<div class=\"right-sidebar-header\">-->\n" +
" <!--<span class=\"bar-title\">Kişi seçildi</span>-->\n" +
" <!--<span class=\"unselect-person\"><i class=\"fa fa-times\"></i></span>-->\n" +
" <!--</div>-->\n" +
" <!--&lt;!&ndash; end of right-sidebaer-header &ndash;&gt;-->\n" +
" <!---->\n" +
" <!--<div class=\"selected-person-info\">-->\n" +
" <!--<img src=\"../../img/sample-profile-pic.jpg\" class=\"selected-person-img\">-->\n" +
" <!--<div class=\"selected-person-name\">Erkan Öğümsöğütlü</div>-->\n" +
" <!--</div>-->\n" +
" <!--&lt;!&ndash; end of selected-person-info &ndash;&gt;-->\n" +
"\n" +
" <!--</div>-->\n" +
" <!-- end of right-sidebar -->\n" +
"\n" +
"\n" +
"\n" +
" <ng-include src=\"'components/dashboard/user-templates/student.html'\" ng-if=\"$root.current_user.is_student\"></ng-include>\n" +
" <ng-include src=\"'components/dashboard/user-templates/staff.html'\" ng-if=\"$root.current_user.is_staff\"></ng-include>\n" +
" </div>\n" +
"</div>");
}]);
......@@ -521,6 +399,365 @@ angular.module("components/dashboard/user-info.html", []).run(["$templateCache",
"</div>");
}]);
angular.module("components/dashboard/user-templates/staff.html", []).run(["$templateCache", function($templateCache) {
$templateCache.put("components/dashboard/user-templates/staff.html",
"<div class=\"dashboard-main-search clearfix\">\n" +
"\n" +
" <div class=\"row\" ng-if=\"$root.current_user.can_search\">\n" +
" <div class=\"col-md-12\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Arama</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
" <div class=\"dashboard-student-search\" data-step=\"2\"\n" +
" data-intro=\"isim veya tcno ile öğrenci araması yapabilirsiniz.\"\n" +
" ng-show=\"$root.searchInputs.ogrenci\">\n" +
" <div class=\"text-center\">\n" +
" <h3>ÖĞRENCİ</h3>\n" +
" <input type=\"text\" placeholder=\"Öğrenci ara\" ng-model=\"keyword.student\"\n" +
" ng-keyup=\"search('ogrenci')\">\n" +
" <span class=\"bordered-fa-icon fa fa-search\" ng-click=\"search('ogrenci')\"></span>\n" +
" </div>\n" +
" <div class=\"dashboard-search-results\" ng-show=\"showResults\">\n" +
" <ul ng-if=\"students.length > 0\">\n" +
" <li ng-repeat=\"student in students\">\n" +
" <a role=\"button\">\n" +
" <span ng-click=\"select(student, 'ogrenci')\">{{student[0]}}</span>\n" +
" <i class=\"fa fa-fw fa-info-circle pull-right\" popover-placement=\"bottom\"\n" +
" uib-popover-template=\"userPopover.templateUrl\"\n" +
" ng-click=\"get_info('Ogrenci', student[2])\"></i></a>\n" +
" </li>\n" +
" </ul>\n" +
" </div>\n" +
" <!-- end of dashboard-student-search-results -->\n" +
" </div>\n" +
" <!-- end of dashboard-student-search -->\n" +
" <div class=\"dashboard-personnel-search\" data-step=\"3\"\n" +
" data-intro=\"isim veya tcno ile personel araması yapabilirsiniz.\"\n" +
" ng-show=\"$root.searchInputs.personel\">\n" +
" <div class=\"text-center\">\n" +
" <h3>PERSONEL</h3>\n" +
" <input type=\"text\" placeholder=\"Personel ara\" ng-model=\"keyword.staff\"\n" +
" ng-keyup=\"search('personel')\">\n" +
" <span class=\"bordered-fa-icon fa fa-search\" ng-click=\"search('personel')\"></span>\n" +
" </div>\n" +
" <div class=\"dashboard-search-results\" ng-show=\"showResults\">\n" +
" <ul ng-if=\"staffs.length > 0\">\n" +
" <li ng-repeat=\"staff in staffs\">\n" +
" <a role=\"button\">\n" +
" <span ng-click=\"select(staff, 'personel')\">{{staff[0]}}</span>\n" +
" <i class=\"fa fa-fw fa-info-circle pull-right\"\n" +
" popover-placement=\"bottom\"\n" +
" uib-popover-template=\"userPopover.templateUrl\"\n" +
" ng-click=\"get_info('Personel', staff[2])\"></i></a>\n" +
" </li>\n" +
" </ul>\n" +
" </div>\n" +
" <!-- end of dashboard-personnel-search-results -->\n" +
" </div>\n" +
" <!-- end of dashboard-personnel-search -->\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
"\n" +
"</div>\n" +
"<!-- end of dashboard-main-search -->\n" +
"\n" +
"<div class=\"row\">\n" +
"\n" +
" <div class=\"col-md-12 quick-links\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Hızlı İşlemler</div>\n" +
" <div class=\"panel-action pull-right\"><i class=\"fa fa-edit fa-fw\"></i> Düzenle</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
" <div class=\"col-md-6 text-center link-buttons\"\n" +
" ng-repeat=\"item in $root.quick_menu track by $index\">\n" +
" <a\n" +
" ng-href=\"#/{{item.wf}}/{{item.model}}?{{item.param}}={{selectedUser.key}}\">\n" +
" {{item.text}}\n" +
" </a>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
"\n" +
"</div>\n" +
"<!-- end of row -->\n" +
"\n" +
"<div class=\"dashboard-main-anouncement clearfix\">\n" +
"\n" +
" <div class=\"row\">\n" +
" <div class=\"col-md-12\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Duyurular</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
" <a ng-click=\"markAsRead(notify)\"\n" +
" ng-repeat=\"notify in notifications[3] | limitTo:5\">{{notify\n" +
" .body}}</a>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
"\n" +
"</div>\n" +
"<!-- end of dashboard-main-anouncement -->");
}]);
angular.module("components/dashboard/user-templates/student.html", []).run(["$templateCache", function($templateCache) {
$templateCache.put("components/dashboard/user-templates/student.html",
"<!-- STUDENT DASHBOARD -->\n" +
"\n" +
"<div class=\"row\">\n" +
" <!-- STUDENT COURSES -->\n" +
" <div class=\"col-lg-6 col-md-12 student-course-list\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Dersler</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
"\n" +
" <ul>\n" +
" <li><a href=\"#\"><span>181</span> Basic Physics</a></li>\n" +
" <li><a href=\"#\"><span>421</span> Research and Development</a></li>\n" +
" <li><a href=\"#\"><span>435</span> Project Management and Development</a></li>\n" +
" <li><a href=\"#\"><span>207</span> Design and Use of Instructional Material</a></li>\n" +
" <li><a href=\"#\"><span>323</span> Multimedia Design and Development</a></li>\n" +
" <li><a href=\"#\"><span>475</span> Climate Change Education for Sustainability</a></li>\n" +
" </ul>\n" +
"\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" <!-- END OF STUDENT COURSES -->\n" +
"\n" +
" <!-- STUDENT ASSIGNMENTS -->\n" +
" <div class=\"col-lg-6 col-md-12 student-assignment-list\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Görevler</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
"\n" +
" <ul>\n" +
" <li class=\"urgent-assignment\">\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"assignment-status\">\n" +
" <div class=\"assignment-circle\" uib-tooltip=\"Acil\"></div>\n" +
" </span>\n" +
" <span class=\"assignment-title\">\n" +
" <div>Needs Assessment Document</div>\n" +
" <div>435 - Project Management and Development</div>\n" +
" </span>\n" +
" <span class=\"assignment-due-date\">\n" +
" <div>18</div>\n" +
" <div>ŞUB</div>\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <!-- end of urgent-assignment -->\n" +
" <li class=\"approaching-assignment\">\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"assignment-status\">\n" +
" <div class=\"assignment-circle\" uib-tooltip=\"Yaklaşıyor\"></div>\n" +
" </span>\n" +
" <span class=\"assignment-title\">\n" +
" <div>Storyboard Design</div>\n" +
" <div>435 - Project Management and Development</div>\n" +
" </span>\n" +
" <span class=\"assignment-due-date\">\n" +
" <div>27</div>\n" +
" <div>ŞUB</div>\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <!-- end of approaching-assignment -->\n" +
" <li class=\"non-urgent-assignment\">\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"assignment-status\">\n" +
" <div class=\"assignment-circle\" uib-tooltip=\"Acil olmayan\"></div>\n" +
" </span>\n" +
" <span class=\"assignment-title\">\n" +
" <div>Design Report</div>\n" +
" <div>435 - Project Management and Development</div>\n" +
" </span>\n" +
" <span class=\"assignment-due-date\">\n" +
" <div>05</div>\n" +
" <div>MAR</div>\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <!-- end of non-urgent-assignment -->\n" +
"\n" +
" <li class=\"last-assignment\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Tamamlanan Son Görevler</div>\n" +
" </div>\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"assignment-status\">\n" +
" <div></div>\n" +
" </span>\n" +
" <span class=\"assignment-title\">\n" +
" <div>Design Report</div>\n" +
" <div>435 - Project Management and Development</div>\n" +
" </span>\n" +
" <span class=\"assignment-due-date\">\n" +
" <div><i class=\"fa fa-check\"></i></div>\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <!-- end of last-assignment -->\n" +
" </ul>\n" +
"\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" <!-- END OF STUDENT ASSIGNMENTS -->\n" +
"</div>\n" +
"\n" +
"\n" +
"<div class=\"row\">\n" +
" <!-- STUDENT ANNOUNCEMENTS -->\n" +
" <div class=\"col-lg-6 col-md-12 student-announcement-list\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Duyurular</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
"\n" +
" <ul>\n" +
" <li>\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"announcement-date\">\n" +
" <div>05</div>\n" +
" <div>MAR</div>\n" +
" </span>\n" +
" <span class=\"announcement-text\">\n" +
" Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus non molestie est. Phasellus suscipit ut quam pulvinar tincidunt. Etiam accumsan vel turpis vitae vehicula. Quisque vel est nisl. In massa sapien, congue at dapibus sed, maximus eu urna.\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <li>\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"announcement-date\">\n" +
" <div>24</div>\n" +
" <div>MAR</div>\n" +
" </span>\n" +
" <span class=\"announcement-text\">\n" +
" Donec nec purus et nunc imperdiet vulputate quis vel turpis. Suspendisse nec bibendum odio. Praesent et enim blandit, varius diam\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <li>\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"announcement-date\">\n" +
" <div>11</div>\n" +
" <div>NİS</div>\n" +
" </span>\n" +
" <span class=\"announcement-text\">\n" +
" Etiam eget libero sapien. Nulla vitae ultricies quam. Aliquam gravida ligula eu leo ullamcorper tristique. Donec accumsan nec odio non viverra.\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <li>\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"announcement-date\">\n" +
" <div>19</div>\n" +
" <div>MAY</div>\n" +
" </span>\n" +
" <span class=\"announcement-text\">\n" +
" Maecenas fermentum, metus sed feugiat lacinia, massa sem facilisis erat, eget sollicitudin ante ipsum id dolor. Curabitur id odio eleifend, lobortis ipsum id, lacinia lacus. Morbi ac rutrum nisl, id auctor purus. Fusce vulputate elit sed massa pellentesque convallis.\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" </ul>\n" +
"\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" <!-- END OF STUDENT ANNOUNCEMENTS -->\n" +
"\n" +
" <!-- STUDENT MESSAGES -->\n" +
" <div class=\"col-lg-6 col-md-12 student-message-list\">\n" +
" <div class=\"panel panel-default\">\n" +
" <div class=\"panel-heading\">\n" +
" <div class=\"panel-title\">Görevler</div>\n" +
" </div>\n" +
" <div class=\"panel-body\">\n" +
"\n" +
" <ul>\n" +
" <li>\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"profile-pic\">\n" +
" <img src=\"../../img/gokhan.jpg\">\n" +
" </span>\n" +
" <span class=\"message-content\">\n" +
" <div>Gökhan Boranalp</div>\n" +
" <div>Lorem ipsum dolor sit amet.</div>\n" +
" </span>\n" +
" <span class=\"message-time\">\n" +
" 14:40\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <li>\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"profile-pic\">\n" +
" <img src=\"../../img/evren.jpg\">\n" +
" </span>\n" +
" <span class=\"message-content\">\n" +
" <div>Evren Kutar</div>\n" +
" <div>Donec nec purus et nunc imperdiet vulputate quis vel turpis. Suspendisse nec bibendum odio. Praesent et enim blandit, varius diam in.</div>\n" +
" </span>\n" +
" <span class=\"message-time\">\n" +
" 12:36\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <li>\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"profile-pic\">\n" +
" <img src=\"../../img/erkan.jpg\">\n" +
" </span>\n" +
" <span class=\"message-content\">\n" +
" <div>Erkan Öğümsöğütlü</div>\n" +
" <div>Duis mi sem, euismod ut dui eget, egestas tincidunt ex. Aliquam id iaculis risus.</div>\n" +
" </span>\n" +
" <span class=\"message-time\">\n" +
" Yesterday\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" <li>\n" +
" <a href=\"#\" class=\"clearfix\">\n" +
" <span class=\"profile-pic\">\n" +
" <img src=\"../../img/sample-profile-pic.jpg\">\n" +
" </span>\n" +
" <span class=\"message-content\">\n" +
" <div>Teddy Joyner</div>\n" +
" <div>Nulla vitae ultricies quam.</div>\n" +
" </span>\n" +
" <span class=\"message-time\">\n" +
" 16.02.2016\n" +
" </span>\n" +
" </a>\n" +
" </li>\n" +
" </ul>\n" +
"\n" +
" </div>\n" +
" </div>\n" +
" </div>\n" +
" <!-- END OF STUDENT MESSAGES -->\n" +
"</div>\n" +
"\n" +
"<!-- END OF STUDENT DASHBOARD -->");
}]);
angular.module("components/debug/debug.html", []).run(["$templateCache", function($templateCache) {
$templateCache.put("components/debug/debug.html",
"<div class=\"panel-group\" id=\"accordion\" role=\"tablist\" aria-multiselectable=\"true\">\n" +
......
......@@ -20,6 +20,8 @@ module.exports = function (config) {
'app/bower_components/angular-gettext/dist/angular-gettext.min.js',
'app/bower_components/angular-route/angular-route.js',
'app/bower_components/angular-resource/angular-resource.js',
"app/bower_components/showdown/dist/showdown.min.js",
"app/bower_components/angular-markdown-filter/markdown.js",
'app/bower_components/angular-sanitize/angular-sanitize.min.js',
'app/bower_components/tv4/tv4.js',
'app/bower_components/objectpath/lib/ObjectPath.js',
......@@ -38,7 +40,7 @@ module.exports = function (config) {
frameworks: ['jasmine'],
//browsers: ['PhantomJS', 'Chrome', 'Firefox', 'Safari'],
browsers: ['PhantomJS'],
browsers: ['Chrome'],
customLaunchers: {
'PhantomJS_custom': {
......@@ -61,12 +63,12 @@ module.exports = function (config) {
plugins: [
'karma-phantomjs-launcher',
//'karma-chrome-launcher',
'karma-chrome-launcher',
//'karma-firefox-launcher',
//'karma-safari-launcher',
'karma-jasmine',
'karma-junit-reporter',
'karma-coverage'
//'karma-junit-reporter',
//'karma-coverage'
],
junitReporter: {
......@@ -74,33 +76,33 @@ module.exports = function (config) {
suite: 'unit'
},
reporters: ['progress', 'coverage'],
//reporters: ['progress', 'coverage'],
preprocessors: {
'app/app.js': ['coverage'],
'app/app_routes.js': ['coverage'],
'app/components/auth/*.js': ['coverage'],
'app/components/crud/*.js': ['coverage'],
'app/components/dashboard/*.js': ['coverage'],
'app/components/version/*.js': ['coverage'],
'app/zetalib/**/!(action_service).js': ['coverage']
},
//preprocessors: {
// 'app/app.js': ['coverage'],
// 'app/app_routes.js': ['coverage'],
// 'app/components/auth/*.js': ['coverage'],
// 'app/components/crud/*.js': ['coverage'],
// 'app/components/dashboard/*.js': ['coverage'],
// 'app/components/version/*.js': ['coverage'],
// 'app/zetalib/**/!(action_service).js': ['coverage']
//},
coverageReporter: {
check: {
global: {
statements: 60,
branches: 10,
functions: 60,
lines: 60,
excludes: [
'app/components/uitemplates/*.js'
]
}
},
type : 'html',
dir : 'coverage/'
}
//coverageReporter: {
// check: {
// global: {
// statements: 60,
// branches: 10,
// functions: 60,
// lines: 60,
// excludes: [
// 'app/components/uitemplates/*.js'
// ]
// }
// },
// type : 'html',
// dir : 'coverage/'
//}
});
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment