Add checkbox to use one side for all remaining conflicts
This should be rewritten in a way that allows it to be unit tested, but it seems to work.
This commit is contained in:
parent
21ad09112c
commit
4625b7081e
|
@ -124,6 +124,8 @@
|
||||||
<property name="rightpane" onget="return this._rightpane"/>
|
<property name="rightpane" onget="return this._rightpane"/>
|
||||||
<property name="mergepane" onget="return this._mergepane"/>
|
<property name="mergepane" onget="return this._mergepane"/>
|
||||||
|
|
||||||
|
<property name="onSelectionChange"/>
|
||||||
|
|
||||||
<field name="_leftpane"/>
|
<field name="_leftpane"/>
|
||||||
<field name="_rightpane"/>
|
<field name="_rightpane"/>
|
||||||
<field name="_mergepane"/>
|
<field name="_mergepane"/>
|
||||||
|
@ -397,6 +399,10 @@
|
||||||
else {
|
else {
|
||||||
mergepane.ref = pane.original;
|
mergepane.ref = pane.original;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mergegroup.onSelectionChange) {
|
||||||
|
mergegroup.onSelectionChange();
|
||||||
|
}
|
||||||
]]>
|
]]>
|
||||||
</body>
|
</body>
|
||||||
</method>
|
</method>
|
||||||
|
|
|
@ -62,6 +62,7 @@ var Zotero_Merge_Window = new function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
_mergeGroup.type = _io.dataIn.type;
|
_mergeGroup.type = _io.dataIn.type;
|
||||||
|
_mergeGroup.onSelectionChange = _updateResolveAllCheckbox;
|
||||||
|
|
||||||
switch (_mergeGroup.type) {
|
switch (_mergeGroup.type) {
|
||||||
case 'item':
|
case 'item':
|
||||||
|
@ -78,6 +79,8 @@ var Zotero_Merge_Window = new function () {
|
||||||
_mergeGroup.rightCaption = _io.dataIn.captions[1];
|
_mergeGroup.rightCaption = _io.dataIn.captions[1];
|
||||||
_mergeGroup.mergeCaption = _io.dataIn.captions[2];
|
_mergeGroup.mergeCaption = _io.dataIn.captions[2];
|
||||||
|
|
||||||
|
_resolveAllCheckbox = document.getElementById('resolve-all');
|
||||||
|
|
||||||
_numObjects = document.getElementById('zotero-merge-num-objects');
|
_numObjects = document.getElementById('zotero-merge-num-objects');
|
||||||
document.getElementById('zotero-merge-total-objects').value = _objects.length;
|
document.getElementById('zotero-merge-total-objects').value = _objects.length;
|
||||||
|
|
||||||
|
@ -101,8 +104,15 @@ var Zotero_Merge_Window = new function () {
|
||||||
|
|
||||||
// Restore previously merged object into merge pane
|
// Restore previously merged object into merge pane
|
||||||
_mergeGroup.merge = _merged[_pos].ref;
|
_mergeGroup.merge = _merged[_pos].ref;
|
||||||
_mergeGroup.leftpane.removeAttribute("selected");
|
if (_merged[_pos].id == _mergeGroup.left.id) {
|
||||||
|
_mergeGroup.leftpane.setAttribute("selected", "true");
|
||||||
_mergeGroup.rightpane.removeAttribute("selected");
|
_mergeGroup.rightpane.removeAttribute("selected");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_mergeGroup.leftpane.removeAttribute("selected");
|
||||||
|
_mergeGroup.rightpane.setAttribute("selected", "true");
|
||||||
|
}
|
||||||
|
_updateResolveAllCheckbox();
|
||||||
|
|
||||||
if (_mergeGroup.type == 'item') {
|
if (_mergeGroup.type == 'item') {
|
||||||
_updateChangedCreators();
|
_updateChangedCreators();
|
||||||
|
@ -125,7 +135,7 @@ var Zotero_Merge_Window = new function () {
|
||||||
|
|
||||||
|
|
||||||
function onNext() {
|
function onNext() {
|
||||||
if (_pos + 1 == _objects.length) {
|
if (_pos + 1 == _objects.length || _resolveAllCheckbox.checked) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,12 +170,75 @@ var Zotero_Merge_Window = new function () {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_updateResolveAllCheckbox();
|
||||||
|
|
||||||
if (_mergeGroup.type == 'item') {
|
if (_mergeGroup.type == 'item') {
|
||||||
_updateChangedCreators();
|
_updateChangedCreators();
|
||||||
}
|
}
|
||||||
|
|
||||||
// On Windows the buttons don't move when one is hidden
|
if (_isLastConflict()) {
|
||||||
if ((_pos + 1) != _objects.length) {
|
_showFinishButton();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_showNextButton();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function onFinish() {
|
||||||
|
// If using one side for all remaining, update merge object
|
||||||
|
if (!_isLastConflict() && _resolveAllCheckbox.checked) {
|
||||||
|
let useRemote = _mergeGroup.rightpane.getAttribute("selected") == "true";
|
||||||
|
for (let i = _pos; i < _objects.length; i++) {
|
||||||
|
_merged[i] = _getMergeObject(
|
||||||
|
_objects[i][useRemote ? 1 : 0],
|
||||||
|
_objects[i][0],
|
||||||
|
_objects[i][1]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_merged[_pos] = _getCurrentMergeObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
_io.dataOut = _merged;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function onCancel() {
|
||||||
|
// if already merged, ask
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
this.onResolveAllChange = function (resolveAll) {
|
||||||
|
if (resolveAll || _isLastConflict()) {
|
||||||
|
_showFinishButton();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_showNextButton();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _updateResolveAllCheckbox() {
|
||||||
|
if (_mergeGroup.rightpane.getAttribute("selected") == 'true') {
|
||||||
|
var label = 'sync.merge.resolveAllRemote';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var label = 'sync.merge.resolveAllLocal';
|
||||||
|
}
|
||||||
|
_resolveAllCheckbox.label = Zotero.getString(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _isLastConflict() {
|
||||||
|
return (_pos + 1) == _objects.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _showNextButton() {
|
||||||
var nextButton = _wizard.getButton("next");
|
var nextButton = _wizard.getButton("next");
|
||||||
|
|
||||||
if (Zotero.isMac) {
|
if (Zotero.isMac) {
|
||||||
|
@ -180,8 +253,9 @@ var Zotero_Merge_Window = new function () {
|
||||||
|
|
||||||
_setInstructionsString(nextButton.label);
|
_setInstructionsString(nextButton.label);
|
||||||
}
|
}
|
||||||
// Last object
|
|
||||||
else {
|
|
||||||
|
function _showFinishButton() {
|
||||||
var finishButton = _wizard.getButton("finish");
|
var finishButton = _wizard.getButton("finish");
|
||||||
|
|
||||||
if (Zotero.isMac) {
|
if (Zotero.isMac) {
|
||||||
|
@ -199,35 +273,23 @@ var Zotero_Merge_Window = new function () {
|
||||||
_setInstructionsString(finishButton.label);
|
_setInstructionsString(finishButton.label);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
function _getMergeObject(ref, left, right) {
|
||||||
|
var id = ref == 'deleted'
|
||||||
|
? (left == 'deleted' ? right.id : left.id)
|
||||||
|
: ref.id;
|
||||||
|
|
||||||
function onFinish() {
|
return {
|
||||||
_merged[_pos] = _getCurrentMergeObject();
|
id: id,
|
||||||
|
ref: ref,
|
||||||
_io.dataOut = _merged;
|
left: left,
|
||||||
return true;
|
right: right
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
function onCancel() {
|
|
||||||
// if already merged, ask
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function _getCurrentMergeObject() {
|
function _getCurrentMergeObject() {
|
||||||
var id = _mergeGroup.merge == 'deleted' ?
|
return _getMergeObject(_mergeGroup.merge, _mergeGroup.left, _mergeGroup.right);
|
||||||
(_mergeGroup.left == 'deleted'
|
|
||||||
? _mergeGroup.right.id : _mergeGroup.left.id)
|
|
||||||
: _mergeGroup.merge.id;
|
|
||||||
|
|
||||||
return {
|
|
||||||
id: id,
|
|
||||||
ref: _mergeGroup.merge,
|
|
||||||
left: _mergeGroup.left,
|
|
||||||
right: _mergeGroup.right
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,10 +48,18 @@
|
||||||
<description id="zotero-merge-instructions"/>
|
<description id="zotero-merge-instructions"/>
|
||||||
<zoteromergegroup flex="1"/>
|
<zoteromergegroup flex="1"/>
|
||||||
<separator class="thin"/>
|
<separator class="thin"/>
|
||||||
|
<hbox align="center">
|
||||||
|
<separator orient="vertical" flex="1"/>
|
||||||
|
<hbox>
|
||||||
|
<checkbox id="resolve-all"
|
||||||
|
oncommand="Zotero_Merge_Window.onResolveAllChange(this.checked)"/>
|
||||||
|
</hbox>
|
||||||
|
<separator orient="vertical"/>
|
||||||
<hbox id="zotero-step-count">
|
<hbox id="zotero-step-count">
|
||||||
<label id="zotero-merge-num-objects"/>
|
<label id="zotero-merge-num-objects"/>
|
||||||
<label value="&zotero.merge.of;"/>
|
<label value="&zotero.merge.of;"/>
|
||||||
<label id="zotero-merge-total-objects"/>
|
<label id="zotero-merge-total-objects"/>
|
||||||
</hbox>
|
</hbox>
|
||||||
|
</hbox>
|
||||||
</wizardpage>
|
</wizardpage>
|
||||||
</wizard>
|
</wizard>
|
||||||
|
|
|
@ -770,6 +770,9 @@ sync.removeGroupsAndSync = Remove Groups and Sync
|
||||||
sync.localObject = Local Object
|
sync.localObject = Local Object
|
||||||
sync.remoteObject = Remote Object
|
sync.remoteObject = Remote Object
|
||||||
sync.mergedObject = Merged Object
|
sync.mergedObject = Merged Object
|
||||||
|
sync.merge.resolveAllLocal = Use the local version for all remaining conflicts
|
||||||
|
sync.merge.resolveAllRemote = Use the remote version for all remaining conflicts
|
||||||
|
|
||||||
|
|
||||||
sync.error.usernameNotSet = Username not set
|
sync.error.usernameNotSet = Username not set
|
||||||
sync.error.usernameNotSet.text = You must enter your zotero.org username and password in the Zotero preferences to sync with the Zotero server.
|
sync.error.usernameNotSet.text = You must enter your zotero.org username and password in the Zotero preferences to sync with the Zotero server.
|
||||||
|
|
|
@ -40,8 +40,9 @@ wizard > deck {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#zotero-step-count {
|
|
||||||
-moz-box-pack: end;
|
#resolve-all {
|
||||||
|
font-size: 1.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#zotero-step-count label:first-child {
|
#zotero-step-count label:first-child {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user