Adicionar o seu próprio código JavaScript
Princípio
Adding some JavaScript (JS) is useful for a variety of advanced usage. For instance, you can:
hide some UI elements that you don’t want to display by default
add a custom button in the UI
add a popup when the project is opened (to display funders, credits…)
avoid people being able to download elements of the page by right clicking on them, and of course much more.
Pré-requisitos
This function needs to be activated by the administrator of the Lizmap instance.
The
media
directory. Read how to use Media folder in Lizmap.
Configuring the tool
In your repository (e.g.
/home/data/repo1/myproject.qgs
), you should have these directories:media |-- js |-- myproject |-- default
All the JavaScript code you copy in the
/home/data/rep1/media/js/myproject/
directory will be executed by Lizmap for this specific project only.All the JavaScript code in
default
will be executed for all projects.To allow the execution of JavaScript code, in the Lizmap admin interface, you must add the privilege Allow themes for this repository.
Video tutorial
This video is an quick start how to add a JavaScript to change the default panel in Lizmap.
Library of scripts
You can find some examples in the JavaScript library on GitHub.
Also, in the directory lizmap-web-client/lizmap/install/qgis/media/js/
(or in
GitHub),
you can find examples of suitable JavaScript code.
Remove the extension .example
and copy them to your media/js/default/
folder to activate them.
API documentation
An automated generated documentation of the JavaScript API is available on docs.3liz.org.
Eventos Javascript disponíveis
O código Javascript pode utilizar muitos eventos despoletados pelo Lizmap Web Client. Aqui está uma lista de todos os eventos disponíveis, com as propriedades retornadas.
Nome do evento |
Descrição |
Propriedades retornadas |
---|---|---|
treecreated |
Acionado quando a árvore da camada foi criada no painel de legenda |
|
mapcreated |
Acionado quando o mapa OpenLayers foi criado |
|
layersadded |
Acionado quando as camadas Openlayers foram adicionadas |
|
uicreated |
Acionado quando a interface foi criada |
|
dockopened |
Acionado quando um painel é aberto (painel esquerdo) |
id |
dockclosed |
Acionado quando um painel é fechado (painel esquerdo) |
id |
minidockopened |
Acionado quando uma mini-painel (recipiente direito para ferramentas) é aberto |
id |
minidockclosed |
Acionado quando um mini-painel é fechado |
id |
bottomdockopened |
Acionado quando o painel inferior é aberto |
id |
bottomdockclosed |
Acionado quando o painel inferior é fechado |
id |
lizmapbaselayerchanged |
Acionado quando um tema base foi alterado |
camada |
lizmapswitcheritemselected |
Acionado quando uma camada foi destacada no painel de legenda de camadas |
name | type | selected |
layerstylechanged |
Acionado quando um estilo de camada foi alterado |
featureType |
lizmaplocatefeaturecanceled |
Acionado quando o utilizador cancelou a ferramenta localizar por camada |
featureType |
lizmaplocatefeaturechanged |
Acionado quando o utilizador selecionou um item na ferramenta localizar por camada |
featureType | featureId |
lizmappopupdisplayed |
Acionado quando o conteúdo popup é apresentado |
|
lizmappopupallchildrendisplayed |
Fired when the all children popups are displayed |
parentPopupElement | childPopupElements |
lizmappopupdisplayed_inattributetable |
Acionado quando o conteúdo popup é apresentado na tabela de atributos (sub-painel direito) |
|
lizmapeditionformdisplayed |
Acionado quando um formulário de edição é apresentado |
layerId | featureId | editionConfig |
lizmapeditionfeaturecreated |
Acionado quando um elemento de camada foi criado com a ferramenta de edição |
layerId |
lizmapeditionfeaturemodified |
Acionado quando um elemento de camada foi modificado com a ferramenta de edição |
layerId |
lizmapeditionfeaturedeleted |
Acionado quando um elemento de camada foi eliminado com a ferramenta de edição |
layerId | featureId |
attributeLayersReady |
Acionado quando todas as camadas a serem presentadas na ferramenta de listar registos foram definidas |
camadas |
attributeLayerContentReady |
Acionado quando uma tabela de uma camada foi apresentada no painel inferior da base |
featureType |
layerfeaturehighlighted |
Acionado quando um elemento foi destacado na tabela de atributos (retângulo cinza). Acionar este evento manualmente força uma atualização das tabelas relacionadas se houver alguma para a camada atual |
sourceTable | featureType | fid |
layerfeatureselected |
Acionar este evento para despoletar a seleção de um elemento numa camada, passando o ID do elemento. Após efetuada uma seleção, o evento layerSelectionChanged é acionado em retorno. |
featureType | fid | updateDrawing |
layerfeaturefilterselected |
Acionar este evento para despoletar a filtragem de uma camada para os elementos selecionados. Deve selecionar alguns elementos antes de acionar este evento. Uma vez aplicado o filtro, o Lizmap aciona o evento layerFilteredFeaturesChanged em retorno. |
featureType |
layerFilteredFeaturesChanged |
Acionado quando um filtro foi aplicado ao mapa para uma camada. Este evento também aciona o redesenhar do mapa e o conteúdo das tabelas de atributos. |
featureType | featureIds | updateDrawing |
layerFilterParamChanged |
Acionado quando os parâmetros de pedido do WMS foram alterados para uma camada. Por exemplo, quando um ESTILO ou um FILTRO foi modificado para a camada. |
featureType | filter | updateDrawing |
layerfeatureremovefilter |
Acionar este evento para remover qualquer filtro aplicado ao mapa. Uma vez executado, o evento layerFilteredFeaturesChanged é acionado de volta e o conteúdo do mapa e o conteúdo das tabelas de atributos são atualizados. |
featureType |
layerSelectionChanged |
Acionado quando a seleção foi alterada para uma camada. Isto também aciona o redesenhar do mapa e a atualização do conteúdo da tabela de atributos |
featureType | featureIds | updateDrawing |
layerfeatureselectsearched |
Acionar este evento para selecionar todos os elementos correspondentes às linhas apresentadas na tabela de atributos, que podem ser filtrados visualmente pelo utilizador, digitando alguns caracteres na entrada de texto de pesquisa. |
featureType | updateDrawing |
layerfeatureunselectall |
Acionar este evento para remover todos os elementos da seleção de uma camada. Uma vez executado, o Lizmap responde com o evento layerSelectionChanged |
featureType | updateDrawing |
lizmapexternalsearchitemselected |
Fired when the user has selected an item listed in the results of the header search input |
feature |
actionResultReceived |
Fired when a Lizmap popup action has been performed and the result has been received |
layerId | featureId | action | features |
There are also some variables which are available.
Variable name |
Descrição |
---|---|
lizUrls.media |
URL to get a media |
lizUrls.params.repository |
Name of the current repository |
lizUrls.params.project |
Name of the current project |
Exemplos
Legend API
For a given layer buildings
:
var layer = lizMap.mainLizmap.state.rootMapGroup.getMapLayerByName('buildings');
// Name of the current loaded style
layer.wmsSelectedStyleName
// Toggle true or false the layer in the legend
layer.checked = true;
Please have a look to existing online demo, like the Paris by night
Disable right click
Add a file named e.g. disableRightClick.js
with the following code:
lizMap.events.on({
uicreated: function(e) {
$('body').attr('oncontextmenu', 'return false;');
}
});
If you want this code to be executed for all projects of your repository, you have to copy the file in the directory
/home/data/rep1/media/js/default/
rather than in/home/data/rep1/media/js/myproject/
.
Send current login user-ID
An example allowing you to send current login User-ID (and/or other user data) to PostgreSQL table column, using edition tool:
var formPrefix = 'jforms_view_edition';
// Name of the QGIS vector layer fields which must contain the user info
// In the list below, replace the right side by your own fields in Lizmap
var userFields = {
login: 'your_lizmap_user_login_field',
firstname: 'your_lizmap_user_firstname_field',
lastname: 'your_lizmap_user_lastname_field'
};
lizMap.events.on({
'lizmapeditionformdisplayed': function(e){
// If user is logged in
if( $('#info-user-login').length ){
// Loop through the needed fields
for( var f in userFields ){
// If the user has some data for this property
if( $('#info-user-' + f).text() ){
// If the field exists in the form
var fi = $('#' + formPrefix + '_' + userFields[f]);
if( fi.length ){
// Set val from lizmap user data
fi.val( $('#info-user-' + f).text() )
// Set disabled
fi.hide();
}
}
}
}
}
});
URL of a static file
If you want to get the URL of a static file, located in the Media folder:
var media = '/media/image/logo.jpg';
// It can also be a media located in the common media folder such as
// var media = '../media/logo.png';
var url = lizUrls.media + '?repository=' + lizUrls.params.repository + '&project=' + lizUrls.params.project + '&path=' + media;
// console.log(url);
var image = '<img src="' + url + '" title="Logo" style="display:inline;height:80px;margin:20px 10px;" />';
It’s possible to use a function from the OpenLayers library to help building the URL :
var mediaUrl = OpenLayers.Util.urlAppend(
lizUrls.media,
OpenLayers.Util.getParameterString({
"repository": lizUrls.params.repository,
"project": lizUrls.params.project,
"path": "picture.png"
})
);