GIService 2 anni fa
parent
commit
0f2725c8df
  1. BIN
      assets/.DS_Store
  2. 183
      assets/app/app.php
  3. 206
      assets/app/create.php
  4. 198
      assets/app/delete.php
  5. 272
      assets/app/read.php
  6. 436
      assets/app/update_linestring.php
  7. 427
      assets/app/update_point.php
  8. 426
      assets/app/update_polygon.php
  9. BIN
      assets/component/.DS_Store
  10. 187
      assets/component/datatables/css/dataTables.bootstrap.css
  11. 1
      assets/component/datatables/css/dataTables.bootstrap.min.css
  12. 206
      assets/component/datatables/css/dataTables.bootstrap4.css
  13. 1
      assets/component/datatables/css/dataTables.bootstrap4.min.css
  14. 9384
      assets/component/datatables/datatables.css
  15. 20820
      assets/component/datatables/datatables.js
  16. 26
      assets/component/datatables/datatables.min.css
  17. 238
      assets/component/datatables/datatables.min.js
  18. BIN
      assets/component/datatables/images/sort_asc.png
  19. BIN
      assets/component/datatables/images/sort_asc_disabled.png
  20. BIN
      assets/component/datatables/images/sort_both.png
  21. BIN
      assets/component/datatables/images/sort_desc.png
  22. BIN
      assets/component/datatables/images/sort_desc_disabled.png
  23. 182
      assets/component/datatables/js/dataTables.bootstrap.js
  24. 8
      assets/component/datatables/js/dataTables.bootstrap.min.js
  25. 184
      assets/component/datatables/js/dataTables.bootstrap4.js
  26. 8
      assets/component/datatables/js/dataTables.bootstrap4.min.js
  27. 1
      assets/component/index.php
  28. 13
      assets/component/jquery-multi-select/LICENSE.txt
  29. 3
      assets/component/jquery-multi-select/README.markdown
  30. 101
      assets/component/jquery-multi-select/css/multi-select.css
  31. BIN
      assets/component/jquery-multi-select/img/switch.png
  32. BIN
      assets/component/jquery-multi-select/img/switch_original.png
  33. 532
      assets/component/jquery-multi-select/js/jquery.multi-select.js
  34. 5
      assets/component/jquery.min.js
  35. BIN
      assets/component/leaflet/1.3.4/images/layers-2x.png
  36. BIN
      assets/component/leaflet/1.3.4/images/layers.png
  37. BIN
      assets/component/leaflet/1.3.4/images/marker-icon-2x.png
  38. BIN
      assets/component/leaflet/1.3.4/images/marker-icon.png
  39. BIN
      assets/component/leaflet/1.3.4/images/marker-shadow.png
  40. 13778
      assets/component/leaflet/1.3.4/leaflet-src.esm.js
  41. 1
      assets/component/leaflet/1.3.4/leaflet-src.esm.js.map
  42. 13870
      assets/component/leaflet/1.3.4/leaflet-src.js
  43. 1
      assets/component/leaflet/1.3.4/leaflet-src.js.map
  44. 635
      assets/component/leaflet/1.3.4/leaflet.css
  45. 5
      assets/component/leaflet/1.3.4/leaflet.js
  46. 1
      assets/component/leaflet/1.3.4/leaflet.js.map
  47. 231
      assets/component/leaflet/L.LabelTextCollision.js
  48. 269
      assets/component/leaflet/L.Map.Sync.js
  49. 95
      assets/component/leaflet/L.TileLayer.BetterWMS.js
  50. BIN
      assets/component/leaflet/Leaflet.defaultextent-master.zip
  51. 131
      assets/component/leaflet/accordion/L.Control.AccordionLegend.css
  52. 337
      assets/component/leaflet/accordion/L.Control.AccordionLegend.js
  53. 1
      assets/component/leaflet/basemap/L.Control.Basemaps-min.js
  54. 28
      assets/component/leaflet/basemap/L.Control.Basemaps.css
  55. 150
      assets/component/leaflet/basemap/L.Control.Basemaps.js
  56. 32
      assets/component/leaflet/coord/Leaflet.Coordinates-0.1.5.css
  57. 1
      assets/component/leaflet/coord/Leaflet.Coordinates-0.1.5.ie.css
  58. 2
      assets/component/leaflet/coord/Leaflet.Coordinates-0.1.5.min.js
  59. 349
      assets/component/leaflet/coord/Leaflet.Coordinates-0.1.5.src.js
  60. 38
      assets/component/leaflet/coord_mobile/Gruntfile.js
  61. 21
      assets/component/leaflet/coord_mobile/L.Control.MapCenterCoord.css
  62. 222
      assets/component/leaflet/coord_mobile/L.Control.MapCenterCoord.js
  63. 21
      assets/component/leaflet/coord_mobile/LICENCE
  64. 66
      assets/component/leaflet/coord_mobile/README.md
  65. 40
      assets/component/leaflet/coord_mobile/examples/ddmm.html
  66. 39
      assets/component/leaflet/coord_mobile/examples/ddmmss.html
  67. 65
      assets/component/leaflet/coord_mobile/examples/etrs89-31n.html
  68. 45
      assets/component/leaflet/coord_mobile/examples/latlng_formatter.html
  69. 15
      assets/component/leaflet/coord_mobile/examples/lib/proj4leaflet.min.js
  70. 37
      assets/component/leaflet/coord_mobile/examples/simple.html
  71. 25
      assets/component/leaflet/coord_mobile/icons/MapCenterCoordIcon1.svg
  72. 15
      assets/component/leaflet/coord_mobile/icons/MapCenterCoordIcon2.svg
  73. 37
      assets/component/leaflet/coord_mobile/package.json
  74. BIN
      assets/component/leaflet/draw/editableMarkercluster/images/marker-icon-red-2x.png
  75. BIN
      assets/component/leaflet/draw/editableMarkercluster/images/marker-icon-red.png
  76. BIN
      assets/component/leaflet/draw/editableMarkercluster/images/marker-shadow.png
  77. 340
      assets/component/leaflet/draw/editableMarkercluster/leaflet.markercluster.editablemarker.js
  78. BIN
      assets/component/leaflet/draw/images/layers-2x.png
  79. BIN
      assets/component/leaflet/draw/images/layers.png
  80. BIN
      assets/component/leaflet/draw/images/marker-icon-2x.png
  81. BIN
      assets/component/leaflet/draw/images/marker-icon.png
  82. BIN
      assets/component/leaflet/draw/images/marker-shadow.png
  83. 1
      assets/component/leaflet/draw/images/spritesheet copy.svg
  84. BIN
      assets/component/leaflet/draw/images/spritesheet-2x copy.png
  85. BIN
      assets/component/leaflet/draw/images/spritesheet-2x.png
  86. BIN
      assets/component/leaflet/draw/images/spritesheet.png
  87. 1
      assets/component/leaflet/draw/images/spritesheet.svg
  88. 241
      assets/component/leaflet/draw/leaflet.draw.css
  89. 1768
      assets/component/leaflet/draw/leaflet.draw.js
  90. 91
      assets/component/leaflet/draw/lib/EditToolbar.js
  91. 102
      assets/component/leaflet/draw/lib/L.Control.Sidebar.css
  92. 197
      assets/component/leaflet/draw/lib/L.Control.Sidebar.js
  93. 1916
      assets/component/leaflet/draw/lib/Leaflet.Editable.js
  94. 60
      assets/component/leaflet/draw/lib/MarkerCluster.Default.css
  95. 6
      assets/component/leaflet/draw/lib/MarkerCluster.css
  96. 2130
      assets/component/leaflet/draw/lib/leaflet-wfst.src.js
  97. 52
      assets/component/leaflet/draw/lib/leaflet.label.css
  98. 209
      assets/component/leaflet/draw/lib/leaflet.label.js
  99. 6
      assets/component/leaflet/draw/lib/leaflet.markercluster.js
  100. 384
      assets/component/leaflet/draw/lib/leaflet.toolbar-src.js
  101. Some files were not shown because too many files have changed in this diff Show More

BIN
assets/.DS_Store vendored

File binario non mostrato.

183
assets/app/app.php

@ -0,0 +1,183 @@
$(document).ready(function(){
_attachTopNavMenu();
_displayMapRead('app');
});
function _attachTopNavMenu () {
var adjacentTopNavMenuDOM = "" +
"<nav id='sidebar'>" +
" <div class='sidebar-header'><a href='#'><img src='assets/img/draw.png' height='90px'></a></div> " +
" <ul class='list-unstyled'>" +
<?php if ($_SESSION['STATUS'] == 'true' ) {?>
" <li><a id='home' class='nav-link flat' href='#'><span class='icon'><i class='fal fa-home fa-lg'></i></span>Torna alla mappa</a></li>" +
<?php } else { ?>
" <li><a id='home' class='nav-link flat' href='#'><span class='icon'><i class='fal fa-home fa-lg'></i></span>Home</a></li>" +
<?php } ?>
" <li><a id='leaflet_crud_create' class='nav-link flat' href='#'><span class='icon'><i class='fal fa-object-group fa-lg'></i></span>&nbsp;Crea</a>" +
" <li><a id='leaflet_crud_read' class='nav-link flat' href='#'><span class='icon'><i class='fal fa-map fa-lg'></i></span>&nbsp;Visualizza</a>" +
" <li>" +
" <a href='#homeSubmenu' id='navbarDropdownUpdate' data-toggle='collapse' aria-expanded='false' class='dropdown-toggle collapsed'><span class='icon'><i class='fal fa-edit fa-lg'></i></span>Modifica</a>" +
" <ul class='collapse list-unstyled' id='homeSubmenu'>" +
" <li><a id='leaflet_crud_update_point' class='dropdown-item' href='#'><i class='fal fa-map-marker-alt fa-lg' style='margin-right:10px'></i>&nbsp;Punto</a>" +
" <li><a id='leaflet_crud_update_linestring' class='dropdown-item' href='#'><i class='fal fa-grip-lines fa-lg' style='margin-right:10px'></i>&nbsp;Linea</a>" +
" <li><a id='leaflet_crud_update_polygon' class='dropdown-item' href='#'><i class='fas fa-draw-polygon fa-lg' style='margin-right:10px'></i>&nbsp;Poligono</a></li>" +
" </ul>" +
" </li>" +
" <li><a id='leaflet_crud_delete' class='nav-link flat' href='#'><span class='icon'><i class='fal fa-trash fa-lg'></i></span>&nbsp;Cancella</a></li>" +
" <li><a href='guida.php' class='nav-link flat'><span class='icon'><i class='fas fa-question fa-lg' style='margin-right:10px'></i></span>Guida</a></li>" +
" </ul>" +
"</nav>" +
"";
var baseObject = document.getElementById('app');
baseObject.insertAdjacentHTML('beforebegin', adjacentTopNavMenuDOM);
_attachTopNavMenuFunction();
}
function _attachTopNavMenuFunction () {
$('#sidebar a.nav-link.flat').on('click', function(e){
e.stopImmediatePropagation();
var menuid = $(this).attr('id');
$('.navbar-collapse').collapse('hide');
switch(menuid){
<?php if ($_SESSION['STATUS'] == true ) {?>
case 'home':
window.location.href = "detail.php";
break;
<?php } else { ?>
case 'home':
<?php } ?>
case 'leaflet_crud_read':
_displayMapRead('app');
break;
case 'leaflet_crud_create':
_displayMapCreate('app');
break;
case 'leaflet_crud_delete':
_displayMapDelete('app');
break;
default:
console.log('__undefined__');
break;
}
return false;
});
$('#sidebar a.dropdown-item').on('click', function(e){
e.stopImmediatePropagation();
var menuid = $(this).attr('id');
$('.navbar-collapse').collapse('hide');
$(this).closest('li.nav-item.dropdown').find('.nav-link.dropdown-toggle').dropdown('toggle');
switch(menuid){
case 'leaflet_crud_update_point':
_displayMapUpdatePoint('app');
break;
case 'leaflet_crud_update_linestring':
_displayMapUpdateLinestring('app');
break;
case 'leaflet_crud_update_polygon':
_displayMapUpdatePolygon('app');
break;
default:
console.log('__undefined__');
break;
}
return false;
});
}
function _buildDigitiseModalBox (targetmodal,context,geometry) {
targetmodal = typeof targetmodal !== 'undefined' ? targetmodal : 'modalbox';
context = typeof context !== 'undefined' ? context : 'POINT';
geometry = typeof geometry !== 'undefined' ? geometry : 'POINT (110.21766 -7.459129)';
var htmlformcomponent = "" +
"<input type='hidden' id='command' name='command' value='"+context+"'/>" +
"<input type='hidden' id='geometry' name='geometry' value='"+geometry+"'/>" +
"<table id='feature_data' class='table table-condensed table-bordered table-striped'>" +
"<thead>" +
"<tr>" +
"<th colspan='2' class='text-center'>Dati indetificativi</th>" +
"</tr>" +
"</thead>" +
"<tbody>" +
"<tr>" +
"<td class=''>Note alla geometria</td>" +
"<td class='text-center'><textarea id='notes' name='notes' rows='4' class='form-control' value=''/></textarea></td>" +
"</tr>" +
"<!--tr>" +
"<td class=''>Geometry<br/>(in WKT)</td>" +
"<td class='text-center'><textarea rows='5' style='width:100%;' readonly='true'>"+geometry+"</textarea></td>" +
"</tr-->" +
"</tbody>" +
"</table>" +
"";
var modalfooter = "" +
"<button type='button' id='canceldigitize' class='btn btn-default' data-dismiss='modal'><i class='fa fa-power-off'></i>&nbsp;Cancel</button>" +
"<button type='button' id='savegeometrydata' class='btn btn-primary'><i class='fa fa-floppy-o'></i>&nbsp;Save</button>" +
"";
$("#form_modal_body").empty();
$("#form_modal_footer").empty().html(modalfooter);
$("#form_modal_body").removeClass().addClass('modal-body');
$("#form_modal_size").removeClass().addClass('modal-dialog');
$("#form_modal_body").html(htmlformcomponent);
$("#form_modal_label").html("<i class='fa fa-pencil'></i>&nbsp;"+context+"");
$('#'+targetmodal+'').modal({show:true, backdrop:'static', keyboard:false});
}
function _activateFeatureSave () {
$("#savegeometrydata").on('click', function(evt){
evt.stopImmediatePropagation();
var commandContext = $('#command').val();
var noteString = $('#notes').val();
var geometry = $('#geometry').val();
if (commandContext == "POINT") {
$.ajax({ url: "assets/dataservice/create_point.php",
method: "GET",
dataType: "json",
data: $('#dynamicform').serialize(),
success: function (data) {
if (data.response=="200") {
$("#modalform").modal('hide');
} else {
$("#modalform").modal('hide');
console.log('Failed to save.');
}
},
username: null,
password: null
});
} else if (commandContext == "LINESTRING") {
$.ajax({ url: "assets/dataservice/create_linestring.php",
method: "GET",
dataType: "json",
data: $('#dynamicform').serialize(),
success: function (data) {
if (data.response=="200") {
$("#modalform").modal('hide');
} else {
$("#modalform").modal('hide');
console.log('Failed to save.');
}
},
username: null,
password: null
});
} else if (commandContext == "POLYGON") {
$.ajax({ url: "assets/dataservice/create_polygon.php",
method: "GET",
dataType: "json",
data: $('#dynamicform').serialize(),
success: function (data) {
if (data.response=="200") {
$("#modalform").modal('hide');
} else {
$("#modalform").modal('hide');
console.log('Failed to save.');
}
},
username: null,
password: null
});
} else {
console.log('__undefined__');
}
return false;
});
}

206
assets/app/create.php

@ -0,0 +1,206 @@
function _displayMapCreate (divtarget) {
divtarget = typeof divtarget !== 'undefined' ? divtarget : 'app';
document.getElementById(divtarget).innerHTML = "<div id='map' class='map-wrapper'></div>";
document.getElementById('home').className = "nav-link flat";
document.getElementById('leaflet_crud_create').className = "nav-link flat active";
document.getElementById('leaflet_crud_read').className = "nav-link flat";
document.getElementById('navbarDropdownUpdate').className = "nav-link dropdown-toggle";
document.getElementById('leaflet_crud_delete').className = "nav-link flat";
var map, isCollapsed, openStreetMaps;
if (document.body.clientWidth <= 767) {
isCollapsed = true;
} else {
isCollapsed = false;
}
var url = "https://test-paesaggistica.lavoripubblici.sicilia.it/geoserver/mappers/wms";
//################# INIZIO PARTICELLA SELEZIONATA #################
<?php if ( strlen($_SESSION['SELECT_PARTICELLA']) > 100 ) { ?>
particella = L.geoJson(<?php echo $_SESSION['SELECT_PARTICELLA'];?>, {
style: {'color': "#ff0000",'fillColor': "rgb(255, 255, 0)",'fillOpacity': 0.4,'dashArray': 4,'weight': 3,'opacity': 0.9}
}),
<?php } ?>
//################# FINE PARTICELLA SELEZIONATA #################
odm1 = L.tileLayer ('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
{
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: 'OpenStreetMap | contributors CC-BY-SA.'
});
odm2 = L.tileLayer ('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
{
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: '© Esri | Source: Esri, USDA, USGS, AEX, GeoEye and the GIS User Community'
});
odm3 = L.tileLayer.wms ('http://geoportal.mapcloud.it:8080/geoserver/wms',
{
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mappers:provincie',
attribution: '© mapcloud services'
});
ctr10k = L.tileLayer.wms ('http://geoportal.mapcloud.it:8080/geoserver/wms',
{
format: 'image/png',
transparent: true,
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mapcloud:ctr10k',
attribution: 'Carta Tecnica Regionale 1:10.000 - Regione Sicilia (Servizio WMS)'
});
particelle = L.tileLayer.wms(url, {
layers: "mappers:particelle_<?php echo $_SESSION['COMUNE_BELF']; ?>",
format: "image/png",
maxZoom: 20,
minZoom: 10,
transparent: true,
attribution: '© mapcloud services'
});
map = L.map("map", {
zoom: <?php echo $_SESSION['ZOOM'];?>,
center: [<?php echo $_SESSION['CENTER'];?>],
layers: [odm1,particella],
minZoom: 3,
maxZoom: 20,
zoomControl: false,
attributionControl: false
});
map.setMaxBounds([<?php echo $_SESSION['BOUND']; ?>]);
var zoomControl = L.control.zoom({
position: "topleft"
}).addTo(map);
var baseLayers = [
{label: '<b>Opendata Map</b>', noShow: false, children: [
{label: 'OpenStreetMap', layer: odm1},
{label: 'Satellite Image', layer: odm2},
{label: 'Limiti provinciali', layer: odm3},
]},
{label: '<b>Cartografia Regionale</b>', children: [
{label: 'CTR 10K - volo 2012-2013', layer: ctr10k },
]},
];
var overlayLayers =
{
label: '<b>CARTOGRAFICI</b>',
noShow: true,
children: [
{label: '<b>Catasto</b>', children: [
{label: 'Particelle catastali', layer: particelle},
]},
{label: '<b>Particelle progetto</b>', children: [
{label: 'Particelle selezionate', layer: particella},
]},
]
};
var options = {
collapsed: true,
closedSymbol: '<i class="fal fa-plus-square" style="margin-right:5px"></i>',
openedSymbol: '<i class="fal fa-minus-square" style="margin-right:5px"></i>',
namedToggle: false,
spaceSymbol: ' ',
selectorBack: false,
collapseAll: '',
expandAll: '',
};
var layerControl = L.control.layers.tree(baseLayers, overlayLayers, options).addTo(map);
var attributionControl = L.control({
position: "bottomright"
});
/* Digitize Function */
var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);
var drawControl = new L.Control.Draw({
draw: {
position: 'topleft',
polyline: true,
polygon: true,
rectangle: false,
circle: false,
marker: true,
circlemarker: false
},
edit: false
});
map.addControl(drawControl);
map.on('draw:created', function (e) {
var type = e.layerType,
layer = e.layer;
var drawnJSONObject = layer.toGeoJSON();
var objectGeometry = Terraformer.WKT.convert(drawnJSONObject.geometry);
if (type === 'polyline') {
_buildDigitiseModalBox('modalform','LINESTRING',objectGeometry);
} else if (type === 'polygon') {
_buildDigitiseModalBox('modalform','POLYGON',objectGeometry);
} else if (type === 'marker') {
_buildDigitiseModalBox('modalform','POINT',objectGeometry);
} else {
console.log('__undefined__');
}
//map.addLayer(layer);
drawnItems.addLayer(layer);
});
$("#modalform").on('shown.bs.modal', function(){
_activateFeatureSave();
});
var sidebar = L.control.sidebar({
autopan: false,
container: "sidebar",
position: "right"
}).addTo(map);
var layerControl = L.control.layers(
baseLayers,
overlayLayers,
{
position: "topright",
collapsed: false
}
).addTo(map);
var layerControlContainer = layerControl.getContainer();
$("#layercontrol").append(layerControlContainer);
$(".leaflet-control-layers-list").prepend("<strong class='title'>Base Maps</strong><br>");
$(".leaflet-control-layers-separator").after("<br><strong class='title'>Layers</strong><br>");
}

198
assets/app/delete.php

@ -0,0 +1,198 @@
function _displayMapDelete (divtarget) {
divtarget = typeof divtarget !== 'undefined' ? divtarget : 'app';
document.getElementById(divtarget).innerHTML = "<div id='map' class='map-wrapper'></div>";
document.getElementById('home').className = "nav-link flat";
document.getElementById('leaflet_crud_create').className = "nav-link flat";
document.getElementById('leaflet_crud_read').className = "nav-link flat";
document.getElementById('navbarDropdownUpdate').className = "nav-link dropdown-toggle";
document.getElementById('leaflet_crud_delete').className = "nav-link flat active";
var map, isCollapsed, openStreetMaps;
if (document.body.clientWidth <= 767) {
isCollapsed = true;
} else {
isCollapsed = false;
}
var promisePoint = $.ajax({ url: "assets/dataservice/read_point.php",
method: "GET",
dataType: "json",
data: {command:"POINT"},
username: null,
password: null
});
var pointObjects = L.geoJson(null, {
onEachFeature: function (feature, layer) {
if (feature.properties) {
layer.on({
click: function (e) {
var featureGid = feature.properties.id;
var deleteConfirmation = confirm("Vuoi cancellare questa geometria?");
if (deleteConfirmation == true) {
$.ajax({ url: "assets/dataservice/delete_point.php",
method: "GET",
dataType: "json",
data: {command:"DELETE",id:featureGid},
success: function (data) {
if (data.response=="200") {
map.off();
map.remove();
_displayMapDelete('app');
} else {
console.log('Failed to delete.');
}
},
username: null,
password: null
});
} else {
console.log('Delete feature is cancelled.');
}
}
});
}
}
});
promisePoint.then(function (data) {
pointObjects.addData(data);
map.addLayer(pointObjects);
});
var promiseLinestring = $.ajax({ url: "assets/dataservice/read_linestring.php",
method: "GET",
dataType: "json",
data: {command:"LINESTRING"},
username: null,
password: null
});
var linestringObjects = L.geoJson(null, {
onEachFeature: function (feature, layer) {
if (feature.properties) {
layer.on({
click: function (e) {
var featureGid = feature.properties.id;
var deleteConfirmation = confirm("Vuoi cancellare questa geometria?");
if (deleteConfirmation == true) {
$.ajax({ url: "assets/dataservice/delete_linestring.php",
method: "GET",
dataType: "json",
data: {command:"DELETE",id:featureGid},
success: function (data) {
if (data.response=="200") {
map.off();
map.remove();
_displayMapDelete('app');
} else {
console.log('Failed to delete.');
}
},
username: null,
password: null
});
} else {
console.log('Delete feature is cancelled.');
}
}
});
}
}
});
promiseLinestring.then(function (data) {
linestringObjects.addData(data);
map.addLayer(linestringObjects);
});
var promisePolygon = $.ajax({ url: "assets/dataservice/read_polygon.php",
method: "GET",
dataType: "json",
data: {command:"POLYGON"},
username: null,
password: null
});
var polygonObjects = L.geoJson(null, {
onEachFeature: function (feature, layer) {
if (feature.properties) {
layer.on({
click: function (e) {
var featureGid = feature.properties.id;
var deleteConfirmation = confirm("Vuoi cancellare questa geometria?");
if (deleteConfirmation == true) {
$.ajax({ url: "assets/dataservice/delete_polygon.php",
method: "GET",
dataType: "json",
data: {command:"DELETE",id:featureGid},
success: function (data) {
if (data.response=="200") {
map.off();
map.remove();
_displayMapDelete('app');
} else {
console.log('Failed to delete.');
}
},
username: null,
password: null
});
} else {
console.log('Delete feature is cancelled.');
}
}
});
}
}
});
promisePolygon.then(function (data) {
polygonObjects.addData(data);
map.addLayer(polygonObjects);
});
//################# INIZIO PARTICELLA SELEZIONATA #################
<?php if ( strlen($_SESSION['SELECT_PARTICELLA']) > 100 ) { ?>
particella = L.geoJson(<?php echo $_SESSION['SELECT_PARTICELLA'];?>, {
style: {'color': "#ff0000",'fillColor': "rgb(255, 255, 0)",'fillOpacity': 0.4,'dashArray': 4,'weight': 3,'opacity': 0.9}
}),
<?php } ?>
//################# FINE PARTICELLA SELEZIONATA #################
openStreetMaps = new L.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
minZoom: 3,
maxZoom: 20,
attribution: 'Map Data &copy; <a href="https://openstreetmap.org">OpenStreetMap</a> contributors.'
});
map = L.map("map", {
zoom: <?php echo $_SESSION['ZOOM'];?>,
center: [<?php echo $_SESSION['CENTER'];?>],
layers: [openStreetMaps,particella],
minZoom: 3,
maxZoom: 20,
zoomControl: false,
attributionControl: true
});
map.setMaxBounds([<?php echo $_SESSION['BOUND']; ?>]);
var zoomControl = L.control.zoom({
position: "topleft"
}).addTo(map);
var baseLayers = {
"OpenStreetMap": openStreetMaps
};
var overlayLayers = {
"Elementi puntuali": pointObjects,
"Elementi lineari": linestringObjects,
"Elementi poligonali": polygonObjects
};
var layerControl = L.control.layers(baseLayers, overlayLayers, {
collapsed: isCollapsed
}).addTo(map);
}

272
assets/app/read.php

@ -0,0 +1,272 @@
function _displayMapRead (divtarget) {
divtarget = typeof divtarget !== 'undefined' ? divtarget : 'app';
document.getElementById(divtarget).innerHTML = "<div id='map' class='map-wrapper'></div>";
document.getElementById('home').className = "nav-link flat active";
document.getElementById('leaflet_crud_create').className = "nav-link flat";
document.getElementById('leaflet_crud_read').className = "nav-link flat active";
document.getElementById('navbarDropdownUpdate').className = "nav-link dropdown-toggle";
document.getElementById('leaflet_crud_delete').className = "nav-link flat";
var map, isCollapsed, odm1;
if (document.body.clientWidth <= 767) {
isCollapsed = true;
} else {
isCollapsed = false;
}
var promisePoint = $.ajax({ url: "assets/dataservice/read_point.php",
method: "GET",
dataType: "json",
data: {command:"POINT"},
username: null,
password: null
});
var pointObjects = L.geoJson(null, {
onEachFeature: function (feature, layer) {
if (feature.properties) {
layer.on({
click: function (e) {
var htmlformcomponent = "" +
"<table id='feature_data' class='table table-condensed table-bordered table-striped'>" +
"<thead>" +
"<tr>" +
"<th colspan='2' class='text-center'>Dati indetificativi</th>" +
"</tr>" +
"</thead>" +
"<tbody>" +
"<tr>" +
"<td class=''>Note</td>" +
"<td class=''><strong>"+feature.properties.notes+"</strong></td>" +
"</tr>" +
"</tbody>" +
"</table>" +
"";
$("#app_modal_body").empty();
$("#app_modal_body").removeClass().addClass('modal-body');
$("#app_modal_size").removeClass().addClass('modal-dialog');
$("#app_modal_body").html(htmlformcomponent);
$("#app_modal_label").html("POINT");
$("#modalbox").modal('show');
}
});
}
}
});
promisePoint.then(function (data) {
pointObjects.addData(data);
map.addLayer(pointObjects);
});
var promiseLinestring = $.ajax({ url: "assets/dataservice/read_linestring.php",
method: "GET",
dataType: "json",
data: {command:"LINESTRING"},
username: null,
password: null
});
var linestringObjects = L.geoJson(null, {
onEachFeature: function (feature, layer) {
if (feature.properties) {
layer.on({
click: function (e) {
var htmlformcomponent = "" +
"<table id='feature_data' class='table table-condensed table-bordered table-striped'>" +
"<thead>" +
"<tr>" +
"<th colspan='2' class='text-center'>Dati indetificativi</th>" +
"</tr>" +
"</thead>" +
"<tbody>" +
"<tr>" +
"<td class=''>Note</td>" +
"<td class=''><strong>"+feature.properties.notes+"</strong></td>" +
"</tr>" +
"</tbody>" +
"</table>" +
"";
$("#app_modal_body").empty();
$("#app_modal_body").removeClass().addClass('modal-body');
$("#app_modal_size").removeClass().addClass('modal-dialog');
$("#app_modal_body").html(htmlformcomponent);
$("#app_modal_label").html("LINESTRING");
$("#modalbox").modal('show');
}
});
}
}
});
promiseLinestring.then(function (data) {
linestringObjects.addData(data);
map.addLayer(linestringObjects);
});
var promisePolygon = $.ajax({ url: "assets/dataservice/read_polygon.php",
method: "GET",
dataType: "json",
data: {command:"POLYGON"},
username: null,
password: null
});
var polygonObjects = L.geoJson(null, {
onEachFeature: function (feature, layer) {
if (feature.properties) {
layer.on({
click: function (e) {
var htmlformcomponent = "" +
"<table id='feature_data' class='table table-condensed table-bordered table-striped'>" +
"<thead>" +
"<tr>" +
"<th colspan='2' class='text-center'>Dati indetificativi</th>" +
"</tr>" +
"</thead>" +
"<tbody>" +
"<tr>" +
"<td class=''>Notes</td>" +
"<td class=''><strong>"+feature.properties.notes+"</strong></td>" +
"</tr>" +
"</tbody>" +
"</table>" +
"";
$("#app_modal_body").empty();
$("#app_modal_body").removeClass().addClass('modal-body');
$("#app_modal_size").removeClass().addClass('modal-dialog');
$("#app_modal_body").html(htmlformcomponent);
$("#app_modal_label").html("POLYGON");
$("#modalbox").modal('show');
}
});
}
}
});
promisePolygon.then(function (data) {
polygonObjects.addData(data);
map.addLayer(polygonObjects);
});
var url = "https://test-paesaggistica.lavoripubblici.sicilia.it/geoserver/mappers/wms";
//################# INIZIO PARTICELLA SELEZIONATA #################
<?php if ( strlen($_SESSION['SELECT_PARTICELLA']) > 100 ) { ?>
particella = L.geoJson(<?php echo $_SESSION['SELECT_PARTICELLA'];?>, {
style: {'color': "#ff0000",'fillColor': "rgb(255, 255, 0)",'fillOpacity': 0.4,'dashArray': 4,'weight': 3,'opacity': 0.9}
});
<?php } ?>
//################# FINE PARTICELLA SELEZIONATA #################
odm1 = L.tileLayer ('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: 'OpenStreetMap | contributors CC-BY-SA.'
});
odm2 = L.tileLayer ('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: '© Esri | Source: Esri, USDA, USGS, AEX, GeoEye and the GIS User Community'
});
odm3 = L.tileLayer.wms (url, {
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mappers:provincie',
attribution: '© mapcloud services'
});
ctr10k = L.tileLayer.wms ('http://geoportal.mapcloud.it:8080/geoserver/wms', {
format: 'image/png',
transparent: true,
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mapcloud:ctr10k',
attribution: 'Carta Tecnica Regionale 1:10.000 - Regione Sicilia (Servizio WMS)'
});
particelle = L.tileLayer.wms(url, {
layers: "mappers:particelle_<?php echo $_SESSION['COMUNE_BELF']; ?>",
format: "image/png",
maxZoom: 20,
minZoom: 10,
transparent: true,
attribution: '© mapcloud services'
}),
map = L.map("map", {
zoom: <?php echo $_SESSION['ZOOM'];?>,
center: [<?php echo $_SESSION['CENTER'];?>],
layers: [odm1,particella],
minZoom: 3,
maxZoom: 20,
zoomControl: false,
attributionControl: false
});
map.setMaxBounds([<?php echo $_SESSION['BOUND']; ?>]);
var zoomControl = L.control.zoom({
position: "topleft"
}).addTo(map);
var baseLayers = [
{label: '<b>Opendata Map</b>', noShow: false, children: [
{label: 'OpenStreetMap', layer: odm1},
{label: 'Satellite Image', layer: odm2},
{label: 'Limiti provinciali', layer: odm3},
]},
{label: '<b>Cartografia Regionale</b>', children: [
{label: 'CTR 10K - volo 2012-2013', layer: ctr10k },
]},
];
var overlayLayers =
{
label: '<b>CARTOGRAFICI</b>',
noShow: true,
children: [
{label: '<b>Catasto</b>', children: [
{label: 'Particelle catastali', layer: particelle},
]},
{label: '<b>Particelle progetto</b>', children: [
{label: 'Particelle selezionate', layer: particella},
]},
{label: '<b>Elelenti del progetto</b>', children: [
{label: 'Elementi puntuali', layer: pointObjects},
{label: 'Elementi lineari', layer: linestringObjects},
{label: 'Elementi poligonali', layer: polygonObjects},
]},
]
};
var options = {
collapsed: true,
closedSymbol: '<i class="fal fa-plus-square" style="margin-right:5px"></i>',
openedSymbol: '<i class="fal fa-minus-square" style="margin-right:5px"></i>',
namedToggle: false,
spaceSymbol: ' ',
selectorBack: false,
collapseAll: '',
expandAll: '',
};
var layerControlTree = L.control.layers.tree(baseLayers, overlayLayers, options).addTo(map);
}

436
assets/app/update_linestring.php

@ -0,0 +1,436 @@
function _displayMapUpdateLinestring (divtarget) {
divtarget = typeof divtarget !== 'undefined' ? divtarget : 'app';
document.getElementById(divtarget).innerHTML = "<div id='map' class='map-wrapper'></div>";
document.getElementById('home').className = "nav-link flat";
document.getElementById('leaflet_crud_create').className = "nav-link flat";
document.getElementById('leaflet_crud_read').className = "nav-link flat";
document.getElementById('navbarDropdownUpdate').className = "nav-link dropdown-toggle active";
document.getElementById('leaflet_crud_delete').className = "nav-link flat";
var map, isCollapsed, openStreetMaps;
if (document.body.clientWidth <= 767) {
isCollapsed = true;
} else {
isCollapsed = false;
}
var promiseLinestring = $.ajax({ url: "assets/dataservice/read_linestring.php",
method: "GET",
dataType: "json",
data: {command:"LINESTRING"},
username: null,
password: null
});
var linestringObjects = L.geoJson(null, {
onEachFeature: function (feature, layer) {
if (feature.properties) {
layer.on({
click: function (e) {
var objectGIDToEdit = feature.properties.id;
$("#editobjectgid").val(objectGIDToEdit);
map.off();
map.remove();
_displayMapEditLinestring('app',objectGIDToEdit);
}
});
}
}
});
promiseLinestring.then(function (data) {
linestringObjects.addData(data);
map.addLayer(linestringObjects);
});
var url = "https://test-paesaggistica.lavoripubblici.sicilia.it/geoserver/mappers/wms";
//################# INIZIO PARTICELLA SELEZIONATA #################
<?php if ( strlen($_SESSION['SELECT_PARTICELLA']) > 100 ) { ?>
particella = L.geoJson(<?php echo $_SESSION['SELECT_PARTICELLA'];?>, {
style: {'color': "#ff0000",'fillColor': "rgb(255, 255, 0)",'fillOpacity': 0.4,'dashArray': 4,'weight': 3,'opacity': 0.9}
});
<?php } ?>
//################# FINE PARTICELLA SELEZIONATA #################
odm1 = L.tileLayer ('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: 'OpenStreetMap | contributors CC-BY-SA.'
});
odm2 = L.tileLayer ('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: '© Esri | Source: Esri, USDA, USGS, AEX, GeoEye and the GIS User Community'
});
odm3 = L.tileLayer.wms (url, {
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mappers:provincie',
attribution: '© mapcloud services'
});
ctr10k = L.tileLayer.wms ('http://geoportal.mapcloud.it:8080/geoserver/wms', {
format: 'image/png',
transparent: true,
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mapcloud:ctr10k',
attribution: 'Carta Tecnica Regionale 1:10.000 - Regione Sicilia (Servizio WMS)'
});
particelle = L.tileLayer.wms(url, {
layers: "mappers:particelle_<?php echo $_SESSION['COMUNE_BELF']; ?>",
format: "image/png",
maxZoom: 20,
minZoom: 10,
transparent: true,
attribution: '© mapcloud services'
}),
map = L.map("map", {
zoom: <?php echo $_SESSION['ZOOM'];?>,
center: [<?php echo $_SESSION['CENTER'];?>],
layers: [odm1,particella],
minZoom: 3,
maxZoom: 20,
zoomControl: false,
attributionControl: false
});
map.setMaxBounds([<?php echo $_SESSION['BOUND']; ?>]);
var zoomControl = L.control.zoom({
position: "topleft"
}).addTo(map);
var baseLayers = [
{label: '<b>Opendata Map</b>', noShow: false, children: [
{label: 'OpenStreetMap', layer: odm1},
{label: 'Satellite Image', layer: odm2},
{label: 'Limiti provinciali', layer: odm3},
]},
{label: '<b>Cartografia Regionale</b>', children: [
{label: 'CTR 10K - volo 2012-2013', layer: ctr10k },
]},
];
var overlayLayers =
{
label: '<b>CARTOGRAFICI</b>',
noShow: true,
children: [
{label: '<b>Catasto</b>', children: [
{label: 'Particelle catastali', layer: particelle},
]},
{label: '<b>Particelle progetto</b>', children: [
{label: 'Particelle selezionate', layer: particella},
]},
]
};
var options = {
collapsed: true,
closedSymbol: '<i class="fal fa-plus-square" style="margin-right:5px"></i>',
openedSymbol: '<i class="fal fa-minus-square" style="margin-right:5px"></i>',
namedToggle: false,
spaceSymbol: ' ',
selectorBack: false,
collapseAll: '',
expandAll: '',
};
var layerControlTree = L.control.layers.tree(baseLayers, overlayLayers, options).addTo(map);
}
/* ============================================= */
function _displayMapEditLinestring (divtarget,objectgid) {
divtarget = typeof divtarget !== 'undefined' ? divtarget : 'app';
document.getElementById(divtarget).innerHTML = "<div id='map' class='map-wrapper'></div>";
var map, isCollapsed, openStreetMaps;
if (document.body.clientWidth <= 767) {
isCollapsed = true;
} else {
isCollapsed = false;
}
var url = "https://test-paesaggistica.lavoripubblici.sicilia.it/geoserver/mappers/wms";
//################# INIZIO PARTICELLA SELEZIONATA #################
<?php if ( strlen($_SESSION['SELECT_PARTICELLA']) > 100 ) { ?>
particella = L.geoJson(<?php echo $_SESSION['SELECT_PARTICELLA'];?>, {
style: {'color': "#ff0000",'fillColor': "rgb(255, 255, 0)",'fillOpacity': 0.4,'dashArray': 4,'weight': 3,'opacity': 0.9}
});
<?php } ?>
//################# FINE PARTICELLA SELEZIONATA #################
odm1 = L.tileLayer ('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: 'OpenStreetMap | contributors CC-BY-SA.'
});
odm2 = L.tileLayer ('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: '© Esri | Source: Esri, USDA, USGS, AEX, GeoEye and the GIS User Community'
});
odm3 = L.tileLayer.wms (url, {
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mappers:provincie',
attribution: '© mapcloud services'
});
ctr10k = L.tileLayer.wms ('http://geoportal.mapcloud.it:8080/geoserver/wms', {
format: 'image/png',
transparent: true,
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mapcloud:ctr10k',
attribution: 'Carta Tecnica Regionale 1:10.000 - Regione Sicilia (Servizio WMS)'
});
particelle = L.tileLayer.wms(url, {
layers: "mappers:particelle_<?php echo $_SESSION['COMUNE_BELF']; ?>",
format: "image/png",
maxZoom: 20,
minZoom: 10,
transparent: true,
attribution: '© mapcloud services'
}),
map = L.map("map", {
zoom: <?php echo $_SESSION['ZOOM'];?>,
center: [<?php echo $_SESSION['CENTER'];?>],
layers: [odm1,particella],
minZoom: 3,
maxZoom: 20,
zoomControl: false,
attributionControl: false
});
map.setMaxBounds([<?php echo $_SESSION['BOUND']; ?>]);
var zoomControl = L.control.zoom({
position: "topleft"
}).addTo(map);
var baseLayers = [
{label: '<b>Opendata Map</b>', noShow: false, children: [
{label: 'OpenStreetMap', layer: odm1},
{label: 'Satellite Image', layer: odm2},
{label: 'Limiti provinciali', layer: odm3},
]},
{label: '<b>Cartografia Regionale</b>', children: [
{label: 'CTR 10K - volo 2012-2013', layer: ctr10k },
]},
];
var overlayLayers =
{
label: '<b>CARTOGRAFICI</b>',
noShow: true,
children: [
{label: '<b>Catasto</b>', children: [
{label: 'Particelle catastali', layer: particelle},
]},
{label: '<b>Particelle progetto</b>', children: [
{label: 'Particelle selezionate', layer: particella},
]},
]
};
var options = {
collapsed: true,
closedSymbol: '<i class="fal fa-plus-square" style="margin-right:5px"></i>',
openedSymbol: '<i class="fal fa-minus-square" style="margin-right:5px"></i>',
namedToggle: false,
spaceSymbol: ' ',
selectorBack: false,
collapseAll: '',
expandAll: '',
};
var layerControlTree = L.control.layers.tree(baseLayers, overlayLayers, options).addTo(map);
/* Digitize Function */
var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);
var promiseObjectEdit = $.ajax({ url: "assets/dataservice/read_one_linestring.php",
method: "GET",
dataType: "json",
data: {command:"LINESTRING",id:objectgid},
username: null,
password: null
});
promiseObjectEdit.then(function (data) {
L.geoJson(data, {
style: function (feature) {
return {
color: "#FF0000"
};
},
onEachFeature: _onEachFeature
});
});
var drawControl = new L.Control.Draw({
draw: {
position: 'topleft',
polyline: false,
polygon: false,
rectangle: false,
circle: false,
marker: false,
circlemarker: false
},
edit: {
featureGroup: drawnItems,
edit: true,
remove: false
}
});
map.addControl(drawControl);
/* edit functions */
map.on('draw:edited', function (e) {
var layers = e.layers;
layers.eachLayer(function(layer) {
var drawnJSONObject = layer.toGeoJSON();
var objectGeometry = Terraformer.WKT.convert(drawnJSONObject.geometry);
var objectGIDToEdit = $("#editobjectgid").val();
$.ajax({ url: "assets/dataservice/update_linestring.php",
method: "GET",
dataType: "json",
data: {command:"UPDATE",id:objectGIDToEdit,geometry:objectGeometry},
success: function (data) {
if (data.response == "200") {
map.off();
map.remove();
_displayMapRead('app');
} else {
map.off();
map.remove();
_displayMapRead('app');
console.log('Update feature failed.');
}
},
username: null,
password: null
});
});
});
function _onEachFeature (feature, layer) {
drawnItems.addLayer(layer);
map.fitBounds(drawnItems.getBounds());
if (feature.properties) {
layer.on({
click: function (e) {
var notes = feature.properties.notes;
_buildDigitiseModalBox('modalform','UPDATE LINESTRING',notes);
}
});
}
}
function _buildDigitiseModalBox (targetmodal,context,notes) {
targetmodal = typeof targetmodal !== 'undefined' ? targetmodal : 'modalbox';
context = typeof context !== 'undefined' ? context : 'UPDATE LINESTRING';
notes = typeof notes !== 'undefined' ? notes : '';
var htmlformcomponent = "" +
"<input type='hidden' id='command' name='command' value='"+context+"'/>" +
"<table id='feature_data' class='table table-condensed table-bordered table-striped'>" +
"<thead>" +
"<tr>" +
"<th colspan='2' class='text-center'>Feature Data</th>" +
"</tr>" +
"</thead>" +
"<tbody>" +
"<tr>" +
"<td class=''>Notes</td>" +
"<td class='text-center'><input type='text' id='notes' name='notes' class='form-control' value='"+notes+"'/></td>" +
"</tr>" +
"</tbody>" +
"</table>" +
"";
var modalfooter = "" +
"<button type='button' id='canceldigitize' class='btn btn-default' data-dismiss='modal'><i class='fa fa-power-off'></i>&nbsp;Cancel</button>" +
"<button type='button' id='saveattributedata' class='btn btn-primary'><i class='fa fa-floppy-o'></i>&nbsp;Save</button>" +
"";
$("#form_modal_body").empty();
$("#form_modal_footer").empty().html(modalfooter);
$("#form_modal_body").removeClass().addClass('modal-body');
$("#form_modal_size").removeClass().addClass('modal-dialog');
$("#form_modal_body").html(htmlformcomponent);
$("#form_modal_label").html("<i class='fa fa-pencil'></i>&nbsp;"+context+"");
$('#'+targetmodal+'').modal({show:true, backdrop:'static', keyboard:false});
}
$("#modalform").on('shown.bs.modal', function(){
_activateFeatureSave();
});
function _activateFeatureSave () {
$("#saveattributedata").on('click', function(evt){
evt.stopImmediatePropagation();
var gid = $("#editobjectgid").val();
var noteString = $('#notes').val();
$.ajax({ url: "assets/dataservice/update_data_linestring.php",
method: "GET",
dataType: "json",
data: {id:gid, command:"UPDATE", notes:noteString},
success: function (data) {
if (data.response=="200") {
$("#modalform").modal('hide');
_displayMapRead('app');
} else {
$("#modalform").modal('hide');
console.log('Failed to save.');
}
},
username: null,
password: null
});
return false;
});
}
}

427
assets/app/update_point.php

@ -0,0 +1,427 @@
function _displayMapUpdatePoint (divtarget) {
divtarget = typeof divtarget !== 'undefined' ? divtarget : 'app';
document.getElementById(divtarget).innerHTML = "<div id='map' class='map-wrapper'></div>";
document.getElementById('home').className = "nav-link flat";
document.getElementById('leaflet_crud_create').className = "nav-link flat";
document.getElementById('leaflet_crud_read').className = "nav-link flat";
document.getElementById('navbarDropdownUpdate').className = "nav-link dropdown-toggle active";
document.getElementById('leaflet_crud_delete').className = "nav-link flat";
var map, isCollapsed, openStreetMaps;
if (document.body.clientWidth <= 767) {
isCollapsed = true;
} else {
isCollapsed = false;
}
var promisePoint = $.ajax({ url: "assets/dataservice/read_point.php",
method: "GET",
dataType: "json",
data: {command:"POINT"},
username: null,
password: null
});
var pointObjects = L.geoJson(null, {
onEachFeature: function (feature, layer) {
if (feature.properties) {
layer.on({
click: function (e) {
var objectGIDToEdit = feature.properties.id;
$("#editobjectgid").val(objectGIDToEdit);
map.off();
map.remove();
_displayMapEditPoint('app',objectGIDToEdit);
}
});
}
}
});
promisePoint.then(function (data) {
pointObjects.addData(data);
map.addLayer(pointObjects);
});
var url = "https://test-paesaggistica.lavoripubblici.sicilia.it/geoserver/mappers/wms";
//################# INIZIO PARTICELLA SELEZIONATA #################
<?php if ( strlen($_SESSION['SELECT_PARTICELLA']) > 100 ) { ?>
particella = L.geoJson(<?php echo $_SESSION['SELECT_PARTICELLA'];?>, {
style: {'color': "#ff0000",'fillColor': "rgb(255, 255, 0)",'fillOpacity': 0.4,'dashArray': 4,'weight': 3,'opacity': 0.9}
});
<?php } ?>
//################# FINE PARTICELLA SELEZIONATA #################
odm1 = L.tileLayer ('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: 'OpenStreetMap | contributors CC-BY-SA.'
});
odm2 = L.tileLayer ('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: '© Esri | Source: Esri, USDA, USGS, AEX, GeoEye and the GIS User Community'
});
odm3 = L.tileLayer.wms (url, {
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mappers:provincie',
attribution: '© mapcloud services'
});
ctr10k = L.tileLayer.wms ('http://geoportal.mapcloud.it:8080/geoserver/wms', {
format: 'image/png',
transparent: true,
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mapcloud:ctr10k',
attribution: 'Carta Tecnica Regionale 1:10.000 - Regione Sicilia (Servizio WMS)'
});
particelle = L.tileLayer.wms(url, {
layers: "mappers:particelle_<?php echo $_SESSION['COMUNE_BELF']; ?>",
format: "image/png",
maxZoom: 20,
minZoom: 10,
transparent: true,
attribution: '© mapcloud services'
}),
map = L.map("map", {
zoom: <?php echo $_SESSION['ZOOM'];?>,
center: [<?php echo $_SESSION['CENTER'];?>],
layers: [odm1,particella],
minZoom: 3,
maxZoom: 20,
zoomControl: false,
attributionControl: false
});
map.setMaxBounds([<?php echo $_SESSION['BOUND']; ?>]);
var zoomControl = L.control.zoom({
position: "topleft"
}).addTo(map);
var baseLayers = [
{label: '<b>Opendata Map</b>', noShow: false, children: [
{label: 'OpenStreetMap', layer: odm1},
{label: 'Satellite Image', layer: odm2},
{label: 'Limiti provinciali', layer: odm3},
]},
{label: '<b>Cartografia Regionale</b>', children: [
{label: 'CTR 10K - volo 2012-2013', layer: ctr10k },
]},
];
var overlayLayers =
{
label: '<b>CARTOGRAFICI</b>',
noShow: true,
children: [
{label: '<b>Catasto</b>', children: [
{label: 'Particelle catastali', layer: particelle},
]},
{label: '<b>Particelle progetto</b>', children: [
{label: 'Particelle selezionate', layer: particella},
]},
]
};
var options = {
collapsed: true,
closedSymbol: '<i class="fal fa-plus-square" style="margin-right:5px"></i>',
openedSymbol: '<i class="fal fa-minus-square" style="margin-right:5px"></i>',
namedToggle: false,
spaceSymbol: ' ',
selectorBack: false,
collapseAll: '',
expandAll: '',
};
var layerControlTree = L.control.layers.tree(baseLayers, overlayLayers, options).addTo(map);
}
/* ============================================= */
function _displayMapEditPoint (divtarget,objectgid) {
divtarget = typeof divtarget !== 'undefined' ? divtarget : 'app';
document.getElementById(divtarget).innerHTML = "<div id='map' class='map-wrapper'></div>";
var map, isCollapsed, openStreetMaps;
if (document.body.clientWidth <= 767) {
isCollapsed = true;
} else {
isCollapsed = false;
}
var url = "https://test-paesaggistica.lavoripubblici.sicilia.it/geoserver/mappers/wms";
//################# INIZIO PARTICELLA SELEZIONATA #################
<?php if ( strlen($_SESSION['SELECT_PARTICELLA']) > 100 ) { ?>
particella = L.geoJson(<?php echo $_SESSION['SELECT_PARTICELLA'];?>, {
style: {'color': "#ff0000",'fillColor': "rgb(255, 255, 0)",'fillOpacity': 0.4,'dashArray': 4,'weight': 3,'opacity': 0.9}
});
<?php } ?>
//################# FINE PARTICELLA SELEZIONATA #################
odm1 = L.tileLayer ('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: 'OpenStreetMap | contributors CC-BY-SA.'
});
odm2 = L.tileLayer ('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: '© Esri | Source: Esri, USDA, USGS, AEX, GeoEye and the GIS User Community'
});
odm3 = L.tileLayer.wms (url, {
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mappers:provincie',
attribution: '© mapcloud services'
});
ctr10k = L.tileLayer.wms ('http://geoportal.mapcloud.it:8080/geoserver/wms', {
format: 'image/png',
transparent: true,
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mapcloud:ctr10k',
attribution: 'Carta Tecnica Regionale 1:10.000 - Regione Sicilia (Servizio WMS)'
});
particelle = L.tileLayer.wms(url, {
layers: "mappers:particelle_<?php echo $_SESSION['COMUNE_BELF']; ?>",
format: "image/png",
maxZoom: 20,
minZoom: 10,
transparent: true,
attribution: '© mapcloud services'
}),
map = L.map("map", {
zoom: <?php echo $_SESSION['ZOOM'];?>,
center: [<?php echo $_SESSION['CENTER'];?>],
layers: [odm1,particella],
minZoom: 3,
maxZoom: 20,
zoomControl: false,
attributionControl: false
});
map.setMaxBounds([<?php echo $_SESSION['BOUND']; ?>]);
var zoomControl = L.control.zoom({
position: "topleft"
}).addTo(map);
var baseLayers = [
{label: '<b>Opendata Map</b>', noShow: false, children: [
{label: 'OpenStreetMap', layer: odm1},
{label: 'Satellite Image', layer: odm2},
{label: 'Limiti provinciali', layer: odm3},
]},
{label: '<b>Cartografia Regionale</b>', children: [
{label: 'CTR 10K - volo 2012-2013', layer: ctr10k },
]},
];
var overlayLayers =
{
label: '<b>CARTOGRAFICI</b>',
noShow: true,
children: [
{label: '<b>Catasto</b>', children: [
{label: 'Particelle catastali', layer: particelle},
]},
{label: '<b>Particelle progetto</b>', children: [
{label: 'Particelle selezionate', layer: particella},
]},
]
};
var options = {
collapsed: true,
closedSymbol: '<i class="fal fa-plus-square" style="margin-right:5px"></i>',
openedSymbol: '<i class="fal fa-minus-square" style="margin-right:5px"></i>',
namedToggle: false,
spaceSymbol: ' ',
selectorBack: false,
collapseAll: '',
expandAll: '',
};
var layerControlTree = L.control.layers.tree(baseLayers, overlayLayers, options).addTo(map);
/* Digitize Function */
var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);
var promiseObjectEdit = $.ajax({ url: "assets/dataservice/read_one_point.php",
method: "GET",
dataType: "json",
data: {command:"POINT",id:objectgid},
username: null,
password: null
});
promiseObjectEdit.then(function (data) {
L.geoJson(data, {
onEachFeature: _onEachFeature
});
});
var drawControl = new L.Control.Draw({
draw: {
position: 'topleft',
polyline: false,
polygon: false,
rectangle: false,
circle: false,
marker: false,
circlemarker: false
},
edit: {
featureGroup: drawnItems,
edit: true,
remove: false
}
});
map.addControl(drawControl);
/* edit functions */
map.on('draw:edited', function (e) {
var layers = e.layers;
layers.eachLayer(function(layer) {
var drawnJSONObject = layer.toGeoJSON();
var objectGeometry = Terraformer.WKT.convert(drawnJSONObject.geometry);
var objectGIDToEdit = $("#editobjectgid").val();
$.ajax({ url: "assets/dataservice/update_point.php",
method: "GET",
dataType: "json",
data: {command:"UPDATE",id:objectGIDToEdit,geometry:objectGeometry},
success: function (data) {
if (data.response == "200") {
map.off();
map.remove();
_displayMapRead('app');
} else {
map.off();
map.remove();
_displayMapRead('app');
console.log('Update feature failed.');
}
},
username: null,
password: null
});
});
});
function _onEachFeature (feature, layer) {
drawnItems.addLayer(layer);
map.flyTo(new L.LatLng(feature.geometry.coordinates[1],feature.geometry.coordinates[0]), 12);
if (feature.properties) {
layer.on({
click: function (e) {
var notes = feature.properties.notes;
_buildDigitiseModalBox('modalform','UPDATE POINT',notes);
}
});
}
}
function _buildDigitiseModalBox (targetmodal,context,notes) {
targetmodal = typeof targetmodal !== 'undefined' ? targetmodal : 'modalbox';
context = typeof context !== 'undefined' ? context : 'UPDATE POINT';
notes = typeof notes !== 'undefined' ? notes : '';
var htmlformcomponent = "" +
"<input type='hidden' id='command' name='command' value='"+context+"'/>" +
"<table id='feature_data' class='table table-condensed table-bordered table-striped'>" +
"<thead>" +
"<tr>" +
"<th colspan='2' class='text-center'>Feature Data</th>" +
"</tr>" +
"</thead>" +
"<tbody>" +
"<tr>" +
"<td class=''>Notes</td>" +
"<td class='text-center'><input type='text' id='notes' name='notes' class='form-control' value='"+notes+"'/></td>" +
"</tr>" +
"</tbody>" +
"</table>" +
"";
var modalfooter = "" +
"<button type='button' id='canceldigitize' class='btn btn-default' data-dismiss='modal'><i class='fa fa-power-off'></i>&nbsp;Cancel</button>" +
"<button type='button' id='saveattributedata' class='btn btn-primary'><i class='fa fa-floppy-o'></i>&nbsp;Save</button>" +
"";
$("#form_modal_body").empty();
$("#form_modal_footer").empty().html(modalfooter);
$("#form_modal_body").removeClass().addClass('modal-body');
$("#form_modal_size").removeClass().addClass('modal-dialog');
$("#form_modal_body").html(htmlformcomponent);
$("#form_modal_label").html("<i class='fa fa-pencil'></i>&nbsp;"+context+"");
$('#'+targetmodal+'').modal({show:true, backdrop:'static', keyboard:false});
}
$("#modalform").on('shown.bs.modal', function(){
_activateFeatureSave();
});
function _activateFeatureSave () {
$("#saveattributedata").on('click', function(evt){
evt.stopImmediatePropagation();
var gid = $("#editobjectgid").val();
var noteString = $('#notes').val();
$.ajax({ url: "assets/dataservice/update_data_point.php",
method: "GET",
dataType: "json",
data: {id:gid, command:"UPDATE", notes:noteString},
success: function (data) {
if (data.response=="200") {
$("#modalform").modal('hide');
_displayMapRead('app');
} else {
$("#modalform").modal('hide');
console.log('Failed to save.');
}
},
username: null,
password: null
});
return false;
});
}
}

426
assets/app/update_polygon.php

@ -0,0 +1,426 @@
function _displayMapUpdatePolygon (divtarget) {
divtarget = typeof divtarget !== 'undefined' ? divtarget : 'app';
document.getElementById(divtarget).innerHTML = "<div id='map' class='map-wrapper'></div>";
document.getElementById('home').className = "nav-link flat";
document.getElementById('leaflet_crud_create').className = "nav-link flat";
document.getElementById('leaflet_crud_read').className = "nav-link flat";
document.getElementById('navbarDropdownUpdate').className = "nav-link dropdown-toggle active";
document.getElementById('leaflet_crud_delete').className = "nav-link flat";
var map, isCollapsed, openStreetMaps;
if (document.body.clientWidth <= 767) {
isCollapsed = true;
} else {
isCollapsed = false;
}
var promisePolygon = $.ajax({ url: "assets/dataservice/read_polygon.php",
method: "GET",
dataType: "json",
data: {command:"POLYGON"},
username: null,
password: null
});
var polygonObjects = L.geoJson(null, {
onEachFeature: function (feature, layer) {
if (feature.properties) {
layer.on({
click: function (e) {
var objectGIDToEdit = feature.properties.id;
$("#editobjectgid").val(objectGIDToEdit);
map.off();
map.remove();
_displayMapEditPolygon('app',objectGIDToEdit);
}
});
}
}
});
promisePolygon.then(function (data) {
polygonObjects.addData(data);
map.addLayer(polygonObjects);
});
var url = "https://test-paesaggistica.lavoripubblici.sicilia.it/geoserver/mappers/wms";
//################# INIZIO PARTICELLA SELEZIONATA #################
<?php if ( strlen($_SESSION['SELECT_PARTICELLA']) > 100 ) { ?>
particella = L.geoJson(<?php echo $_SESSION['SELECT_PARTICELLA'];?>, {
style: {'color': "#ff0000",'fillColor': "rgb(255, 255, 0)",'fillOpacity': 0.4,'dashArray': 4,'weight': 3,'opacity': 0.9}
});
<?php } ?>
//################# FINE PARTICELLA SELEZIONATA #################
odm1 = L.tileLayer ('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: 'OpenStreetMap | contributors CC-BY-SA.'
});
odm2 = L.tileLayer ('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: '© Esri | Source: Esri, USDA, USGS, AEX, GeoEye and the GIS User Community'
});
odm3 = L.tileLayer.wms (url, {
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mappers:provincie',
attribution: '© mapcloud services'
});
ctr10k = L.tileLayer.wms ('http://geoportal.mapcloud.it:8080/geoserver/wms', {
format: 'image/png',
transparent: true,
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mapcloud:ctr10k',
attribution: 'Carta Tecnica Regionale 1:10.000 - Regione Sicilia (Servizio WMS)'
});
particelle = L.tileLayer.wms(url, {
layers: "mappers:particelle_<?php echo $_SESSION['COMUNE_BELF']; ?>",
format: "image/png",
maxZoom: 20,
minZoom: 10,
transparent: true,
attribution: '© mapcloud services'
}),
map = L.map("map", {
zoom: <?php echo $_SESSION['ZOOM'];?>,
center: [<?php echo $_SESSION['CENTER'];?>],
layers: [odm1,particella],
minZoom: 3,
maxZoom: 20,
zoomControl: false,
attributionControl: false
});
map.setMaxBounds([<?php echo $_SESSION['BOUND']; ?>]);
var zoomControl = L.control.zoom({
position: "topleft"
}).addTo(map);
var baseLayers = [
{label: '<b>Opendata Map</b>', noShow: false, children: [
{label: 'OpenStreetMap', layer: odm1},
{label: 'Satellite Image', layer: odm2},
{label: 'Limiti provinciali', layer: odm3},
]},
{label: '<b>Cartografia Regionale</b>', children: [
{label: 'CTR 10K - volo 2012-2013', layer: ctr10k },
]},
];
var overlayLayers =
{
label: '<b>CARTOGRAFICI</b>',
noShow: true,
children: [
{label: '<b>Catasto</b>', children: [
{label: 'Particelle catastali', layer: particelle},
]},
{label: '<b>Particelle progetto</b>', children: [
{label: 'Particelle selezionate', layer: particella},
]},
]
};
var options = {
collapsed: true,
closedSymbol: '<i class="fal fa-plus-square" style="margin-right:5px"></i>',
openedSymbol: '<i class="fal fa-minus-square" style="margin-right:5px"></i>',
namedToggle: false,
spaceSymbol: ' ',
selectorBack: false,
collapseAll: '',
expandAll: '',
};
var layerControlTree = L.control.layers.tree(baseLayers, overlayLayers, options).addTo(map);
}
/* ============================================= */
function _displayMapEditPolygon (divtarget,objectgid) {
divtarget = typeof divtarget !== 'undefined' ? divtarget : 'app';
document.getElementById(divtarget).innerHTML = "<div id='map' class='map-wrapper'></div>";
var map, isCollapsed, openStreetMaps;
if (document.body.clientWidth <= 767) {
isCollapsed = true;
} else {
isCollapsed = false;
}
var url = "https://test-paesaggistica.lavoripubblici.sicilia.it/geoserver/mappers/wms";
//################# INIZIO PARTICELLA SELEZIONATA #################
<?php if ( strlen($_SESSION['SELECT_PARTICELLA']) > 100 ) { ?>
particella = L.geoJson(<?php echo $_SESSION['SELECT_PARTICELLA'];?>, {
style: {'color': "#ff0000",'fillColor': "rgb(255, 255, 0)",'fillOpacity': 0.4,'dashArray': 4,'weight': 3,'opacity': 0.9}
});
<?php } ?>
//################# FINE PARTICELLA SELEZIONATA #################
odm1 = L.tileLayer ('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: 'OpenStreetMap | contributors CC-BY-SA.'
});
odm2 = L.tileLayer ('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
maxZoom: 20,
minZoom: 1,
transparent: true,
attribution: '© Esri | Source: Esri, USDA, USGS, AEX, GeoEye and the GIS User Community'
});
odm3 = L.tileLayer.wms (url, {
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mappers:provincie',
attribution: '© mapcloud services'
});
ctr10k = L.tileLayer.wms ('http://geoportal.mapcloud.it:8080/geoserver/wms', {
format: 'image/png',
transparent: true,
maxZoom: 20,
minZoom: 5,
transparent: true,
layers: 'mapcloud:ctr10k',
attribution: 'Carta Tecnica Regionale 1:10.000 - Regione Sicilia (Servizio WMS)'
});
particelle = L.tileLayer.wms(url, {
layers: "mappers:particelle_<?php echo $_SESSION['COMUNE_BELF']; ?>",
format: "image/png",
maxZoom: 20,
minZoom: 10,
transparent: true,
attribution: '© mapcloud services'
}),
map = L.map("map", {
zoom: <?php echo $_SESSION['ZOOM'];?>,
center: [<?php echo $_SESSION['CENTER'];?>],
layers: [odm1,particella],
minZoom: 3,
maxZoom: 20,
zoomControl: false,
attributionControl: false
});
map.setMaxBounds([<?php echo $_SESSION['BOUND']; ?>]);
var zoomControl = L.control.zoom({
position: "topleft"
}).addTo(map);
var baseLayers = [
{label: '<b>Opendata Map</b>', noShow: false, children: [
{label: 'OpenStreetMap', layer: odm1},
{label: 'Satellite Image', layer: odm2},
{label: 'Limiti provinciali', layer: odm3},
]},
{label: '<b>Cartografia Regionale</b>', children: [
{label: 'CTR 10K - volo 2012-2013', layer: ctr10k },
]},
];
var overlayLayers =
{
label: '<b>CARTOGRAFICI</b>',
noShow: true,
children: [
{label: '<b>Catasto</b>', children: [
{label: 'Particelle catastali', layer: particelle},
]},
{label: '<b>Particelle progetto</b>', children: [
{label: 'Particelle selezionate', layer: particella},
]},
]
};
var options = {
collapsed: true,
closedSymbol: '<i class="fal fa-plus-square" style="margin-right:5px"></i>',
openedSymbol: '<i class="fal fa-minus-square" style="margin-right:5px"></i>',
namedToggle: false,
spaceSymbol: ' ',
selectorBack: false,
collapseAll: '',
expandAll: '',
};
var layerControlTree = L.control.layers.tree(baseLayers, overlayLayers, options).addTo(map);
/* Digitize Function */
var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);
var promiseObjectEdit = $.ajax({ url: "assets/dataservice/read_one_polygon.php",
method: "GET",
dataType: "json",
data: {command:"POLYGON",id:objectgid},
username: null,
password: null
});
promiseObjectEdit.then(function (data) {
L.geoJson(data, {
style: function (feature) {
return {
color: "#FF0000"
};
},
onEachFeature: _onEachFeature
});
});
var drawControl = new L.Control.Draw({
draw: {
position: 'topleft',
polyline: false,
polygon: false,
rectangle: false,
circle: false,
marker: false,
circlemarker: false
},
edit: {
featureGroup: drawnItems,
edit: true,
remove: false
}
});
map.addControl(drawControl);
/* edit functions */
map.on('draw:edited', function (e) {
var layers = e.layers;
layers.eachLayer(function(layer) {
var drawnJSONObject = layer.toGeoJSON();
var objectGeometry = Terraformer.WKT.convert(drawnJSONObject.geometry);
var objectGIDToEdit = $("#editobjectgid").val();
$.ajax({ url: "assets/dataservice/update_polygon.php",
method: "GET",
dataType: "json",
data: {command:"UPDATE",id:objectGIDToEdit,geometry:objectGeometry},
success: function (data) {
if (data.response == "200") {
map.off();
map.remove();
_displayMapRead('app');
} else {
map.off();
map.remove();
_displayMapRead('app');
console.log('Update feature failed.');
}
},
username: null,
password: null
});
});
});
function _onEachFeature (feature, layer) {
drawnItems.addLayer(layer);
map.fitBounds(drawnItems.getBounds());
if (feature.properties) {
layer.on({
click: function (e) {
var notes = feature.properties.notes;
_buildDigitiseModalBox('modalform','UPDATE POLYGON',notes);
}
});
}
}
function _buildDigitiseModalBox (targetmodal,context,notes) {
targetmodal = typeof targetmodal !== 'undefined' ? targetmodal : 'modalbox';
context = typeof context !== 'undefined' ? context : 'UPDATE POLYGON';
notes = typeof notes !== 'undefined' ? notes : '';
var htmlformcomponent = "" +
"<input type='hidden' id='command' name='command' value='"+context+"'/>" +
"<table id='feature_data' class='table table-condensed table-bordered table-striped'>" +
"<thead>" +
"<tr>" +
"<th colspan='2' class='text-center'>Feature Data</th>" +
"</tr>" +
"</thead>" +
"<tbody>" +
"<tr>" +
"<td class=''>Notes</td>" +
"<td class='text-center'><input type='text' id='notes' name='notes' class='form-control' value='"+notes+"'/></td>" +
"</tr>" +
"</tbody>" +
"</table>" +
"";
var modalfooter = "" +
"<button type='button' id='canceldigitize' class='btn btn-default' data-dismiss='modal'><i class='fa fa-power-off'></i>&nbsp;Cancel</button>" +
"<button type='button' id='saveattributedata' class='btn btn-primary'><i class='fa fa-floppy-o'></i>&nbsp;Save</button>" +
"";
$("#form_modal_body").empty();
$("#form_modal_footer").empty().html(modalfooter);
$("#form_modal_body").removeClass().addClass('modal-body');
$("#form_modal_size").removeClass().addClass('modal-dialog');
$("#form_modal_body").html(htmlformcomponent);
$("#form_modal_label").html("<i class='fa fa-pencil'></i>&nbsp;"+context+"");
$('#'+targetmodal+'').modal({show:true, backdrop:'static', keyboard:false});
}
$("#modalform").on('shown.bs.modal', function(){
_activateFeatureSave();
});
function _activateFeatureSave () {
$("#saveattributedata").on('click', function(evt){
evt.stopImmediatePropagation();
var gid = $("#editobjectgid").val();
var noteString = $('#notes').val();
$.ajax({ url: "assets/dataservice/update_data_polygon.php",
method: "GET",
dataType: "json",
data: {id:gid, command:"UPDATE", notes:noteString},
success: function (data) {
if (data.response=="200") {
$("#modalform").modal('hide');
_displayMapRead('app');
} else {
$("#modalform").modal('hide');
console.log('Failed to save.');
}
},
username: null,
password: null
});
return false;
});
}
}

BIN
assets/component/.DS_Store vendored

File binario non mostrato.

187
assets/component/datatables/css/dataTables.bootstrap.css vendored

@ -0,0 +1,187 @@
table.dataTable {
clear: both;
margin-top: 6px !important;
margin-bottom: 6px !important;
max-width: none !important;
border-collapse: separate !important;
}
table.dataTable td,
table.dataTable th {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
table.dataTable td.dataTables_empty,
table.dataTable th.dataTables_empty {
text-align: center;
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length label {
font-weight: normal;
text-align: left;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length select {
width: 75px;
display: inline-block;
}
div.dataTables_wrapper div.dataTables_filter {
text-align: right;
}
div.dataTables_wrapper div.dataTables_filter label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
div.dataTables_wrapper div.dataTables_filter input {
margin-left: 0.5em;
display: inline-block;
width: auto;
}
div.dataTables_wrapper div.dataTables_info {
padding-top: 8px;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_paginate {
margin: 0;
white-space: nowrap;
text-align: right;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
margin: 2px 0;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -26px;
text-align: center;
padding: 1em 0;
}
table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
table.dataTable thead > tr > td.sorting_asc,
table.dataTable thead > tr > td.sorting_desc,
table.dataTable thead > tr > td.sorting {
padding-right: 30px;
}
table.dataTable thead > tr > th:active,
table.dataTable thead > tr > td:active {
outline: none;
}
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_asc_disabled,
table.dataTable thead .sorting_desc_disabled {
cursor: pointer;
position: relative;
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:after {
position: absolute;
bottom: 8px;
right: 8px;
display: block;
font-family: 'Glyphicons Halflings';
opacity: 0.5;
}
table.dataTable thead .sorting:after {
opacity: 0.2;
content: "\e150";
/* sort */
}
table.dataTable thead .sorting_asc:after {
content: "\e155";
/* sort-by-attributes */
}
table.dataTable thead .sorting_desc:after {
content: "\e156";
/* sort-by-attributes-alt */
}
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:after {
color: #eee;
}
div.dataTables_scrollHead table.dataTable {
margin-bottom: 0 !important;
}
div.dataTables_scrollBody > table {
border-top: none;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
div.dataTables_scrollBody > table > thead .sorting:after,
div.dataTables_scrollBody > table > thead .sorting_asc:after,
div.dataTables_scrollBody > table > thead .sorting_desc:after {
display: none;
}
div.dataTables_scrollBody > table > tbody > tr:first-child > th,
div.dataTables_scrollBody > table > tbody > tr:first-child > td {
border-top: none;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner {
box-sizing: content-box;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
margin-top: 0 !important;
border-top: none;
}
@media screen and (max-width: 767px) {
div.dataTables_wrapper div.dataTables_length,
div.dataTables_wrapper div.dataTables_filter,
div.dataTables_wrapper div.dataTables_info,
div.dataTables_wrapper div.dataTables_paginate {
text-align: center;
}
}
table.dataTable.table-condensed > thead > tr > th {
padding-right: 20px;
}
table.dataTable.table-condensed .sorting:after,
table.dataTable.table-condensed .sorting_asc:after,
table.dataTable.table-condensed .sorting_desc:after {
top: 6px;
right: 6px;
}
table.table-bordered.dataTable th,
table.table-bordered.dataTable td {
border-left-width: 0;
}
table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable td:last-child,
table.table-bordered.dataTable td:last-child {
border-right-width: 0;
}
table.table-bordered.dataTable tbody th,
table.table-bordered.dataTable tbody td {
border-bottom-width: 0;
}
div.dataTables_scrollHead table.table-bordered {
border-bottom-width: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row {
margin: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
padding-left: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
padding-right: 0;
}

1
assets/component/datatables/css/dataTables.bootstrap.min.css vendored

@ -0,0 +1 @@
table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:0.5}table.dataTable thead .sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody>table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody>table>thead .sorting:after,div.dataTables_scrollBody>table>thead .sorting_asc:after,div.dataTables_scrollBody>table>thead .sorting_desc:after{display:none}div.dataTables_scrollBody>table>tbody>tr:first-child>th,div.dataTables_scrollBody>table>tbody>tr:first-child>td{border-top:none}div.dataTables_scrollFoot>.dataTables_scrollFootInner{box-sizing:content-box}div.dataTables_scrollFoot>.dataTables_scrollFootInner>table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}

206
assets/component/datatables/css/dataTables.bootstrap4.css vendored

@ -0,0 +1,206 @@
table.dataTable {
clear: both;
margin-top: 6px !important;
margin-bottom: 6px !important;
max-width: none !important;
border-collapse: separate !important;
border-spacing: 0;
}
table.dataTable td,
table.dataTable th {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
table.dataTable td.dataTables_empty,
table.dataTable th.dataTables_empty {
text-align: center;
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length label {
font-weight: normal;
text-align: left;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length select {
width: auto;
display: inline-block;
}
div.dataTables_wrapper div.dataTables_filter {
text-align: right;
}
div.dataTables_wrapper div.dataTables_filter label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
div.dataTables_wrapper div.dataTables_filter input {
margin-left: 0.5em;
display: inline-block;
width: auto;
}
div.dataTables_wrapper div.dataTables_info {
padding-top: 0.85em;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_paginate {
margin: 0;
white-space: nowrap;
text-align: right;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
margin: 2px 0;
white-space: nowrap;
justify-content: flex-end;
}
div.dataTables_wrapper div.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -26px;
text-align: center;
padding: 1em 0;
}
table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
table.dataTable thead > tr > td.sorting_asc,
table.dataTable thead > tr > td.sorting_desc,
table.dataTable thead > tr > td.sorting {
padding-right: 30px;
}
table.dataTable thead > tr > th:active,
table.dataTable thead > tr > td:active {
outline: none;
}
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_asc_disabled,
table.dataTable thead .sorting_desc_disabled {
cursor: pointer;
position: relative;
}
table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:before,
table.dataTable thead .sorting_desc_disabled:after {
position: absolute;
bottom: 0.9em;
display: block;
opacity: 0.3;
}
table.dataTable thead .sorting:before,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_desc_disabled:before {
right: 1em;
content: "\2191";
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:after {
right: 0.5em;
content: "\2193";
}
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_desc:after {
opacity: 1;
}
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_desc_disabled:after {
opacity: 0;
}
div.dataTables_scrollHead table.dataTable {
margin-bottom: 0 !important;
}
div.dataTables_scrollBody table {
border-top: none;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
div.dataTables_scrollBody table thead .sorting:before,
div.dataTables_scrollBody table thead .sorting_asc:before,
div.dataTables_scrollBody table thead .sorting_desc:before,
div.dataTables_scrollBody table thead .sorting:after,
div.dataTables_scrollBody table thead .sorting_asc:after,
div.dataTables_scrollBody table thead .sorting_desc:after {
display: none;
}
div.dataTables_scrollBody table tbody tr:first-child th,
div.dataTables_scrollBody table tbody tr:first-child td {
border-top: none;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner {
box-sizing: content-box;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
margin-top: 0 !important;
border-top: none;
}
@media screen and (max-width: 767px) {
div.dataTables_wrapper div.dataTables_length,
div.dataTables_wrapper div.dataTables_filter,
div.dataTables_wrapper div.dataTables_info,
div.dataTables_wrapper div.dataTables_paginate {
text-align: center;
}
}
table.dataTable.table-sm > thead > tr > th {
padding-right: 20px;
}
table.dataTable.table-sm .sorting:before,
table.dataTable.table-sm .sorting_asc:before,
table.dataTable.table-sm .sorting_desc:before {
top: 5px;
right: 0.85em;
}
table.dataTable.table-sm .sorting:after,
table.dataTable.table-sm .sorting_asc:after,
table.dataTable.table-sm .sorting_desc:after {
top: 5px;
}
table.table-bordered.dataTable th,
table.table-bordered.dataTable td {
border-left-width: 0;
}
table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable td:last-child,
table.table-bordered.dataTable td:last-child {
border-right-width: 0;
}
table.table-bordered.dataTable tbody th,
table.table-bordered.dataTable tbody td {
border-bottom-width: 0;
}
div.dataTables_scrollHead table.table-bordered {
border-bottom-width: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row {
margin: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
padding-left: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
padding-right: 0;
}

1
assets/component/datatables/css/dataTables.bootstrap4.min.css vendored

File diff suppressed because one or more lines are too long

9384
assets/component/datatables/datatables.css

File diff soppresso perché troppo grande Load Diff

20820
assets/component/datatables/datatables.js

File diff soppresso perché troppo grande Load Diff

26
assets/component/datatables/datatables.min.css vendored

File diff suppressed because one or more lines are too long

238
assets/component/datatables/datatables.min.js vendored

File diff suppressed because one or more lines are too long

BIN
assets/component/datatables/images/sort_asc.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 160 B

BIN
assets/component/datatables/images/sort_asc_disabled.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 148 B

BIN
assets/component/datatables/images/sort_both.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 201 B

BIN
assets/component/datatables/images/sort_desc.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 158 B

BIN
assets/component/datatables/images/sort_desc_disabled.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 146 B

182
assets/component/datatables/js/dataTables.bootstrap.js vendored

@ -0,0 +1,182 @@
/*! DataTables Bootstrap 3 integration
* ©2011-2015 SpryMedia Ltd - datatables.net/license
*/
/**
* DataTables integration for Bootstrap 3. This requires Bootstrap 3 and
* DataTables 1.10 or newer.
*
* This file sets the defaults and adds options to DataTables to style its
* controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
* for further information.
*/
(function( factory ){
if ( typeof define === 'function' && define.amd ) {
// AMD
define( ['jquery', 'datatables.net'], function ( $ ) {
return factory( $, window, document );
} );
}
else if ( typeof exports === 'object' ) {
// CommonJS
module.exports = function (root, $) {
if ( ! root ) {
root = window;
}
if ( ! $ || ! $.fn.dataTable ) {
// Require DataTables, which attaches to jQuery, including
// jQuery if needed and have a $ property so we can access the
// jQuery object that is used
$ = require('datatables.net')(root, $).$;
}
return factory( $, root, root.document );
};
}
else {
// Browser
factory( jQuery, window, document );
}
}(function( $, window, document, undefined ) {
'use strict';
var DataTable = $.fn.dataTable;
/* Set the defaults for DataTables initialisation */
$.extend( true, DataTable.defaults, {
dom:
"<'row'<'col-sm-6'l><'col-sm-6'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-5'i><'col-sm-7'p>>",
renderer: 'bootstrap'
} );
/* Default class modification */
$.extend( DataTable.ext.classes, {
sWrapper: "dataTables_wrapper form-inline dt-bootstrap",
sFilterInput: "form-control input-sm",
sLengthSelect: "form-control input-sm",
sProcessing: "dataTables_processing panel panel-default"
} );
/* Bootstrap paging button renderer */
DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
var api = new DataTable.Api( settings );
var classes = settings.oClasses;
var lang = settings.oLanguage.oPaginate;
var aria = settings.oLanguage.oAria.paginate || {};
var btnDisplay, btnClass, counter=0;
var attach = function( container, buttons ) {
var i, ien, node, button;
var clickHandler = function ( e ) {
e.preventDefault();
if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
api.page( e.data.action ).draw( 'page' );
}
};
for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
button = buttons[i];
if ( $.isArray( button ) ) {
attach( container, button );
}
else {
btnDisplay = '';
btnClass = '';
switch ( button ) {
case 'ellipsis':
btnDisplay = '&#x2026;';
btnClass = 'disabled';
break;
case 'first':
btnDisplay = lang.sFirst;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'previous':
btnDisplay = lang.sPrevious;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'next':
btnDisplay = lang.sNext;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
case 'last':
btnDisplay = lang.sLast;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
default:
btnDisplay = button + 1;
btnClass = page === button ?
'active' : '';
break;
}
if ( btnDisplay ) {
node = $('<li>', {
'class': classes.sPageButton+' '+btnClass,
'id': idx === 0 && typeof button === 'string' ?
settings.sTableId +'_'+ button :
null
} )
.append( $('<a>', {
'href': '#',
'aria-controls': settings.sTableId,
'aria-label': aria[ button ],
'data-dt-idx': counter,
'tabindex': settings.iTabIndex
} )
.html( btnDisplay )
)
.appendTo( container );
settings.oApi._fnBindAction(
node, {action: button}, clickHandler
);
counter++;
}
}
}
};
// IE9 throws an 'unknown error' if document.activeElement is used
// inside an iframe or frame.
var activeEl;
try {
// Because this approach is destroying and recreating the paging
// elements, focus is lost on the select button which is bad for
// accessibility. So we want to restore focus once the draw has
// completed
activeEl = $(host).find(document.activeElement).data('dt-idx');
}
catch (e) {}
attach(
$(host).empty().html('<ul class="pagination"/>').children('ul'),
buttons
);
if ( activeEl !== undefined ) {
$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
}
};
return DataTable;
}));

8
assets/component/datatables/js/dataTables.bootstrap.min.js vendored

@ -0,0 +1,8 @@
/*!
DataTables Bootstrap 3 integration
©2011-2015 SpryMedia Ltd - datatables.net/license
*/
(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d,m){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});b.extend(f.ext.classes,
{sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")};
l=0;for(h=f.length;l<h;l++)if(c=f[l],b.isArray(c))q(d,c);else{g=e="";switch(c){case "ellipsis":e="&#x2026;";g="disabled";break;case "first":e=k.sFirst;g=c+(0<j?"":" disabled");break;case "previous":e=k.sPrevious;g=c+(0<j?"":" disabled");break;case "next":e=k.sNext;g=c+(j<n-1?"":" disabled");break;case "last":e=k.sLast;g=c+(j<n-1?"":" disabled");break;default:e=c+1,g=j===c?"active":""}e&&(i=b("<li>",{"class":t.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("<a>",{href:"#",
"aria-controls":a.sTableId,"aria-label":u[c],"data-dt-idx":p,tabindex:a.iTabIndex}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(v){}q(b(h).empty().html('<ul class="pagination"/>').children("ul"),s);i!==m&&b(h).find("[data-dt-idx="+i+"]").focus()};return f});

184
assets/component/datatables/js/dataTables.bootstrap4.js vendored

@ -0,0 +1,184 @@
/*! DataTables Bootstrap 4 integration
* ©2011-2017 SpryMedia Ltd - datatables.net/license
*/
/**
* DataTables integration for Bootstrap 4. This requires Bootstrap 4 and
* DataTables 1.10 or newer.
*
* This file sets the defaults and adds options to DataTables to style its
* controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
* for further information.
*/
(function( factory ){
if ( typeof define === 'function' && define.amd ) {
// AMD
define( ['jquery', 'datatables.net'], function ( $ ) {
return factory( $, window, document );
} );
}
else if ( typeof exports === 'object' ) {
// CommonJS
module.exports = function (root, $) {
if ( ! root ) {
root = window;
}
if ( ! $ || ! $.fn.dataTable ) {
// Require DataTables, which attaches to jQuery, including
// jQuery if needed and have a $ property so we can access the
// jQuery object that is used
$ = require('datatables.net')(root, $).$;
}
return factory( $, root, root.document );
};
}
else {
// Browser
factory( jQuery, window, document );
}
}(function( $, window, document, undefined ) {
'use strict';
var DataTable = $.fn.dataTable;
/* Set the defaults for DataTables initialisation */
$.extend( true, DataTable.defaults, {
dom:
"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
renderer: 'bootstrap'
} );
/* Default class modification */
$.extend( DataTable.ext.classes, {
sWrapper: "dataTables_wrapper dt-bootstrap4",
sFilterInput: "form-control form-control-sm",
sLengthSelect: "custom-select custom-select-sm form-control form-control-sm",
sProcessing: "dataTables_processing card",
sPageButton: "paginate_button page-item"
} );
/* Bootstrap paging button renderer */
DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
var api = new DataTable.Api( settings );
var classes = settings.oClasses;
var lang = settings.oLanguage.oPaginate;
var aria = settings.oLanguage.oAria.paginate || {};
var btnDisplay, btnClass, counter=0;
var attach = function( container, buttons ) {
var i, ien, node, button;
var clickHandler = function ( e ) {
e.preventDefault();
if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
api.page( e.data.action ).draw( 'page' );
}
};
for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
button = buttons[i];
if ( $.isArray( button ) ) {
attach( container, button );
}
else {
btnDisplay = '';
btnClass = '';
switch ( button ) {
case 'ellipsis':
btnDisplay = '&#x2026;';
btnClass = 'disabled';
break;
case 'first':
btnDisplay = lang.sFirst;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'previous':
btnDisplay = lang.sPrevious;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'next':
btnDisplay = lang.sNext;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
case 'last':
btnDisplay = lang.sLast;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
default:
btnDisplay = button + 1;
btnClass = page === button ?
'active' : '';
break;
}
if ( btnDisplay ) {
node = $('<li>', {
'class': classes.sPageButton+' '+btnClass,
'id': idx === 0 && typeof button === 'string' ?
settings.sTableId +'_'+ button :
null
} )
.append( $('<a>', {
'href': '#',
'aria-controls': settings.sTableId,
'aria-label': aria[ button ],
'data-dt-idx': counter,
'tabindex': settings.iTabIndex,
'class': 'page-link'
} )
.html( btnDisplay )
)
.appendTo( container );
settings.oApi._fnBindAction(
node, {action: button}, clickHandler
);
counter++;
}
}
}
};
// IE9 throws an 'unknown error' if document.activeElement is used
// inside an iframe or frame.
var activeEl;
try {
// Because this approach is destroying and recreating the paging
// elements, focus is lost on the select button which is bad for
// accessibility. So we want to restore focus once the draw has
// completed
activeEl = $(host).find(document.activeElement).data('dt-idx');
}
catch (e) {}
attach(
$(host).empty().html('<ul class="pagination"/>').children('ul'),
buttons
);
if ( activeEl !== undefined ) {
$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
}
};
return DataTable;
}));

8
assets/component/datatables/js/dataTables.bootstrap4.min.js vendored

@ -0,0 +1,8 @@
/*!
DataTables Bootstrap 4 integration
©2011-2017 SpryMedia Ltd - datatables.net/license
*/
(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d,m){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
renderer:"bootstrap"});b.extend(f.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();
!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")};l=0;for(h=f.length;l<h;l++)if(c=f[l],b.isArray(c))q(d,c);else{g=e="";switch(c){case "ellipsis":e="&#x2026;";g="disabled";break;case "first":e=k.sFirst;g=c+(0<j?"":" disabled");break;case "previous":e=k.sPrevious;g=c+(0<j?"":" disabled");break;case "next":e=k.sNext;g=c+(j<n-1?"":" disabled");break;case "last":e=k.sLast;g=c+(j<n-1?"":" disabled");break;default:e=c+1,g=j===c?"active":""}e&&(i=b("<li>",
{"class":t.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("<a>",{href:"#","aria-controls":a.sTableId,"aria-label":u[c],"data-dt-idx":p,tabindex:a.iTabIndex,"class":"page-link"}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(v){}q(b(h).empty().html('<ul class="pagination"/>').children("ul"),s);i!==m&&b(h).find("[data-dt-idx="+i+"]").focus()};return f});

1
assets/component/index.php

@ -0,0 +1 @@
<?php header("location: ../login"); ?>

13
assets/component/jquery-multi-select/LICENSE.txt

@ -0,0 +1,13 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

3
assets/component/jquery-multi-select/README.markdown

@ -0,0 +1,3 @@
# jquery.multi-select.js
Usage and Demos [http://loudev.com](http://loudev.com "jquery.multi-select.js")

101
assets/component/jquery-multi-select/css/multi-select.css

@ -0,0 +1,101 @@
.ms-container{
background: transparent url('../img/switch.png') no-repeat 10% 10%;
background-color: red;
padding: 10px;
margin: 10px;
width: 700px;
}
.ms-container:after{
content: ".";
display: block;
height: 0;
line-height: 0;
font-size: 0;
clear: both;
min-height: 0;
visibility: hidden;
}
.ms-container .ms-selectable, .ms-container .ms-selection{
background: #fff;
color: #555555;
float: left;
width: 45%;
}
.ms-container .ms-selection{
float: right;
}
.ms-container .ms-list{
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-o-transition: border linear 0.2s, box-shadow linear 0.2s;
transition: border linear 0.2s, box-shadow linear 0.2s;
border: 1px solid #ccc;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
position: relative;
height: 300px;
padding: 0;
overflow-y: auto;
}
.ms-container .ms-list.ms-focus{
border-color: rgba(82, 168, 236, 0.8);
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
outline: 0;
outline: thin dotted \9;
}
.ms-container ul{
margin: 0;
list-style-type: none;
padding: 0;
}
.ms-container .ms-optgroup-container{
width: 100%;
}
.ms-container .ms-optgroup-label{
margin: 0;
padding: 5px 0px 0px 5px;
cursor: pointer;
color: #999;
}
.ms-container .ms-selectable li.ms-elem-selectable,
.ms-container .ms-selection li.ms-elem-selection{
border-bottom: 1px #eee solid;
padding: 2px 10px;
color: #555;
font-size: 14px;
}
.ms-container .ms-selectable li.ms-hover,
.ms-container .ms-selection li.ms-hover{
cursor: pointer;
color: #fff;
text-decoration: none;
background-color: #08c;
}
.ms-container .ms-selectable li.disabled,
.ms-container .ms-selection li.disabled{
background-color: #eee;
color: #aaa;
cursor: text;
}
.multi-select {
right: auto !important;
left: -9999px !important;
}

BIN
assets/component/jquery-multi-select/img/switch.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 236 B

BIN
assets/component/jquery-multi-select/img/switch_original.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 3.0 KiB

532
assets/component/jquery-multi-select/js/jquery.multi-select.js

@ -0,0 +1,532 @@
/*
* MultiSelect v0.9.11
* Copyright (c) 2012 Louis Cuny
*
* This program is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What The Fuck You Want
* To Public License, Version 2, as published by Sam Hocevar. See
* http://sam.zoy.org/wtfpl/COPYING for more details.
*/
!function ($) {
"use strict";
/* MULTISELECT CLASS DEFINITION
* ====================== */
var MultiSelect = function (element, options) {
this.options = options;
this.$element = $(element);
this.$container = $('<div/>', { 'class': "ms-container" });
this.$selectableContainer = $('<div/>', { 'class': 'ms-selectable' });
this.$selectionContainer = $('<div/>', { 'class': 'ms-selection' });
this.$selectableUl = $('<ul/>', { 'class': "ms-list", 'tabindex' : '-1' });
this.$selectionUl = $('<ul/>', { 'class': "ms-list", 'tabindex' : '-1' });
this.scrollTo = 0;
this.elemsSelector = 'li:visible:not(.ms-optgroup-label,.ms-optgroup-container,.'+options.disabledClass+')';
};
MultiSelect.prototype = {
constructor: MultiSelect,
init: function(){
var that = this,
ms = this.$element;
if (ms.next('.ms-container').length === 0){
ms.css({ position: 'absolute', left: '-9999px' });
ms.attr('id', ms.attr('id') ? ms.attr('id') : Math.ceil(Math.random()*1000)+'multiselect');
this.$container.attr('id', 'ms-'+ms.attr('id'));
this.$container.addClass(that.options.cssClass);
ms.find('option').each(function(){
that.generateLisFromOption(this);
});
this.$selectionUl.find('.ms-optgroup-label').hide();
if (that.options.selectableHeader){
that.$selectableContainer.append(that.options.selectableHeader);
}
that.$selectableContainer.append(that.$selectableUl);
if (that.options.selectableFooter){
that.$selectableContainer.append(that.options.selectableFooter);
}
if (that.options.selectionHeader){
that.$selectionContainer.append(that.options.selectionHeader);
}
that.$selectionContainer.append(that.$selectionUl);
if (that.options.selectionFooter){
that.$selectionContainer.append(that.options.selectionFooter);
}
that.$container.append(that.$selectableContainer);
that.$container.append(that.$selectionContainer);
ms.after(that.$container);
that.activeMouse(that.$selectableUl);
that.activeKeyboard(that.$selectableUl);
var action = that.options.dblClick ? 'dblclick' : 'click';
that.$selectableUl.on(action, '.ms-elem-selectable', function(){
that.select($(this).data('ms-value'));
});
that.$selectionUl.on(action, '.ms-elem-selection', function(){
that.deselect($(this).data('ms-value'));
});
that.activeMouse(that.$selectionUl);
that.activeKeyboard(that.$selectionUl);
ms.on('focus', function(){
that.$selectableUl.focus();
})
}
var selectedValues = ms.find('option:selected').map(function(){ return $(this).val(); }).get();
that.select(selectedValues, 'init');
if (typeof that.options.afterInit === 'function') {
that.options.afterInit.call(this, this.$container);
}
},
'generateLisFromOption' : function(option, index, $container){
var that = this,
ms = that.$element,
attributes = "",
$option = $(option);
for (var cpt = 0; cpt < option.attributes.length; cpt++){
var attr = option.attributes[cpt];
if(attr.name !== 'value' && attr.name !== 'disabled'){
attributes += attr.name+'="'+attr.value+'" ';
}
}
var selectableLi = $('<li '+attributes+'><span>'+that.escapeHTML($option.text())+'</span></li>'),
selectedLi = selectableLi.clone(),
value = $option.val(),
elementId = that.sanitize(value);
selectableLi
.data('ms-value', value)
.addClass('ms-elem-selectable')
.attr('id', elementId+'-selectable');
selectedLi
.data('ms-value', value)
.addClass('ms-elem-selection')
.attr('id', elementId+'-selection')
.hide();
if ($option.prop('disabled') || ms.prop('disabled')){
selectedLi.addClass(that.options.disabledClass);
selectableLi.addClass(that.options.disabledClass);
}
var $optgroup = $option.parent('optgroup');
if ($optgroup.length > 0){
var optgroupLabel = $optgroup.attr('label'),
optgroupId = that.sanitize(optgroupLabel),
$selectableOptgroup = that.$selectableUl.find('#optgroup-selectable-'+optgroupId),
$selectionOptgroup = that.$selectionUl.find('#optgroup-selection-'+optgroupId);
if ($selectableOptgroup.length === 0){
var optgroupContainerTpl = '<li class="ms-optgroup-container"></li>',
optgroupTpl = '<ul class="ms-optgroup"><li class="ms-optgroup-label"><span>'+optgroupLabel+'</span></li></ul>';
$selectableOptgroup = $(optgroupContainerTpl);
$selectionOptgroup = $(optgroupContainerTpl);
$selectableOptgroup.attr('id', 'optgroup-selectable-'+optgroupId);
$selectionOptgroup.attr('id', 'optgroup-selection-'+optgroupId);
$selectableOptgroup.append($(optgroupTpl));
$selectionOptgroup.append($(optgroupTpl));
if (that.options.selectableOptgroup){
$selectableOptgroup.find('.ms-optgroup-label').on('click', function(){
var values = $optgroup.children(':not(:selected, :disabled)').map(function(){ return $(this).val() }).get();
that.select(values);
});
$selectionOptgroup.find('.ms-optgroup-label').on('click', function(){
var values = $optgroup.children(':selected:not(:disabled)').map(function(){ return $(this).val() }).get();
that.deselect(values);
});
}
that.$selectableUl.append($selectableOptgroup);
that.$selectionUl.append($selectionOptgroup);
}
index = index == undefined ? $selectableOptgroup.find('ul').children().length : index + 1;
selectableLi.insertAt(index, $selectableOptgroup.children());
selectedLi.insertAt(index, $selectionOptgroup.children());
} else {
index = index == undefined ? that.$selectableUl.children().length : index;
selectableLi.insertAt(index, that.$selectableUl);
selectedLi.insertAt(index, that.$selectionUl);
}
},
'addOption' : function(options){
var that = this;
if (options.value) options = [options];
$.each(options, function(index, option){
if (option.value && that.$element.find("option[value='"+option.value+"']").length === 0){
var $option = $('<option value="'+option.value+'">'+option.text+'</option>'),
index = parseInt((typeof option.index === 'undefined' ? that.$element.children().length : option.index)),
$container = option.nested == undefined ? that.$element : $("optgroup[label='"+option.nested+"']")
$option.insertAt(index, $container);
that.generateLisFromOption($option.get(0), index, option.nested);
}
})
},
'escapeHTML' : function(text){
return $("<div>").text(text).html();
},
'activeKeyboard' : function($list){
var that = this;
$list.on('focus', function(){
$(this).addClass('ms-focus');
})
.on('blur', function(){
$(this).removeClass('ms-focus');
})
.on('keydown', function(e){
switch (e.which) {
case 40:
case 38:
e.preventDefault();
e.stopPropagation();
that.moveHighlight($(this), (e.which === 38) ? -1 : 1);
return;
case 37:
case 39:
e.preventDefault();
e.stopPropagation();
that.switchList($list);
return;
case 9:
if(that.$element.is('[tabindex]')){
e.preventDefault();
var tabindex = parseInt(that.$element.attr('tabindex'), 10);
tabindex = (e.shiftKey) ? tabindex-1 : tabindex+1;
$('[tabindex="'+(tabindex)+'"]').focus();
return;
}else{
if(e.shiftKey){
that.$element.trigger('focus');
}
}
}
if($.inArray(e.which, that.options.keySelect) > -1){
e.preventDefault();
e.stopPropagation();
that.selectHighlighted($list);
return;
}
});
},
'moveHighlight': function($list, direction){
var $elems = $list.find(this.elemsSelector),
$currElem = $elems.filter('.ms-hover'),
$nextElem = null,
elemHeight = $elems.first().outerHeight(),
containerHeight = $list.height(),
containerSelector = '#'+this.$container.prop('id');
$elems.removeClass('ms-hover');
if (direction === 1){ // DOWN
$nextElem = $currElem.nextAll(this.elemsSelector).first();
if ($nextElem.length === 0){
var $optgroupUl = $currElem.parent();
if ($optgroupUl.hasClass('ms-optgroup')){
var $optgroupLi = $optgroupUl.parent(),
$nextOptgroupLi = $optgroupLi.next(':visible');
if ($nextOptgroupLi.length > 0){
$nextElem = $nextOptgroupLi.find(this.elemsSelector).first();
} else {
$nextElem = $elems.first();
}
} else {
$nextElem = $elems.first();
}
}
} else if (direction === -1){ // UP
$nextElem = $currElem.prevAll(this.elemsSelector).first();
if ($nextElem.length === 0){
var $optgroupUl = $currElem.parent();
if ($optgroupUl.hasClass('ms-optgroup')){
var $optgroupLi = $optgroupUl.parent(),
$prevOptgroupLi = $optgroupLi.prev(':visible');
if ($prevOptgroupLi.length > 0){
$nextElem = $prevOptgroupLi.find(this.elemsSelector).last();
} else {
$nextElem = $elems.last();
}
} else {
$nextElem = $elems.last();
}
}
}
if ($nextElem.length > 0){
$nextElem.addClass('ms-hover');
var scrollTo = $list.scrollTop() + $nextElem.position().top -
containerHeight / 2 + elemHeight / 2;
$list.scrollTop(scrollTo);
}
},
'selectHighlighted' : function($list){
var $elems = $list.find(this.elemsSelector),
$highlightedElem = $elems.filter('.ms-hover').first();
if ($highlightedElem.length > 0){
if ($list.parent().hasClass('ms-selectable')){
this.select($highlightedElem.data('ms-value'));
} else {
this.deselect($highlightedElem.data('ms-value'));
}
$elems.removeClass('ms-hover');
}
},
'switchList' : function($list){
$list.blur();
this.$container.find(this.elemsSelector).removeClass('ms-hover');
if ($list.parent().hasClass('ms-selectable')){
this.$selectionUl.focus();
} else {
this.$selectableUl.focus();
}
},
'activeMouse' : function($list){
var that = this;
$('body').on('mouseenter', that.elemsSelector, function(){
$(this).parents('.ms-container').find(that.elemsSelector).removeClass('ms-hover');
$(this).addClass('ms-hover');
});
$('body').on('mouseleave', that.elemsSelector, function () {
$(this).parents('.ms-container').find(that.elemsSelector).removeClass('ms-hover');;
});
},
'refresh' : function() {
this.destroy();
this.$element.multiSelect(this.options);
},
'destroy' : function(){
$("#ms-"+this.$element.attr("id")).remove();
this.$element.css('position', '').css('left', '')
this.$element.removeData('multiselect');
},
'select' : function(value, method){
if (typeof value === 'string'){ value = [value]; }
var that = this,
ms = this.$element,
msIds = $.map(value, function(val){ return(that.sanitize(val)); }),
selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable').filter(':not(.'+that.options.disabledClass+')'),
selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection').filter(':not(.'+that.options.disabledClass+')'),
options = ms.find('option:not(:disabled)').filter(function(){ return($.inArray(this.value, value) > -1); });
if (method === 'init'){
selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'),
selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection');
}
if (selectables.length > 0){
selectables.addClass('ms-selected').hide();
selections.addClass('ms-selected').show();
options.prop('selected', true);
that.$container.find(that.elemsSelector).removeClass('ms-hover');
var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container');
if (selectableOptgroups.length > 0){
selectableOptgroups.each(function(){
var selectablesLi = $(this).find('.ms-elem-selectable');
if (selectablesLi.length === selectablesLi.filter('.ms-selected').length){
$(this).find('.ms-optgroup-label').hide();
}
});
var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container');
selectionOptgroups.each(function(){
var selectionsLi = $(this).find('.ms-elem-selection');
if (selectionsLi.filter('.ms-selected').length > 0){
$(this).find('.ms-optgroup-label').show();
}
});
} else {
if (that.options.keepOrder && method !== 'init'){
var selectionLiLast = that.$selectionUl.find('.ms-selected');
if((selectionLiLast.length > 1) && (selectionLiLast.last().get(0) != selections.get(0))) {
selections.insertAfter(selectionLiLast.last());
}
}
}
if (method !== 'init'){
ms.trigger('change');
if (typeof that.options.afterSelect === 'function') {
that.options.afterSelect.call(this, value);
}
}
}
},
'deselect' : function(value){
if (typeof value === 'string'){ value = [value]; }
var that = this,
ms = this.$element,
msIds = $.map(value, function(val){ return(that.sanitize(val)); }),
selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'),
selections = this.$selectionUl.find('#' + msIds.join('-selection, #')+'-selection').filter('.ms-selected').filter(':not(.'+that.options.disabledClass+')'),
options = ms.find('option').filter(function(){ return($.inArray(this.value, value) > -1); });
if (selections.length > 0){
selectables.removeClass('ms-selected').show();
selections.removeClass('ms-selected').hide();
options.prop('selected', false);
that.$container.find(that.elemsSelector).removeClass('ms-hover');
var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container');
if (selectableOptgroups.length > 0){
selectableOptgroups.each(function(){
var selectablesLi = $(this).find('.ms-elem-selectable');
if (selectablesLi.filter(':not(.ms-selected)').length > 0){
$(this).find('.ms-optgroup-label').show();
}
});
var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container');
selectionOptgroups.each(function(){
var selectionsLi = $(this).find('.ms-elem-selection');
if (selectionsLi.filter('.ms-selected').length === 0){
$(this).find('.ms-optgroup-label').hide();
}
});
}
ms.trigger('change');
if (typeof that.options.afterDeselect === 'function') {
that.options.afterDeselect.call(this, value);
}
}
},
'select_all' : function(){
var ms = this.$element,
values = ms.val();
ms.find('option:not(":disabled")').prop('selected', true);
this.$selectableUl.find('.ms-elem-selectable').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').hide();
this.$selectionUl.find('.ms-optgroup-label').show();
this.$selectableUl.find('.ms-optgroup-label').hide();
this.$selectionUl.find('.ms-elem-selection').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').show();
this.$selectionUl.focus();
ms.trigger('change');
if (typeof this.options.afterSelect === 'function') {
var selectedValues = $.grep(ms.val(), function(item){
return $.inArray(item, values) < 0;
});
this.options.afterSelect.call(this, selectedValues);
}
},
'deselect_all' : function(){
var ms = this.$element,
values = ms.val();
ms.find('option').prop('selected', false);
this.$selectableUl.find('.ms-elem-selectable').removeClass('ms-selected').show();
this.$selectionUl.find('.ms-optgroup-label').hide();
this.$selectableUl.find('.ms-optgroup-label').show();
this.$selectionUl.find('.ms-elem-selection').removeClass('ms-selected').hide();
this.$selectableUl.focus();
ms.trigger('change');
if (typeof this.options.afterDeselect === 'function') {
this.options.afterDeselect.call(this, values);
}
},
sanitize: function(value){
var hash = 0, i, character;
if (value.length == 0) return hash;
var ls = 0;
for (i = 0, ls = value.length; i < ls; i++) {
character = value.charCodeAt(i);
hash = ((hash<<5)-hash)+character;
hash |= 0; // Convert to 32bit integer
}
return hash;
}
};
/* MULTISELECT PLUGIN DEFINITION
* ======================= */
$.fn.multiSelect = function () {
var option = arguments[0],
args = arguments;
return this.each(function () {
var $this = $(this),
data = $this.data('multiselect'),
options = $.extend({}, $.fn.multiSelect.defaults, $this.data(), typeof option === 'object' && option);
if (!data){ $this.data('multiselect', (data = new MultiSelect(this, options))); }
if (typeof option === 'string'){
data[option](args[1]);
} else {
data.init();
}
});
};
$.fn.multiSelect.defaults = {
keySelect: [32],
selectableOptgroup: false,
disabledClass : 'disabled',
dblClick : false,
keepOrder: false,
cssClass: ''
};
$.fn.multiSelect.Constructor = MultiSelect;
$.fn.insertAt = function(index, $parent) {
return this.each(function() {
if (index === 0) {
$parent.prepend(this);
} else {
$parent.children().eq(index - 1).after(this);
}
});
}
}(window.jQuery);

5
assets/component/jquery.min.js vendored

File diff suppressed because one or more lines are too long

BIN
assets/component/leaflet/1.3.4/images/layers-2x.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 1.2 KiB

BIN
assets/component/leaflet/1.3.4/images/layers.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 696 B

BIN
assets/component/leaflet/1.3.4/images/marker-icon-2x.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 2.4 KiB

BIN
assets/component/leaflet/1.3.4/images/marker-icon.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 1.4 KiB

BIN
assets/component/leaflet/1.3.4/images/marker-shadow.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 618 B

13778
assets/component/leaflet/1.3.4/leaflet-src.esm.js

File diff soppresso perché troppo grande Load Diff

1
assets/component/leaflet/1.3.4/leaflet-src.esm.js.map

File diff suppressed because one or more lines are too long

13870
assets/component/leaflet/1.3.4/leaflet-src.js

File diff soppresso perché troppo grande Load Diff

1
assets/component/leaflet/1.3.4/leaflet-src.js.map

File diff suppressed because one or more lines are too long

635
assets/component/leaflet/1.3.4/leaflet.css

@ -0,0 +1,635 @@
/* required styles */
.leaflet-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-container,
.leaflet-pane > svg,
.leaflet-pane > canvas,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer {
position: absolute;
left: 0;
top: 0;
}
.leaflet-container {
overflow: hidden;
}
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow {
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
-webkit-user-drag: none;
}
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
.leaflet-safari .leaflet-tile {
image-rendering: -webkit-optimize-contrast;
}
/* hack that prevents hw layers "stretching" when loading new tiles */
.leaflet-safari .leaflet-tile-container {
width: 1600px;
height: 1600px;
-webkit-transform-origin: 0 0;
}
.leaflet-marker-icon,
.leaflet-marker-shadow {
display: block;
}
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
.leaflet-container .leaflet-overlay-pane svg,
.leaflet-container .leaflet-marker-pane img,
.leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img,
.leaflet-container img.leaflet-image-layer,
.leaflet-container .leaflet-tile {
max-width: none !important;
max-height: none !important;
}
.leaflet-container.leaflet-touch-zoom {
-ms-touch-action: pan-x pan-y;
touch-action: pan-x pan-y;
}
.leaflet-container.leaflet-touch-drag {
-ms-touch-action: pinch-zoom;
/* Fallback for FF which doesn't support pinch-zoom */
touch-action: none;
touch-action: pinch-zoom;
}
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
-ms-touch-action: none;
touch-action: none;
}
.leaflet-container {
-webkit-tap-highlight-color: transparent;
}
.leaflet-container a {
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
}
.leaflet-tile {
filter: inherit;
visibility: hidden;
}
.leaflet-tile-loaded {
visibility: inherit;
}
.leaflet-zoom-box {
width: 0;
height: 0;
-moz-box-sizing: border-box;
box-sizing: border-box;
z-index: 800;
}
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
.leaflet-overlay-pane svg {
-moz-user-select: none;
}
.leaflet-pane { z-index: 400; }
.leaflet-tile-pane { z-index: 200; }
.leaflet-overlay-pane { z-index: 400; }
.leaflet-shadow-pane { z-index: 500; }
.leaflet-marker-pane { z-index: 600; }
.leaflet-tooltip-pane { z-index: 650; }
.leaflet-popup-pane { z-index: 700; }
.leaflet-map-pane canvas { z-index: 100; }
.leaflet-map-pane svg { z-index: 200; }
.leaflet-vml-shape {
width: 1px;
height: 1px;
}
.lvml {
behavior: url(#default#VML);
display: inline-block;
position: absolute;
}
/* control positioning */
.leaflet-control {
position: relative;
z-index: 800;
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
.leaflet-top,
.leaflet-bottom {
position: absolute;
z-index: 1000;
pointer-events: none;
}
.leaflet-top {
top: 0;
}
.leaflet-right {
right: 0;
}
.leaflet-bottom {
bottom: 0;
}
.leaflet-left {
left: 0;
}
.leaflet-control {
float: left;
clear: both;
}
.leaflet-right .leaflet-control {
float: right;
}
.leaflet-top .leaflet-control {
margin-top: 10px;
}
.leaflet-bottom .leaflet-control {
margin-bottom: 10px;
}
.leaflet-left .leaflet-control {
margin-left: 10px;
}
.leaflet-right .leaflet-control {
margin-right: 10px;
}
/* zoom and fade animations */
.leaflet-fade-anim .leaflet-tile {
will-change: opacity;
}
.leaflet-fade-anim .leaflet-popup {
opacity: 0;
-webkit-transition: opacity 0.2s linear;
-moz-transition: opacity 0.2s linear;
transition: opacity 0.2s linear;
}
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
opacity: 1;
}
.leaflet-zoom-animated {
-webkit-transform-origin: 0 0;
-ms-transform-origin: 0 0;
transform-origin: 0 0;
}
.leaflet-zoom-anim .leaflet-zoom-animated {
will-change: transform;
}
.leaflet-zoom-anim .leaflet-zoom-animated {
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
}
.leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile {
-webkit-transition: none;
-moz-transition: none;
transition: none;
}
.leaflet-zoom-anim .leaflet-zoom-hide {
visibility: hidden;
}
/* cursors */
.leaflet-interactive {
cursor: pointer;
}
.leaflet-grab {
cursor: -webkit-grab;
cursor: -moz-grab;
cursor: grab;
}
.leaflet-crosshair,
.leaflet-crosshair .leaflet-interactive {
cursor: crosshair;
}
.leaflet-popup-pane,
.leaflet-control {
cursor: auto;
}
.leaflet-dragging .leaflet-grab,
.leaflet-dragging .leaflet-grab .leaflet-interactive,
.leaflet-dragging .leaflet-marker-draggable {
cursor: move;
cursor: -webkit-grabbing;
cursor: -moz-grabbing;
cursor: grabbing;
}
/* marker & overlays interactivity */
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-image-layer,
.leaflet-pane > svg path,
.leaflet-tile-container {
pointer-events: none;
}
.leaflet-marker-icon.leaflet-interactive,
.leaflet-image-layer.leaflet-interactive,
.leaflet-pane > svg path.leaflet-interactive {
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
pointer-events: auto;
}
/* visual tweaks */
.leaflet-container {
background: #ddd;
outline: 0;
}
.leaflet-container a {
color: #0078A8;
}
.leaflet-container a.leaflet-active {
outline: 2px solid orange;
}
.leaflet-zoom-box {
border: 2px dotted #38f;
background: rgba(255,255,255,0.5);
}
/* general typography */
.leaflet-container {
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
}
/* general toolbar styles */
.leaflet-bar {
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
border-radius: 4px;
}
.leaflet-bar a,
.leaflet-bar a:hover {
background-color: #fff;
border-bottom: 1px solid #ccc;
width: 26px;
height: 26px;
line-height: 26px;
display: block;
text-align: center;
text-decoration: none;
color: black;
}
.leaflet-bar a,
.leaflet-control-layers-toggle {
background-position: 50% 50%;
background-repeat: no-repeat;
display: block;
}
.leaflet-bar a:hover {
background-color: #f4f4f4;
}
.leaflet-bar a:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.leaflet-bar a:last-child {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom: none;
}
.leaflet-bar a.leaflet-disabled {
cursor: default;
background-color: #f4f4f4;
color: #bbb;
}
.leaflet-touch .leaflet-bar a {
width: 30px;
height: 30px;
line-height: 30px;
}
.leaflet-touch .leaflet-bar a:first-child {
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.leaflet-touch .leaflet-bar a:last-child {
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
/* zoom control */
.leaflet-control-zoom-in,
.leaflet-control-zoom-out {
font: bold 18px 'Lucida Console', Monaco, monospace;
text-indent: 1px;
}
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
font-size: 22px;
}
/* layers control */
.leaflet-control-layers {
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
background: #fff;
border-radius: 5px;
}
.leaflet-control-layers-toggle {
background-image: url(images/layers.png);
width: 36px;
height: 36px;
}
.leaflet-retina .leaflet-control-layers-toggle {
background-image: url(images/layers-2x.png);
background-size: 26px 26px;
}
.leaflet-touch .leaflet-control-layers-toggle {
width: 44px;
height: 44px;
}
.leaflet-control-layers .leaflet-control-layers-list,
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
display: none;
}
.leaflet-control-layers-expanded .leaflet-control-layers-list {
display: block;
position: relative;
}
.leaflet-control-layers-expanded {
padding: 6px 10px 6px 6px;
color: #333;
background: #fff;
}
.leaflet-control-layers-scrollbar {
overflow-y: scroll;
overflow-x: hidden;
padding-right: 5px;
}
.leaflet-control-layers-selector {
margin-top: 2px;
position: relative;
top: 1px;
}
.leaflet-control-layers label {
display: block;
}
.leaflet-control-layers-separator {
height: 0;
border-top: 1px solid #ddd;
margin: 5px -10px 5px -6px;
}
/* Default icon URLs */
.leaflet-default-icon-path {
background-image: url(images/marker-icon.png);
}
/* attribution and scale controls */
.leaflet-container .leaflet-control-attribution {
background: #fff;
background: rgba(255, 255, 255, 0.7);
margin: 0;
}
.leaflet-control-attribution,
.leaflet-control-scale-line {
padding: 0 5px;
color: #333;
}
.leaflet-control-attribution a {
text-decoration: none;
}
.leaflet-control-attribution a:hover {
text-decoration: underline;
}
.leaflet-container .leaflet-control-attribution,
.leaflet-container .leaflet-control-scale {
font-size: 11px;
}
.leaflet-left .leaflet-control-scale {
margin-left: 5px;
}
.leaflet-bottom .leaflet-control-scale {
margin-bottom: 5px;
}
.leaflet-control-scale-line {
border: 2px solid #777;
border-top: none;
line-height: 1.1;
padding: 2px 5px 1px;
font-size: 11px;
white-space: nowrap;
overflow: hidden;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #fff;
background: rgba(255, 255, 255, 0.5);
}
.leaflet-control-scale-line:not(:first-child) {
border-top: 2px solid #777;
border-bottom: none;
margin-top: -2px;
}
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
border-bottom: 2px solid #777;
}
.leaflet-touch .leaflet-control-attribution,
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
box-shadow: none;
}
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
border: 2px solid rgba(0,0,0,0.2);
background-clip: padding-box;
}
/* popup */
.leaflet-popup {
position: absolute;
text-align: center;
margin-bottom: 20px;
}
.leaflet-popup-content-wrapper {
padding: 1px;
text-align: left;
border-radius: 12px;
}
.leaflet-popup-content {
margin: 13px 19px;
line-height: 1.4;
}
.leaflet-popup-content p {
margin: 18px 0;
}
.leaflet-popup-tip-container {
width: 40px;
height: 20px;
position: absolute;
left: 50%;
margin-left: -20px;
overflow: hidden;
pointer-events: none;
}
.leaflet-popup-tip {
width: 17px;
height: 17px;
padding: 1px;
margin: -10px auto 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
.leaflet-popup-content-wrapper,
.leaflet-popup-tip {
background: white;
color: #333;
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
}
.leaflet-container a.leaflet-popup-close-button {
position: absolute;
top: 0;
right: 0;
padding: 4px 4px 0 0;
border: none;
text-align: center;
width: 18px;
height: 14px;
font: 16px/14px Tahoma, Verdana, sans-serif;
color: #c3c3c3;
text-decoration: none;
font-weight: bold;
background: transparent;
}
.leaflet-container a.leaflet-popup-close-button:hover {
color: #999;
}
.leaflet-popup-scrolled {
overflow: auto;
border-bottom: 1px solid #ddd;
border-top: 1px solid #ddd;
}
.leaflet-oldie .leaflet-popup-content-wrapper {
zoom: 1;
}
.leaflet-oldie .leaflet-popup-tip {
width: 24px;
margin: 0 auto;
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
}
.leaflet-oldie .leaflet-popup-tip-container {
margin-top: -1px;
}
.leaflet-oldie .leaflet-control-zoom,
.leaflet-oldie .leaflet-control-layers,
.leaflet-oldie .leaflet-popup-content-wrapper,
.leaflet-oldie .leaflet-popup-tip {
border: 1px solid #999;
}
/* div icon */
.leaflet-div-icon {
background: #fff;
border: 1px solid #666;
}
/* Tooltip */
/* Base styles for the element that has a tooltip */
.leaflet-tooltip {
position: absolute;
padding: 6px;
background-color: #fff;
border: 1px solid #fff;
border-radius: 3px;
color: #222;
white-space: nowrap;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
pointer-events: none;
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
}
.leaflet-tooltip.leaflet-clickable {
cursor: pointer;
pointer-events: auto;
}
.leaflet-tooltip-top:before,
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
position: absolute;
pointer-events: none;
border: 6px solid transparent;
background: transparent;
content: "";
}
/* Directions */
.leaflet-tooltip-bottom {
margin-top: 6px;
}
.leaflet-tooltip-top {
margin-top: -6px;
}
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-top:before {
left: 50%;
margin-left: -6px;
}
.leaflet-tooltip-top:before {
bottom: 0;
margin-bottom: -12px;
border-top-color: #fff;
}
.leaflet-tooltip-bottom:before {
top: 0;
margin-top: -12px;
margin-left: -6px;
border-bottom-color: #fff;
}
.leaflet-tooltip-left {
margin-left: -6px;
}
.leaflet-tooltip-right {
margin-left: 6px;
}
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
top: 50%;
margin-top: -6px;
}
.leaflet-tooltip-left:before {
right: 0;
margin-right: -12px;
border-left-color: #fff;
}
.leaflet-tooltip-right:before {
left: 0;
margin-left: -12px;
border-right-color: #fff;
}

5
assets/component/leaflet/1.3.4/leaflet.js

File diff suppressed because one or more lines are too long

1
assets/component/leaflet/1.3.4/leaflet.js.map

File diff suppressed because one or more lines are too long

231
assets/component/leaflet/L.LabelTextCollision.js

@ -0,0 +1,231 @@
L.LabelTextCollision = L.Canvas
.extend({
options : {
/**
* Collision detection
*/
collisionFlg : true
},
initialize : function(options) {
options = L.Util.setOptions(this, options);
},
_handleMouseHover : function(e, point) {
var id, layer;
for (id in this._drawnLayers) {
layer = this._drawnLayers[id];
if (layer.options.interactive
&& layer._containsPoint(point)) {
L.DomUtil.addClass(this._containerText,
'leaflet-interactive'); // change cursor
this._fireEvent([ layer ], e, 'mouseover');
this._hoveredLayer = layer;
}
}
if (this._hoveredLayer) {
this._fireEvent([ this._hoveredLayer ], e);
}
},
_handleMouseOut : function(e, point) {
var layer = this._hoveredLayer;
if (layer
&& (e.type === 'mouseout' || !layer
._containsPoint(point))) {
// if we're leaving the layer, fire mouseout
L.DomUtil.removeClass(this._containerText,
'leaflet-interactive');
this._fireEvent([ layer ], e, 'mouseout');
this._hoveredLayer = null;
}
},
_updateTransform : function(center, zoom) {
L.Canvas.prototype._updateTransform.call(this, center, zoom);
var scale = this._map.getZoomScale(zoom, this._zoom), position = L.DomUtil
.getPosition(this._container), viewHalf = this._map
.getSize().multiplyBy(0.5 + this.options.padding), currentCenterPoint = this._map
.project(this._center, zoom), destCenterPoint = this._map
.project(center, zoom), centerOffset = destCenterPoint
.subtract(currentCenterPoint),
topLeftOffset = viewHalf.multiplyBy(-scale).add(position).add(
viewHalf).subtract(centerOffset);
if (L.Browser.any3d) {
L.DomUtil.setTransform(this._containerText, topLeftOffset,
scale);
} else {
L.DomUtil.setPosition(this._containerText, topLeftOffset);
}
},
_initContainer : function(options) {
L.Canvas.prototype._initContainer.call(this);
this._containerText = document.createElement('canvas');
L.DomEvent.on(this._containerText, 'mousemove',
L.Util.throttle(this._onMouseMove, 32, this), this).on(
this._containerText,
'click dblclick mousedown mouseup contextmenu',
this._onClick, this).on(this._containerText,
'mouseout', this._handleMouseOut, this);
this._ctxLabel = this._containerText.getContext('2d');
L.DomUtil
.addClass(this._containerText, 'leaflet-zoom-animated');
this.getPane().appendChild(this._containerText);
},
_update : function() {
// textList
this._textList = [];
L.Renderer.prototype._update.call(this);
var b = this._bounds, container = this._containerText, size = b
.getSize(), m = L.Browser.retina ? 2 : 1;
L.DomUtil.setPosition(container, b.min);
// set canvas size (also clearing it); use double size on retina
container.width = m * size.x;
container.height = m * size.y;
container.style.width = size.x + 'px';
container.style.height = size.y + 'px';
// display text on the whole surface
container.style.zIndex = '4';
this._container.style.zIndex = '3';
if (L.Browser.retina) {
this._ctxLabel.scale(2, 2);
}
// translate so we use the same path coordinates after canvas
// element moves
this._ctxLabel.translate(-b.min.x, -b.min.y);
L.Canvas.prototype._update.call(this);
},
_updatePoly : function(layer, closed) {
L.Canvas.prototype._updatePoly.call(this, layer, closed);
this._text(this._ctxLabel, layer);
},
_updateCircle : function(layer) {
L.Canvas.prototype._updateCircle.call(this, layer);
this._text(this._ctxLabel, layer);
},
_text : function(ctx, layer) {
if (layer.options.text != undefined) {
ctx.globalAlpha = 1;
var p = layer._point;
var textPoint;
if (p == undefined) {
// polygon or polyline
if (layer._parts.length == 0
|| layer._parts[0].length == 0) {
return;
}
p = this._getCenter(layer._parts[0]);
}
// label bounds offset
var offsetX = 0;
var offsetY = 0;
/**
* TODO setting for custom font
*/
ctx.lineWidth = 4.0;
ctx.font = "16px 'Meiryo'";
// Collision detection
var textWidth = (ctx.measureText(layer.options.text).width)
+ p.x;// + offsetX;
var textHeight = p.y + offsetY + 20;
var bounds = L.bounds(
L.point(p.x + offsetX, p.y + offsetY), L.point(
textWidth, textHeight));
if (this.options.collisionFlg) {
for ( var index in this._textList) {
var pointBounds = this._textList[index];
if (pointBounds.intersects(bounds)) {
return;
}
}
}
this._textList.push(bounds);
ctx.strokeStyle = "white";
ctx.strokeText(layer.options.text, p.x + offsetX, p.y
+ offsetY);
if (layer.options.textColor == undefined) {
ctx.fillStyle = "blue";
} else {
ctx.fillStyle = layer.options.textColor;
}
ctx.fillText(layer.options.text, p.x + offsetX, p.y
+ offsetY);
}
},
_getCenter : function(points) {
var i, halfDist, segDist, dist, p1, p2, ratio, len = points.length;
if (!len) {
return null;
}
// polyline centroid algorithm; only uses the first ring if
// there are multiple
for (i = 0, halfDist = 0; i < len - 1; i++) {
halfDist += points[i].distanceTo(points[i + 1]) / 2;
}
// The line is so small in the current view that all points are
// on the same pixel.
if (halfDist === 0) {
return points[0];
}
for (i = 0, dist = 0; i < len - 1; i++) {
p1 = points[i];
p2 = points[i + 1];
segDist = p1.distanceTo(p2);
dist += segDist;
if (dist > halfDist) {
ratio = (dist - halfDist) / segDist;
var resutl = [ p2.x - ratio * (p2.x - p1.x),
p2.y - ratio * (p2.y - p1.y) ];
return L.point(resutl[0], resutl[1]);
}
}
},
});

269
assets/component/leaflet/L.Map.Sync.js

@ -0,0 +1,269 @@
/*
* Extends L.Map to synchronize the interaction on one map to one or more other maps.
*/
(function () {
var NO_ANIMATION = {
animate: false,
reset: true,
disableViewprereset: true
};
L.Sync = function () {};
/*
* Helper function to compute the offset easily.
*
* The arguments are relative positions with respect to reference and target maps of
* the point to sync. If you provide ratioRef=[0, 1], ratioTarget=[1, 0] will sync the
* bottom left corner of the reference map with the top right corner of the target map.
* The values can be less than 0 or greater than 1. It will sync points out of the map.
*/
L.Sync.offsetHelper = function (ratioRef, ratioTarget) {
var or = L.Util.isArray(ratioRef) ? ratioRef : [0.5, 0.5];
var ot = L.Util.isArray(ratioTarget) ? ratioTarget : [0.5, 0.5];
return function (center, zoom, refMap, targetMap) {
var rs = refMap.getSize();
var ts = targetMap.getSize();
var pt = refMap.project(center, zoom)
.subtract([(0.5 - or[0]) * rs.x, (0.5 - or[1]) * rs.y])
.add([(0.5 - ot[0]) * ts.x, (0.5 - ot[1]) * ts.y]);
return refMap.unproject(pt, zoom);
};
};
L.Map.include({
sync: function (map, options) {
this._initSync();
options = L.extend({
noInitialSync: false,
syncCursor: false,
syncCursorMarkerOptions: {
radius: 10,
fillOpacity: 0.3,
color: '#da291c',
fillColor: '#fff'
},
offsetFn: function (center, zoom, refMap, targetMap) {
// no transformation at all
return center;
}
}, options);
// prevent double-syncing the map:
if (this._syncMaps.indexOf(map) === -1) {
this._syncMaps.push(map);
this._syncOffsetFns[L.Util.stamp(map)] = options.offsetFn;
}
if (!options.noInitialSync) {
map.setView(
options.offsetFn(this.getCenter(), this.getZoom(), this, map),
this.getZoom(), NO_ANIMATION);
}
if (options.syncCursor) {
if (typeof map.cursor === 'undefined') {
map.cursor = L.circleMarker([0, 0], options.syncCursorMarkerOptions).addTo(map);
}
this._cursors.push(map.cursor);
this.on('mousemove', this._cursorSyncMove, this);
this.on('mouseout', this._cursorSyncOut, this);
}
// on these events, we should reset the view on every synced map
// dragstart is due to inertia
this.on('resize zoomend', this._selfSetView);
this.on('moveend', this._syncOnMoveend);
this.on('dragend', this._syncOnDragend);
return this;
},
// unsync maps from each other
unsync: function (map) {
var self = this;
if (this._cursors) {
this._cursors.forEach(function (cursor, indx, _cursors) {
if (cursor === map.cursor) {
_cursors.splice(indx, 1);
}
});
}
// TODO: hide cursor in stead of moving to 0, 0
if (map.cursor) {
map.cursor.setLatLng([0, 0]);
}
if (this._syncMaps) {
this._syncMaps.forEach(function (synced, id) {
if (map === synced) {
delete self._syncOffsetFns[L.Util.stamp(map)];
self._syncMaps.splice(id, 1);
}
});
}
if (!this._syncMaps || this._syncMaps.length == 0) {
// no more synced maps, so these events are not needed.
this.off('resize zoomend', this._selfSetView);
this.off('moveend', this._syncOnMoveend);
this.off('dragend', this._syncOnDragend);
}
return this;
},
// Checks if the map is synced with anything or a specifyc map
isSynced: function (otherMap) {
var has = (this.hasOwnProperty('_syncMaps') && Object.keys(this._syncMaps).length > 0);
if (has && otherMap) {
// Look for this specific map
has = false;
this._syncMaps.forEach(function (synced) {
if (otherMap == synced) { has = true; }
});
}
return has;
},
// Callbacks for events...
_cursorSyncMove: function (e) {
this._cursors.forEach(function (cursor) {
cursor.setLatLng(e.latlng);
});
},
_cursorSyncOut: function (e) {
this._cursors.forEach(function (cursor) {
// TODO: hide cursor in stead of moving to 0, 0
cursor.setLatLng([0, 0]);
});
},
_selfSetView: function (e) {
// reset the map, and let setView synchronize the others.
this.setView(this.getCenter(), this.getZoom(), NO_ANIMATION);
},
_syncOnMoveend: function (e) {
if (this._syncDragend) {
// This is 'the moveend' after the dragend.
// Without inertia, it will be right after,
// but when inertia is on, we need this to detect that.
this._syncDragend = false; // before calling setView!
this._selfSetView(e);
this._syncMaps.forEach(function (toSync) {
toSync.fire('moveend');
});
}
},
_syncOnDragend: function (e) {
// It is ugly to have state, but we need it in case of inertia.
this._syncDragend = true;
},
// overload methods on originalMap to replay interactions on _syncMaps;
_initSync: function () {
if (this._syncMaps) {
return;
}
var originalMap = this;
this._syncMaps = [];
this._cursors = [];
this._syncOffsetFns = {};
L.extend(originalMap, {
setView: function (center, zoom, options, sync) {
// Use this sandwich to disable and enable viewprereset
// around setView call
function sandwich (obj, fn) {
var viewpreresets = [];
var doit = options && options.disableViewprereset && obj && obj._events;
if (doit) {
// The event viewpreresets does an invalidateAll,
// that reloads all the tiles.
// That causes an annoying flicker.
viewpreresets = obj._events.viewprereset;
obj._events.viewprereset = [];
}
var ret = fn(obj);
if (doit) {
// restore viewpreresets event to its previous values
obj._events.viewprereset = viewpreresets;
}
return ret;
}
// Looks better if the other maps 'follow' the active one,
// so call this before _syncMaps
var ret = sandwich(this, function (obj) {
return L.Map.prototype.setView.call(obj, center, zoom, options);
});
if (!sync) {
originalMap._syncMaps.forEach(function (toSync) {
sandwich(toSync, function (obj) {
return toSync.setView(
originalMap._syncOffsetFns[L.Util.stamp(toSync)](center, zoom, originalMap, toSync),
zoom, options, true);
});
});
}
return ret;
},
panBy: function (offset, options, sync) {
if (!sync) {
originalMap._syncMaps.forEach(function (toSync) {
toSync.panBy(offset, options, true);
});
}
return L.Map.prototype.panBy.call(this, offset, options);
},
_onResize: function (event, sync) {
if (!sync) {
originalMap._syncMaps.forEach(function (toSync) {
toSync._onResize(event, true);
});
}
return L.Map.prototype._onResize.call(this, event);
},
_stop: function (sync) {
L.Map.prototype._stop.call(this);
if (!sync) {
originalMap._syncMaps.forEach(function (toSync) {
toSync._stop(true);
});
}
}
});
originalMap.dragging._draggable._updatePosition = function () {
L.Draggable.prototype._updatePosition.call(this);
var self = this;
originalMap._syncMaps.forEach(function (toSync) {
L.DomUtil.setPosition(toSync.dragging._draggable._element, self._newPos);
toSync.eachLayer(function (layer) {
if (layer._google !== undefined) {
var offsetFn = originalMap._syncOffsetFns[L.Util.stamp(toSync)];
var center = offsetFn(originalMap.getCenter(), originalMap.getZoom(), originalMap, toSync);
layer._google.setCenter(center);
}
});
toSync.fire('move');
});
};
}
});
})();

95
assets/component/leaflet/L.TileLayer.BetterWMS.js

@ -0,0 +1,95 @@
L.TileLayer.BetterWMS = L.TileLayer.WMS.extend({
onAdd: function (map) {
// Triggered when the layer is added to a map.
// Register a click listener, then do all the upstream WMS things
L.TileLayer.WMS.prototype.onAdd.call(this, map);
map.on('click', this.getFeatureInfo, this);
},
onRemove: function (map) {
// Triggered when the layer is removed from a map.
// Unregister a click listener, then do all the upstream WMS things
L.TileLayer.WMS.prototype.onRemove.call(this, map);
map.off('click', this.getFeatureInfo, this);
},
/*
getFeatureInfo: function (evt) {
// Make an AJAX request to the server and hope for the best
var url = this.getFeatureInfoUrl(evt.latlng),
showResults = L.Util.bind(this.showGetFeatureInfo, this);
$.ajax({
url: url,
success: function (data, status, xhr) {
var err = typeof data === 'string' ? null : data;
showResults(err, evt.latlng, data);
},
error: function (xhr, status, error) {
showResults(error);
}
});
},
*/
getFeatureInfo: function (evt) {
// Make an AJAX request to the server and hope for the best
var url = this.getFeatureInfoUrl(evt.latlng),
showResults = L.Util.bind(this.showGetFeatureInfo, this);
$.ajax({
url: url,
success: function (data, status, xhr) {
var err = typeof data === 'string' ? null : data;
//Fix for blank popup window
var doc = (new DOMParser()).parseFromString(data, "text/html");
if (doc.body.innerHTML.trim().length > 0)
showResults(err, evt.latlng, data);
},
error: function (xhr, status, error) {
showResults(error);
}
});
},
getFeatureInfoUrl: function (latlng) {
// Construct a GetFeatureInfo request URL given a point
var point = this._map.latLngToContainerPoint(latlng, this._map.getZoom()),
size = this._map.getSize(),
params = {
request: 'GetFeatureInfo',
service: 'WMS',
srs: 'EPSG:4326',
styles: this.wmsParams.styles,
transparent: this.wmsParams.transparent,
version: this.wmsParams.version,
format: this.wmsParams.format,
bbox: this._map.getBounds().toBBoxString(),
height: size.y,
width: size.x,
layers: this.wmsParams.layers,
query_layers: this.wmsParams.layers,
info_format: 'text/html'
};
params[params.version === '1.3.0' ? 'i' : 'x'] = point.x;
params[params.version === '1.3.0' ? 'j' : 'y'] = point.y;
return this._url + L.Util.getParamString(params, this._url, true);
},
showGetFeatureInfo: function (err, latlng, content) {
if (err) { console.log(err); return; } // do nothing if there's an error
// Otherwise show the content in a popup, or something.
L.popup({ maxWidth: 800})
.setLatLng(latlng)
.setContent(content)
.openOn(this._map);
}
});
L.tileLayer.betterWms = function (url, options) {
return new L.TileLayer.BetterWMS(url, options);
};

BIN
assets/component/leaflet/Leaflet.defaultextent-master.zip

File binario non mostrato.

131
assets/component/leaflet/accordion/L.Control.AccordionLegend.css

@ -0,0 +1,131 @@
.leaflet-control-accordionlegend-panel,.leaflet-control-accordionlegend-button {
color: #444 !important;
box-shadow: 0px 1px 5px rgba(0,0,0,0.65);
border-radius:3px;
font-weight: bold;
background-color:white;
border-radius:3px;
}
.leaflet-control-accordionlegend-button {
cursor:pointer;
padding: 0.25em .75em 0.25em .75em;
font-size:13px;
line-height: 2.3;
}
.leaflet-control-accordionlegend-panel-hidden,
.leaflet-control-accordionlegend-panel div.accordionlegend-section-hidden,
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer div.accordionlegend-legend-hidden
{
display:none !important;
}
.leaflet-control-accordionlegend-panel {
padding: 0.25em .75em 0.25em .75em;
font-size:13px;
max-height:75%; /* actual maxHeight is set in resize handler code */
overflow:auto;
}
.leaflet-control-accordionlegend-panel label {
cursor:pointer;
}
.leaflet-control-accordionlegend-panel h2 {
font-weight:bold;
font-size:15px;
white-space:nowrap;
cursor:pointer;
padding:0 1em 0 0;
margin:0;
}
.leaflet-control-accordionlegend-panel h2 i {
margin-right:0.5em;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section {
margin-left:2em;
font-weight:normal;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer {
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer label {
white-space:nowrap;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer div.accordionlegend-legend {
margin-left:1.5em;
font-weight:normal;
margin-bottom:1em;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer div.accordionlegend-legend div.accordionlegend-slider {
margin-bottom:0.75em;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer div.accordionlegend-legend div.accordionlegend-classification {
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer div.accordionlegend-swatch {
display:inline-block;
width:1em;
height:1em;
vertical-align:text-top;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer img.accordionlegend-swatch {
display:inline;
width:1em;
height:1em;
vertical-align:text-top;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer label > div.accordionlegend-swatch {
margin-left:0.5em;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer label > img.accordionlegend-swatch {
margin-left:0.5em;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer div.accordionlegend-swatch.accordionlegend-swatch-circle {
border-radius:50%;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer div.accordionlegend-swatch.accordionlegend-swatch-line {
height: 0.25em;
margin-top: 0.5em;
}
.leaflet-control-accordionlegend-panel div.accordionlegend-section div.accordionlegend-layer div.accordionlegend-swatch-text {
display: inline-block;
margin-left: 0.5em;
}
.leaflet-control-accordionlegend-panel .noUi-horizontal {
height: 8px;
}
.leaflet-control-accordionlegend-panel .noUi-horizontal .noUi-handle {
width: 16px;
height: 16px;
left: -8px;
top: -6px;
}
.leaflet-control-accordionlegend-panel .noUi-handle {
border-radius: 50%;
}
.leaflet-control-accordionlegend-panel .noUi-handle:after, .leaflet-control-accordionlegend-panel .noUi-handle:before {
width: 0;
}

337
assets/component/leaflet/accordion/L.Control.AccordionLegend.js

@ -0,0 +1,337 @@
/*
* https://github.com/GreenInfo-Network/L.Control.AccordionLegend
*/
L.Control.AccordionLegend = L.Control.extend({
options: {
position: 'topleft',
title: 'Map Layers'
},
initialize: function(options) {
if (! options.content || ! Array.isArray(options.content) ) throw "L.Control.AccordionLegend: missing content list";
L.setOptions(this,options);
this.map = null; // linkage to our containing L.Map instance
},
onAdd: function (map) {
// add a linkage to the map, since we'll be managing map layers
// and initialize our local registries of buttons, checkboxes, etc. for random access later
var control = this;
control.map = map;
control.layerRegistry = {};
control.checkboxRegistry = {};
control.titlebarRegistry = {};
control.legendRegistry = {};
// first and foremost
// we need to in fact create the L.TileLayer.WMS instances!
this.options.content.forEach(function (section) {
section.layers.forEach(function (layer) {
control.layerRegistry[layer.title] = layer.layer;
});
});
// okay
// now we're good to start building the control
// create our main container; the real action is inside the button and the panel, but they share this parent container
var maindiv = L.DomUtil.create('div', 'leaflet-control-accordionlegend');
// first, the button
var button = L.DomUtil.create('div', 'leaflet-control-accordionlegend-button', maindiv);
button.control = this;
button.innerHTML = this.options.title;
L.DomEvent
.addListener(button, 'mousedown', L.DomEvent.stopPropagation)
.addListener(button, 'click', L.DomEvent.stopPropagation)
.addListener(button, 'click', L.DomEvent.preventDefault)
.addListener(button, 'click', function () {
this.control.toggleUI();
});
// the panel
// iterate over the accordion sections...
// then iterate over layers within the section, generating both the map's L.TileLayer and also the legend entry with colored swatches and all
var panel = L.DomUtil.create('div', 'leaflet-control-accordionlegend-panel', maindiv);
panel.control = this;
var sections = [];
this.options.content.forEach(function (section) {
// part 1
// the title and toggle behavior, which itself is more complicated than it should be cuz of the toggling triangles
// the 'sectitle' title bars get logged into titlebarRegistry
// this is a mapping of name => [titlebar,div] and is used to random-access so one can toggle a section by name
var sectitle = L.DomUtil.create('h2', 'accordionlegend-section-title', panel);
var triangle = L.DomUtil.create('i', '+', sectitle);
var title = L.DomUtil.create('span', '', sectitle);
title.innerHTML = section.title;
var secdiv = L.DomUtil.create('div', 'accordionlegend-section accordionlegend-section-hidden', panel);
control.titlebarRegistry[section.title] = [ sectitle, secdiv, triangle ];
L.DomEvent
.addListener(sectitle, 'mousedown', L.DomEvent.stopPropagation)
.addListener(sectitle, 'click', L.DomEvent.stopPropagation)
.addListener(sectitle, 'click', L.DomEvent.preventDefault)
.addListener(sectitle, 'click', function () {
control.toggleSection(section.title);
});
L.DomEvent
.addListener(secdiv, 'mousedown', L.DomEvent.stopPropagation)
.addListener(secdiv, 'click', L.DomEvent.stopPropagation);
// part 2
// the 'secdiv' content of the layer-legends and layer-checkboxes
// keep a registry of checkboxes, cuz toggleLayer() will need random access to them
section.layers.forEach(function (layer) {
var layerdiv = L.DomUtil.create('div', 'accordionlegend-layer', secdiv);
var clbl = L.DomUtil.create('label', '', layerdiv);
var cbox = L.DomUtil.create('input', '', clbl);
cbox.type = 'checkbox';
cbox.value = layer.title;
// the text label (the layer title) for the checkbox
// if we have only 1 legend entry with no 'text', this includes an inline legend
// otherwise, it's just the layer title and the legend happens below inside the toggle-able legend DIV
var swatch;
if (layer.legend.length == 1 && ! layer.legend[0].text) {
var classification = layer.legend[0];
switch (classification.type) {
case 'circle':
swatch = L.DomUtil.create('div', 'accordionlegend-swatch accordionlegend-swatch-inline', clbl);
swatch.style.backgroundColor = classification.color;
L.DomUtil.addClass(swatch, 'accordionlegend-swatch-circle');
break;
case 'square':
swatch = L.DomUtil.create('div', 'accordionlegend-swatch accordionlegend-swatch-inline', clbl);
swatch.style.backgroundColor = classification.color;
break;
case 'line':
swatch = L.DomUtil.create('div', 'accordionlegend-swatch', clbl);
swatch.style.backgroundColor = classification.color;
L.DomUtil.addClass(swatch, 'accordionlegend-swatch-line');
break;
case 'image':
swatch = L.DomUtil.create('img', 'accordionlegend-swatch accordionlegend-swatch-inline', clbl);
swatch.src = classification.url;
break;
default:
console.error("L.Control.AccordionLegend unknown legend type: " + classification.type);
}
}
// the checkbox's label as usual, whether there was an inline legend or not
var ctxt = L.DomUtil.create('span', '', clbl);
ctxt.innerHTML = ' ' + layer.title;
control.checkboxRegistry[layer.title] = cbox; // the checkbox registry for toggleLayer()
var legend = L.DomUtil.create('div', 'accordionlegend-legend accordionlegend-legend-hidden', layerdiv);
control.legendRegistry[layer.title] = legend;
var startingOpacity = layer.type == 'point' ? 100 : 66;
var slider = L.DomUtil.create('input', 'accordionlegend-slider', legend);
slider.type = 'range';
slider.min = '0';
slider.max = '100';
slider.title = 'Adjust the layer opacity';
slider.value = layer.layer.options.opacity ? 100 * layer.layer.options.opacity : 100;
L.DomEvent.addListener(slider, 'change', function() {
var opacity = 0.01 * this.value;
control.setOpacity(layer.title,opacity);
});
L.DomEvent.addListener(cbox, 'change', function () {
var layername = this.value;
var onoff = this.checked;
control.toggleLayer(layername,onoff);
});
// now construct the legend
// if there's only 1 legend entry and it has no 'text' then use an inline legend instead
if (layer.legend.length > 1 || (layer.legend.length == 1 && layer.legend[0].text)) {
layer.legend.forEach(function (classification) {
var swatch;
var swatchline = L.DomUtil.create('div', 'accordionlegend-classification', legend);
switch (classification.type) {
case 'circle':
swatch = L.DomUtil.create('div', 'accordionlegend-swatch', swatchline);
swatch.style.backgroundColor = classification.color;
L.DomUtil.addClass(swatch, 'accordionlegend-swatch-circle');
break;
case 'square':
swatch = L.DomUtil.create('div', 'accordionlegend-swatch', swatchline);
swatch.style.backgroundColor = classification.color;
break;
case 'line':
swatch = L.DomUtil.create('div', 'accordionlegend-swatch', swatchline);
swatch.style.backgroundColor = classification.color;
L.DomUtil.addClass(swatch, 'accordionlegend-swatch-line');
break;
case 'image':
swatch = L.DomUtil.create('img', 'accordionlegend-swatch', swatchline);
swatch.src = classification.url;
break;
default:
console.error("L.Control.AccordionLegend unknown legend type: " + classification.type);
}
var text = L.DomUtil.create('div', 'accordionlegend-swatch-text', swatchline);
text.innerHTML = classification.text;
});
}
});
sections.push(secdiv);
});
// assign all our buttons, panels, and DIVs where we can find them later
// by "later" we mean a few lines below whrere we do final cleanup work
this.maindiv = maindiv;
this.button = button;
this.panel = panel;
// panel afterthought: on window resize try and make the panel have a height no more than 75% of the window height, to reduce the likelihood of over-length content pushing it past the bottom of the screen
// 75% is a wild guess at a height that won't overflow past the bottom: an exact height depends on headers and footers, font sizes, ...
var handleResize = function () {
control.panel.style.maxHeight = (0.75 * window.innerHeight)+'px';
};
L.DomEvent.addListener(window, 'resize', handleResize);
handleResize();
// collapse the UI
// and trigger a section now so as to update the + and - signs on the sections
this.collapseUI();
this.expandSection(sections[0].title);
// and we're done!
return maindiv;
},
toggleLayer: function (layername,onoff) {
var map = this.map;
var layer = this.layerRegistry[layername];
var legend = this.legendRegistry[layername];
var cbox = this.checkboxRegistry[layername];
if (onoff) {
cbox.checked = true;
map.addLayer(layer);
L.DomUtil.removeClass(legend, 'accordionlegend-legend-hidden');
}
else {
cbox.checked = false;
map.removeLayer(layer);
L.DomUtil.addClass(legend, 'accordionlegend-legend-hidden');
}
// return myself cuz method chaining is awesome
return this;
},
listLayersStates: function () {
var layerStates = {};
var map = this.map;
var layerRegistry = this.layerRegistry;
// returns assoc: layername => opacity/false
Object.keys(this.layerRegistry).forEach(function (layername) {
layerStates[layername] = map.hasLayer(layerRegistry[layername]) ? Math.round(100*layerRegistry[layername].options.opacity) : false;
});
return layerStates;
},
setOpacity: function (layername,opacity) {
var layer = this.layerRegistry[layername];
layer.setOpacity(opacity);
// return myself cuz method chaining is awesome
return this;
},
toggleUI: function () {
var viz = L.DomUtil.hasClass(this.panel, 'leaflet-control-accordionlegend-panel-hidden');
if (viz) {
this.expandUI();
}
else {
this.collapseUI();
}
// return myself cuz method chaining is awesome
return this;
},
expandSection: function (sectionname) {
// collapse all section and expand the selected one
// if the expanded one doesn't match e.g. "" or null or some such, then expanding nothing is a useful outcome
var control = this;
Object.keys(this.titlebarRegistry).forEach(function (thistitle) {
var sectitle = control.titlebarRegistry[thistitle][0];
var secdiv = control.titlebarRegistry[thistitle][1];
var triangle = control.titlebarRegistry[thistitle][2];
if (sectionname === thistitle) {
L.DomUtil.removeClass(secdiv, 'accordionlegend-section-hidden');
triangle.innerHTML = '-';
}
else {
L.DomUtil.addClass(secdiv, 'accordionlegend-section-hidden');
triangle.innerHTML = '+';
}
});
// return myself cuz method chaining is awesome
return this;
},
collapseSection: function (sectionname) {
var control = this;
Object.keys(this.titlebarRegistry).forEach(function (thistitle) {
if (sectionname !== thistitle) return; // not the one we want, not interested
// collapse this section, plain and simple
var sectitle = control.titlebarRegistry[sectionname][0];
var secdiv = control.titlebarRegistry[sectionname][1];
var triangle = control.titlebarRegistry[sectionname][2];
L.DomUtil.addClass(secdiv, 'accordionlegend-section-hidden');
triangle.innerHTML = '+';
});
// return myself cuz method chaining is awesome
return this;
},
toggleSection: function (sectionname) {
var control = this;
Object.keys(this.titlebarRegistry).forEach(function (thistitle) {
if (sectionname !== thistitle) return; // not the one we want, not interested
// now we've found the section, the titlebar, etc.
// and can decide whether we really wanted collapseSection() or expandSection()
var secdiv = control.titlebarRegistry[thistitle][1];
var hidden = L.DomUtil.hasClass(secdiv, 'accordionlegend-section-hidden');
if (hidden) {
control.expandSection(sectionname);
}
else {
control.collapseSection(sectionname);
}
});
// return myself cuz method chaining is awesome
return this;
},
collapseUI: function () {
// add the CSS which hides the legend panel
L.DomUtil.addClass(this.panel,'leaflet-control-accordionlegend-panel-hidden');
// return myself cuz method chaining is awesome
return this;
},
expandUI: function (sectionname) {
// add the CSS which hides the legend panel
L.DomUtil.removeClass(this.panel,'leaflet-control-accordionlegend-panel-hidden');
// if a section name was given, then toggle the accordion to open that section
if (sectionname) this.expandSection(sectionname);
// return myself cuz method chaining is awesome
return this;
}
});

1
assets/component/leaflet/basemap/L.Control.Basemaps-min.js vendored

@ -0,0 +1 @@
L.Control.Basemaps=L.Control.extend({_map:null,includes:L.Evented?L.Evented.prototype:L.Mixin.Event,options:{position:"bottomright",tileX:0,tileY:0,tileZ:0,layers:[]},basemap:null,onAdd:function(e){this._map=e;var t=L.DomUtil.create("div","basemaps leaflet-control closed");return L.DomEvent.disableClickPropagation(t),L.Browser.touch||L.DomEvent.disableScrollPropagation(t),this.options.basemaps.forEach(function(s,o){var a,i="basemap";if(0===o?(this.basemap=s,this._map.addLayer(s),i+=" active"):1===o&&(i+=" alt"),s.options.iconURL)a=s.options.iconURL;else{var l={x:this.options.tileX,y:this.options.tileY};if(a=L.Util.template(s._url,L.extend({s:s._getSubdomain(l),x:l.x,y:s.options.tms?s._globalTileRange.max.y-l.y:l.y,z:this.options.tileZ},s.options)),s instanceof L.TileLayer.WMS){s._map=e;var n=s.options.crs||e.options.crs,r=L.extend({},s.wmsParams),m=parseFloat(r.version);r[m>=1.3?"crs":"srs"]=n.code;var p=L.point(l);p.z=this.options.tileZ;var c=s._tileCoordsToBounds(p),d=n.project(c.getNorthWest()),h=n.project(c.getSouthEast()),v=(m>=1.3&&n===L.CRS.EPSG4326?[h.y,d.x,d.y,h.x]:[d.x,h.y,h.x,d.y]).join(",");a+=L.Util.getParamString(r,a,s.options.uppercase)+(s.options.uppercase?"&BBOX=":"&bbox=")+v}}var b=L.DomUtil.create("div",i,t),u=L.DomUtil.create("img",null,b);u.src=a,s.options&&s.options.label&&(u.title=s.options.label),L.DomEvent.on(b,"click",function(){if(this.options.basemaps.length>2&&L.Browser.mobile&&L.DomUtil.hasClass(t,"closed"))L.DomUtil.removeClass(t,"closed");else if(s!=this.basemap){e.removeLayer(this.basemap),e.addLayer(s),s.bringToBack(),e.fire("baselayerchange",s),this.basemap=s,L.DomUtil.removeClass(t.getElementsByClassName("basemap active")[0],"active"),L.DomUtil.addClass(b,"active");var a=(o+1)%this.options.basemaps.length;L.DomUtil.removeClass(t.getElementsByClassName("basemap alt")[0],"alt"),L.DomUtil.addClass(t.getElementsByClassName("basemap")[a],"alt"),L.DomUtil.addClass(t,"closed")}},this)},this),this.options.basemaps.length>2&&!L.Browser.mobile&&(L.DomEvent.on(t,"mouseenter",function(){L.DomUtil.removeClass(t,"closed")},this),L.DomEvent.on(t,"mouseleave",function(){L.DomUtil.addClass(t,"closed")},this)),this._container=t,this._container}}),L.control.basemaps=function(e){return new L.Control.Basemaps(e)};

28
assets/component/leaflet/basemap/L.Control.Basemaps.css

@ -0,0 +1,28 @@
.basemaps {
padding: 4px;
}
.basemaps.closed .basemap {
display: none;
}
.basemaps.closed .basemap.alt {
display: inline-block;
}
.basemaps.closed .basemap.alt h4 {
display: none;
}
.basemap {
display: inline-block; /* todo: flexbox? */
cursor: pointer;
}
.basemap.active img {
border-color: orange;
box-shadow: 2px 2px 4px #000;
}
.basemap img {
width: 64px;
border: 2px solid #FFF;
margin: 0 2px;
border-radius: 40px;
box-shadow: 0 1px 5px rgba(0,0,0,0.65)
}

150
assets/component/leaflet/basemap/L.Control.Basemaps.js

@ -0,0 +1,150 @@
L.Control.Basemaps = L.Control.extend({
_map: null,
includes: L.Evented ? L.Evented.prototype : L.Mixin.Event,
options: {
position: "bottomleft",
tileX: 0,
tileY: 0,
tileZ: 0,
layers: [] // list of basemap layer objects, first in list is default and added to map with this control
},
basemap: null,
onAdd: function(map) {
this._map = map;
var container = L.DomUtil.create("div", "basemaps leaflet-control closed");
// disable events
L.DomEvent.disableClickPropagation(container);
if (!L.Browser.touch) {
L.DomEvent.disableScrollPropagation(container);
}
this.options.basemaps.forEach(function(d, i) {
var basemapClass = "basemap";
if (i === 0) {
this.basemap = d;
this._map.addLayer(d);
basemapClass += " active";
} else if (i === 1) {
basemapClass += " alt";
}
var url;
if (d.options.iconURL) {
url = d.options.iconURL;
} else {
var coords = { x: this.options.tileX, y: this.options.tileY };
url = L.Util.template(
d._url,
L.extend(
{
s: d._getSubdomain(coords),
x: coords.x,
y: d.options.tms ? d._globalTileRange.max.y - coords.y : coords.y,
z: this.options.tileZ
},
d.options
)
);
if (d instanceof L.TileLayer.WMS) {
// d may not yet be initialized, yet functions below expect ._map to be set
d._map = map;
// unfortunately, calling d.getTileUrl() does not work due to scope issues
// have to replicate some of the logic from L.TileLayer.WMS
// adapted from L.TileLayer.WMS::onAdd
var crs = d.options.crs || map.options.crs;
var wmsParams = L.extend({}, d.wmsParams);
var wmsVersion = parseFloat(wmsParams.version);
var projectionKey = wmsVersion >= 1.3 ? "crs" : "srs";
wmsParams[projectionKey] = crs.code;
// adapted from L.TileLayer.WMS::getTileUrl
var coords2 = L.point(coords);
coords2.z = this.options.tileZ;
var tileBounds = d._tileCoordsToBounds(coords2);
var nw = crs.project(tileBounds.getNorthWest());
var se = crs.project(tileBounds.getSouthEast());
var bbox = (wmsVersion >= 1.3 && crs === L.CRS.EPSG4326
? [se.y, nw.x, nw.y, se.x]
: [nw.x, se.y, se.x, nw.y]
).join(",");
url +=
L.Util.getParamString(wmsParams, url, d.options.uppercase) +
(d.options.uppercase ? "&BBOX=" : "&bbox=") +
bbox;
}
}
var basemapNode = L.DomUtil.create("div", basemapClass, container);
var imgNode = L.DomUtil.create("img", null, basemapNode);
imgNode.src = url;
if (d.options && d.options.label) {
imgNode.title = d.options.label;
}
L.DomEvent.on(
basemapNode,
"click",
function() {
// intercept open click on mobile devices and show options
if (this.options.basemaps.length > 2 && L.Browser.mobile) {
if (L.DomUtil.hasClass(container, "closed")) {
L.DomUtil.removeClass(container, "closed");
return;
}
}
//if different, remove previous basemap, and add new one
if (d != this.basemap) {
map.removeLayer(this.basemap);
map.addLayer(d);
d.bringToBack();
map.fire("baselayerchange", d);
this.basemap = d;
L.DomUtil.removeClass(container.getElementsByClassName("basemap active")[0], "active");
L.DomUtil.addClass(basemapNode, "active");
var altIdx = (i + 1) % this.options.basemaps.length;
L.DomUtil.removeClass(container.getElementsByClassName("basemap alt")[0], "alt");
L.DomUtil.addClass(container.getElementsByClassName("basemap")[altIdx], "alt");
L.DomUtil.addClass(container, "closed");
}
},
this
);
}, this);
if (this.options.basemaps.length > 2 && !L.Browser.mobile) {
L.DomEvent.on(
container,
"mouseenter",
function() {
L.DomUtil.removeClass(container, "closed");
},
this
);
L.DomEvent.on(
container,
"mouseleave",
function() {
L.DomUtil.addClass(container, "closed");
},
this
);
}
this._container = container;
return this._container;
}
});
L.control.basemaps = function(options) {
return new L.Control.Basemaps(options);
};

32
assets/component/leaflet/coord/Leaflet.Coordinates-0.1.5.css

@ -0,0 +1,32 @@
.leaflet-control-coordinates {
background-color: #D8D8D8;
background-color: rgba(255, 255, 255, .8);
cursor: pointer
}
.leaflet-control-coordinates,
.leaflet-control-coordinates .uiElement input {
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px
}
.leaflet-control-coordinates .uiElement {
margin: 4px
}
.leaflet-control-coordinates .uiElement .labelFirst {
margin-right: 4px
}
.leaflet-control-coordinates .uiHidden {
display: none
}
.leaflet-control-coordinates .uiElement.label {
color: inherit;
font-weight: inherit;
font-size: inherit;
padding: 0;
display: inherit
}

1
assets/component/leaflet/coord/Leaflet.Coordinates-0.1.5.ie.css

@ -0,0 +1 @@
.leaflet-control-coordinates{background-color:#D8D8D8}

2
assets/component/leaflet/coord/Leaflet.Coordinates-0.1.5.min.js vendored

File diff suppressed because one or more lines are too long

349
assets/component/leaflet/coord/Leaflet.Coordinates-0.1.5.src.js vendored

@ -0,0 +1,349 @@
/*
* L.Control.Coordinates is used for displaying current mouse coordinates on the map.
*/
L.Control.Coordinates = L.Control.extend({
options: {
position: 'bottomright',
//decimals used if not using DMS or labelFormatter functions
decimals: 4,
//decimalseperator used if not using DMS or labelFormatter functions
decimalSeperator: ".",
//label templates for usage if no labelFormatter function is defined
labelTemplateLat: "Lat: {y}",
labelTemplateLng: "Lng: {x}",
//label formatter functions
labelFormatterLat: undefined,
labelFormatterLng: undefined,
//switch on/off input fields on click
enableUserInput: true,
//use Degree-Minute-Second
useDMS: false,
//if true lat-lng instead of lng-lat label ordering is used
useLatLngOrder: false,
//if true user given coordinates are centered directly
centerUserCoordinates: true,
//leaflet marker type
markerType: L.marker,
//leaflet marker properties
markerProps: {}//,
//customLabelFcn: function(latLonObj, opts) { "Geohash: " + encodeGeoHash(latLonObj.lat, latLonObj.lng)} //optional default none
},
onAdd: function(map) {
this._map = map;
var className = 'leaflet-control-coordinates',
container = this._container = L.DomUtil.create('div', className),
options = this.options;
//label containers
this._labelcontainer = L.DomUtil.create("div", "uiElement label", container);
this._label = L.DomUtil.create("span", "labelFirst", this._labelcontainer);
//input containers
this._inputcontainer = L.DomUtil.create("div", "uiElement input uiHidden", container);
var xSpan, ySpan;
if (options.useLatLngOrder) {
ySpan = L.DomUtil.create("span", "", this._inputcontainer);
this._inputY = this._createInput("inputY", this._inputcontainer);
xSpan = L.DomUtil.create("span", "", this._inputcontainer);
this._inputX = this._createInput("inputX", this._inputcontainer);
} else {
xSpan = L.DomUtil.create("span", "", this._inputcontainer);
this._inputX = this._createInput("inputX", this._inputcontainer);
ySpan = L.DomUtil.create("span", "", this._inputcontainer);
this._inputY = this._createInput("inputY", this._inputcontainer);
}
xSpan.innerHTML = options.labelTemplateLng.replace("{x}", "");
ySpan.innerHTML = options.labelTemplateLat.replace("{y}", "");
L.DomEvent.on(this._inputX, 'keyup', this._handleKeypress, this);
L.DomEvent.on(this._inputY, 'keyup', this._handleKeypress, this);
//connect to mouseevents
map.on("mousemove", this._update, this);
map.on('dragstart', this.collapse, this);
map.whenReady(this._update, this);
this._showsCoordinates = true;
//wether or not to show inputs on click
if (options.enableUserInput) {
L.DomEvent.addListener(this._container, "click", this._switchUI, this);
}
return container;
},
/**
* Creates an input HTML element in given container with given classname
*/
_createInput: function(classname, container) {
var input = L.DomUtil.create("input", classname, container);
input.type = "text";
L.DomEvent.disableClickPropagation(input);
return input;
},
_clearMarker: function() {
this._map.removeLayer(this._marker);
},
/**
* Called onkeyup of input fields
*/
_handleKeypress: function(e) {
switch (e.keyCode) {
case 27: //Esc
this.collapse();
break;
case 13: //Enter
this._handleSubmit();
this.collapse();
break;
default: //All keys
this._handleSubmit();
break;
}
},
/**
* Called on each keyup except ESC
*/
_handleSubmit: function() {
var x = L.NumberFormatter.createValidNumber(this._inputX.value, this.options.decimalSeperator);
var y = L.NumberFormatter.createValidNumber(this._inputY.value, this.options.decimalSeperator);
if (x !== undefined && y !== undefined) {
var marker = this._marker;
if (!marker) {
marker = this._marker = this._createNewMarker();
marker.on("click", this._clearMarker, this);
}
var ll = new L.LatLng(y, x);
marker.setLatLng(ll);
marker.addTo(this._map);
if (this.options.centerUserCoordinates) {
this._map.setView(ll, this._map.getZoom());
}
}
},
/**
* Shows inputs fields
*/
expand: function() {
this._showsCoordinates = false;
this._map.off("mousemove", this._update, this);
L.DomEvent.addListener(this._container, "mousemove", L.DomEvent.stop);
L.DomEvent.removeListener(this._container, "click", this._switchUI, this);
L.DomUtil.addClass(this._labelcontainer, "uiHidden");
L.DomUtil.removeClass(this._inputcontainer, "uiHidden");
},
/**
* Creates the label according to given options and formatters
*/
_createCoordinateLabel: function(ll) {
var opts = this.options,
x, y;
if (opts.customLabelFcn) {
return opts.customLabelFcn(ll, opts);
}
if (opts.labelLng) {
x = opts.labelFormatterLng(ll.lng);
} else {
x = L.Util.template(opts.labelTemplateLng, {
x: this._getNumber(ll.lng, opts)
});
}
if (opts.labelFormatterLat) {
y = opts.labelFormatterLat(ll.lat);
} else {
y = L.Util.template(opts.labelTemplateLat, {
y: this._getNumber(ll.lat, opts)
});
}
if (opts.useLatLngOrder) {
return y + " " + x;
}
return x + " " + y;
},
/**
* Returns a Number according to options (DMS or decimal)
*/
_getNumber: function(n, opts) {
var res;
if (opts.useDMS) {
res = L.NumberFormatter.toDMS(n);
} else {
res = L.NumberFormatter.round(n, opts.decimals, opts.decimalSeperator);
}
return res;
},
/**
* Shows coordinate labels after user input has ended. Also
* displays a marker with popup at the last input position.
*/
collapse: function() {
if (!this._showsCoordinates) {
this._map.on("mousemove", this._update, this);
this._showsCoordinates = true;
var opts = this.options;
L.DomEvent.addListener(this._container, "click", this._switchUI, this);
L.DomEvent.removeListener(this._container, "mousemove", L.DomEvent.stop);
L.DomUtil.addClass(this._inputcontainer, "uiHidden");
L.DomUtil.removeClass(this._labelcontainer, "uiHidden");
if (this._marker) {
var m = this._createNewMarker(),
ll = this._marker.getLatLng();
m.setLatLng(ll);
var container = L.DomUtil.create("div", "");
var label = L.DomUtil.create("div", "", container);
label.innerHTML = this._ordinateLabel(ll);
var close = L.DomUtil.create("a", "", container);
close.innerHTML = "Remove";
close.href = "#";
var stop = L.DomEvent.stopPropagation;
L.DomEvent
.on(close, 'click', stop)
.on(close, 'mousedown', stop)
.on(close, 'dblclick', stop)
.on(close, 'click', L.DomEvent.preventDefault)
.on(close, 'click', function() {
this._map.removeLayer(m);
}, this);
m.bindPopup(container);
m.addTo(this._map);
this._map.removeLayer(this._marker);
this._marker = null;
}
}
},
/**
* Click callback for UI
*/
_switchUI: function(evt) {
L.DomEvent.stop(evt);
L.DomEvent.stopPropagation(evt);
L.DomEvent.preventDefault(evt);
if (this._showsCoordinates) {
//show textfields
this.expand();
} else {
//show coordinates
this.collapse();
}
},
onRemove: function(map) {
map.off("mousemove", this._update, this);
},
/**
* Mousemove callback function updating labels and input elements
*/
_update: function(evt) {
var pos = evt.latlng,
opts = this.options;
if (pos) {
pos = pos.wrap();
this._currentPos = pos;
this._inputY.value = L.NumberFormatter.round(pos.lat, opts.decimals, opts.decimalSeperator);
this._inputX.value = L.NumberFormatter.round(pos.lng, opts.decimals, opts.decimalSeperator);
this._label.innerHTML = this._createCoordinateLabel(pos);
}
},
_createNewMarker: function() {
return this.options.markerType(null, this.options.markerProps);
}
});
//constructor registration
L.control.coordinates = function(options) {
return new L.Control.Coordinates(options);
};
//map init hook
L.Map.mergeOptions({
coordinateControl: false
});
L.Map.addInitHook(function() {
if (this.options.coordinateControl) {
this.coordinateControl = new L.Control.Coordinates();
this.addControl(this.coordinateControl);
}
});
L.NumberFormatter = {
round: function(num, dec, sep) {
var res = L.Util.formatNum(num, dec) + "",
numbers = res.split(".");
if (numbers[1]) {
var d = dec - numbers[1].length;
for (; d > 0; d--) {
numbers[1] += "0";
}
res = numbers.join(sep || ".");
}
return res;
},
toDMS: function(deg) {
var d = Math.floor(Math.abs(deg));
var minfloat = (Math.abs(deg) - d) * 60;
var m = Math.floor(minfloat);
var secfloat = (minfloat - m) * 60;
var s = Math.round(secfloat);
if (s == 60) {
m++;
s = "00";
}
if (m == 60) {
d++;
m = "00";
}
if (s < 10) {
s = "0" + s;
}
if (m < 10) {
m = "0" + m;
}
var dir = "";
if (deg < 0) {
dir = "-";
}
return ("" + dir + d + "&deg; " + m + "' " + s + "''");
},
createValidNumber: function(num, sep) {
if (num && num.length > 0) {
var numbers = num.split(sep || ".");
try {
var numRes = Number(numbers.join("."));
if (isNaN(numRes)) {
return undefined;
}
return numRes;
} catch (e) {
return undefined;
}
}
return undefined;
}
};

38
assets/component/leaflet/coord_mobile/Gruntfile.js

@ -0,0 +1,38 @@
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
clean: ["dist"],
uglify: {
options: {
banner: '/* <%= pkg.name %>\n<%= pkg.homepage %>\nVersion: <%= pkg.version %> - Date: <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
dist: {
files: {
'dist/L.Control.MapCenterCoord.min.js': 'src/L.Control.MapCenterCoord.js'
}
}
},
cssmin: {
dist: {
files: {
'dist/L.Control.MapCenterCoord.min.css': 'src/L.Control.MapCenterCoord.css'
}
}
},
copy: {
icons: {
cwd: 'src/icons',
src: '**',
dest: 'dist/icons/',
expand: true
}
}
});
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.registerTask('default', ['clean', 'uglify', 'cssmin', 'copy']);
};

21
assets/component/leaflet/coord_mobile/L.Control.MapCenterCoord.css

@ -0,0 +1,21 @@
.leaflet-container .leaflet-control-mapcentercoord {
background-color: rgba(255, 255, 255, 0.8);
box-shadow: 0 0 5px #bbb;
padding: 0 10px;
margin: 0;
color: #333;
font: 13px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
font-weight: 700;
}
.leaflet-control-mapcentercoord-icon {
background: url(icons/MapCenterCoordIcon1.svg) 50% 50% no-repeat;
margin: -18px 0 0 -18px;
width: 36px;
height: 36px;
left: 50%;
top: 50%;
content: '';
display: block;
position: absolute;
z-index: -1;
}

222
assets/component/leaflet/coord_mobile/L.Control.MapCenterCoord.js

@ -0,0 +1,222 @@
L.Control.MapCenterCoord = L.Control.extend({
// Defaults
options: {
position: 'bottomright',
icon: true,
onMove: false,
template: '{y} | {x}', // https://en.wikipedia.org/wiki/ISO_6709
projected: false,
formatProjected: '#.##0,000',
latlngFormat: 'DD', // DD, DM, DMS
latlngDesignators: false,
latLngFormatter: undefined
},
onAdd: function (map) {
if (this.options.icon) {
// create a DOM element and put it into overlayPane
this._iconEl = L.DomUtil.create('div', 'leaflet-control-mapcentercoord-icon leaflet-zoom-hide');
map.getPanes().overlayPane.appendChild(this._iconEl);
// add a viewreset event listener for updating icon's position
map.on('viewreset', this._onReset, this);
this._onReset();
}
// Control container
this._container = L.DomUtil.create('div', 'leaflet-control-mapcentercoord');
L.DomEvent.disableClickPropagation(this._container);
// Add events listeners for updating coordinates & icon's position
map.on('move', this._onMapMove, this);
map.on('moveend', this._onMapMoveEnd, this);
this._container.innerHTML = this._getMapCenterCoord();
return this._container;
},
onRemove: function (map) {
// remove icon's DOM elements and listeners
if (this.options.icon) {
map.getPanes().overlayPane.removeChild(this._iconEl);
map.off('viewreset', this._onReset, this);
}
map.off('move', this._onMapMove, this);
map.off('moveend', this._onMapMove, this);
},
_onReset: function (e) {
// update icon's position
var pos = this._map.latLngToLayerPoint(this._map.getCenter());
L.DomUtil.setPosition(this._iconEl, pos);
},
_onMapMove: function (e) {
if (this.options.icon) {
// update icon's position
var pos = this._map.latLngToLayerPoint(this._map.getCenter());
L.DomUtil.setPosition(this._iconEl, pos);
}
if (this.options.onMove) {
// update coordinates
this._container.innerHTML = this._getMapCenterCoord();
}
},
_onMapMoveEnd: function (e) {
if (this.options.icon) {
// update icon's position
var pos = this._map.latLngToLayerPoint(this._map.getCenter());
L.DomUtil.setPosition(this._iconEl, pos);
}
// update coordinates
this._container.innerHTML = this._getMapCenterCoord();
},
_getMapCenterCoord: function () {
if (this.options.projected) return this._getProjectedCoord(this._map.options.crs.project(this._map.getCenter()));
return this._getLatLngCoord(this._map.getCenter());
},
_getProjectedCoord: function (center) {
return L.Util.template(this.options.template, {
x: this._format(this.options.formatProjected, center.x),
y: this._format(this.options.formatProjected, center.y)
});
},
_getLatLngCoord: function (center) {
if (this.options.latLngFormatter != undefined) return this.options.latLngFormatter(center.lat, center.lng);
var lat, lng, deg, min;
//make a copy of center so we aren't affecting leaflet's internal state
var centerCopy = {
lat: center.lat,
lng: center.lng
};
// 180 degrees & negative
if (centerCopy.lng < 0) {
centerCopy.lng_neg = true;
centerCopy.lng = Math.abs(centerCopy.lng);
} else centerCopy.lng_neg = false;
if (centerCopy.lat < 0) {
centerCopy.lat_neg = true;
centerCopy.lat = Math.abs(centerCopy.lat);
} else centerCopy.lat_neg = false;
if (centerCopy.lng > 180) {
centerCopy.lng = 360 - centerCopy.lng;
centerCopy.lng_neg = !centerCopy.lng_neg;
}
// format
if (this.options.latlngFormat === 'DM') {
deg = parseInt(centerCopy.lng);
lng = deg + 'º ' + this._format('00.000', (centerCopy.lng - deg) * 60) + "'";
deg = parseInt(centerCopy.lat);
lat = deg + 'º ' + this._format('00.000', (centerCopy.lat - deg) * 60) + "'";
} else if (this.options.latlngFormat === 'DMS') {
deg = parseInt(centerCopy.lng);
min = (centerCopy.lng - deg) * 60;
lng = deg + 'º ' + this._format('00', parseInt(min)) + "' " + this._format('00.0', (min - parseInt(min)) * 60) + "''";
deg = parseInt(centerCopy.lat);
min = (centerCopy.lat - deg) * 60;
lat = deg + 'º ' + this._format('00', parseInt(min)) + "' " + this._format('00.0', (min - parseInt(min)) * 60) + "''";
} else { // 'DD'
lng = this._format('#0.00000', centerCopy.lng) + 'º';
lat = this._format('##0.00000', centerCopy.lat) + 'º';
}
return L.Util.template(this.options.template, {
x: (!this.options.latlngDesignators && centerCopy.lng_neg ? '-' : '') + lng + (this.options.latlngDesignators ? (centerCopy.lng_neg ? ' W' : ' E') : ''),
y: (!this.options.latlngDesignators && centerCopy.lat_neg ? '-' : '') + lat + (this.options.latlngDesignators ? (centerCopy.lat_neg ? ' S' : ' N') : '')
});
},
/*
IntegraXor Web SCADA - JavaScript Number Formatter
https://code.google.com/p/javascript-number-formatter/
author: KPL, KHL
*/
_format: function (m, v) {
if (!m || isNaN(+v)) {
return v; //return as it is.
}
//convert any string to number according to formation sign.
var v = m.charAt(0) == '-' ? -v : +v;
var isNegative = v < 0 ? v = -v : 0; //process only abs(), and turn on flag.
//search for separator for grp & decimal, anything not digit, not +/- sign, not #.
var result = m.match(/[^\d\-\+#]/g);
var Decimal = (result && result[result.length - 1]) || '.'; //treat the right most symbol as decimal
var Group = (result && result[1] && result[0]) || ','; //treat the left most symbol as group separator
//split the decimal for the format string if any.
var m = m.split(Decimal);
//Fix the decimal first, toFixed will auto fill trailing zero.
v = v.toFixed(m[1] && m[1].length);
v = +(v) + ''; //convert number to string to trim off *all* trailing decimal zero(es)
//fill back any trailing zero according to format
var pos_trail_zero = m[1] && m[1].lastIndexOf('0'); //look for last zero in format
var part = v.split('.');
//integer will get !part[1]
if (!part[1] || part[1] && part[1].length <= pos_trail_zero) {
v = (+v).toFixed(pos_trail_zero + 1);
}
var szSep = m[0].split(Group); //look for separator
m[0] = szSep.join(''); //join back without separator for counting the pos of any leading 0.
var pos_lead_zero = m[0] && m[0].indexOf('0');
if (pos_lead_zero > -1) {
while (part[0].length < (m[0].length - pos_lead_zero)) {
part[0] = '0' + part[0];
}
} else if (+part[0] == 0) {
part[0] = '';
}
v = v.split('.');
v[0] = part[0];
//process the first group separator from decimal (.) only, the rest ignore.
//get the length of the last slice of split result.
var pos_separator = (szSep[1] && szSep[szSep.length - 1].length);
if (pos_separator) {
var integer = v[0];
var str = '';
var offset = integer.length % pos_separator;
for (var i = 0, l = integer.length; i < l; i++) {
str += integer.charAt(i); //ie6 only support charAt for sz.
//-pos_separator so that won't trail separator on full length
if (!((i - offset + 1) % pos_separator) && i < l - pos_separator) {
str += Group;
}
}
v[0] = str;
}
v[1] = (m[1] && v[1]) ? Decimal + v[1] : "";
return (isNegative ? '-' : '') + v[0] + v[1]; //put back any negation and combine integer and fraction.
}
});
L.Map.mergeOptions({
MapCenterCoordControl: false
});
L.Map.addInitHook(function () {
if (this.options.MapCenterCoordControl) {
this.MapCenterCoordControl = new L.Control.MapCenterCoord();
this.addControl(this.MapCenterCoordControl);
}
});
L.control.mapCenterCoord = function (options) {
return new L.Control.MapCenterCoord(options);
};

21
assets/component/leaflet/coord_mobile/LICENCE

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2015 Xisco Guaita
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

66
assets/component/leaflet/coord_mobile/README.md

@ -0,0 +1,66 @@
# Leaflet.MapCenterCoord
A Leaflet control to display the coordinates of the map center, especially useful on **touch/mobile devices**.
The initial idea was based on the plugin [Leaflet.MousePosition](https://github.com/ardhi/Leaflet.MousePosition).
## Requirements
Leaflet v7.x
Tested ok on Leaflet 1.0 beta2
#### Some tested platforms
Android 4.4.2: Google Chrome 47 and stock browser
iOS 9.2: Safari
Desktops: Windows 7, Windows 10, Ubuntu 14.04 LTS
Google Chrome 47, Firefox 43, Microsoft Internet Explorer 10, 11 and Edge 25
## Examples
http://xguaita.github.io/Leaflet.MapCenterCoord/
Sources in [/examples](/xguaita/Leaflet.MapCenterCoord/tree/master/examples) folder
## Install
+ [Download](https://github.com/xguaita/Leaflet.MapCenterCoord/releases/latest) latest release
- Source code in `/src` folder
- Minified versions in `/dist`
+ Include js and css files located in the `/dist` folder (production) or `/src` (development)
+ If you want to change the code and build minified versions:
First, install node.js on your system. Then run `npm install` to build the minified js and css into `/dist`
## Usage
Add the following line to your map initialization:
``` js
L.control.mapCenterCoord().addTo(map);
```
You can also pass a configuration.
## Configuration options
The MapCenterCoord control inherits options from [Leaflet Controls](http://leafletjs.com/reference.html#control-options).
| Option | Type | Default | Description
| --- | --- | --- | ---
| position | String | `'bottomleft'` | The standard Leaflet.Control [position parameter](http://leafletjs.com/reference.html#control-positions)
| icon | Boolean | `true` | Shows crosshair icon on map center
| onMove | Boolean | `false` | Update the coordinates of the map center while dragging
| template | String | <code>'{y} &#124; {x}'</code> | Display template
| latlngFormat | String | `'DD'` | Show lat/lng coordinates in 3 possible formats:<br>Decimal degrees `'DD'` (DDD.DDDDD°)<br>Degrees and decimal minutes `'DM'` (DDD° MM.MMM')<br>Degrees, minutes and seconds `'DMS'` (DDD° MM' SS.S")
| latlngDesignators | Boolean | `false` | Show N-S and E-W
| projected | Boolean | `false` | Show projected coordinates
| formatProjected | String | `'#.##0,0'` | Number format mask for projected coordinates.<br>[JavaScript Number Formatter](https://code.google.com/p/javascript-number-formatter/) project: [sample/help page](http://www.integraxor.com/developer/codes/js-formatter/format-sample.htm )
| latLngFormatter | Function | `undefined` | Function that takes the lattitude and longitude as arguments and returns a single formatted string, e.g.<pre>function (lat, lng) {<br> return lat + " north and " + lng + " west";<br>}</pre>
## License
This software is released under the [MIT license](http://opensource.org/licenses/mit-license.php).

40
assets/component/leaflet/coord_mobile/examples/ddmm.html

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html>
<head>
<title>Center Position Control - DDMM</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.css" />
<link rel="stylesheet" href="http://xguaita.github.io/Leaflet.MapCenterCoord/dist/L.Control.MapCenterCoord.min.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.js"></script>
<script src="http://xguaita.github.io/Leaflet.MapCenterCoord/dist/L.Control.MapCenterCoord.min.js"></script>
<style>
body {
padding: 0;
margin: 0;
}
html, body, #map {
height: 100%;
}
</style>
</head>
<body>
<div id="map" class="map"></div>
<script>
var map = L.map('map').setView([39.588, 2.935], 9);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.control.mapCenterCoord({
latlngFormat: 'DM',
latlngDesignators: true
}).addTo(map);
</script>
</body>
</html>

39
assets/component/leaflet/coord_mobile/examples/ddmmss.html

@ -0,0 +1,39 @@
<!DOCTYPE html>
<html>
<head>
<title>Center Position Control - DDMMSS</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.css" />
<link rel="stylesheet" href="http://xguaita.github.io/Leaflet.MapCenterCoord/dist/L.Control.MapCenterCoord.min.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.js"></script>
<script src="http://xguaita.github.io/Leaflet.MapCenterCoord/dist/L.Control.MapCenterCoord.min.js"></script>
<style>
body {
padding: 0;
margin: 0;
}
html, body, #map {
height: 100%;
}
</style>
</head>
<body>
<div id="map" class="map"></div>
<script>
var map = L.map('map').setView([39.588, 2.935], 9);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.control.mapCenterCoord({
latlngFormat: 'DMS'
}).addTo(map);
</script>
</body>
</html>

65
assets/component/leaflet/coord_mobile/examples/etrs89-31n.html

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html>
<head>
<title>Center Position Control - ETRS89_UTM31N</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.css" />
<link rel="stylesheet" href="http://xguaita.github.io/Leaflet.MapCenterCoord/dist/L.Control.MapCenterCoord.min.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.3.12/proj4.js"></script>
<script src="./lib/proj4leaflet.min.js"></script>
<script src="http://xguaita.github.io/Leaflet.MapCenterCoord/dist/L.Control.MapCenterCoord.min.js"></script>
<style>
body {
padding: 0;
margin: 0;
}
html, body, #map {
height: 100%;
}
.leaflet-control-mapcentercoord-icon {
background: url(http://xguaita.github.io/Leaflet.MapCenterCoord/dist/icons/MapCenterCoordIcon2.svg) 50% 50% no-repeat;
}
</style>
</head>
<body>
<div id="map" class="map"></div>
<script>
var etrs89N31 = new L.Proj.CRS("EPSG:25831", "+proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs", {
origin: [238379.2278, 4265559.3497],
resolutions: [305.75, 152.87, 76.437, 38.219, 19.109, 9.5546, 4.7773, 2.3887, 1.1943, 0.5972]
});
//Ortofoto ideib
var orto = new L.TileLayer.WMS("http://ideib.caib.es/pub_ideib/public/Ortofoto/MapServer/WMSServer", {
layers: '0,1,2',
format: 'image/jpeg',
attribution: "© IDEIB",
maxZoom: 9,
minZoom: 0,
continuousWorld: true
});
var map = L.map('map', {
crs: etrs89N31,
center: [39.588, 2.935],
zoom: 0,
layers: [orto],
continuousWorld: true
});
L.control.mapCenterCoord({
iconFile: 'MapCenterCoordIcon2.png',
template: '<b>ETRS89 UTM31N</b><br>x:{x} y:{y}',
projected: true,
onMove: true,
formatProjected: '#.##0,'
}).addTo(map);
</script>
</body>
</html>

45
assets/component/leaflet/coord_mobile/examples/latlng_formatter.html

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html>
<head>
<title>Center Position Control - Single lat/lng formatter</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.css" />
<link rel="stylesheet" href="http://xguaita.github.io/Leaflet.MapCenterCoord/dist/L.Control.MapCenterCoord.min.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.js"></script>
<script src="../src/L.Control.MapCenterCoord.js"></script>
<script src="https://cdn.rawgit.com/davetroy/geohash-js/cffd38621a27505f471493229037205f282b4397/geohash.js"></script>
<style>
body {
padding: 0;
margin: 0;
}
html, body, #map {
height: 100%;
}
</style>
</head>
<body>
<div id="map" class="map"></div>
<script>
var map = L.map('map').setView([43.0799, -79.0747], 9);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.control.mapCenterCoord({
latLngFormatter: function (lat, lng) {
//calculate the geo hash (to show combining lat and long); display it as a link (to show how to customise the display)
var geohash = encodeGeoHash(lat, lng);
return '<a href="https://www.flickr.com/nearby/' + lat + ',' + lng + '?taken=alltime">' + geohash + '</a>'
},
onMove: true
}).addTo(map);
</script>
</body>
</html>

15
assets/component/leaflet/coord_mobile/examples/lib/proj4leaflet.min.js vendored

@ -0,0 +1,15 @@
(function(factory){var L,proj4;if(typeof define==='function'&&define.amd){define(['leaflet','proj4'],factory);}else if(typeof module!=='undefined'){L=require('leaflet');proj4=require('proj4');module.exports=factory(L,proj4);}else{if(typeof window.L==='undefined'||typeof window.proj4==='undefined')
throw'Leaflet and proj4 must be loaded first';factory(window.L,window.proj4);}}(function(L,proj4){L.Proj={};L.Proj._isProj4Obj=function(a){return(typeof a.inverse!=='undefined'&&typeof a.forward!=='undefined');};L.Proj.ScaleDependantTransformation=function(scaleTransforms){this.scaleTransforms=scaleTransforms;};L.Proj.ScaleDependantTransformation.prototype.transform=function(point,scale){return this.scaleTransforms[scale].transform(point,scale);};L.Proj.ScaleDependantTransformation.prototype.untransform=function(point,scale){return this.scaleTransforms[scale].untransform(point,scale);};L.Proj.Projection=L.Class.extend({initialize:function(a,def){if(L.Proj._isProj4Obj(a)){this._proj=a;}else{var code=a;if(def){proj4.defs(code,def);}else if(proj4.defs[code]===undefined){var urn=code.split(':');if(urn.length>3){code=urn[urn.length-3]+':'+urn[urn.length-1];}
if(proj4.defs[code]===undefined){throw'No projection definition for code '+code;}}
this._proj=proj4(code);}},project:function(latlng){var point=this._proj.forward([latlng.lng,latlng.lat]);return new L.Point(point[0],point[1]);},unproject:function(point,unbounded){var point2=this._proj.inverse([point.x,point.y]);return new L.LatLng(point2[1],point2[0],unbounded);}});L.Proj.CRS=L.Class.extend({includes:L.CRS,options:{transformation:new L.Transformation(1,0,-1,0)},initialize:function(a,b,c){var code,proj,def,options;if(L.Proj._isProj4Obj(a)){proj=a;code=proj.srsCode;options=b||{};this.projection=new L.Proj.Projection(proj);}else{code=a;def=b;options=c||{};this.projection=new L.Proj.Projection(code,def);}
L.Util.setOptions(this,options);this.code=code;this.transformation=this.options.transformation;if(this.options.origin){this.transformation=new L.Transformation(1,-this.options.origin[0],-1,this.options.origin[1]);}
if(this.options.scales){this._scales=this.options.scales;}else if(this.options.resolutions){this._scales=[];for(var i=this.options.resolutions.length-1;i>=0;i--){if(this.options.resolutions[i]){this._scales[i]=1/this.options.resolutions[i];}}}},scale:function(zoom){var iZoom=Math.floor(zoom),baseScale,nextScale,scaleDiff,zDiff;if(zoom===iZoom){return this._scales[zoom];}else{baseScale=this._scales[iZoom];nextScale=this._scales[iZoom+1];scaleDiff=nextScale-baseScale;zDiff=(zoom-iZoom);return baseScale+scaleDiff*zDiff;}},getSize:function(zoom){var b=this.options.bounds,s,min,max;if(b){s=this.scale(zoom);min=this.transformation.transform(b.min,s);max=this.transformation.transform(b.max,s);return L.point(Math.abs(max.x-min.x),Math.abs(max.y-min.y));}else{s=256*Math.pow(2,zoom);return L.point(s,s);}}});L.Proj.CRS.TMS=L.Proj.CRS.extend({options:{tileSize:256},initialize:function(a,b,c,d){var code,def,proj,projectedBounds,options;if(L.Proj._isProj4Obj(a)){proj=a;projectedBounds=b;options=c||{};options.origin=[projectedBounds[0],projectedBounds[3]];L.Proj.CRS.prototype.initialize.call(this,proj,options);}else{code=a;def=b;projectedBounds=c;options=d||{};options.origin=[projectedBounds[0],projectedBounds[3]];L.Proj.CRS.prototype.initialize.call(this,code,def,options);}
this.projectedBounds=projectedBounds;this._sizes=this._calculateSizes();},_calculateSizes:function(){var sizes=[],crsBounds=this.projectedBounds,projectedTileSize,i,x,y;for(i=this._scales.length-1;i>=0;i--){if(this._scales[i]){projectedTileSize=this.options.tileSize/this._scales[i];x=Math.ceil(parseFloat((crsBounds[2]-crsBounds[0])/projectedTileSize).toPrecision(3))*projectedTileSize*this._scales[i];y=Math.ceil(parseFloat((crsBounds[3]-crsBounds[1])/projectedTileSize).toPrecision(3))*projectedTileSize*this._scales[i];sizes[i]=L.point(x,y);}}
return sizes;},getSize:function(zoom){return this._sizes[zoom];}});L.Proj.TileLayer={};L.Proj.TileLayer.TMS=L.TileLayer.extend({options:{continuousWorld:true},initialize:function(urlTemplate,crs,options){var boundsMatchesGrid=true,scaleTransforms,upperY,crsBounds,i;if(!(crs instanceof L.Proj.CRS.TMS)){throw'CRS is not L.Proj.CRS.TMS.';}
L.TileLayer.prototype.initialize.call(this,urlTemplate,options);this.options.tms=false;this.crs=crs;crsBounds=this.crs.projectedBounds;for(i=this.options.minZoom;i<this.options.maxZoom&&boundsMatchesGrid;i++){var gridHeight=(crsBounds[3]-crsBounds[1])/this._projectedTileSize(i);boundsMatchesGrid=Math.abs(gridHeight-Math.round(gridHeight))>1e-3;}
if(!boundsMatchesGrid){scaleTransforms={};for(i=this.options.minZoom;i<this.options.maxZoom;i++){upperY=crsBounds[1]+Math.ceil((crsBounds[3]-crsBounds[1])/this._projectedTileSize(i))*this._projectedTileSize(i);scaleTransforms[this.crs.scale(i)]=new L.Transformation(1,-crsBounds[0],-1,upperY);}
this.crs=new L.Proj.CRS.TMS(this.crs.projection._proj,crsBounds,this.crs.options);this.crs.transformation=new L.Proj.ScaleDependantTransformation(scaleTransforms);}},getTileUrl:function(tilePoint){var zoom=this._map.getZoom(),gridHeight=Math.ceil((this.crs.projectedBounds[3]-this.crs.projectedBounds[1])/this._projectedTileSize(zoom));return L.Util.template(this._url,L.Util.extend({s:this._getSubdomain(tilePoint),z:this._getZoomForUrl(),x:tilePoint.x,y:gridHeight-tilePoint.y-1},this.options));},_projectedTileSize:function(zoom){return(this.options.tileSize/this.crs.scale(zoom));}});L.Proj.GeoJSON=L.GeoJSON.extend({initialize:function(geojson,options){this._callLevel=0;L.GeoJSON.prototype.initialize.call(this,null,options);if(geojson){this.addData(geojson);}},addData:function(geojson){var crs;if(geojson){if(geojson.crs&&geojson.crs.type==='name'){crs=new L.Proj.CRS(geojson.crs.properties.name);}else if(geojson.crs&&geojson.crs.type){crs=new L.Proj.CRS(geojson.crs.type+':'+geojson.crs.properties.code);}
if(crs!==undefined){this.options.coordsToLatLng=function(coords){var point=L.point(coords[0],coords[1]);return crs.projection.unproject(point);};}}
this._callLevel++;try{L.GeoJSON.prototype.addData.call(this,geojson);}finally{this._callLevel--;if(this._callLevel===0){delete this.options.coordsToLatLng;}}}});L.Proj.geoJson=function(geojson,options){return new L.Proj.GeoJSON(geojson,options);};L.Proj.ImageOverlay=L.ImageOverlay.extend({initialize:function(url,bounds,options){L.ImageOverlay.prototype.initialize.call(this,url,null,options);this._projBounds=bounds;},_animateZoom:function(e){var northwest=L.point(this._projBounds.min.x,this._projBounds.max.y),southeast=L.point(this._projBounds.max.x,this._projBounds.min.y),topLeft=this._projectedToNewLayerPoint(northwest,e.zoom,e.center),size=this._projectedToNewLayerPoint(southeast,e.zoom,e.center).subtract(topLeft),origin=topLeft.add(size._multiplyBy((1-1/e.scale)/2));this._image.style[L.DomUtil.TRANSFORM]=L.DomUtil.getTranslateString(origin)+' scale('+this._map.getZoomScale(e.zoom)+') ';},_reset:function(){var zoom=this._map.getZoom(),pixelOrigin=this._map.getPixelOrigin(),bounds=L.bounds(this._transform(this._projBounds.min,zoom)._subtract(pixelOrigin),this._transform(this._projBounds.max,zoom)._subtract(pixelOrigin)),size=bounds.getSize(),image=this._image;L.DomUtil.setPosition(image,bounds.min);image.style.width=size.x+'px';image.style.height=size.y+'px';},_projectedToNewLayerPoint:function(point,newZoom,newCenter){var topLeft=this._map._getNewTopLeftPoint(newCenter,newZoom).add(this._map._getMapPanePos());return this._transform(point,newZoom)._subtract(topLeft);},_transform:function(p,zoom){var crs=this._map.options.crs,transformation=crs.transformation,scale=crs.scale(zoom);return transformation.transform(p,scale);}});L.Proj.imageOverlay=function(url,bounds,options){return new L.Proj.ImageOverlay(url,bounds,options);};if(typeof L.CRS!=='undefined'){L.CRS.proj4js=(function(){return function(code,def,transformation,options){options=options||{};if(transformation){options.transformation=transformation;}
return new L.Proj.CRS(code,def,options);};}());}
return L.Proj;}));

37
assets/component/leaflet/coord_mobile/examples/simple.html

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html>
<head>
<title>Center Position Control - Simple</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.css" />
<link rel="stylesheet" href="http://xguaita.github.io/Leaflet.MapCenterCoord/dist/L.Control.MapCenterCoord.min.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.7.5/leaflet.js"></script>
<script src="http://xguaita.github.io/Leaflet.MapCenterCoord/dist/L.Control.MapCenterCoord.min.js"></script>
<style>
body {
padding: 0;
margin: 0;
}
html, body, #map {
height: 100%;
}
</style>
</head>
<body>
<div id="map" class="map"></div>
<script>
var map = L.map('map').setView([39.588, 2.935], 9);
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
L.control.mapCenterCoord().addTo(map);
</script>
</body>
</html>

25
assets/component/leaflet/coord_mobile/icons/MapCenterCoordIcon1.svg

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
x="0px"
y="0px"
viewBox="0 0 99.999998 99.999998"
xml:space="preserve">
<g><circle
r="3.9234731"
cy="50.21946"
cx="50.027821"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
d="m 4.9734042,54.423642 31.7671398,0 c 2.322349,0 4.204185,-1.881836 4.204185,-4.204185 0,-2.322349 -1.881836,-4.204184 -4.204185,-4.204184 l -31.7671398,0 c -2.3223489,-2.82e-4 -4.20418433,1.881554 -4.20418433,4.204184 0,2.322631 1.88183543,4.204185 4.20418433,4.204185 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
d="m 54.232003,5.1650429 c 0,-2.3223489 -1.881836,-4.20418433 -4.204184,-4.20418433 -2.322349,0 -4.204185,1.88183543 -4.204185,4.20418433 l 0,31.7671401 c 0,2.322349 1.881836,4.204184 4.204185,4.204184 2.322348,0 4.204184,-1.881835 4.204184,-4.204184 l 0,-31.7671401 z"
style="fill:#000000;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:1" /><path
d="m 99.287826,50.219457 c 0,-2.322349 -1.881835,-4.204184 -4.204184,-4.204184 l -31.76714,0 c -2.322349,0 -4.204184,1.881835 -4.204184,4.204184 0,2.322349 1.881835,4.204185 4.204184,4.204185 l 31.76714,0 c 2.320658,0 4.204184,-1.881836 4.204184,-4.204185 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
d="m 45.823352,95.27359 c 0,2.322349 1.881836,4.204184 4.204185,4.204184 2.322349,0 4.204184,-1.881835 4.204184,-4.204184 l 0,-31.76714 c 0,-2.322349 -1.881835,-4.204185 -4.204184,-4.204185 -2.322349,0 -4.204185,1.881836 -4.204185,4.204185 l 0,31.76714 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /></g></svg>

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 3.9 KiB

15
assets/component/leaflet/coord_mobile/icons/MapCenterCoordIcon2.svg

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xml:space="preserve"
viewBox="0 0 99.999999 99.999999"
y="0px"
x="0px"
version="1.1">
<path
d="m 94.96233,46.456833 -10.459052,0 C 82.584539,30.830053 70.050938,18.417118 54.294121,16.55715 l 0,-10.7702826 c -1.95e-4,-2.1917011 -1.777767,-3.9677111 -3.967906,-3.9677111 -2.191896,0 -3.967712,1.77601 -3.967712,3.9677111 l 0,10.7337706 C 30.469891,18.266383 17.801567,30.736528 15.869941,46.455272 l -10.1815984,0 c -2.191701,0 -3.967711,1.776009 -3.967711,3.967711 0,2.1917 1.77601,3.967711 3.967711,3.967711 l 10.1275144,0 c 1.755312,15.915556 14.512672,28.590324 30.542451,30.352081 l 0,10.317884 c 0,2.191896 1.776011,3.967711 3.967711,3.967711 2.190139,0 3.967711,-1.77601 3.967711,-3.967711 l 0,-10.352834 C 70.190348,82.831846 82.811031,70.215848 84.556973,54.392255 l 10.405161,0 c 2.191896,0 3.967711,-1.77601 3.967711,-3.967711 0,-2.1917 -1.775815,-3.967711 -3.967515,-3.967711 z m -40.668404,30.220287 0,-13.087335 c 0,-2.191897 -1.777572,-3.967712 -3.967711,-3.967712 -2.191896,0 -3.967712,1.77601 -3.967712,3.967712 l 0,13.128728 C 34.720132,75.048915 25.514792,65.921286 23.843632,54.392451 l 13.317538,0 c 2.191896,0 3.967711,-1.776011 3.967711,-3.967711 0,-2.191701 -1.77601,-3.967712 -3.967711,-3.967712 l -13.254081,0 C 25.738551,35.123445 34.861299,26.19751 46.358503,24.546852 l 0,12.712842 c 0,2.191897 1.776011,3.967711 3.967712,3.967711 2.190139,0 3.967711,-1.776009 3.967711,-3.967711 l 0,-12.671644 c 11.36541,1.753752 20.354801,10.625796 22.172009,21.868978 l -12.976237,0 c -2.191897,0 -3.967711,1.776011 -3.967711,3.967712 0,2.1917 1.77601,3.967711 3.967711,3.967711 l 13.041451,0 C 74.870923,65.830885 65.800503,74.901305 54.293926,76.67712 Z"
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:2.9412632;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></svg>

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 2.1 KiB

37
assets/component/leaflet/coord_mobile/package.json

@ -0,0 +1,37 @@
{
"name": "Leaflet.MapCenterCoord",
"version": "0.7.0",
"description": "A Leaflet control to display the coordinates of the map center, designed for mobile devices",
"main": "dist/L.Control.MapCenterCoord.min.js",
"author": "Xisco Guaita",
"license": "MIT",
"homepage": "https://github.com/xguaita/Leaflet.MapCenterCoord",
"repository": {
"type": "git",
"url": "https://github.com/xguaita/Leaflet.MapCenterCoord.git"
},
"keywords": [
"leaflet",
"plugin",
"control",
"center map",
"coordinates",
"mobile"
],
"bugs": {
"url": "https://github.com/xguaita/Leaflet.MapCenterCoord/issues"
},
"scripts": {
"prepublish": "grunt default"
},
"devDependencies": {
"grunt": "^0.4.5",
"grunt-contrib-clean": "^0.6.0",
"grunt-contrib-cssmin": "^0.12.0",
"grunt-contrib-uglify": "^0.8.0",
"grunt-contrib-copy": "^0.8.0"
},
"dependencies": {
"leaflet": "~0.7.5"
}
}

BIN
assets/component/leaflet/draw/editableMarkercluster/images/marker-icon-red-2x.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 31 KiB

BIN
assets/component/leaflet/draw/editableMarkercluster/images/marker-icon-red.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 19 KiB

BIN
assets/component/leaflet/draw/editableMarkercluster/images/marker-shadow.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 797 B

340
assets/component/leaflet/draw/editableMarkercluster/leaflet.markercluster.editablemarker.js

@ -0,0 +1,340 @@
(function (window, document, undefined) {
var editMarkerToolbarAction = L.Toolbar2.Action.extend({
initialize: function (map, marker, options) {
this._map = map;
this._marker = marker;
options = options || {
toolbarIcon: {
tooltip: 'Edit'
}
};
if (this._marker.options.toolbarEditIconClass) {
options.toolbarIcon.className = this._marker.options.toolbarEditIconClass
} else {
options.toolbarIcon.html = 'Edit';
}
L.Util.setOptions(this, options);
L.Toolbar2.Action.prototype.initialize.call(this, map, options);
},
addHooks: function () {
var that = this;
that._marker._popupToolbar._onMarkerDrag = function (e) {
that._marker._popupToolbar.setLatLng(that._marker.getLatLng());
if (that._marker.label) {
that._marker.updateLabelContent(that._marker.options.getLabelContent());
}
that._marker._dragged = true;
};
that._marker._popupToolbar._onMarkerDragEnd = function (e) {
if (that._marker._popupToolbar._bringToFront) {
that._marker._popupToolbar._bringToFront();
}
};
if (!that._marker._enableEditMode) {
that._marker._enableEditMode = function () {
that._marker._editModeEnabled = true;
that._marker.options.clusterGroup.removeLayer(that._marker);
that._map.addLayer(that._marker);
if (that._marker.options.editModeIcon) {
that._marker.setIcon(that._marker.options.editModeIcon);
}
if (that._marker._popupToolbar._bringToFront) {
that._marker._popupToolbar._bringToFront();
}
that._marker.options.draggable = true;
that._marker.dragging.enable();
if (that._marker.options.showLabelOnEdit && !that._marker.label) {
that._marker.bindLabel(that._marker.options.getLabelContent(), {
noHide: true,
direction: 'auto',
pane: that._map.getPanes.popupPane
});
}
if (that._marker.label) {
that._marker.showLabel();
}
that._marker.on('drag', that._marker._popupToolbar._onMarkerDrag);
that._marker.on('dragend', that._marker._popupToolbar._onMarkerDragEnd);
};
}
if (!that._marker._disableEditMode) {
that._marker._disableEditMode = function () {
that._marker._editModeEnabled = false;
if (that._marker.options.normalModeIcon) {
that._marker.setIcon(that._marker.options.normalModeIcon);
} else {
that._marker.setIcon(new L.Icon.Default);
}
that._marker.options.draggable = false;
that._marker.dragging.disable();
that._marker.off('drag', that._marker._popupToolbar._onMarkerDrag);
that._marker.off('dragend', that._marker._popupToolbar._onMarkerDragEnd);
that._map.removeLayer(that._marker);
that._marker.options.clusterGroup.addLayer(that._marker);
if (that._marker.label) {
that._marker.hideLabel();
that._marker.unbindLabel();
}
if (that._marker._popupToolbar._bringToFront) {
that._marker._popupToolbar._bringToFront();
}
var visibleOne = that._marker.options.clusterGroup.getVisibleParent(that._marker);
if (visibleOne && that._marker && !visibleOne.getLatLng().equals(that._marker.getLatLng()) && that._marker._popupToolbar) {
that._marker._popupToolbar._removeToolbar();
}
if (that._marker.options.hideToolbarAfterEdit && that._marker._popupToolbar && that._marker._popupToolbar._removeToolbar) {
that._marker._popupToolbar._removeToolbar();
}
};
}
if (that._marker._editModeEnabled) {
that._marker._disableEditMode();
if (that._marker._dragged) {
that._marker._dragged = undefined;
that._marker.fire('marker:edited');
}
} else {
that._marker._enableEditMode();
}
}
});
var deleteMarkerToolbarAction = L.Toolbar2.Action.extend({
initialize: function (map, marker, options) {
this._map = map;
this._marker = marker;
options = options || {
toolbarIcon: {
tooltip: 'Delete'
}
};
if (this._marker.options.toolbarDeleteIconClass) {
options.toolbarIcon.className = this._marker.options.toolbarDeleteIconClass
} else {
options.toolbarIcon.html = 'Delete';
}
L.Util.setOptions(this, options);
L.Toolbar2.Action.prototype.initialize.call(this, map, options);
},
addHooks: function () {
if (this._marker._popupToolbar && this._marker._popupToolbar._removeToolbar) {
this._marker._popupToolbar._removeToolbar();
}
var deleted = false;
if (this._marker.options.clusterGroup.hasLayer(this._marker)) {
this._marker.options.clusterGroup.removeLayer(this._marker);
deleted = deleted || true;
}
if (this._map.hasLayer(this._marker)) {
this._map.removeLayer(this._marker);
deleted = deleted || true;
}
if (deleted) {
this._marker.fire('marker:deleted');
this._marker.off('marker:edited');
this._marker.off('marker:deleted');
this._marker.off('popuptoolbar:shown');
this._marker.off('popuptoolbar:closed');
}
}
});
var closeMarkerToolbarAction = L.Toolbar2.Action.extend({
initialize: function (map, marker, options) {
this._map = map;
this._marker = marker;
options = options || {
toolbarIcon: {
tooltip: 'Close'
}
};
if (this._marker.options.toolbarCloseIconClass) {
options.toolbarIcon.className = this._marker.options.toolbarCloseIconClass
} else {
options.toolbarIcon.html = 'Close';
}
L.Util.setOptions(this, options);
L.Toolbar2.Action.prototype.initialize.call(this, map, options);
},
addHooks: function () {
if (this._marker._popupToolbar && this._marker._popupToolbar._removeToolbar) {
this._marker._popupToolbar._removeToolbar();
}
if (this._marker._dragged) {
this._marker._dragged = undefined;
this._marker.fire('marker:edited');
}
}
});
var editableMarkerPopupToolbar = L.Toolbar2.Popup.extend({
options: {
actions: [
editMarkerToolbarAction,
deleteMarkerToolbarAction,
closeMarkerToolbarAction
]
},
onAdd: function (map) {
var that = this;
var marker = this._arguments[1];
if (marker instanceof L.Marker) {
// Adjust the toolbar position so that it doesn't cover the marker.
var popupAnchor = marker.options.icon.options.popupAnchor;
this.options.anchor = L.point([popupAnchor[0], popupAnchor[1] - 6]);
}
L.Toolbar2.Popup.prototype.onAdd.call(this, map);
if (marker.options.clusterGroup) {
that._onClusterGroupAnimationEnd = function (e) {
// Remove popup only if owner-marker clustered, otherwise don't remove.
var visibleOne = marker.options.clusterGroup.getVisibleParent(marker);
if (visibleOne && marker && !visibleOne.getLatLng().equals(marker.getLatLng()) && that._removeToolbar) {
that._removeToolbar();
}
};
marker.options.clusterGroup.on('animationend', that._onClusterGroupAnimationEnd);
}
that._removeToolbar = function () {
if (that._onClusterGroupAnimationEnd) {
marker.options.clusterGroup.off('animationend', that._onClusterGroupAnimationEnd);
that._onClusterGroupAnimationEnd = undefined;
}
if (that._removeToolbar) {
map.off('click', that._removeToolbar);
}
if (that._bringToFront) {
that._bringToFront = undefined;
}
if (marker._editModeEnabled && marker._disableEditMode) {
marker._disableEditMode();
marker._editModeEnabled = undefined;
marker._enableEditMode = undefined;
marker._disableEditMode = undefined;
}
map.removeLayer(that);
that._removeToolbar = undefined;
marker._popupToolbar = undefined;
marker.fire('popuptoolbar:closed');
};
// Bring to front imitation.
that._bringToFront = function () {
map.removeLayer(that);
map.addLayer(that);
};
map.once('click', that._removeToolbar);
}
});
// L.MarkerClusterGroup doesn't support draggable markers.
// This extension fixes this problem.
L.MarkerClusterGroup.EditableMarker = L.Marker.extend({
options: {
normalModeIcon: undefined,
editModeIcon: undefined,
toolbarEditIconClass: undefined,
toolbarDeleteIconClass: undefined,
toolbarCloseIconClass: undefined,
clusterGroup: undefined,
getLabelContent: function () {
return 'This is editable marker for cluster group.'
},
showLabelOnEdit: true,
hideToolbarAfterEdit: false,
dontShowToolbarOnFirstClick: false
},
initialize: function (latlng, options) {
L.Util.setOptions(this, options);
if (!(this.options.clusterGroup instanceof L.MarkerClusterGroup)) {
throw new TypeError('Wrong type for \'clustrGroup\' option.');
}
if (!(this.options.normalModeIcon instanceof L.Icon)) {
this.options.normalModeIcon = new L.Icon.Default;
}
this.options.icon = this.options.normalModeIcon;
if (!(this.options.editModeIcon instanceof L.Icon)) {
this.options.editModeIcon = new L.Icon.Default;
}
L.Marker.prototype.initialize.call(this, latlng, options);
var markerWasClicked = false;
this.on('click', function (e) {
if (!this._popupToolbar && (!this.options.dontShowToolbarOnFirstClick || this.options.dontShowToolbarOnFirstClick && markerWasClicked)) {
var prevMarker = this.options.clusterGroup._prevEditedMarker = this.options.clusterGroup._currentEditedMarker || {};
this.options.clusterGroup._currentEditedMarker = this;
if (prevMarker._popupToolbar && prevMarker._popupToolbar._removeToolbar) {
prevMarker._popupToolbar._removeToolbar();
}
this._popupToolbar = (new editableMarkerPopupToolbar(e.latlng)).addTo(map, this);
this.fire('popuptoolbar:shown');
}
markerWasClicked = true;
});
}
});
})(window, document);

BIN
assets/component/leaflet/draw/images/layers-2x.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 1.2 KiB

BIN
assets/component/leaflet/draw/images/layers.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 696 B

BIN
assets/component/leaflet/draw/images/marker-icon-2x.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 2.4 KiB

BIN
assets/component/leaflet/draw/images/marker-icon.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 1.4 KiB

BIN
assets/component/leaflet/draw/images/marker-shadow.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 618 B

1
assets/component/leaflet/draw/images/spritesheet copy.svg

@ -0,0 +1 @@
<svg height="60" viewBox="0 0 600 60" width="600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g fill="#464646"><g fill="#464646"><path d="m18 36v6h6v-6zm4 4h-2v-2h2z"/><path d="m36 18v6h6v-6zm4 4h-2v-2h2z"/><path d="m23.142 39.145-2.285-2.29 16-15.998 2.285 2.285z"/></g><path d="m100 24.565-2.096 14.83-14.834 2.605-7.07-13.227 10.463-10.773z" fill="#464646"/><path d="m140 20h20v20h-20z" fill="#464646"/><path d="m221 30c0 6.078-4.926 11-11 11s-11-4.922-11-11c0-6.074 4.926-11 11-11s11 4.926 11 11z" fill="#464646"/><path d="m270 19c-4.971 0-9 4.029-9 9s5.001 12 9 14c4.001-2 9-9.029 9-14s-4.029-9-9-9zm0 12.5c-2.484 0-4.5-2.014-4.5-4.5 0-2.484 2.016-4.5 4.5-4.5 2.485 0 4.5 2.016 4.5 4.5 0 2.486-2.015 4.5-4.5 4.5z" fill="#464646"/><g id="a" fill="#464646"><path d="m337 30.156v.407 5.604c0 1.658-1.344 3-3 3h-10c-1.655 0-3-1.342-3-3v-10c0-1.657 1.345-3 3-3h6.345l3.19-3.17h-9.535c-3.313 0-6 2.687-6 6v10c0 3.313 2.687 6 6 6h10c3.314 0 6-2.687 6-6v-8.809z" fill="#464646"/><path d="m338.72 24.637-8.892 8.892h-2.828v-2.829l8.89-8.89z" fill="#464646"/><path d="m338.697 17.826h4v4h-4z" fill="#464646" transform="matrix(-.70698336 -.70723018 .70723018 -.70698336 567.55917 274.78273)"/></g><g id="b" fill="#464646"><path d="m381 42h18v-18h-18zm14-16h2v14h-2zm-4 0h2v14h-2zm-4 0h2v14h-2zm-4 0h2v14h-2z" fill="#464646"/><path d="m395 20v-4h-10v4h-6v2h22v-2zm-2 0h-6v-2h6z" fill="#464646"/></g></g><g fill="#bbb" transform="translate(120)"><use height="100%" width="100%" xlink:href="#a"/><use height="100%" width="100%" xlink:href="#b"/></g><path d="m581.65725 30c0 6.078-4.926 11-11 11s-11-4.922-11-11c0-6.074 4.926-11 11-11s11 4.926 11 11z" fill="none" stroke="#464646" stroke-width="2"/></svg>

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 1.7 KiB

BIN
assets/component/leaflet/draw/images/spritesheet-2x copy.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 7.0 KiB

BIN
assets/component/leaflet/draw/images/spritesheet-2x.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 3.5 KiB

BIN
assets/component/leaflet/draw/images/spritesheet.png

File binario non mostrato.

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 1.9 KiB

1
assets/component/leaflet/draw/images/spritesheet.svg

@ -0,0 +1 @@
<svg enable-background="new 0 0 880 73.9" viewBox="0 0 880 73.9" xmlns="http://www.w3.org/2000/svg"><g fill="#464646"><path d="m18 46v9h9v-9zm6 6h-3v-3h3z"/><path d="m45 19v9h9v-9zm6 6h-3v-3h3z"/><path d="m25.7 50.7-3.4-3.4 24-24 3.4 3.4z"/><path d="m140.9 28.8-3.1 22.2-22.3 4-10.6-19.8 15.7-16.2z"/><path d="m200.9 22h30v30h-30z"/><path d="m322.3 37c0 9.1-7.4 16.5-16.5 16.5s-16.5-7.4-16.5-16.5 7.4-16.5 16.5-16.5 16.5 7.4 16.5 16.5z"/><path d="m395.8 20.5c-7.5 0-13.5 6-13.5 13.5s7.5 18 13.5 21c6-3 13.5-13.5 13.5-21s-6.1-13.5-13.5-13.5zm0 18.7c-3.7 0-6.7-3-6.7-6.7s3-6.7 6.7-6.7 6.7 3 6.7 6.7-3 6.7-6.7 6.7z"/><path d="m496.2 37.2v.6 8.4c0 2.5-2 4.5-4.5 4.5h-15c-2.5 0-4.5-2-4.5-4.5v-15c0-2.5 2-4.5 4.5-4.5h9.5l4.8-4.7h-14.3c-5 0-9 4-9 9v15c0 5 4 9 9 9h15c5 0 9-4 9-9v-13.2z"/><path d="m498.8 28.9-13.3 13.3h-4.2v-4.2l13.3-13.3z"/><path d="m501.8 26-4.2-4.2 4.2-4.2 4.2 4.2z"/><path d="m562.2 55h27v-27h-27zm21-24h3v21h-3zm-6 0h3v21h-3zm-6 0h3v21h-3zm-6 0h3v21h-3z"/><path d="m583.2 22v-6h-15v6h-9v3h33v-3zm-3 0h-9v-3h9z"/><g transform="translate(120)"><path d="m556.1 37.2v.6 8.4c0 2.5-2 4.5-4.5 4.5h-15c-2.5 0-4.5-2-4.5-4.5v-15c0-2.5 2-4.5 4.5-4.5h9.5l4.8-4.8h-14.3c-5 0-9 4-9 9v15c0 5 4 9 9 9h15c5 0 9-4 9-9v-13.1z"/><path d="m558.7 28.9-13.3 13.3h-4.2v-4.2l13.3-13.3z"/><path d="m561.7 26-4.2-4.2 4.2-4.2 4.2 4.2z"/></g><g transform="translate(120)"><path d="m622.1 55h27v-27h-27zm20.9-24h3v21h-3zm-5.9 0h3v21h-3zm-6 0h3v21h-3zm-6 0h3v21h-3z"/><path d="m643 22v-6h-15v6h-9v3h33v-3zm-2.9 0h-9v-3h9z"/></g></g><path d="m863 37c0 9.1-7.4 16.5-16.5 16.5s-16.5-7.4-16.5-16.5 7.4-16.5 16.5-16.5 16.5 7.4 16.5 16.5z" fill="none" stroke="#464646" stroke-width="2"/></svg>

Dopo

Larghezza:  |  Altezza:  |  Dimensione: 1.6 KiB

241
assets/component/leaflet/draw/leaflet.draw.css vendored

@ -0,0 +1,241 @@
.leaflet-draw-section {
position: relative;
}
.leaflet-draw-toolbar {
margin-top: 12px;
}
.leaflet-draw-toolbar-top {
margin-top: 0;
}
.leaflet-draw-toolbar-notop a:first-child {
border-top-right-radius: 0;
}
.leaflet-draw-toolbar-nobottom a:last-child {
border-bottom-right-radius: 0;
}
.leaflet-draw-toolbar a {
background-image: url("images/spritesheet.svg");
background-image: linear-gradient(transparent, transparent), url("images/spritesheet.svg");
background-repeat: no-repeat;
background-size: 500px 50px;
background-clip: padding-box;
}
.leaflet-retina .leaflet-draw-toolbar a {
background-image: url("images/spritesheet.svg");
background-image: linear-gradient(transparent, transparent), url("images/spritesheet.svg");
}
.leaflet-draw a {
display: block;
text-align: center;
text-decoration: none;
}
.leaflet-draw a .sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
.leaflet-draw-actions {
display: none;
list-style: none;
margin: 0;
padding: 0;
position: absolute;
left: 26px;
top: 0;
white-space: nowrap;
}
.leaflet-touch .leaflet-draw-actions {
left: 32px;
}
.leaflet-right .leaflet-draw-actions {
right: 26px;
left: auto;
}
.leaflet-touch .leaflet-right .leaflet-draw-actions {
right: 32px;
left: auto;
}
.leaflet-draw-actions li {
display: inline-block;
}
.leaflet-draw-actions li:first-child a {
border-left: 0;
}
.leaflet-draw-actions li:last-child a {
-webkit-border-radius: 0 4px 4px 0;
border-radius: 0 4px 4px 0;
}
.leaflet-right .leaflet-draw-actions li:last-child a {
-webkit-border-radius: 0;
border-radius: 0;
}
.leaflet-right .leaflet-draw-actions li:first-child a {
-webkit-border-radius: 4px 0 0 4px;
border-radius: 4px 0 0 4px;
}
.leaflet-draw-actions a {
background-color: #919187;
border-left: 1px solid #aaa;
color: #fff;
font: 14px/22px "Helvetica Neue", Arial, Helvetica, sans-serif;
line-height: 28px;
text-decoration: none;
padding-left: 10px;
padding-right: 10px;
height: 28px;
}
.leaflet-touch .leaflet-draw-actions a {
font-size: 12px;
line-height: 30px;
height: 30px;
}
.leaflet-draw-actions-bottom {
margin-top: 0;
}
.leaflet-draw-actions-top {
margin-top: 1px;
}
.leaflet-draw-actions-top a,
.leaflet-draw-actions-bottom a {
height: 27px;
line-height: 27px;
}
.leaflet-draw-actions a:hover {
background-color: #a0a098;
}
.leaflet-draw-actions-top.leaflet-draw-actions-bottom a {
height: 26px;
line-height: 26px;
}
.leaflet-draw-toolbar .leaflet-draw-draw-polyline {
background-position: -2px -2px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polyline {
background-position: -3px -6px;
}
.leaflet-draw-toolbar .leaflet-draw-draw-polygon {
background-position: -31px -2px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-polygon {
background-position: -52px -6px;
}
.leaflet-draw-toolbar .leaflet-draw-draw-rectangle {
background-position: -62px -2px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-rectangle {
background-position: -105px -6px;
}
.leaflet-draw-toolbar .leaflet-draw-draw-circle {
background-position: -92px -2px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-circle {
background-position: -156px -6px;
}
.leaflet-draw-toolbar .leaflet-draw-draw-marker {
background-position: -207px -7px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-marker {
background-position: -207px -7px;
}
.leaflet-draw-toolbar .leaflet-draw-draw-circlemarker {
background-position: -273px -2px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-draw-circlemarker {
background-position: -463px -6px;
}
.leaflet-draw-toolbar .leaflet-draw-edit-edit {
background-position: -182px -2px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit {
background-position: -257px -6px;
}
.leaflet-draw-toolbar .leaflet-draw-edit-remove {
background-position: -222px -2px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove {
background-position: -309px -6px;
}
.leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled {
background-position: -212px -2px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-edit.leaflet-disabled {
background-position: -257px -6px;
}
.leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled {
background-position: -242px -2px;
}
.leaflet-touch .leaflet-draw-toolbar .leaflet-draw-edit-remove.leaflet-disabled {
background-position: -309px -6px;
}
.leaflet-mouse-marker {
background-color: #fff;
cursor: crosshair;
}
.leaflet-draw-tooltip {
background: #363636;
background: rgba(0, 0, 0, 0.5);
border: 1px solid transparent;
-webkit-border-radius: 4px;
border-radius: 4px;
color: #fff;
font: 12px/18px "Helvetica Neue", Arial, Helvetica, sans-serif;
margin-left: 20px;
margin-top: -21px;
padding: 4px 8px;
position: absolute;
visibility: hidden;
white-space: nowrap;
z-index: 6;
}
.leaflet-draw-tooltip:before {
border-right: 6px solid black;
border-right-color: rgba(0, 0, 0, 0.5);
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
content: "";
position: absolute;
top: 7px;
left: -7px;
}
.leaflet-error-draw-tooltip {
background-color: #f2dede;
border: 1px solid #e6b6bd;
color: #b94a48;
}
.leaflet-error-draw-tooltip:before {
border-right-color: #e6b6bd;
}
.leaflet-draw-tooltip-single {
margin-top: -12px;
}
.leaflet-draw-tooltip-subtext {
color: #f8d5e4;
}
.leaflet-draw-guide-dash {
font-size: 1%;
opacity: 0.6;
position: absolute;
width: 5px;
height: 5px;
}
.leaflet-edit-marker-selected {
background-color: rgba(254, 87, 161, 0.1);
border: 4px dashed rgba(254, 87, 161, 0.6);
-webkit-border-radius: 4px;
border-radius: 4px;
box-sizing: content-box;
}
.leaflet-edit-move {
cursor: move;
}
.leaflet-edit-resize {
cursor: pointer;
}
.leaflet-oldie .leaflet-draw-toolbar {
border: 1px solid #999;
}

1768
assets/component/leaflet/draw/leaflet.draw.js

File diff soppresso perché troppo grande Load Diff

91
assets/component/leaflet/draw/lib/EditToolbar.js

@ -0,0 +1,91 @@
/**
* Created by PRadostev on 10.03.2015.
*/
var idlayer;
L.DeletePopup = L.Toolbar2.Action.extend({
options: {
toolbarIcon: {className: 'fal fa-trash-alt fa-3x'}
},
initialize: function (map, shape, options) {
this._map = map;
this._layer = shape;
L.Toolbar2.Action.prototype.initialize.call(this, map, options);
},
addHooks: function () {
this._map.removeLayer(this._layer);
this._map.removeLayer(this.toolbar);
this._map.fire('editable:delete', {layer: this._layer});
}
});
L.LinkPopup = L.Toolbar2.Action.extend({
options: {
toolbarIcon: {className: 'fal fa-passport fa-3x', tooltip: 'COMPLETA DATI DELLA SCHEDA'}
},
initialize: function (map, shape, options) {
this._map = map;
this._layer = shape;
L.Toolbar2.Action.prototype.initialize.call(this, map, options);
},
addHooks: function () {
var idlayer = this._layer.feature.id;
window.open('routine_feature?mode=new&id=' + idlayer, '_top');
}
});
L.EditPopup = L.Toolbar2.Action.extend({
options: {
toolbarIcon: {className: 'fal fa-edit fa-3x'}
},
initialize: function (map, shape, options) {
this._map = map;
this._layer = shape;
L.Toolbar2.Action.prototype.initialize.call(this, map, options);
},
enable: function () {
var map = this._map,
layer = this._layer;
layer.enableEdit();
map.removeLayer(this.toolbar); //?????????????????
map.once('click', function () {
layer.disableEdit();
});
}
});
L.EditPopupToolbar = L.Toolbar2.Popup.extend({
options: {
actions: [
L.EditPopup,
L.LinkPopup,
L.DeletePopup
]
},
onAdd: function (map) {
var shape = this._arguments[1];
if (shape instanceof L.Marker) {
/* Adjust the toolbar position so that it doesn't cover the marker. */
this.options.anchor = L.point(shape.options.icon.options.popupAnchor);
}
var that = this;
map.once('click', function () {
map.removeLayer(that);
});
L.Toolbar2.Popup.prototype.onAdd.call(this, map);
}
});

102
assets/component/leaflet/draw/lib/L.Control.Sidebar.css

@ -0,0 +1,102 @@
.leaflet-sidebar {
position: absolute;
height: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 10px;
z-index: 2000; }
.leaflet-sidebar.left {
left: -500px;
transition: left 0.5s, width 0.5s;
padding-right: 0; }
.leaflet-sidebar.left.visible {
left: 0; }
.leaflet-sidebar.right {
right: -500px;
transition: right 0.5s, width 0.5s;
padding-left: 0; }
.leaflet-sidebar.right.visible {
right: 0; }
.leaflet-sidebar > .leaflet-control {
height: 100%;
width: 100%;
overflow: auto;
-webkit-overflow-scrolling: touch;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 8px 24px;
font-size: 1.1em;
background: white;
box-shadow: 0 1px 7px rgba(0, 0, 0, 0.65);
-webkit-border-radius: 4px;
border-radius: 4px; }
.leaflet-touch .leaflet-sidebar > .leaflet-control {
box-shadow: none;
border: 2px solid rgba(0, 0, 0, 0.2);
background-clip: padding-box; }
@media (max-width: 767px) {
.leaflet-sidebar {
width: 100%;
padding: 0; }
.leaflet-sidebar.left.visible ~ .leaflet-left {
left: 100%; }
.leaflet-sidebar.right.visible ~ .leaflet-right {
right: 100%; }
.leaflet-sidebar.left {
left: -100%; }
.leaflet-sidebar.left.visible {
left: 0; }
.leaflet-sidebar.right {
right: -100%; }
.leaflet-sidebar.right.visible {
right: 0; }
.leaflet-sidebar > .leaflet-control {
box-shadow: none;
-webkit-border-radius: 0;
border-radius: 0; }
.leaflet-touch .leaflet-sidebar > .leaflet-control {
border: 0; } }
@media (min-width: 768px) and (max-width: 991px) {
.leaflet-sidebar {
width: 305px; }
.leaflet-sidebar.left.visible ~ .leaflet-left {
left: 305px; }
.leaflet-sidebar.right.visible ~ .leaflet-right {
right: 305px; } }
@media (min-width: 992px) and (max-width: 1199px) {
.leaflet-sidebar {
width: 390px; }
.leaflet-sidebar.left.visible ~ .leaflet-left {
left: 390px; }
.leaflet-sidebar.right.visible ~ .leaflet-right {
right: 390px; } }
@media (min-width: 1200px) {
.leaflet-sidebar {
width: 460px; }
.leaflet-sidebar.left.visible ~ .leaflet-left {
left: 460px; }
.leaflet-sidebar.right.visible ~ .leaflet-right {
right: 460px; } }
.leaflet-sidebar .close {
position: absolute;
right: 20px;
top: 20px;
width: 31px;
height: 31px;
color: #333;
font-size: 25px;
line-height: 1em;
text-align: center;
background: white;
-webkit-border-radius: 16px;
border-radius: 16px;
cursor: pointer;
z-index: 8; }
.leaflet-left {
transition: left 0.5s; }
.leaflet-right {
transition: right 0.5s; }

197
assets/component/leaflet/draw/lib/L.Control.Sidebar.js

@ -0,0 +1,197 @@
L.Control.Sidebar = L.Control.extend({
includes: L.Mixin.Events,
options: {
closeButton: true,
position: 'left',
autoPan: true,
},
initialize: function (placeholder, options) {
L.setOptions(this, options);
// Find content container
var content = this._contentContainer = L.DomUtil.get(placeholder);
// Remove the content container from its original parent
content.parentNode.removeChild(content);
var l = 'leaflet-';
// Create sidebar container
var container = this._container =
L.DomUtil.create('div', l + 'sidebar ' + this.options.position);
// Style and attach content container
L.DomUtil.addClass(content, l + 'control');
container.appendChild(content);
// Create close button and attach it if configured
if (this.options.closeButton) {
var close = this._closeButton =
L.DomUtil.create('a', 'close', container);
close.innerHTML = '&times;';
}
},
addTo: function (map) {
var container = this._container;
var content = this._contentContainer;
// Attach event to close button
if (this.options.closeButton) {
var close = this._closeButton;
L.DomEvent.on(close, 'click', this.hide, this);
}
L.DomEvent
.on(container, 'transitionend',
this._handleTransitionEvent, this)
.on(container, 'webkitTransitionEnd',
this._handleTransitionEvent, this);
// Attach sidebar container to controls container
var controlContainer = map._controlContainer;
controlContainer.insertBefore(container, controlContainer.firstChild);
this._map = map;
// Make sure we don't drag the map when we interact with the content
var stop = L.DomEvent.stopPropagation;
var fakeStop = L.DomEvent._fakeStop || stop;
L.DomEvent
.on(content, 'contextmenu', stop)
.on(content, 'click', fakeStop)
.on(content, 'mousedown', stop)
.on(content, 'touchstart', stop)
.on(content, 'dblclick', fakeStop)
.on(content, 'mousewheel', stop)
.on(content, 'MozMousePixelScroll', stop);
return this;
},
removeFrom: function (map) {
//if the control is visible, hide it before removing it.
this.hide();
var container = this._container;
var content = this._contentContainer;
// Remove sidebar container from controls container
var controlContainer = map._controlContainer;
controlContainer.removeChild(container);
//disassociate the map object
this._map = null;
// Unregister events to prevent memory leak
var stop = L.DomEvent.stopPropagation;
var fakeStop = L.DomEvent._fakeStop || stop;
L.DomEvent
.off(content, 'contextmenu', stop)
.off(content, 'click', fakeStop)
.off(content, 'mousedown', stop)
.off(content, 'touchstart', stop)
.off(content, 'dblclick', fakeStop)
.off(content, 'mousewheel', stop)
.off(content, 'MozMousePixelScroll', stop);
L.DomEvent
.off(container, 'transitionend',
this._handleTransitionEvent, this)
.off(container, 'webkitTransitionEnd',
this._handleTransitionEvent, this);
if (this._closeButton && this._close) {
var close = this._closeButton;
L.DomEvent.off(close, 'click', this.hide, this);
}
return this;
},
isVisible: function () {
return L.DomUtil.hasClass(this._container, 'visible');
},
show: function () {
if (!this.isVisible()) {
L.DomUtil.addClass(this._container, 'visible');
if (this.options.autoPan) {
this._map.panBy([-this.getOffset() / 2, 0], {
duration: 0.5
});
}
this.fire('show');
}
},
hide: function (e) {
if (this.isVisible()) {
L.DomUtil.removeClass(this._container, 'visible');
if (this.options.autoPan) {
this._map.panBy([this.getOffset() / 2, 0], {
duration: 0.5
});
}
this.fire('hide');
}
if(e) {
L.DomEvent.stopPropagation(e);
}
},
toggle: function () {
if (this.isVisible()) {
this.hide();
} else {
this.show();
}
},
getContainer: function () {
return this._contentContainer;
},
getCloseButton: function () {
return this._closeButton;
},
setContent: function (content) {
var container = this.getContainer();
if (typeof content === 'string') {
container.innerHTML = content;
} else {
// clean current content
while (container.firstChild) {
container.removeChild(container.firstChild);
}
container.appendChild(content);
}
return this;
},
getOffset: function () {
if (this.options.position === 'right') {
return -this._container.offsetWidth;
} else {
return this._container.offsetWidth;
}
},
_handleTransitionEvent: function (e) {
if (e.propertyName == 'left' || e.propertyName == 'right')
this.fire(this.isVisible() ? 'shown' : 'hidden');
}
});
L.control.sidebar = function (placeholder, options) {
return new L.Control.Sidebar(placeholder, options);
};

1916
assets/component/leaflet/draw/lib/Leaflet.Editable.js

File diff soppresso perché troppo grande Load Diff

60
assets/component/leaflet/draw/lib/MarkerCluster.Default.css

@ -0,0 +1,60 @@
.marker-cluster-small {
background-color: rgba(181, 226, 140, 0.6);
}
.marker-cluster-small div {
background-color: rgba(110, 204, 57, 0.6);
}
.marker-cluster-medium {
background-color: rgba(241, 211, 87, 0.6);
}
.marker-cluster-medium div {
background-color: rgba(240, 194, 12, 0.6);
}
.marker-cluster-large {
background-color: rgba(253, 156, 115, 0.6);
}
.marker-cluster-large div {
background-color: rgba(241, 128, 23, 0.6);
}
/* IE 6-8 fallback colors */
.leaflet-oldie .marker-cluster-small {
background-color: rgb(181, 226, 140);
}
.leaflet-oldie .marker-cluster-small div {
background-color: rgb(110, 204, 57);
}
.leaflet-oldie .marker-cluster-medium {
background-color: rgb(241, 211, 87);
}
.leaflet-oldie .marker-cluster-medium div {
background-color: rgb(240, 194, 12);
}
.leaflet-oldie .marker-cluster-large {
background-color: rgb(253, 156, 115);
}
.leaflet-oldie .marker-cluster-large div {
background-color: rgb(241, 128, 23);
}
.marker-cluster {
background-clip: padding-box;
border-radius: 20px;
}
.marker-cluster div {
width: 30px;
height: 30px;
margin-left: 5px;
margin-top: 5px;
text-align: center;
border-radius: 15px;
font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif;
}
.marker-cluster span {
line-height: 30px;
}

6
assets/component/leaflet/draw/lib/MarkerCluster.css

@ -0,0 +1,6 @@
.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {
-webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;
-moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;
-o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;
transition: transform 0.3s ease-out, opacity 0.3s ease-in;
}

2130
assets/component/leaflet/draw/lib/leaflet-wfst.src.js

File diff soppresso perché troppo grande Load Diff

52
assets/component/leaflet/draw/lib/leaflet.label.css

@ -0,0 +1,52 @@
.leaflet-label {
background: rgb(235, 235, 235);
background: rgba(235, 235, 235, 0.81);
background-clip: padding-box;
border-color: #777;
border-color: rgba(0,0,0,0.25);
border-radius: 4px;
border-style: solid;
border-width: 4px;
color: #111;
display: block;
font: 12px/20px "Helvetica Neue", Arial, Helvetica, sans-serif;
font-weight: bold;
padding: 1px 6px;
position: absolute;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
z-index: 6;
}
.leaflet-label.leaflet-clickable {
cursor: pointer;
}
.leaflet-label:before,
.leaflet-label:after {
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
content: none;
position: absolute;
top: 5px;
}
.leaflet-label:before {
border-right: 6px solid black;
border-right-color: inherit;
left: -10px;
}
.leaflet-label:after {
border-left: 6px solid black;
border-left-color: inherit;
right: -10px;
}
.leaflet-label-right:before,
.leaflet-label-left:after {
content: "";
}

209
assets/component/leaflet/draw/lib/leaflet.label.js

@ -0,0 +1,209 @@
/*
Leaflet.label, a plugin that adds labels to markers and vectors for Leaflet powered maps.
(c) 2012-2013, Jacob Toye, Smartrak
https://github.com/Leaflet/Leaflet.label
http://leafletjs.com
https://github.com/jacobtoye
*/
(function() {
L.labelVersion = "0.2.1", L.Label = L.Class.extend({
includes: L.Mixin.Events,
options: {
className: "",
clickable: !1,
direction: "right",
noHide: !1,
offset: [12, -15],
opacity: 1,
zoomAnimation: !0
},
initialize: function(t, e) {
L.setOptions(this, t), this._source = e, this._animated = L.Browser.any3d && this.options.zoomAnimation, this._isOpen = !1
},
onAdd: function(t) {
this._map = t, this._pane = this._source instanceof L.Marker ? t._panes.markerPane : t._panes.popupPane, this._container || this._initLayout(), this._pane.appendChild(this._container), this._initInteraction(), this._update(), this.setOpacity(this.options.opacity), t.on("moveend", this._onMoveEnd, this).on("viewreset", this._onViewReset, this), this._animated && t.on("zoomanim", this._zoomAnimation, this), L.Browser.touch && !this.options.noHide && L.DomEvent.on(this._container, "click", this.close, this)
},
onRemove: function(t) {
this._pane.removeChild(this._container), t.off({
zoomanim: this._zoomAnimation,
moveend: this._onMoveEnd,
viewreset: this._onViewReset
}, this), this._removeInteraction(), this._map = null
},
setLatLng: function(t) {
return this._latlng = L.latLng(t), this._map && this._updatePosition(), this
},
setContent: function(t) {
return this._previousContent = this._content, this._content = t, this._updateContent(), this
},
close: function() {
var t = this._map;
t && (L.Browser.touch && !this.options.noHide && L.DomEvent.off(this._container, "click", this.close), t.removeLayer(this))
},
updateZIndex: function(t) {
this._zIndex = t, this._container && this._zIndex && (this._container.style.zIndex = t)
},
setOpacity: function(t) {
this.options.opacity = t, this._container && L.DomUtil.setOpacity(this._container, t)
},
_initLayout: function() {
this._container = L.DomUtil.create("div", "leaflet-label " + this.options.className + " leaflet-zoom-animated"), this.updateZIndex(this._zIndex)
},
_update: function() {
this._map && (this._container.style.visibility = "hidden", this._updateContent(), this._updatePosition(), this._container.style.visibility = "")
},
_updateContent: function() {
this._content && this._map && this._prevContent !== this._content && "string" == typeof this._content && (this._container.innerHTML = this._content, this._prevContent = this._content, this._labelWidth = this._container.offsetWidth)
},
_updatePosition: function() {
var t = this._map.latLngToLayerPoint(this._latlng);
this._setPosition(t)
},
_setPosition: function(t) {
var e = this._map,
i = this._container,
n = e.latLngToContainerPoint(e.getCenter()),
o = e.layerPointToContainerPoint(t),
s = this.options.direction,
a = this._labelWidth,
l = L.point(this.options.offset);
"right" === s || "auto" === s && o.x < n.x ? (L.DomUtil.addClass(i, "leaflet-label-right"), L.DomUtil.removeClass(i, "leaflet-label-left"), t = t.add(l)) : (L.DomUtil.addClass(i, "leaflet-label-left"), L.DomUtil.removeClass(i, "leaflet-label-right"), t = t.add(L.point(-l.x - a, l.y))), L.DomUtil.setPosition(i, t)
},
_zoomAnimation: function(t) {
var e = this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center).round();
this._setPosition(e)
},
_onMoveEnd: function() {
this._animated && "auto" !== this.options.direction || this._updatePosition()
},
_onViewReset: function(t) {
t && t.hard && this._update()
},
_initInteraction: function() {
if (this.options.clickable) {
var t = this._container,
e = ["dblclick", "mousedown", "mouseover", "mouseout", "contextmenu"];
L.DomUtil.addClass(t, "leaflet-clickable"), L.DomEvent.on(t, "click", this._onMouseClick, this);
for (var i = 0; e.length > i; i++) L.DomEvent.on(t, e[i], this._fireMouseEvent, this)
}
},
_removeInteraction: function() {
if (this.options.clickable) {
var t = this._container,
e = ["dblclick", "mousedown", "mouseover", "mouseout", "contextmenu"];
L.DomUtil.removeClass(t, "leaflet-clickable"), L.DomEvent.off(t, "click", this._onMouseClick, this);
for (var i = 0; e.length > i; i++) L.DomEvent.off(t, e[i], this._fireMouseEvent, this)
}
},
_onMouseClick: function(t) {
this.hasEventListeners(t.type) && L.DomEvent.stopPropagation(t), this.fire(t.type, {
originalEvent: t
})
},
_fireMouseEvent: function(t) {
this.fire(t.type, {
originalEvent: t
}), "contextmenu" === t.type && this.hasEventListeners(t.type) && L.DomEvent.preventDefault(t), "mousedown" !== t.type ? L.DomEvent.stopPropagation(t) : L.DomEvent.preventDefault(t)
}
}), L.BaseMarkerMethods = {
showLabel: function() {
return this.label && this._map && (this.label.setLatLng(this._latlng), this._map.showLabel(this.label)), this
},
hideLabel: function() {
return this.label && this.label.close(), this
},
setLabelNoHide: function(t) {
this._labelNoHide !== t && (this._labelNoHide = t, t ? (this._removeLabelRevealHandlers(), this.showLabel()) : (this._addLabelRevealHandlers(), this.hideLabel()))
},
bindLabel: function(t, e) {
var i = this.options.icon ? this.options.icon.options.labelAnchor : this.options.labelAnchor,
n = L.point(i) || L.point(0, 0);
return n = n.add(L.Label.prototype.options.offset), e && e.offset && (n = n.add(e.offset)), e = L.Util.extend({
offset: n
}, e), this._labelNoHide = e.noHide, this.label || (this._labelNoHide || this._addLabelRevealHandlers(), this.on("remove", this.hideLabel, this).on("move", this._moveLabel, this).on("add", this._onMarkerAdd, this), this._hasLabelHandlers = !0), this.label = new L.Label(e, this).setContent(t), this
},
unbindLabel: function() {
return this.label && (this.hideLabel(), this.label = null, this._hasLabelHandlers && (this._labelNoHide || this._removeLabelRevealHandlers(), this.off("remove", this.hideLabel, this).off("move", this._moveLabel, this).off("add", this._onMarkerAdd, this)), this._hasLabelHandlers = !1), this
},
updateLabelContent: function(t) {
this.label && this.label.setContent(t)
},
getLabel: function() {
return this.label
},
_onMarkerAdd: function() {
this._labelNoHide && this.showLabel()
},
_addLabelRevealHandlers: function() {
this.on("mouseover", this.showLabel, this).on("mouseout", this.hideLabel, this), L.Browser.touch && this.on("click", this.showLabel, this)
},
_removeLabelRevealHandlers: function() {
this.off("mouseover", this.showLabel, this).off("mouseout", this.hideLabel, this), L.Browser.touch && this.off("click", this.showLabel, this)
},
_moveLabel: function(t) {
this.label.setLatLng(t.latlng)
}
}, L.Icon.Default.mergeOptions({
labelAnchor: new L.Point(9, -20)
}), L.Marker.mergeOptions({
icon: new L.Icon.Default
}), L.Marker.include(L.BaseMarkerMethods), L.Marker.include({
_originalUpdateZIndex: L.Marker.prototype._updateZIndex,
_updateZIndex: function(t) {
var e = this._zIndex + t;
this._originalUpdateZIndex(t), this.label && this.label.updateZIndex(e)
},
_originalSetOpacity: L.Marker.prototype.setOpacity,
setOpacity: function(t, e) {
this.options.labelHasSemiTransparency = e, this._originalSetOpacity(t)
},
_originalUpdateOpacity: L.Marker.prototype._updateOpacity,
_updateOpacity: function() {
var t = 0 === this.options.opacity ? 0 : 1;
this._originalUpdateOpacity(), this.label && this.label.setOpacity(this.options.labelHasSemiTransparency ? this.options.opacity : t)
},
_originalSetLatLng: L.Marker.prototype.setLatLng,
setLatLng: function(t) {
return this.label && !this._labelNoHide && this.hideLabel(), this._originalSetLatLng(t)
}
}), L.CircleMarker.mergeOptions({
labelAnchor: new L.Point(0, 0)
}), L.CircleMarker.include(L.BaseMarkerMethods), L.Path.include({
bindLabel: function(t, e) {
return this.label && this.label.options === e || (this.label = new L.Label(e, this)), this.label.setContent(t), this._showLabelAdded || (this.on("mouseover", this._showLabel, this).on("mousemove", this._moveLabel, this).on("mouseout remove", this._hideLabel, this), L.Browser.touch && this.on("click", this._showLabel, this), this._showLabelAdded = !0), this
},
unbindLabel: function() {
return this.label && (this._hideLabel(), this.label = null, this._showLabelAdded = !1, this.off("mouseover", this._showLabel, this).off("mousemove", this._moveLabel, this).off("mouseout remove", this._hideLabel, this)), this
},
updateLabelContent: function(t) {
this.label && this.label.setContent(t)
},
_showLabel: function(t) {
this.label.setLatLng(t.latlng), this._map.showLabel(this.label)
},
_moveLabel: function(t) {
this.label.setLatLng(t.latlng)
},
_hideLabel: function() {
this.label.close()
}
}), L.Map.include({
showLabel: function(t) {
return this.addLayer(t)
}
}), L.FeatureGroup.include({
clearLayers: function() {
return this.unbindLabel(), this.eachLayer(this.removeLayer, this), this
},
bindLabel: function(t, e) {
return this.invoke("bindLabel", t, e)
},
unbindLabel: function() {
return this.invoke("unbindLabel")
},
updateLabelContent: function(t) {
this.invoke("updateLabelContent", t)
}
})
})(this, document);

6
assets/component/leaflet/draw/lib/leaflet.markercluster.js

File diff suppressed because one or more lines are too long

384
assets/component/leaflet/draw/lib/leaflet.toolbar-src.js

@ -0,0 +1,384 @@
(function(window, document, undefined) {
"use strict";
// L.Layer was introduced in Leaflet 1.0 and is not present in earlier releases.
window.L.Toolbar2 = (L.Layer || L.Class).extend({
statics: {
baseClass: 'leaflet-toolbar'
},
options: {
className: '',
filter: function() { return true; },
actions: []
},
initialize: function(options) {
L.setOptions(this, options);
this._toolbar_type = this.constructor._toolbar_class_id;
},
addTo: function(map) {
this._arguments = [].slice.call(arguments);
map.addLayer(this);
return this;
},
onAdd: function(map) {
var currentToolbar = map._toolbars[this._toolbar_type];
if (this._calculateDepth() === 0) {
if (currentToolbar) { map.removeLayer(currentToolbar); }
map._toolbars[this._toolbar_type] = this;
}
},
onRemove: function(map) {
/*
* TODO: Cleanup event listeners.
* For some reason, this throws:
* "Uncaught TypeError: Cannot read property 'dragging' of null"
* on this._marker when a toolbar icon is clicked.
*/
// for (var i = 0, l = this._disabledEvents.length; i < l; i++) {
// L.DomEvent.off(this._ul, this._disabledEvents[i], L.DomEvent.stopPropagation);
// }
if (this._calculateDepth() === 0) {
delete map._toolbars[this._toolbar_type];
}
},
appendToContainer: function(container) {
var baseClass = this.constructor.baseClass + '-' + this._calculateDepth(),
className = baseClass + ' ' + this.options.className,
Action, action,
i, j, l, m;
this._container = container;
this._ul = L.DomUtil.create('ul', className, container);
// Ensure that clicks, drags, etc. don't bubble up to the map.
// These are the map events that the L.Draw.Polyline handler listens for.
// Note that L.Draw.Polyline listens to 'mouseup', not 'mousedown', but
// if only 'mouseup' is silenced, then the map gets stuck in a halfway
// state because it receives a 'mousedown' event and is waiting for the
// corresponding 'mouseup' event.
this._disabledEvents = [
'click', 'mousemove', 'dblclick',
'mousedown', 'mouseup', 'touchstart'
];
for (j = 0, m = this._disabledEvents.length; j < m; j++) {
L.DomEvent.on(this._ul, this._disabledEvents[j], L.DomEvent.stopPropagation);
}
/* Instantiate each toolbar action and add its corresponding toolbar icon. */
for (i = 0, l = this.options.actions.length; i < l; i++) {
Action = this._getActionConstructor(this.options.actions[i]);
action = new Action();
action._createIcon(this, this._ul, this._arguments);
}
},
_getActionConstructor: function(Action) {
var args = this._arguments,
toolbar = this;
return Action.extend({
initialize: function() {
Action.prototype.initialize.apply(this, args);
},
enable: function(e) {
/* Ensure that only one action in a toolbar will be active at a time. */
if (toolbar._active) { toolbar._active.disable(); }
toolbar._active = this;
Action.prototype.enable.call(this, e);
}
});
},
/* Used to hide subToolbars without removing them from the map. */
_hide: function() {
this._ul.style.display = 'none';
},
/* Used to show subToolbars without removing them from the map. */
_show: function() {
this._ul.style.display = 'block';
},
_calculateDepth: function() {
var depth = 0,
toolbar = this.parentToolbar;
while (toolbar) {
depth += 1;
toolbar = toolbar.parentToolbar;
}
return depth;
}
});
// L.Mixin.Events is replaced by L.Evented in Leaflet 1.0. L.Layer (also
// introduced in Leaflet 1.0) inherits from L.Evented, so if L.Layer is
// present, then L.Toolbar2 will already support events.
if (!L.Evented) {
L.Toolbar2.include(L.Mixin.Events);
}
L.toolbar = {};
var toolbar_class_id = 0;
L.Toolbar2.extend = function extend(props) {
var statics = L.extend({}, props.statics, {
"_toolbar_class_id": toolbar_class_id
});
toolbar_class_id += 1;
L.extend(props, { statics: statics });
return L.Class.extend.call(this, props);
};
L.Map.addInitHook(function() {
this._toolbars = {};
});
L.Toolbar2.Action = L.Handler.extend({
statics: {
baseClass: 'leaflet-toolbar-icon'
},
options: {
toolbarIcon: {
html: '',
className: '',
tooltip: ''
},
subToolbar: new L.Toolbar2()
},
initialize: function(options) {
var defaultIconOptions = L.Toolbar2.Action.prototype.options.toolbarIcon;
L.setOptions(this, options);
this.options.toolbarIcon = L.extend({}, defaultIconOptions, this.options.toolbarIcon);
},
enable: function(e) {
if (e) { L.DomEvent.preventDefault(e); }
if (this._enabled) { return; }
this._enabled = true;
if (this.addHooks) { this.addHooks(); }
},
disable: function() {
if (!this._enabled) { return; }
this._enabled = false;
if (this.removeHooks) { this.removeHooks(); }
},
_createIcon: function(toolbar, container, args) {
var iconOptions = this.options.toolbarIcon;
this.toolbar = toolbar;
this._icon = L.DomUtil.create('li', '', container);
this._link = L.DomUtil.create('a', '', this._icon);
this._link.innerHTML = iconOptions.html;
this._link.setAttribute('href', '#');
this._link.setAttribute('title', iconOptions.tooltip);
L.DomUtil.addClass(this._link, this.constructor.baseClass);
if (iconOptions.className) {
L.DomUtil.addClass(this._link, iconOptions.className);
}
L.DomEvent.on(this._link, 'click', this.enable, this);
/* Add secondary toolbar */
this._addSubToolbar(toolbar, this._icon, args);
},
_addSubToolbar: function(toolbar, container, args) {
var subToolbar = this.options.subToolbar,
addHooks = this.addHooks,
removeHooks = this.removeHooks;
/* For calculating the nesting depth. */
subToolbar.parentToolbar = toolbar;
if (subToolbar.options.actions.length > 0) {
/* Make a copy of args so as not to pollute the args array used by other actions. */
args = [].slice.call(args);
args.push(this);
subToolbar.addTo.apply(subToolbar, args);
subToolbar.appendToContainer(container);
this.addHooks = function(map) {
if (typeof addHooks === 'function') { addHooks.call(this, map); }
subToolbar._show();
};
this.removeHooks = function(map) {
if (typeof removeHooks === 'function') { removeHooks.call(this, map); }
subToolbar._hide();
};
}
}
});
L.toolbarAction = function toolbarAction(options) {
return new L.Toolbar2.Action(options);
};
L.Toolbar2.Action.extendOptions = function(options) {
return this.extend({ options: options });
};
L.Toolbar2.Control = L.Toolbar2.extend({
statics: {
baseClass: 'leaflet-control-toolbar ' + L.Toolbar2.baseClass
},
initialize: function(options) {
L.Toolbar2.prototype.initialize.call(this, options);
this._control = new L.Control.Toolbar(this.options);
},
onAdd: function(map) {
this._control.addTo(map);
L.Toolbar2.prototype.onAdd.call(this, map);
this.appendToContainer(this._control.getContainer());
},
onRemove: function(map) {
L.Toolbar2.prototype.onRemove.call(this, map);
if (this._control.remove) {this._control.remove();} // Leaflet 1.0
else {this._control.removeFrom(map);}
}
});
L.Control.Toolbar = L.Control.extend({
onAdd: function() {
return L.DomUtil.create('div', '');
}
});
L.toolbar.control = function(options) {
return new L.Toolbar2.Control(options);
};
// A convenience class for built-in popup toolbars.
L.Toolbar2.Popup = L.Toolbar2.extend({
statics: {
baseClass: 'leaflet-popup-toolbar ' + L.Toolbar2.baseClass
},
options: {
anchor: [0, 0]
},
initialize: function(latlng, options) {
L.Toolbar2.prototype.initialize.call(this, options);
/*
* Developers can't pass a DivIcon in the options for L.Toolbar2.Popup
* (the use of DivIcons is an implementation detail which may change).
*/
this._marker = new L.Marker(latlng, {
icon : new L.DivIcon({
className: this.options.className,
iconAnchor: [0, 0]
})
});
},
onAdd: function(map) {
this._map = map;
this._marker.addTo(map);
L.Toolbar2.prototype.onAdd.call(this, map);
this.appendToContainer(this._marker._icon);
this._setStyles();
},
onRemove: function(map) {
map.removeLayer(this._marker);
L.Toolbar2.prototype.onRemove.call(this, map);
delete this._map;
},
setLatLng: function(latlng) {
this._marker.setLatLng(latlng);
return this;
},
_setStyles: function() {
var container = this._container,
toolbar = this._ul,
anchor = L.point(this.options.anchor),
icons = toolbar.querySelectorAll('.leaflet-toolbar-icon'),
buttonHeights = [],
toolbarWidth = 0,
toolbarHeight,
tipSize,
tipAnchor;
/* Calculate the dimensions of the toolbar. */
for (var i = 0, l = icons.length; i < l; i++) {
if (icons[i].parentNode.parentNode === toolbar) {
buttonHeights.push(parseInt(L.DomUtil.getStyle(icons[i], 'height'), 10));
toolbarWidth += Math.ceil(parseFloat(L.DomUtil.getStyle(icons[i], 'width')));
toolbarWidth += Math.ceil(parseFloat(L.DomUtil.getStyle(icons[i], 'border-right-width')));
}
}
toolbar.style.width = toolbarWidth + 'px';
/* Create and place the toolbar tip. */
this._tipContainer = L.DomUtil.create('div', 'leaflet-toolbar-tip-container', container);
this._tipContainer.style.width = toolbarWidth +
Math.ceil(parseFloat(L.DomUtil.getStyle(toolbar, 'border-left-width'))) +
'px';
this._tip = L.DomUtil.create('div', 'leaflet-toolbar-tip', this._tipContainer);
/* Set the tipAnchor point. */
toolbarHeight = Math.max.apply(undefined, buttonHeights);
// Ensure that the border completely surrounds its relative-positioned children.
toolbar.style.height = toolbarHeight + 'px';
tipSize = parseInt(L.DomUtil.getStyle(this._tip, 'width'), 10);
// The tip should be anchored exactly where the click event was received.
tipAnchor = new L.Point(toolbarWidth/2, toolbarHeight + 1.414*tipSize);
/* The anchor option allows app developers to adjust the toolbar's position. */
container.style.marginLeft = (anchor.x - tipAnchor.x) + 'px';
container.style.marginTop = (anchor.y - tipAnchor.y) + 'px';
},
});
L.toolbar.popup = function(options) {
return new L.Toolbar2.Popup(options);
};
})(window, document);

Some files were not shown because too many files have changed in this diff Show More

Caricamento…
Annulla
Salva