הודעות להגהות

מוסיף שלושה כפתורים חדשים לצד פרסום הודעה: הגהה בדרך, הגהה מוכנה והגהה מוכנה + הערות

// ==UserScript==
// @name         הודעות להגהות
// @namespace    https://hagaa.remixn.xyz/
// @version      0.24
// @description  מוסיף שלושה כפתורים חדשים לצד פרסום הודעה: הגהה בדרך, הגהה מוכנה והגהה מוכנה + הערות
// @author       RemixN1V - Niv
// @match        https://www.fxp.co.il/showthread.php*
// @license      MIT
// @grant         GM_getValue
// @grant         GM_setValue
// @grant         GM_log
// @require       https://openuserjs.org/src/libs/sizzle/GM_config.min.js
// @include       https://openuserjs.org/scripts/sizzle/The_GM_config_Unit_Test
// ==/UserScript==

/* globals GM_config, GM_configStruct */

var fieldDefs = {
    'start': {
        'label': 'תחילת הגהה',
        'section': [GM_config.create('הודעות להגהות'), 'כאן ניתן לערוך את ההודעות שיישלחו בתחילת ובסיום ההגהות שלך.'],
        'type': 'text',
        'default': 'הגהה בדרך.'
    },
    'end': {
        'label': 'סוף הגהה',
        'type': 'text',
        'default': 'הגהה מוכנה.'
    },
    'font': {
        'label': 'פונט להודעות',
        'type': 'select',
        // 'labelPos': 'below',
        'options': ['None', 'Arial', 'Arial Black', 'Arial Narrow', 'Book Antiqua', 'Century Gothic', 'Comic Sans MS', 'Courier New', 'Fixedsys', 'Franklin Gothic Medium', 'Garamond', 'Georgia', 'Impact', 'Lucida Console', 'Lucida Sans Unicode', 'Microsoft Sans Serif', 'Palatino Linotype', 'System', 'Tahoma', 'Times New Roman', 'Trebuchet MS', 'Verdana', 'rancho', 'almoni-dl', 'Open Sans Hebrew'],
        'default': 'None'
    }
};

var frame = document.createElement('div');
document.body.appendChild(frame);

GM_config.init(
    {
        id: 'GM_config',
        title: 'הגדרות – הודעות להגהות',
        fields: fieldDefs,
        css: `#GM_config_section_1 .config_var, #GM_config_section_2 .config_var, #GM_config_section_3 .config_var { margin: 5% !important;display: inline !important; } #GM_config .field_label:after {content: ': ';}`,
        frame: frame,
        events:
        {
            open: function(doc) {

            },
            save: function(values) {
                // All the values that aren't saved are passed to this function
                // for (i in values) alert(values[i]);
                GM_config.close();
            }
        },
        'types':
        {
            'date': {
                'default': null,
                toNode: function(configId) {
                    var field = this.settings,
                        value = this.value,
                        id = this.id,
                        create = this.create,
                        format = (field.format || 'mm/dd/yyyy').split('/'),
                        slash = null,
                        retNode = create('div', { className: 'config_var',
                                                 id: configId + '_' + id + '_var',
                                                 title: field.title || '' });

                    // Save the format array to the field object so
                    // it's easier to hack externally
                    this.format = format;

                    // Create the field lable
                    retNode.appendChild(create('label', {
                        innerHTML: field.label,
                        id: configId + '_' + id + '_field_label',
                        for: configId + '_field_' + id,
                        className: 'field_label'
                    }));

                    // Create the inputs for each part of the date
                    value = value ? value.split('/') : this['default'];
                    for (var i = 0, len = format.length; i < len; ++i) {
                        var props = {
                            id: configId + '_field_' + id + '_' + format[i],
                            type: 'text',
                            size: format[i].length,
                            value: value ? value[i] : '',
                            onkeydown: function(e) {
                                var input = e.target;
                                if (input.value.length >= input.size)
                                    input.value = input.value.substr(0, input.size - 1);
                            }
                        };

                        // Jump to the next input once one is complete
                        // This saves the user a little work
                        if (i < format.length - 1) {
                            slash = create(' / ');
                            props.onkeyup = function(e) {
                                var input = e.target,
                                    inputs = input.parentNode.getElementsByTagName('input'),
                                    num = 0;

                                for (; num < inputs.length && input != inputs[num]; ++num);
                                if (input.value.length >= input.size)
                                    inputs[num + 1].focus();
                            };
                        } else slash = null;

                        // Actually create and append the input element
                        retNode.appendChild(create('input', props));
                        if (slash) retNode.appendChild(slash);
                    }

                    return retNode;
                },
                toValue: function() {
                    var rval = null;
                    if (this.wrapper) {
                        var inputs = this.wrapper.getElementsByTagName('input');
                        rval = '';

                        // Join the field values together seperated by slashes
                        for (var i = 0, len = inputs.length; i < len; ++i) {
                            // Don't save values that aren't numbers
                            if (isNaN(Number(inputs[i].value))) {
                                alert('Date is invalid');
                                return null;
                            }
                            rval += inputs[i].value + (i < len - 1 ? '/' : '');
                        }
                    }

                    // We are just returning a string to be saved
                    // If you want to use this value you'll want a Date object
                    return rval;
                },
                reset: function() {
                    // Empty all the input fields
                    if (this.wrapper) {
                        var inputs = this.wrapper.getElementsByTagName('input');
                        for (var i = 0, len = inputs.length; i < len; ++i)
                            inputs[i].value = '';
                    }
                }
            }
        }
    });

(function() {
    'use strict';

    let start = GM_config.get('start'); //x משפט/מילה לתחילת הגהה
    let end = GM_config.get('end'); //x משפט/מילה לסיום הגהה
    let font = GM_config.get('font');

    let time = 500;


    function writeAsend(t) {
        vB_Editor["vB_Editor_QR"].editor.insertHtml(font == 'None' ? t : `[FONT=${font}]${t}[/FONT]`);
        setTimeout(function(){ $('#qr_submit').click(); }, time);
    }
    function write(t) {
        t = font == 'None' ? t : `[FONT=${font}]${t}[/FONT]`;
        console.log(t);
        vB_Editor["vB_Editor_QR"].editor.insertHtml(t);
    }

    let group = document.getElementsByClassName("group")[2];
    let Mahlaka = $( ".navbit:contains('חדר עבודה')" );

    if (Mahlaka.length > 0) {
        group.innerHTML += `<br>
<input style="margin-top: 3px" type="button" class="button" value="הגהה בדרך" title="הגהה בדרך" name="HBadereh" tabindex="1" id="qr_hagaha_badereh">
<input type="button" class="button" value="הגהה מוכנה" title="הגהה מוכנה" name="HMuhana" tabindex="1" id="qr_hagaha_muhana">
<input type="button" class="button" value="הגהה מוכנה + הערות" title="הגהה מוכנה" name="HMuhana" tabindex="1" id="qr_hagaha_muhana_h">
<br>
<input style="margin-top: 3px" type="button" class="button" value="ערוך הודעות" title="ערוך הודעות" name="eha" tabindex="1" id="qr_edit_ha">`;

        let url = "https://www.fxp.co.il/showthread.php?t=21360826";
        console.log(url);
        fetch(url)
            .then(response => response.text())
            .then(data => {

            let supervisors = {};
            let teams = $(data).find('.content').eq(0).find('tr').eq(1).find('td').map(function (i) {
                if (i == 0) return;
                supervisors[$(this).text().trim()] = i;
                return $(this).text().trim();
            });
            let t = teams.map(function () {
                let sup = $(data).find('.content').eq(0).find('tr').eq(2).find('td').eq(supervisors[this]).find('a').map(function () {
                    return `[taguser]${$(this).attr('href').split('=')[1]}[/taguser]`;
                }).get().join('\n');
                supervisors[this] = sup;
                return sup;
            });

            document.getElementById("qr_hagaha_badereh").addEventListener("click", async function() {
                writeAsend(start);
            });

            document.getElementById("qr_hagaha_muhana").addEventListener("click", async function() {
                //document.querySelector('#cke_contents_vB_Editor_QR_editor > iframe').contentWindow.document.body.append("סבתאל'ה סיימה להגיה");
                for(const key of Object.keys(supervisors)) {
                    if (Mahlaka.text().includes(key)) {
                        writeAsend(end+'\n'+supervisors[key]);
                    }
                }
            });

            document.getElementById("qr_hagaha_muhana_h").addEventListener("click", function() {
                //document.querySelector('#cke_contents_vB_Editor_QR_editor > iframe').contentWindow.document.body.append("סבתאל'ה סיימה להגיה");
                console.log(Object.keys(supervisors));

                for(const key of Object.keys(supervisors)) {
                    if (Mahlaka.text().includes(key)) {
                        write(end+'\n'+supervisors[key]);
                    }
                }
            });

            $('#qr_edit_ha').click(function () {
                GM_config.open()
            });
        });
    }
    /*
*/
    //};
})();