var
llapp, max, menu, overScheme, scheme;
max = 25;
scheme = [
function
(v) {
return
"groupBy=substr(uid,1)"
;
},
function
(v) {
return
`uid=${v}*&groupBy=uid`;
},
function
(v) {
return
`uid=${v}`;
}
];
overScheme =
function
(v, level, over) {
console.log(
'overScheme => level'
, level,
'over'
, over);
if
(level === 1 && v.length > over) {
return
`uid=${v}*&groupBy=substr(uid,${level + over + 1})`;
}
else
{
return
null
;
}
};
menu = {
actives: [
{
title:
'markAsDone'
,
icon:
'check'
}
],
done: [
{
title:
'deleteNotification'
,
icon:
'trash'
}
],
new
: [
{
title:
'save'
,
icon:
'save'
}
],
home: []
};
llapp = angular.module(
'llngNotificationsExplorer'
, [
'ui.tree'
,
'ui.bootstrap'
,
'llApp'
]);
llapp.controller(
'NotificationsExplorerCtrl'
, [
'$scope'
,
'$translator'
,
'$location'
,
'$q'
,
'$http'
,
'$uibModal'
,
function
($scope,
$translator,
$location,
$q,
$http,
$uibModal) {
var
autoId,
c,
dateToString;
$scope.links = links;
$scope.menulinks = menulinks;
$scope.staticPrefix = staticPrefix;
$scope.scriptname = scriptname;
$scope.formPrefix = formPrefix;
$scope.availableLanguages = availableLanguages;
$scope.waiting =
true
;
$scope.showM =
false
;
$scope.showT =
true
;
$scope.showForm =
false
;
$scope.data = [];
$scope.form = {};
$scope.formPost = {};
$scope.currentScope =
null
;
$scope.currentNotification =
null
;
$scope.menu = menu;
$scope.translateP = $translator.translateP;
$scope.translate = $translator.translate;
$scope.translateTitle =
function
(node) {
return
$translator.translateField(node,
'title'
);
};
$scope.menuClick =
function
(button) {
if
(button.popup) {
window.open(button.popup);
}
else
{
button.action || (button.action = button.title);
switch
(
typeof
button.action) {
case
'function'
:
button.action($scope.currentNode,
$scope);
break
;
case
'string'
:
$scope[button.action]();
break
;
default
:
console.log(
typeof
button.action);
}
}
return
$scope.showM =
false
;
};
$scope.markAsDone =
function
() {
$scope.waiting =
true
;
return
$http.put(`${scriptname}notifications/${$scope.type}/${$scope.currentNotification.uid}_${$scope.currentNotification.reference}`,
{
done: 1
}).then(
function
(response) {
$scope.currentNotification =
null
;
$scope.currentScope.remove();
$scope.message = {
title:
'notificationDeleted'
};
$scope.showModal(
"alert.html"
);
$scope.waiting =
false
;
return
$scope.init();
},
function
(response) {
$scope.message = {
title:
'notificationNotDeleted'
,
message: response.statusText
};
$scope.showModal(
"alert.html"
);
$scope.waiting =
false
;
return
$scope.init();
});
};
$scope.deleteNotification =
function
() {
$scope.waiting =
true
;
return
$http[
'delete'
](`${scriptname}notifications/${$scope.type}/${$scope.currentNotification.uid}_${$scope.currentNotification.reference}_${$scope.currentNotification.done}`).then(
function
(response) {
$scope.currentNotification =
null
;
$scope.currentScope.remove();
$scope.message = {
title:
'notificationPurged'
};
$scope.showModal(
"alert.html"
);
$scope.waiting =
false
;
return
$scope.init();
},
function
(response) {
$scope.message = {
title:
'notificationNotPurged'
,
message: response.statusText
};
$scope.showModal(
"alert.html"
);
$scope.waiting =
false
;
return
$scope.init();
});
};
$scope.stoggle =
function
(scope) {
var
node;
node = scope.$modelValue;
if
(node.nodes.length === 0) {
$scope.updateTree(node.value,
node.nodes,
node.level,
node.over,
node.query,
node.count);
}
return
scope.toggle();
};
$scope.notifDate =
function
(s) {
var
d;
if
(s !=
null
) {
if
(s.match(/(\d{4})-(\d{2})-(\d{2})/)) {
s = s.substr(0,
4) + s.substr(5,
2) + s.substr(8,
2);
}
d =
new
Date(s.substr(0,
4),
s.substr(4,
2) - 1,
s.substr(6,
2));
return
d.toLocaleDateString();
}
return
''
;
};
$scope.getLanguage =
function
(lang) {
$scope.lang = lang;
if
($scope.form.date) {
$scope.form.date =
new
Date();
}
else
{
$scope.form =
'white'
;
}
$scope.init();
return
$scope.showM =
false
;
};
$scope.$on(
'$locationChangeSuccess'
,
function
(event,
next,
current) {
var
n;
n = next.match(/
#!?\/(\w+)/);
$scope.type = n !=
null
? n[1] :
'actives'
;
if
($scope.type ===
'new'
) {
return
$scope.displayCreateForm();
}
else
{
$scope.showForm =
false
;
return
$scope.init();
}
});
autoId = 0;
$scope.updateTree =
function
(value,
node,
level,
over,
currentQuery,
count) {
var
query,
tmp;
$scope.waiting =
true
;
query = scheme[level](value,
currentQuery);
if
(count > max) {
if
(tmp = overScheme(value,
level,
over)) {
over++;
query = tmp;
level = level - 1;
}
else
{
over = 0;
}
}
else
{
over = 0;
}
if
($scope.type ===
'done'
|| $scope.type ===
'actives'
) {
$http.get(`${scriptname}notifications/${$scope.type}?${query}`).then(
function
(response) {
var
data,
i,
len,
n,
ref;
data = response.data;
if
(data.result) {
ref = data.values;
for
(i = 0, len = ref.length; i < len; i++) {
n = ref[i];
autoId++;
n.id = `node${autoId}`;
if
(level < scheme.length - 1) {
n.nodes = [];
n.level = level + 1;
n.query = query;
n.over = over;
}
node.push(n);
}
if
(value ===
''
) {
$scope.total = data.total;
}
}
return
$scope.waiting =
false
;
},
function
(resp) {
return
$scope.waiting =
false
;
});
}
console.log(
"Selection"
,
$scope.type);
$scope.activesStyle = {
color:
'#777'
};
$scope.doneStyle = {
color:
'#777'
};
$scope.newStyle = {
color:
'#777'
};
if
($scope.type ===
'actives'
) {
$scope.activesStyle = {
color:
'#333'
};
}
if
($scope.type ===
'done'
) {
return
$scope.doneStyle = {
color:
'#333'
};
}
};
$scope.displayNotification =
function
(scope) {
var
node,
notificationId;
$scope.waiting =
true
;
$scope.currentScope = scope;
node = scope.$modelValue;
notificationId = node.notification.replace(/
#/g,
'_'
);
if
($scope.type ===
'actives'
) {
notificationId = `${node.uid}_${node.reference}`;
}
$http.get(`${scriptname}notifications/${$scope.type}/${notificationId}`).then(
function
(response) {
var
notif;
$scope.currentNotification = {
uid: node.uid,
reference: node.reference
};
if
($scope.type ===
'done'
) {
$scope.currentNotification.done = response.data.done;
}
try
{
console.log(
"Try to parse a JSON formated notification..."
);
notif = JSON.parse(response.data.notifications);
$scope.currentNotification.date = $scope.notifDate(notif.date);
$scope.currentNotification.condition = notif.condition;
$scope.currentNotification.text = notif.text;
$scope.currentNotification.title = notif.title;
$scope.currentNotification.subtitle = notif.subtitle;
$scope.currentNotification.check = notif.check;
}
catch
(error) {
console.log(
"Unable to parse JSON"
);
$scope.currentNotification.notifications = response.data.notifications;
}
return
$scope.waiting =
false
;
},
function
(resp) {
return
$scope.waiting =
false
;
});
return
$scope.showT =
false
;
};
$scope.showModal =
function
(tpl,
init) {
var
d,
modalInstance;
modalInstance = $uibModal.open({
templateUrl: tpl,
controller:
'ModalInstanceCtrl'
,
size:
'lg'
,
resolve: {
elem:
function
() {
return
function
(s) {
return
$scope[s];
};
},
set:
function
() {
return
function
(f,
s) {
return
$scope[f] = s;
};
},
init:
function
() {
return
init;
}
}
});
d = $q.defer();
return
modalInstance.result.then(
function
(msgok) {
$scope.message = {
title:
''
,
message:
''
};
return
d.resolve(msgok);
},
function
(msgnok) {
$scope.message = {
title:
''
,
message:
''
};
return
d.reject(msgnok);
});
};
$scope.save =
function
() {
if
($scope.form.uid && $scope.form.reference && $scope.form.xml) {
$scope.waiting =
true
;
$scope.formPost.uid = $scope.form.uid;
if
($scope.form.date) {
$scope.formPost.date = dateToString($scope.form.date);
}
$scope.formPost.reference = $scope.form.reference;
$scope.formPost.condition = $scope.form.condition;
$scope.formPost.xml = $scope.form.xml;
$http.post(
'notifications/actives'
,
$scope.formPost).then(
function
(response) {
var
data;
data = response.data;
$scope.form = {};
if
(data.result === 1) {
$scope.message = {
title:
'notificationCreated'
};
}
else
{
$scope.message = {
title:
'notificationNotCreated'
,
message: data.error
};
}
$scope.showModal(
"alert.html"
);
$scope.waiting =
false
;
return
$scope.form.date =
new
Date();
},
function
(response) {
$scope.message = {
title:
'notificationNotCreated'
,
message: response.statusText
};
$scope.showModal(
"alert.html"
);
$scope.waiting =
false
;
return
$scope.form.date =
new
Date();
});
}
else
{
$scope.message = {
title:
'incompleteForm'
};
$scope.showModal(
"alert.html"
);
}
return
$scope.form.date =
new
Date();
};
$scope.init =
function
() {
$scope.waiting =
true
;
$scope.showM =
false
;
$scope.showT =
false
;
$scope.data = [];
$scope.currentScope =
null
;
$scope.currentNotification =
null
;
$q.all([$translator.init($scope.lang),
$scope.updateTree(
''
,
$scope.data,
0,
0)]).then(
function
() {
return
$scope.waiting =
false
;
},
function
(resp) {
return
$scope.waiting =
false
;
});
$scope.activeModule =
"notifications"
;
return
$scope.myStyle = {
color:
'#ffb84d'
};
};
$scope.displayCreateForm =
function
() {
$scope.activesStyle = {
color:
'#777'
};
$scope.doneStyle = {
color:
'#777'
};
$scope.newStyle = {
color:
'#333'
};
$scope.waiting =
true
;
return
$translator.init($scope.lang).then(
function
() {
$scope.currentNotification =
null
;
$scope.showForm =
true
;
$scope.data = [];
$scope.waiting =
false
;
return
$scope.form.date =
new
Date();
});
};
c = $location.path().match(/^\/(\w+)/);
$scope.type = c ? c[1] :
'actives'
;
$scope.popupopen =
function
() {
return
$scope.popup.opened =
true
;
};
$scope.dateOptions = {
startingDay: 1,
minDate:
new
Date()
};
$scope.popup = {
opened:
false
};
return
dateToString =
function
(dt) {
var
day,
month,
year;
year = dt.getFullYear();
month = dt.getMonth() + 1;
if
(month < 10) {
month = `0${month}`;
}
day = dt.getDate();
if
(day < 10) {
day = `0${day}`;
}
return
`${year}-${month}-${day}`;
};
}
]);