sis001 upload multiple file

sis001 upload multiple files

Versione datata 12/10/2023. Vedi la nuova versione l'ultima versione.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name         sis001 upload multiple file
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  sis001 upload multiple files
// @author       fear1999
// @match        https://sis001.com/forum/post.php?action=newthread*
// @match        https://sis001.com/forum/post.php?action=edit*
// @match        https://sis001.com/forum/post.php?action=reply*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=sis001.com
// @grant        none
// @license MIT
// ==/UserScript==

var origainalInsertAttach

function main() {
    configMultipleInput()
    origainalInsertAttach = this.insertAttach
    this.insertAttach = customInsertAttach
}

function configMultipleInput() {
    console.log('configMultipleInput')
    Array.from(
        document
        .getElementById('posteditor_bottom')
        .getElementsByTagName('input')
    ).forEach((ele) => {
        if (ele.name == 'attach[]') {
            replaceInput(ele, (newInput) => {
                newInput.setAttribute('multiple', 'multiple')
            })
        }
    })
}

function customInsertAttach(id) {
    try {
        console.log('customInsertAttach')
        var input = document.getElementById('attach_' + id)
        let files = input.files
        Array.from(files)
            .forEach((file, index) => {
                let currentId = id + index
                let currentInput = document.getElementById('attach_' + currentId)
                replaceInput(currentInput, (newInput) => {
                    newInput.files = createFileList(file)
                })
                origainalInsertAttach(currentId)
            })
    } catch (e) {
        console.log(e)
    }
}

function replaceInput(old, op) {
    let newInput = old.cloneNode()
    newInput.onchange = old.onchange
    op(newInput)
    old.parentElement.replaceChild(newInput, old)
    return newInput
}

function createFileList(file) {
    let newList = new DataTransfer()
    newList.items.add(file)
    return newList.files
}

main()