Retour à la documentation
/**
* @class spw.widgets.SpwSnapshots
*/
define(
[
"dojo/_base/declare",
"dojo/text!./templates/SpwSnapshots.html",
"dojo/i18n!./nls/SpwSnapshots",
"dojo/_base/lang",
"dojo/_base/array",
"dojo/dom-construct",
"dojo/on",
"dojo/date/locale",
"spw/api/SpwBaseTemplatedWidget",
"spw/api/ConfigLoader",
"spw/api/ContextManager",
"spw/api/Utils",
"spw/api/StateManager",
"spw/api/LocalStorageManager",
"spw/api/MessageManager",
"dijit/layout/ContentPane"
],
function(declare, template, labels, lang, array, domConstruct, on, locale,
SpwBaseTemplatedWidget, ConfigLoader, ContextManager, Utils, StateManager,
LocalStorageManager, MessageManager) {
return declare("spw.widgets.SpwSnapshots", [SpwBaseTemplatedWidget], /** @lends spw.widgets.SpwSnapshots.prototype */ {
templateString: template,
labels: labels,
// description du widget (s'affiche avant la liste)
description: labels.description,
// clé de l'objet stocké dans le localstorage
localKey: 'GeoviewerSnapshots',
constructor: function() {
this.inherited(arguments);
},
postCreate: function() {
this.inherited(arguments);
this.own(on(this.saveButton, 'click', lang.hitch(this, this.checkFormAndSave)));
},
refreshList: function() {
domConstruct.empty(this.tbodyNode);
var snapshots = LocalStorageManager.instance().getItem(this.localKey);
if (snapshots == null || snapshots.length === 0) {
var tr = domConstruct.create('tr', null, this.tbodyNode);
domConstruct.create('td', {
style: 'padding: 15px;',
innerHTML: 'Aucun instantané sauvegardé.'
}, tr);
}
else {
array.forEach(snapshots, lang.hitch(this, this.addToList));
}
},
addToList: function(snap, idx) {
if (snap.name == null || snap.description == null || snap.date == null ||
snap.anchors == null || snap.anchors.length === 0) {
return;
}
var tr = domConstruct.create('tr', null, this.tbodyNode, 'last');
var td = domConstruct.create('td', null, tr, 'last');
domConstruct.create('span', {
style: 'font-weight: bold; font-size: 1.5em; font-variant: small-caps;',
innerHTML: snap.name
}, td, 'last');
domConstruct.create('span', {
innerHTML: ' - ' + locale.format(new Date(snap.date), {selector: 'date', formatLength: 'short'})
}, td, 'last');
domConstruct.create('p', {
innerHTML: snap.description
}, td, 'last');
var del = domConstruct.create('span', {
'class': 'delete'
}, td, 'last');
var add = domConstruct.create('span', {
'class': 'add'
}, td, 'last');
this.own(
on(add, 'click', lang.hitch(this, this.loadSnapshot, snap)),
on(del, 'click', lang.hitch(this, this.deleteSnapshot, idx))
);
},
checkFormAndSave: function() {
if (!this.nameNode.validate() || !this.descriptionNode.validate()) {
return;
}
this.saveSnapshot(this.nameNode.get('value'), this.descriptionNode.get('value'));
this.refreshList();
},
loadSnapshot: function(snap) {
if (snap.anchors == null || snap.anchors.length === 0) {
return;
}
array.forEach(snap.anchors, function(a) {
Utils.sua(a.key, a.value);
});
ConfigLoader.getInstance().load(ConfigLoader.getInstance().currentContext);
ContextManager.getInstance().applyContext();
},
deleteSnapshot: function(index) {
var removed = LocalStorageManager.instance().removeItem(this.localKey, index);
this.refreshList();
if (removed == null) {
return;
}
if (removed.anchors == null || removed.anchors.length === 0) {
return;
}
array.some(removed.anchors, function(a) {
if (a.key === StateManager.MAP_SERVICES_ID) {
var cfg = JSON.parse(a.value);
array.forEach(cfg, function(c) {
if (c.storage && c.storage === 'local') {
LocalStorageManager.instance().deleteItem(c.serviceId);
}
});
return true;
}
return false;
});
},
saveSnapshot: function(name, description) {
var anchors = StateManager.getInstance().getAnchors({
full: true,
storage: 'local',
extent: this.spwViewer.get('spwMap').getCurrentExtent()
});
if (anchors == null) {
MessageManager.getInstance().notifyError('Impossible de stocker davantage dans la mémoire du navigateur. Essayez de supprimer des données et réessayer.');
return;
}
var snapshot = {
name: name,
description: description,
date: new Date().getTime(),
anchors: anchors
};
LocalStorageManager.instance().addItem(this.localKey, snapshot);
},
onDeactivate: function() {
this.inherited(arguments);
},
onActivate: function() {
this.inherited(arguments);
this.refreshList();
}
});
});