diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 8facea567..3ebec5abf 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -627,6 +627,10 @@ "message": "Import from cloud storage", "description": "tooltip" }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, "cloudNoData": { "message": "...\n...", "description": "" diff --git a/src/css/cloud-ui.css b/src/css/cloud-ui.css index b96ad8811..a9519fc69 100644 --- a/src/css/cloud-ui.css +++ b/src/css/cloud-ui.css @@ -9,32 +9,32 @@ display: none; } #cloudWidget > button { - font-size: 160%; - padding: 0.1em 0.2em; - } -#cloudPull[disabled] { - visibility: hidden; - } -#cloudPush:after , -#cloudPull:before { + display: inline-block; font-family: FontAwesome; + font-size: 160%; font-style: normal; font-weight: normal; line-height: 1; + padding: 0.2em 0.25em 0.1em 0.25em; + position: relative; vertical-align: baseline; - display: inline-block; } -body[dir="ltr"] #cloudPush:after { +#cloudWidget > button[disabled] { + visibility: hidden; + } +#cloudPush:after { content: '\f0ee'; } -body[dir="rtl"] #cloudPush:after { - content: '\f0ee'; - } -body[dir="ltr"] #cloudPull:before { - content: '\f0ed'; - } -body[dir="rtl"] #cloudPull:before { +#cloudPull:before, +#cloudPullAndMerge:before { content: '\f0ed'; +} +#cloudPullAndMerge:after { + content: '\f067'; + font-size: 50%; + position: absolute; + right: 0; + top: 10%; } #cloudWidget > span { color: gray; diff --git a/src/js/3p-filters.js b/src/js/3p-filters.js index b5fca1bdf..2598c1cdb 100644 --- a/src/js/3p-filters.js +++ b/src/js/3p-filters.js @@ -501,7 +501,7 @@ var renderExternalLists = function() { var externalListsChangeHandler = function() { uDom.nodeFromId('externalListsApply').disabled = - uDom.nodeFromId('externalLists').value.trim() === externalLists; + uDom.nodeFromId('externalLists').value.trim() === externalLists.trim(); }; /******************************************************************************/ @@ -551,27 +551,35 @@ var getCloudData = function() { return bin; }; -var setCloudData = function(data) { +var setCloudData = function(data, append) { if ( typeof data !== 'object' || data === null ) { return; } - var checked = data.parseCosmeticFilters === true; - uDom.nodeFromId('parseCosmeticFilters').checked = checked; - listDetails.cosmetic = checked; + var elem, checked; - var lis = uDom('#lists .listEntry'), li, input, listKey; + elem = uDom.nodeFromId('parseCosmeticFilters'); + checked = data.parseCosmeticFilters === true || + append && elem.checked; + elem.checked = listDetails.cosmetic = checked; + + var lis = uDom('#lists .listEntry'), li, listKey; var i = lis.length; while ( i-- ) { li = lis.at(i); - input = li.descendants('input'); + elem = li.descendants('input'); listKey = li.descendants('a').attr('data-listkey'); - checked = data.selectedLists.indexOf(listKey) !== -1; - input.prop('checked', checked); + checked = data.selectedLists.indexOf(listKey) !== -1 || + append && elem.prop('checked'); + elem.prop('checked', checked); listDetails.available[listKey].off = !checked; } - uDom.nodeFromId('externalLists').value = data.externalLists || ''; + elem = uDom.nodeFromId('externalLists'); + if ( !append ) { + elem.value = ''; + } + elem.value += data.externalLists || ''; renderWidgets(); externalListsChangeHandler(); diff --git a/src/js/cloud-ui.js b/src/js/cloud-ui.js index f129dc750..510a2cfa8 100644 --- a/src/js/cloud-ui.js +++ b/src/js/cloud-ui.js @@ -62,6 +62,7 @@ var onCloudDataReceived = function(entry) { self.cloud.data = entry.data; uDom.nodeFromId('cloudPull').removeAttribute('disabled'); + uDom.nodeFromId('cloudPullAndMerge').removeAttribute('disabled'); var timeOptions = { weekday: 'short', @@ -110,9 +111,17 @@ var pushData = function() { /******************************************************************************/ -var pullData = function(ev) { +var pullData = function() { if ( typeof self.cloud.onPull === 'function' ) { - self.cloud.onPull(self.cloud.data, ev.shiftKey); + self.cloud.onPull(self.cloud.data, false); + } +}; + +/******************************************************************************/ + +var pullAndMergeData = function() { + if ( typeof self.cloud.onPull === 'function' ) { + self.cloud.onPull(self.cloud.data, true); } }; @@ -171,7 +180,8 @@ var onInitialize = function(options) { var html = [ '', '', - '', + ' ', + '', '', '