sis001 upload multiple file

upload multiple files

Από την 14/10/2023. Δείτε την τελευταία έκδοση.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

// ==UserScript==
// @name         sis001 upload multiple file
// @namespace    http://tampermonkey.net/
// @homepageURL  https://github.com/fear1999/tampermonkey-scripts
// @supportURL   https://greasyfork.org/zh-CN/scripts/477276/feedback
// @version      0.5
// @description  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==

class MultiUpload {
    constructor() {
        this.configMultipleInput = this.configMultipleInput.bind(this)
        this.customInsertAttach = this.customInsertAttach.bind(this)
        this.replaceInput = this.replaceInput.bind(this)
        this.createFileList = this.createFileList.bind(this)
    }

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

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

    customInsertAttach(id) {
        let 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)
                this.replaceInput(currentInput, (newInput) => {
                    newInput.files = this.createFileList(file)
                })
                this.origainalInsertAttach(currentId)
            })
    }

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

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


(new MultiUpload()).main()