6 angular.module('myApp.directives', []).
7 directive('appVersion', ['version', function(version) {
8 return function(scope, elm, attrs) {
12 directive('myInput', function() {
15 compile: function(element, attrs) {
16 var my_class = attrs['class'] || '';
17 my_class = my_class.replace(/ *my-input */,'');
18 var my_type = attrs['type'] || 'text';
19 var html = '<div class="'+my_class+'">'
20 +'<label for="'+attrs.ngModel+'">' + attrs.placeholder + '</label>'
21 +'<input type="'+my_type+'" name="'+attrs.ngModel+'" ng-model="' + attrs.ngModel + '"'
22 +' placeholder="'+attrs.placeholder+'" class="'+my_class+'"'
24 if ( attrs.ngRequired ) html += ' ng-required="' + attrs.ngRequired + '"';
25 if ( attrs.bsTypeahead ) html += ' bs-typeahead="'+attrs.bsTypeahead+'"';
26 if ( attrs.dataItems ) html += ' data-items="'+attrs.dataItems+'"'; // for typeahead
28 element.replaceWith(html);
33 directive('myLabelInput', function() {
36 compile: function(element, attrs) {
37 var my_class = attrs['class'] || '';
38 my_class = my_class.replace(/ *my-input */,'');
39 var my_type = attrs['type'] || 'text';
40 var m = attrs.ngModel;
42 ' <div class="control-group">'+
43 ' <label class="control-label" for="'+m+'">'+attrs.label+'</label>'+
44 ' <div class="controls">'+
45 ' <input type="'+my_type+'" id="'+m+'" ng-model="'+m+'"';
47 if ( attrs.placeholder ) html += ' placeholder="' + attrs.placeholder + '"';
48 if ( attrs.ngRequired ) html += ' ng-required="' + attrs.ngRequired + '"';
49 if ( attrs.ngChange ) html += ' ng-change="' + attrs.ngChange + '"';
54 element.replaceWith(html);
59 .directive('myLabelSelect', function() {
62 compile: function(element, attrs) {
63 var my_class = attrs['class'] || '';
64 my_class = my_class.replace(/ *my-input */,'');
65 var m = attrs.ngModel;
67 ' <div class="control-group">'+
68 ' <label class="control-label" for="'+m+'">'+attrs.label+'</label>'+
69 ' <div class="controls">'+
70 ' <select id="'+m+'" ng-model="'+m+'"';
72 if ( attrs.ngOptions ) html += ' ng-options="' + attrs.ngOptions + '"';
73 if ( attrs.ngChange ) html += ' ng-change="' + attrs.ngChange + '"';
78 element.replaceWith(html);
83 .directive('bsTypeahead', ['$parse', function($parse) {
89 link: function postLink(scope, element, attr, controller) {
91 var getter = $parse(attr.bsTypeahead),
92 setter = getter.assign,
93 value = getter(scope);
95 // Watch bsTypeahead for changes
96 scope.$watch(attr.bsTypeahead, function(newValue, oldValue) {
97 if(newValue !== oldValue) {
102 element.attr('data-provide', 'typeahead');
104 source: function(query) { return value; },
106 updater: function(value) {
107 // If we have a controller (i.e. ngModelController) then wire it up
109 scope.$apply(function () {
110 controller.$setViewValue(value);
117 // add entered element into typeahead array for other fields
118 element.bind('blur', function() {
119 var new_value = element.val();
120 if ( new_value.length > 1 && $.inArray( new_value, value ) === -1 ) { // IE doesn't have .indexOf
121 scope.$apply( function() {
122 value.unshift( element.val() );
130 .directive('myPagination', function() { // modified ui.bootstrap.pagination
139 templateUrl: 'template/pagination/pagination.html',
141 link: function(scope) {
142 scope.$watch('numPages + currentPage + maxSize', function() {
145 //set the default maxSize to numPages
146 var maxSize = ( scope.maxSize && scope.maxSize < scope.numPages ) ? scope.maxSize : scope.numPages;
147 var startPage = scope.currentPage - Math.floor(maxSize/2);
149 //adjust the startPage within boundary
153 if ((startPage + maxSize - 1) > scope.numPages) {
154 startPage = startPage - ((startPage + maxSize - 1) - scope.numPages );
157 for(var i=0; i < maxSize && i < scope.numPages ;i++) {
158 scope.pages.push(startPage + i);
160 if ( scope.currentPage > scope.numPages ) {
161 scope.selectPage(scope.numPages);
164 scope.noPrevious = function() {
165 return scope.currentPage === 1;
167 scope.noNext = function() {
168 return scope.currentPage === scope.numPages;
170 scope.isActive = function(page) {
171 return scope.currentPage === page;
174 scope.selectPage = function(page) {
175 if ( ! scope.isActive(page) ) {
176 scope.currentPage = page;
177 scope.onSelectPage({ page: page });
181 scope.selectPrevious = function() {
182 if ( !scope.noPrevious() ) {
183 scope.selectPage(scope.currentPage-1);
186 scope.selectNext = function() {
187 if ( !scope.noNext() ) {
188 scope.selectPage(scope.currentPage+1);