You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

133 lines
5.4 KiB

{if $edit_features.field}
{tikimodule error=$module_params.error title=$tpl_module_title name="map_edit_features" flip=$module_params.flip decorations=$module_params.decorations nobox=$module_params.nobox notitle=$module_params.notitle}
<form class="map-edit-features" method="post" action="{service controller=tracker action=insert_item}">
<div class="submit">
<input type="hidden" name="trackerId" value="{$edit_features.trackerId|escape}"/>
<input type="hidden" name="controller" value="tracker"/>
<input type="hidden" name="action" value="insert_item"/>
<input class="feature-content" id="{$edit_features.field.fieldId|escape}" type="hidden" name="forced~{$edit_features.field.permName|escape}"/>
{foreach from=$edit_features.hiddenInput key=f item=v}
<input id="{$f|escape}" type="hidden" name="forced~{$f|escape}" value="{$v|escape}"/>
{/foreach}
<input type="submit" class="btn btn-primary btn-sm" name="create" value="{tr}Create{/tr}"/>
</div>
</form>
{jq}
$(function () {
var map, activeFeature, form = $('.map-edit-features').hide();
form
.removeClass('map-edit-features')
.submit(function () {
if (! activeFeature) {
return false;
}
var form = this;
$.post($(form).attr('action'), $(form).serialize(), null, 'json')
.success(function (data) {
$(form).trigger('insert', [data]);
})
.error(function () {
$(this).serviceDialog({
title: $(':submit', form).val(),
data: $(form).serialize(),
success: function () {
$(form).trigger('insert', [{}]);
},
close: function () {
$(form).trigger('cancel');
}
});
})
;
return false;
})
.each(function () {
map = $(this).closest('.tab, #appframe, body').find('.map-container:first')[0];
if (! map) {
return;
}
$(this).show();
});
$(map).one('initialized', function () {
var vlayer = map.vectors, toolbar, modify;
function saveFeature() {
var format = new OpenLayers.Format.GeoJSON;
form.find('.feature-content').val(format.write(activeFeature));
}
{{if $prefs.geo_openlayers_version eq 'ol2'}}
vlayer.events.on({
featureadded: function (event) {
var format = new OpenLayers.Format.GeoJSON;
if (! event.feature.attributes.itemId && event.feature.attributes.intent !== 'marker') {
if (activeFeature) {
vlayer.removeFeatures([activeFeature]);
activeFeature = null;
}
activeFeature = event.feature;
saveFeature();
form.submit();
}
},
featuremodified: function (event) {
if (event.feature === activeFeature) {
saveFeature();
}
}
});
{{if $edit_features.standardControls}}
modify = new OpenLayers.Control.ModifyFeature(vlayer, {
mode: OpenLayers.Control.ModifyFeature.DRAG | OpenLayers.Control.ModifyFeature.RESHAPE,
});
toolbar = new OpenLayers.Control.EditingToolbar(vlayer);
toolbar.addControls([modify]);
map.modeManager.addMode({
name: 'Draw',
controls: [ toolbar ]
});
{{/if}}
{{/if}}
form.bind('insert', function (e, data) {
var form = this;
$(map).trigger('changed');
map.vectors.removeFeatures([activeFeature]);
activeFeature = null;
{{if $edit_features.editDetails}}
if (data.itemId) {
$('<a>').attr('href', $.service('tracker', 'update_item'))
.serviceDialog({
data: {
trackerId: $(form.trackerId).val(),
itemId: data.itemId
},
success: function () {
$(map).trigger('changed');
}
});
}
{{/if}}
{{if $edit_features.insertMode}}
map.modeManager.switchTo({{$edit_features.insertMode|json_encode}});
{{/if}}
});
});
});
{/jq}
{/tikimodule}
{else}
{remarksbox type=warning title="{tr}Module misconfigured{/tr}"}
{tr}No acceptable field to store the feature was found in the specified tracker.{/tr}
{/remarksbox}
{/if}