Skip to content

Commit

Permalink
Merge pull request #3367 from camptocamp/permalink
Browse files Browse the repository at this point in the history
 Some fix for the permalink
  • Loading branch information
sbrunner committed Jan 12, 2018
2 parents 60cfd46 + e61c7c4 commit 9fd5afb
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 8 deletions.
75 changes: 73 additions & 2 deletions contribs/gmf/src/services/permalink.js
Original file line number Diff line number Diff line change
Expand Up @@ -933,7 +933,7 @@ gmf.Permalink.prototype.initLayers_ = function() {
let theme;
// Check if we have the groups in the permalink
const groupsNames = this.ngeoLocation_.getParam(gmf.PermalinkParam.TREE_GROUPS);
if (!groupsNames) {
if (groupsNames === undefined) {
goog.asserts.assertString(themeName);
theme = gmf.Themes.findThemeByName(themes, themeName);
if (theme) {
Expand Down Expand Up @@ -984,7 +984,7 @@ gmf.Permalink.prototype.initLayers_ = function() {
const groupLayers = this.ngeoStateManager_.getInitialStringValue(
gmf.PermalinkParamPrefix.TREE_GROUP_LAYERS + treeCtrl.node.name
);
if (groupLayers) {
if (groupLayers !== undefined) {
const groupLayersArray = groupLayers.split(',');
treeCtrl.traverseDepthFirst((treeCtrl) => {
if (treeCtrl.node.children === undefined) {
Expand Down Expand Up @@ -1169,4 +1169,75 @@ gmf.Permalink.prototype.createFilterGroup_ = function(prefix, paramKeys) {
};


/**
* Contains the layer name
* @param {!ol.layer.Base} layer The layer to inspect
* @param {string} name The layer name to find
* @return {boolean} The containing status
*/
gmf.Permalink.prototype.containsLayerName = function(layer, name) {
if (layer instanceof ol.layer.Group) {
for (const l of layer.getLayers().getArray()) {
goog.asserts.assert(l);
if (this.containsLayerName(l, name)) {
return true;
}
}
return false;
} else {
return layer.get('layerNodeName') == name;
}
};


/**
* Clean the permalink parameters
* @param {!Array.<gmfThemes.GmfGroup>} groups firstlevel groups of the tree
*/
gmf.Permalink.prototype.cleanParams = function(groups) {
const keys = goog.asserts.assert(this.ngeoLocation_.getParamKeys());
for (const key of keys) {
if (key.startsWith(gmf.PermalinkParamPrefix.TREE_GROUP_LAYERS)) {
const value = key.substring(gmf.PermalinkParamPrefix.TREE_GROUP_LAYERS.length);
for (const group of groups) {
if (group.name == value) {
this.ngeoStateManager_.deleteParam(key);
break;
}
}
}
if (key.startsWith(gmf.PermalinkParamPrefix.TREE_GROUP_OPACITY)) {
const value = key.substring(gmf.PermalinkParamPrefix.TREE_GROUP_OPACITY.length);
for (const group of groups) {
if (group.name == value) {
this.ngeoStateManager_.deleteParam(key);
break;
}
}
}
}
this.$timeout_(() => {
if (!this.map_) {
return;
}
const layer = this.map_.getLayerGroup();
goog.asserts.assert(layer);
for (const key of keys) {
if (key.startsWith(gmf.PermalinkParamPrefix.TREE_ENABLE)) {
const value = key.substring(gmf.PermalinkParamPrefix.TREE_ENABLE.length);
if (!this.containsLayerName(layer, value)) {
this.ngeoStateManager_.deleteParam(key);
}
}
if (key.startsWith(gmf.PermalinkParamPrefix.TREE_OPACITY)) {
const value = key.substring(gmf.PermalinkParamPrefix.TREE_OPACITY.length);
if (!this.containsLayerName(layer, value)) {
this.ngeoStateManager_.deleteParam(key);
}
}
}
});
};


gmf.module.service('gmfPermalink', gmf.Permalink);
12 changes: 11 additions & 1 deletion contribs/gmf/src/services/treemanager.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ goog.require('ngeo.LayertreeController');
* @constructor
* @struct
* @param {angular.$timeout} $timeout Angular timeout service.
* @param {angular.$injector} $injector Angular injector service.
* @param {angularGettext.Catalog} gettextCatalog Gettext catalog.
* @param {ngeo.LayerHelper} ngeoLayerHelper Ngeo Layer Helper.
* @param {ngeo.Notification} ngeoNotification Ngeo notification service.
Expand All @@ -31,7 +32,7 @@ goog.require('ngeo.LayertreeController');
* @ngdoc service
* @ngname gmfTreeManager
*/
gmf.TreeManager = function($timeout, gettextCatalog, ngeoLayerHelper,
gmf.TreeManager = function($timeout, $injector, gettextCatalog, ngeoLayerHelper,
ngeoNotification, gmfThemes, ngeoStateManager) {

/**
Expand All @@ -40,6 +41,12 @@ gmf.TreeManager = function($timeout, gettextCatalog, ngeoLayerHelper,
*/
this.$timeout_ = $timeout;

/**
* @type {angular.$injector}
* @private
*/
this.$injector_ = $injector;

/**
* @type {angularGettext.Catalog}
* @private
Expand Down Expand Up @@ -194,6 +201,9 @@ gmf.TreeManager.prototype.updateTreeGroupsState_ = function(groups) {
const treeGroupsParam = {};
treeGroupsParam[gmf.PermalinkParam.TREE_GROUPS] = groups.map(node => node.name).join(',');
this.ngeoStateManager_.updateState(treeGroupsParam);
if (this.$injector_.has('gmfPermalink')) {
/** @type {gmf.Permalink} */(this.$injector_.get('gmfPermalink')).cleanParams(groups);
}
};


Expand Down
6 changes: 1 addition & 5 deletions src/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,7 @@ ngeo.utils.encodeQueryString = function(queryData) {
const queryItem = [];
for (const key in queryData) {
const value = queryData[key];
if (value) {
queryItem.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
} else {
queryItem.push(encodeURIComponent(key));
}
queryItem.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
}
return queryItem.join('&');
};

0 comments on commit 9fd5afb

Please sign in to comment.