104 lines
3.1 KiB
JavaScript
104 lines
3.1 KiB
JavaScript
async function upgradeDoc(docID, options)
|
|
{
|
|
const newData = await zui.fetchData(options.docFetcher, [{docID, version: 0}]);
|
|
if(!newData || !newData.data) return false;
|
|
const oldContent = newData.data.content;
|
|
let content = '';
|
|
if(options.type === 'html')
|
|
{
|
|
const snap = await zui.Editor.htmlToSnap(oldContent);
|
|
if(!snap) return false;
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
content = await zui.Editor.convertToHtml(oldContent, undefined, options.downloadUrl);
|
|
}
|
|
catch(error)
|
|
{
|
|
console.warn('Convert doc to html failed:', error);
|
|
}
|
|
}
|
|
const docData = {content};
|
|
let result;
|
|
await $.post(zui.formatString(options.migrateUrl, {docID: docID}), docData, (res) =>
|
|
{
|
|
result = res.result === 'success' ? true : res.message;
|
|
}, 'json');
|
|
return result;
|
|
}
|
|
|
|
async function upgradeWikis(idList, options)
|
|
{
|
|
let result;
|
|
await $.post(options.wikiUrl, {wikis: idList.join(',')}, (res) =>
|
|
{
|
|
result = res.result === 'success' ? true : res.message;
|
|
}, 'json');
|
|
return result;
|
|
}
|
|
|
|
async function upgradeDocs(idList, options)
|
|
{
|
|
await zui.Editor.loadModule();
|
|
const {
|
|
onProgress,
|
|
wikiUrl = $.createLink('upgrade', 'ajaxUpgradeWikis'),
|
|
migrateUrl = $.createLink('upgrade', 'ajaxUpgradeDoc', 'docID={docID}'),
|
|
docFetcher = $.createLink('upgrade', 'ajaxUpgradeDoc', 'docID={docID}'),
|
|
downloadUrl = $.createLink('file', 'ajaxQuery', 'fileID={gid}'),
|
|
} = options || {};
|
|
const migrateOptions =
|
|
{
|
|
migrateUrl: migrateUrl,
|
|
docFetcher: docFetcher,
|
|
downloadUrl: downloadUrl,
|
|
};
|
|
let current = 0;
|
|
const total = idList.doc.length + idList.html.length + idList.wiki.length;
|
|
const types = ['doc', 'html'];
|
|
for (const type of types)
|
|
{
|
|
for(const id of idList[type])
|
|
{
|
|
onProgress(current, total);
|
|
await upgradeDoc(id, $.extend({type: type}, migrateOptions));
|
|
await zui.delay(50);
|
|
current++;
|
|
}
|
|
}
|
|
|
|
if(idList.wiki.length)
|
|
{
|
|
await upgradeWikis(idList.wiki, {wikiUrl: wikiUrl});
|
|
current += idList.wiki.length;
|
|
}
|
|
|
|
onProgress(current, total);
|
|
return idList;
|
|
}
|
|
|
|
window.startUpgradeDocs = function(event, idList, upgradingDocsText, nextText)
|
|
{
|
|
const $btn = $('#upgradeDocsBtn');
|
|
if($btn.hasClass('is-finished')) return;
|
|
|
|
event.preventDefault();
|
|
const $progressBar = $('#upgradeDocsProgress').addClass('active').find('.progress-bar');
|
|
$btn.attr('disabled', 'disabled').addClass('disabled').removeClass('primary').find('.text').text(upgradingDocsText);
|
|
upgradeDocs(idList,
|
|
{
|
|
onProgress: (current, total) =>
|
|
{
|
|
$progressBar.css('width', (100 * current / total) + '%');
|
|
$btn.find('.text').text(`${upgradingDocsText} (${current}/${total})`);
|
|
}
|
|
}).then(() =>
|
|
{
|
|
$btn.removeAttr('disabled').removeClass('disabled').addClass('primary is-finished').find('.text').text(nextText);
|
|
$('#upgradeDocsProgress').removeClass('active')
|
|
});
|
|
|
|
};
|