static/js/frontend.directive.js
(function () {
var app = angular.module('frontEnd');
function nuevaDirectiva(nombre, template, config) {
if (typeof(config) != 'object')
config = {};
app.directive(nombre, function () {
return $.extend({
restrict: 'A',
templateUrl: 'partials/' + template
}, config);
});
}
/**
* Directivas
*/
nuevaDirectiva('search', 'search.html', {
scope: {
inputClass: '@'
},
link: function (scope, element, attrs) {
var iconSize = (scope.inputClass === 'massive')? '3em' : 'inherit';
var textSize = (scope.inputClass === 'massive')? 'inherit' : 'small';
var $icon = $(element).find('.icon.search');
var $input = $(element).find('.labeled.input');
//var $dropdown = $(element).find('.dropdown.busqueda');
//$dropdown.addClass(scope.inputClass);
console.log($input.find('input')[0], textSize);
$input.addClass(scope.inputClass).find('input').css('font-size', textSize);
//console.log($dropdown.css('height'));
$icon.css('font-size', iconSize);
}
});
nuevaDirectiva('resultElement', 'result-element.html', {
scope: {
result: '=',
numero: '='
}
});
nuevaDirectiva('footerInfo', 'footer.html');
nuevaDirectiva('loginModal', 'login.html');
nuevaDirectiva('denunciaModal', 'denuncia.html');
nuevaDirectiva('archivosContraloria', 'archivos-contraloria.html');
nuevaDirectiva('agregarAdjudicacion', 'agregar-adjudicacion.html');
nuevaDirectiva('informacion', 'informacion.html');
nuevaDirectiva('siteNav', 'nav.html');
nuevaDirectiva('filtroUbicacion', 'filtro-ubicacion.html', {
scope: {
multiple: "=",
seleccionados: "=?",
seleccionado: "=?",
activado: "=?",
callback: '='
},
link: function (scope, element, attrs, ctrl) {
ctrl.multiple = scope.multiple;
ctrl.selected = scope.seleccionado;
ctrl.callback = (typeof (scope.callback) == 'function') ? scope.callback : function () {/* no-op */};
},
controllerAs: 'ctrl',
controller: ['backEnd', '$scope', '$timeout', function (backEnd, $scope, $timeout) {
var $control = this;
if (typeof($control.selected) != 'object') {
$control.selected = {
departamento: '',
distrito: '',
barrio: '',
check: false
};
}
$scope.$watch('ctrl.selected.check', function(value){
$scope.activado = value;
});
$scope.seleccionados = [];
$control.cambioDepartamento = function () {
$control.distritos = [];
$control.barrios = [];
$control.selected.distrito = "";
$control.selected.barrio = "";
for (i in $control.ubicaciones) {
if ($control.ubicaciones[i].id == $control.selected.departamento) {
$control.distritos = $control.ubicaciones[i].distritos;
break;
}
}
//Esto es por https://docs.angularjs.org/error/$rootScope/inprog?p0=$digest#triggering-events-programmatically
$timeout(function () {
$('#ubicacion-distrito .dropdown,#ubicacion-barrio .dropdown').dropdown('clear');
}, 0, false);
};
$control.cambioDistrito = function () {
$control.barrios = [];
$control.selected.barrio = "";
for (i in $control.distritos) {
if ($control.distritos[i].id == $control.selected.distrito) {
$control.barrios = $control.distritos[i].barrios;
break;
}
}
$timeout(function () {
$('#ubicacion-barrio .dropdown').dropdown('clear');
}, 0, false);
};
var cargarUbicacion = function () {
//PLACEHOLDER
backEnd.ubicaciones.get({}, function (data) {
var ubicaciones = data;
$control.distritos = [];
$control.barrios = [];
$control.ubicaciones = ubicaciones;
$timeout(function () {
// $('.ui.checkbox').checkbox();
$('#ubicacion').find('.ui.dropdown').dropdown();
}, 300, false);
});
};
cargarUbicacion();
$scope.obtenerTextoUbicacion = function(selected, excluirPadres, incluirHojaNoRaiz, separador){
if(separador == undefined){
separador = " ➜ ";
}
var seleccion = "";
if (excluirPadres == undefined){
excluirPadres = false;
}
if (incluirHojaNoRaiz == undefined){
incluirHojaNoRaiz = true;
}
var depObj, disObj, barObj;
depObj = $control.ubicaciones
.filter(function (obj) {
return obj.id == selected[0];
});
if(!excluirPadres || (!selected[1])){
seleccion += depObj
.map(function (obj) {
return obj.nombre;
})
.reduce(function (a, b) {
return a + b;
});
}
depObj = depObj[0];
if (selected[1]) {
disObj = depObj.distritos
.filter(function (obj) {
return obj.id == selected[1];
});
if((!excluirPadres || (!selected[2])) && (incluirHojaNoRaiz || !!selected[2])){
if(seleccion != ''){
seleccion += separador;
}
seleccion += disObj
.map(function (obj) {
return obj.nombre;
})
.reduce(function (a, b) {
return a + b;
});
}
disObj = disObj[0];
}
if (selected[2]) {
barObj = disObj.barrios
.filter(function (obj) {
return obj.id == selected[2];
});
if(incluirHojaNoRaiz){
if(seleccion != ''){
seleccion += separador;
}
seleccion += barObj
.map(function (obj) {
return obj.nombre;
})
.reduce(function (a, b) {
return a + b;
});
}
barObj = barObj[0];
}
return seleccion;
};
$control.agregarUbicacion = function () {
var selected = [];
if (!$control.selected.departamento) {
return;
}
if ($scope.seleccionados
.filter(function (obj) {
return obj[0] == $control.selected.departamento
&& obj[1] == $control.selected.distrito
&& obj[2] == $control.selected.barrio;
}).length > 0) {
return;
}
selected = [$control.selected.departamento, $control.selected.distrito, $control.selected.barrio];
$scope.seleccionados.push(selected);
$('#ubicacion-labels').append(
$('<div class="ui label" style="margin-bottom: 5px" data-dep="' + $control.selected.departamento + '" data-dis="' + $control.selected.distrito + '" data-bar="' + $control.selected.barrio + '"></div>')
.html($scope.obtenerTextoUbicacion(selected))
.append(
$('<i class="delete icon"></i>')
.click(function () {
var label = $(this).parent();
$scope.seleccionados = $scope.seleccionados
.filter(function (obj) {
return !(obj[0] == label.data('dep')
&& obj[1] == label.data('dis')
&& obj[2] == label.data('bar'));
});
label.remove();
$timeout(function(){
$scope.$apply();
},0,false);
})
)
);
};
$control.limpiarUbicacion = function () {
$timeout(function () {
$('#ubicacion .ui.dropdown').dropdown('clear');
}, 0, false);
};
$control.borrarUbicaciones = function () {
$scope.seleccionados = [];
$timeout(function () {
$('#ubicacion-labels .ui.label').remove();
$scope.$digest();
}, 0, false);
};
}]
});
})();