186 lines
5.5 KiB
Mako
186 lines
5.5 KiB
Mako
## -*- coding: utf-8 -*-
|
|
<%inherit file="/page.mako" />
|
|
|
|
<%def name="title()">Merge 2 ${model_title_plural}</%def>
|
|
|
|
<%def name="extra_styles()">
|
|
${parent.extra_styles()}
|
|
<style type="text/css">
|
|
p {
|
|
margin: 20px auto;
|
|
}
|
|
p.warning,
|
|
p.warning strong {
|
|
color: red;
|
|
}
|
|
a.merge-object {
|
|
font-weight: bold;
|
|
}
|
|
|
|
table.diff {
|
|
background-color: White;
|
|
border-collapse: collapse;
|
|
border-left: 1px solid black;
|
|
border-top: 1px solid black;
|
|
font-size: 11pt;
|
|
margin-left: 50px;
|
|
min-width: 80%;
|
|
}
|
|
|
|
table th,
|
|
table td {
|
|
border-bottom: 1px solid black;
|
|
border-right: 1px solid black;
|
|
}
|
|
|
|
table td {
|
|
padding: 5px 10px;
|
|
}
|
|
|
|
table td.value {
|
|
font-family: monospace;
|
|
white-space: pre;
|
|
}
|
|
|
|
table.diff tr.diff td.keep-value {
|
|
background-color: #cfc;
|
|
}
|
|
table.diff tr.diff td.remove-value {
|
|
background-color: #fcc;
|
|
}
|
|
table.diff td.result-value.diff {
|
|
background-color: #fe8;
|
|
}
|
|
div.buttons {
|
|
margin-top: 20px;
|
|
}
|
|
</style>
|
|
</%def>
|
|
|
|
<%def name="context_menu_items()">
|
|
<li>${h.link_to("Back to {}".format(model_title_plural), url(route_prefix))}</li>
|
|
</%def>
|
|
|
|
<%def name="page_content()">
|
|
<p>
|
|
You are about to <strong>merge</strong> two ${model_title} records,
|
|
(possibly) along with various related data. The tool you are using now
|
|
is somewhat generic and is not able to give you the full picture of the
|
|
implications of this merge. You are urged to proceed with caution!
|
|
</p>
|
|
|
|
<p class="warning">
|
|
<strong>Unless you know what you're doing, a good rule of thumb (though still no
|
|
guarantee) is to merge <em>only</em> if the "resulting" column is all-white.</strong>
|
|
(You may be able to swap kept/removed in order to achieve this.)
|
|
</p>
|
|
|
|
<p>
|
|
The ${h.link_to("{} on the left".format(model_title), view_url(object_to_remove), target='_blank', class_='merge-object')}
|
|
will be <strong>deleted</strong>
|
|
and the ${h.link_to("{} on the right".format(model_title), view_url(object_to_keep), target='_blank', class_='merge-object')}
|
|
will be <strong>kept</strong>. The one which is to be kept may also
|
|
be updated to reflect certain aspects of the one being deleted; however again
|
|
the details are up to the app logic for this type of merge and aren't fully
|
|
known to the generic tool which you're using now.
|
|
</p>
|
|
|
|
<table class="diff">
|
|
<thead>
|
|
<tr>
|
|
<th>field name</th>
|
|
<th>deleting ${model_title}</th>
|
|
<th>keeping ${model_title}</th>
|
|
<th>resulting ${model_title}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
% for field in sorted(merge_fields):
|
|
<tr${' class="diff"' if keep_data[field] != remove_data[field] else ''|n}>
|
|
<td class="field">${field}</td>
|
|
<td class="value remove-value">${repr(remove_data[field])}</td>
|
|
<td class="value keep-value">${repr(keep_data[field])}</td>
|
|
<td class="value result-value${' diff' if resulting_data[field] != keep_data[field] else ''}">${repr(resulting_data[field])}</td>
|
|
</tr>
|
|
% endfor
|
|
</tbody>
|
|
</table>
|
|
|
|
<merge-buttons></merge-buttons>
|
|
</%def>
|
|
|
|
<%def name="render_this_page_template()">
|
|
${parent.render_this_page_template()}
|
|
|
|
<script type="text/x-template" id="merge-buttons-template">
|
|
<div class="level" style="margin-top: 2em;">
|
|
<div class="level-left">
|
|
|
|
<div class="level-item">
|
|
<a class="button" href="${index_url}">Whoops, nevermind</a>
|
|
</div>
|
|
|
|
<div class="level-item">
|
|
${h.form(request.current_route_url(), **{'@submit': 'submitSwapForm'})}
|
|
${h.csrf_token(request)}
|
|
${h.hidden('uuids', value=f'{keeping_uuid},{removing_uuid}')}
|
|
<b-button native-type="submit"
|
|
:disabled="swapFormSubmitting">
|
|
{{ swapFormButtonText }}
|
|
</b-button>
|
|
${h.end_form()}
|
|
</div>
|
|
|
|
<div class="level-item">
|
|
${h.form(request.current_route_url(), **{'@submit': 'submitMergeForm'})}
|
|
${h.csrf_token(request)}
|
|
${h.hidden('uuids', value=f'{removing_uuid},{keeping_uuid}')}
|
|
${h.hidden('commit-merge', value='yes')}
|
|
<b-button type="is-primary"
|
|
native-type="submit"
|
|
:disabled="mergeFormSubmitting">
|
|
{{ mergeFormButtonText }}
|
|
</b-button>
|
|
${h.end_form()}
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</script>
|
|
</%def>
|
|
|
|
<%def name="make_this_page_component()">
|
|
${parent.make_this_page_component()}
|
|
<script type="text/javascript">
|
|
|
|
const MergeButtons = {
|
|
template: '#merge-buttons-template',
|
|
data() {
|
|
return {
|
|
swapFormButtonText: "Swap which ${model_title} is kept/removed",
|
|
swapFormSubmitting: false,
|
|
mergeFormButtonText: "Yes, perform this merge",
|
|
mergeFormSubmitting: false,
|
|
}
|
|
},
|
|
methods: {
|
|
submitSwapForm() {
|
|
this.swapFormSubmitting = true
|
|
this.swapFormButtonText = "Swapping, please wait..."
|
|
},
|
|
submitMergeForm() {
|
|
this.mergeFormSubmitting = true
|
|
this.mergeFormButtonText = "Merging, please wait..."
|
|
},
|
|
}
|
|
}
|
|
|
|
Vue.component('merge-buttons', MergeButtons)
|
|
|
|
<% request.register_component('merge-buttons', 'MergeButtons') %>
|
|
|
|
</script>
|
|
</%def>
|
|
|
|
|
|
${parent.body()}
|
|
|