1import {globalProgress, L} from '../../ui/utils.js' 2import {firemsg} from '../../ui/firemsg.js' 3import {Modal} from '../../ui/modal.js' 4 5/** @type {HTMLFormElement} form */ 6const form = document.getElementById('moderation-helper-form') 7/** @type {HTMLTextAreaElement} */ 8const textarea = form.querySelector('.moderation-helper-text') 9/** @type {HTMLSelectElement} */ 10const select = form.querySelector('.moderation-helper-select') 11/** @type {HTMLInputElement} */ 12const id = form.querySelector('.moderation-id') 13/** @type {HTMLInputElement} */ 14const projectId = form.querySelector('.moderation-project-id') 15/** @type {HTMLButtonElement} */ 16const sendButton = form.querySelector('.btn-primary') 17 18let resource = null 19 20let list = {} 21 22// add text to textarea 23select.addEventListener('change', e => { 24 const textToAdd = list[select.value] || null 25 if(!textToAdd) { 26 throw new Error('Cannot find list element: '+select.value) 27 } 28 textarea.value = textarea.value + '\r\n' + textToAdd.trim() + '\r\n' 29}) 30 31// send comment 32form.addEventListener('submit', async e => { 33 if(!resource) return 34 e.preventDefault() 35 globalProgress(true) 36 sendButton.disabled = true 37 const formData = new FormData(form); 38 formData.set('pageid', resource.dataset.id) 39 formData.set('id', resource.dataset.projectId) 40 formData.set('do', 'post') 41 formData.set('nomerge', '1') 42 formData.set('comment-type', '190') 43 const response = await fetch("/comment/do", { 44 method: "POST", 45 body: formData, 46 }) 47 globalProgress(false) 48 sendButton.disabled = false 49 Modal.close(() => { 50 textarea.value = '' 51 document.location.reload() 52 }) 53}) 54 55document.body.addEventListener('ui.modal-open', e => { 56 if (e.detail.name !== 'moderation-helper-form') return 57 textarea.value = L( 58 'ÐÑивеÑÑÑвÑÑ! РеÑÑÑÑ Ð±Ñл ÑнÑÑ Ñ Ð¿ÑбликаÑии и ÑÑебÑÐµÑ Ð´Ð¾ÑабоÑки по ÑледÑÑÑим пÑиÑинам:\r\n', 59 'Greetings! The resource has been removed from publication and requires correction for the following reasons:\r\n' 60 ) 61 resource = e.target.closest('.as-resource, .as-resource-form') 62 63 Modal.open(async () => { 64 globalProgress(true) 65 sendButton.disabled = true 66 await fetch('/resource/moderation/helper-list', { 67 method: 'GET' 68 }) 69 .then((response) => { 70 response.json().then(data => { 71 if(data.list) { 72 select.innerHTML = '<option value=""> </option>' 73 list = data.list 74 for(let title in data.list) { 75 let o = document.createElement('option') 76 o.innerHTML = title 77 o.value = title 78 select.insertAdjacentElement('beforeend', o) 79 } 80 } 81 }) 82 }) 83 .catch(r => { 84 textarea.value = r.statusText || 'Error '+r.status 85 }) 86 .finally(() => { 87 globalProgress(false) 88 sendButton.disabled = false 89 }) 90 textarea.focus() 91 return form 92 }, () => { 93 textarea.value = '' 94 }) 95}) 96 97export default {}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.