MediaWiki:Common.js: Difference between revisions
Training materials upload progress bar |
Append uploads to Training materials/Library subpage |
||
| Line 3,213: | Line 3,213: | ||
$slot.data('rbCampManualUpload', 1); | $slot.data('rbCampManualUpload', 1); | ||
var | var LIBRARY = 'Training materials/Library'; | ||
var PLACEHOLDER = "''No manuals listed yet. Upload a PDF above and it will appear here.''"; | var PLACEHOLDER = "''No manuals listed yet. Upload a PDF above and it will appear here.''"; | ||
var DOC_EXT = /\.(pdf|docx?|txt|rtf|odt|tiff?|jpe?g|png|gif|webp)$/i; | var DOC_EXT = /\.(pdf|docx?|txt|rtf|odt|tiff?|jpe?g|png|gif|webp)$/i; | ||
| Line 3,333: | Line 3,331: | ||
function appendToLibrary(api, filename, displayTitle, note) { | function appendToLibrary(api, filename, displayTitle, note) { | ||
var bullet = buildBullet(filename, displayTitle, note); | |||
return api.get({ | return api.get({ | ||
action: 'query', | action: 'query', | ||
prop: 'revisions', | prop: 'revisions|info', | ||
titles: | titles: LIBRARY, | ||
rvprop: 'content', | rvprop: 'content|timestamp', | ||
rvslots: 'main', | rvslots: 'main', | ||
formatversion: 2 | curtimestamp: 1, | ||
formatversion: 2, | |||
maxage: 0, | |||
smaxage: 0 | |||
}).then(function (data) { | }).then(function (data) { | ||
var page = data.query && data.query.pages && data.query.pages[0]; | var page = data.query && data.query.pages && data.query.pages[0]; | ||
var | var rev = page && page.revisions && page.revisions[0]; | ||
var text = (rev && rev.slots && rev.slots.main && rev.slots.main.content) || ''; | |||
var basets = rev && rev.timestamp; | |||
var | var startts = data.curtimestamp; | ||
var | var next; | ||
if ( | var trimmed = $.trim(text); | ||
if (!trimmed || trimmed.indexOf(PLACEHOLDER) !== -1) { | |||
} | next = bullet + '\n'; | ||
} else if (trimmed.indexOf('[[Media:' + filename + '|') !== -1 || | |||
trimmed.indexOf('[[File:' + filename + '|') !== -1) { | |||
next = text; | |||
} else { | } else { | ||
next = trimmed + '\n' + bullet + '\n'; | |||
} | } | ||
var | var params = { | ||
action: 'edit', | action: 'edit', | ||
title: | title: LIBRARY, | ||
text: next, | text: next, | ||
summary: 'Add training material: ' + filename, | summary: 'Add training material: ' + filename, | ||
format: 'json' | format: 'json' | ||
}; | |||
if (basets) { | |||
params.basetimestamp = basets; | |||
} | |||
if (startts) { | |||
params.starttimestamp = startts; | |||
} | |||
return api.postWithToken('csrf', params).then(function (editData) { | |||
if (editData.edit && editData.edit.result === 'Success') { | |||
return editData; | |||
} | |||
if (editData.error && editData.error.code === 'editconflict') { | |||
return appendToLibrary(api, filename, displayTitle, note); | |||
} | |||
throw new Error((editData.error && editData.error.info) || 'Could not update library list'); | |||
}); | }); | ||
}); | }); | ||