Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Клуб программистов > О форуме и сайтах клуба
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 25.03.2017, 01:05   #71
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Адрес: Химки
Сообщений: 13,517
Репутация: 2719
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А разве оно не лишнее для 99.99% пользователей форума?)
надо обучать пользоваться поиском по форуму, чтобы процент равнодушных снижался.
Alar вне форума   Ответить с цитированием
Старый 15.04.2017, 14:55   #72
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,008
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Скрипт для автосохранения текста не отправленных сообщений.

Можно обновлять/закрывать страницу, ходить по страницам темы, заходить в другие темы и т.п. Даже закрывать браузер и BSOD'иться

Работает только для ответов (и в быстром, и в расширенном ответе), не для новых тем или правок.
Отдельно для каждой темы.

Сохранение происходит при вводе текста (каждую секунду), потере фокуса (blur) и при уходе со страницы (unload).

Установить

Код:

// ==UserScript==
// @name         ProgrammersForumAutosave
// @namespace    http://programmersforum.ru/
// @version      0.10
// @description  saves new post text to localStorage and restores it if closed the page without submitting (separate for each thread)
// @author       Alex P
// @include      *programmersforum.ru/*
// @grant        none
// @downloadURL  https://github.com/AlexP11223/ProgForumRuUserscripts/raw/master/pf_post_autosave.user.js
// ==/UserScript==

var postautosave_u = new function() {
    'use strict';

    var self = this;

    function isStorageSupported() {
        try {
            return 'localStorage' in window && window.localStorage !== null;
        } catch(e) {
            return false;
        }
    }

    function doInit(options) {
        var form = $('form[action*="newreply.php"]');
        var textarea = form.find('textarea');
        var threadIdField = form.find('input[name="t"]');

        if (!form.length || !textarea.length || !threadIdField.length) {
            return;
        }

        var threadId = threadIdField.val();

        var storageId = 'new_post_thread' + threadId;

        var oldText = window.localStorage.getItem(storageId);
        if (oldText) {
            textarea.val(oldText);
        }

        var submitted = false;

        form.submit(function () {
            try {
                submitted = true;
                if (timer) {
                    timer = clearTimeout(timer);
                }
                window.localStorage.removeItem(storageId);
            } catch(e) {
                console.log(e);
            }
        });

        var timer = null;

        function save() {
            if (submitted) {
                return;
            }
            var text = textarea.val();
            if (text) {
                window.localStorage.setItem(storageId, text);
            } else {
                if (window.localStorage.getItem(storageId)) {
                    if (!(form.find('textarea').length)) {
                        return;
                    }
                    window.localStorage.removeItem(storageId);
                }
            }
            timer = null;
        }

        function startSave() {
            if (timer == null) {
                submitted = false;
                timer = setTimeout(save, options.saveDelay);
            }
        }

        textarea.change(startSave);
        textarea.on('input', startSave);
        textarea.on('blur', startSave);

        window.addEventListener("unload", function () {
            save();
        });
    }

    this.init = function(options) {
        var defaultOptions = {
            saveDelay: 1000
        };

        if (options === undefined) {
            options = defaultOptions;
        } else {
            options = $.extend(defaultOptions, options);
        }

        if (window.postAutosaveInitialized)
            return;
        window.postAutosaveInitialized = true;

        if (!isStorageSupported())
            return;

        $(function() {
            doInit(options);
        });
    };
};
postautosave_u.init();


Последний раз редактировалось Alex11223; 15.04.2017 в 21:42.
Alex11223 вне форума   Ответить с цитированием
Старый 15.04.2017, 17:52   #73
Вадим Мошев
гигаМодератор :)
Заслуженный модератор
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес:
Сообщений: 7,612
Репутация: 3689
По умолчанию

Как-то у меня было желание написать такой скрипт, но опоздал видимо.

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
при уходе со страницы (onunload)
onunload же не везде работает?
_____
Я хоть и не админ, но скажу, что это надо в продакшн точно.
Вадим Мошев вне форума   Ответить с цитированием
Старый 15.04.2017, 18:11   #74
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,008
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Почти везде вроде, только в старой Опере и каких-то мобильных браузерах что-то по-другому (или может то вообще про beforeunload), но если и не работает, то это не должно сильно влиять, change точно везде работает. Только при вставке тегов он не срабатывает.

Добавил еще при потере фокуса.

Последний раз редактировалось Alex11223; 15.04.2017 в 18:37.
Alex11223 вне форума   Ответить с цитированием
Старый 29.09.2017, 20:45   #75
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,008
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Скрипт для ограничения языков автоопределения подсветки кода в зависимости от раздела. Должен исправить время от времени встречающуюся фигню, что код в JS разделе подсвечивается как Паскаль, а в C# как С++.

Заодно сделал подсветку после "быстрой" правки/ответа. (кроме 1 поста страницы, там баг из-за того, что ссылка на CSS вставлена в код первого поста и удаляется при правке).

Скоро скину и не юзер JS для форума Алару, пока можно посмотреть стало ли лучше кому интересно.

Установить

Код:

// ==UserScript==
// @name         ProgrammersForum Code Highlighter
// @namespace    http://programmersforum.ru/
// @version      0.2
// @description  Limits code language autodetection depending on forum
// @author       Alex P
// @include      http://programmersforum.ru/*
// @include      http://www.programmersforum.ru/*
// @grant        none
// @downloadURL  https://github.com/AlexP11223/ProgForumRuUserscripts/raw/master/pf_code_highlighter.user.js
// ==/UserScript==

var codehighlighter_u = new function() {
    'use strict';

    var self = this;

    self.forumLanguagesMap = null;

    function parseUrlQuery(queryStr) {
        var dict = {};
        var queries = queryStr.replace(/^\?/, '').split('&');
        var i;
        for (i = 0; i < queries.length; i++) {
            var parts = queries[i].split('=');
            dict[parts[0]] = parts[1];
        }
        return dict;
    }

    this.getForumId = function() {
        var link = $('span.navbar a[href*=forum]').last();
        if (link.length) {
            var url = link.attr('href');
            return Number(parseUrlQuery(url.substr(url.indexOf('?')))['f']) || 0;
        }
        return 0;
    };

    this.getForumLanguages = function(forumId) {
        return self.forumLanguagesMap[forumId] || null;
    };

    function highlight(codeBlock) {
        var text = $.trim($(codeBlock).text());

        $(codeBlock).removeClass();

        var result = hljs.highlightAuto(text);

        codeBlock.innerHTML = result.value;

        $(codeBlock).addClass('hljs');
        $(codeBlock).addClass(result.language);
        $(codeBlock).css('padding', '6px');
    }

    function doInit(options) {
        if (typeof hljs == 'undefined') {
            return;
        }

        hljs.configure({
            languages: self.getForumLanguages(self.getForumId())
        });

        var codeBlocks = $('pre code');

        $.each(codeBlocks, function (i, codeBlock) {
            highlight(codeBlock);
        });

        if (typeof MutationObserver !== 'undefined') {
            var observer = new MutationObserver(function(mutations) {
                mutations.forEach(function(mutation) {
                    if (mutation.addedNodes) {
                        var codeBlocks = $(mutation.addedNodes).find('code:not(.hljs)');

                        $.each(codeBlocks, function (i, codeBlock) {
                            highlight(codeBlock);
                        });
                    }
                });
            });

            var posts = $('#posts');
            if (posts.length) {
                observer.observe(posts[0], {childList: true, subtree: true})
            }
        }
    }

    this.init = function(options) {
        var defaultOptions = {
            // http://highlightjs.readthedocs.io/en/latest/css-classes-reference.html#language-names-and-aliases
            // hljs.listLanguages().sort()
            forumLanguagesMap: {
                80: [ 'php', 'python', 'ruby', 'xml', 'css', 'javascript', 'apache', 'nginx', 'makefile', 'http', 'json', 'sql', 'bash', 'diff', 'dockerfile', 'ini', 'markdown', 'yaml' ],
                16: [ 'php', 'xml', 'css', 'scss', 'javascript' ],
                12: [ 'php', 'xml', 'css', 'javascript', 'http', 'json', 'sql' ],
                48: [ 'php', 'xml', 'css', 'javascript', 'apache', 'nginx', 'http', 'json', 'sql', 'bash', 'diff', 'ini', 'markdown', 'yaml' ],
                44: [ 'php', 'xml', 'css', 'javascript', 'sql' ],

                17: [ 'php', 'xml', 'css', 'javascript', 'sql', 'bash', 'ini', 'json' , 'http', 'yaml' ],
                112: [ 'perl', 'xml', 'css', 'javascript', 'sql', 'bash', 'ini', 'http' ],
                110: [ 'python', 'xml', 'css', 'javascript', 'sql' ],
                111: [ 'ruby', 'xml', 'css', 'javascript', 'sql' ],

                4: [ 'cpp', 'csharp', 'delphi', 'dos', 'powershell', 'x86asm', 'sql' ],
                9: [ 'cpp', 'delphi', 'dos', 'x86asm' ],

                7: [ 'delphi', 'dos' ],
                67: [ 'delphi', 'dos', 'ini', 'json', 'xml', 'css', 'sql' ],
                2: [ 'delphi', 'dos', 'ini', 'json', 'xml', 'css', 'sql' ],
                39: [ 'delphi', 'dos', 'ini', 'json', 'xml', 'css', 'sql' ],
                47: [ 'delphi', 'dos', 'ini', 'json', 'xml', 'css', 'sql' ],
                3: [ 'delphi', 'dos', 'ini', 'json', 'xml', 'css', 'sql', 'http' ],
                5: [ 'delphi', 'dos', 'ini', 'json', 'xml', 'css', 'sql' ],

                14: [ 'cpp', 'dos', 'x86asm', 'ini', 'json', 'xml', 'css', 'sql', 'cmake', 'makefile' ],
                51: [ 'cpp', 'dos', 'x86asm', 'ini', 'json', 'xml', 'css', 'sql', 'cmake', 'makefile' ],
                52: [ 'cpp', 'dos', 'x86asm', 'ini', 'json', 'xml', 'css', 'sql', 'cmake', 'makefile' ],
                40: [ 'cpp', 'dos', 'x86asm', 'ini', 'json', 'xml', 'css', 'sql', 'cmake', 'makefile' ],
                54: [ 'cpp', 'dos', 'x86asm', 'ini', 'json', 'xml', 'css', 'sql', 'cmake', 'makefile', 'http' ],
                53: [ 'cpp', 'dos', 'x86asm', 'ini', 'json', 'xml', 'css', 'sql', 'cmake', 'makefile' ],

                11: [ 'java', 'kotlin', 'dos', 'ini', 'json', 'xml', 'css', 'sql' ],
                49: [ 'java', 'kotlin', 'dos', 'ini', 'json', 'xml', 'css', 'sql', 'http', 'apache' ],
                105: [ 'java', 'kotlin', 'dos', 'ini', 'json', 'xml', 'css', 'sql', 'http', 'apache' ],
                106: [ 'java', 'kotlin', 'dos', 'ini', 'json', 'xml', 'css', 'sql' ],

                41: [ 'csharp', 'vbnet', 'dos', 'powershell', 'ini', 'json', 'xml', 'css', 'sql', 'http' ],
                59: [ 'csharp', 'dos', 'powershell', 'ini', 'json', 'xml', 'css', 'sql', 'http' ],
                56: [ 'csharp', 'vbnet', 'dos', 'powershell', 'ini', 'json', 'xml', 'css', 'sql', 'http' ],
                58: [ 'csharp', 'vbnet', 'dos', 'powershell', 'ini', 'json', 'xml', 'css', 'sql', 'http' ],
                104: [ 'csharp', 'vbnet', 'dos', 'powershell', 'ini', 'json', 'xml', 'css', 'sql', 'http' ],
                60: [ 'csharp', 'vbnet', 'dos', 'powershell', 'ini', 'json', 'xml', 'css', 'sql', 'http' ],

                20: [ 'excel', 'vbnet', 'dos', 'powershell', 'ini', 'json', 'xml', 'css', 'sql' ],
                21: [ 'vbnet', 'dos', 'powershell', 'ini', 'json', 'xml', 'css', 'sql' ],
                19: [ 'vbnet', 'dos', 'powershell', 'ini', 'json', 'xml', 'css', 'sql' ]
            }
        };

        if (options === undefined) {
            options = defaultOptions;
        } else {
            options = $.extend(defaultOptions, options);
        }

        if (window.codeHighlighterInitialized)
            return;
        window.codeHighlighterInitialized = true;

        self.forumLanguagesMap = options.forumLanguagesMap;

        $(function() {
            doInit(options);
        });
    };
};

codehighlighter_u.init();


Последний раз редактировалось Alex11223; 02.10.2017 в 10:29.
Alex11223 вне форума   Ответить с цитированием
Старый 06.01.2018, 14:05   #76
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,008
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Firefox с 57 версии перешел на другое API расширений и теперь в новом Greasemonkey не работает много чего, особенно все что касается использования скриптов встроенных в саму страницу.

Но зато теперь в Firefox можно использовать расширения для Хрома, в том числе Tampermonkey, и в нем вроде бы все работает.
https://addons.mozilla.org/en-US/fir.../tampermonkey/
Alex11223 вне форума   Ответить с цитированием
Старый 30.05.2018, 21:34   #77
Вадим Мошев
гигаМодератор :)
Заслуженный модератор
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес:
Сообщений: 7,612
Репутация: 3689
По умолчанию Скрипт для увеличения текстовых полей при добавлении сообщений, создании новых тем, а также при работе с личными сообщениями

Скрипт для увеличения текстовых полей при добавлении сообщений, создании новых тем, а также при работе с личными сообщениями.

Скриншоты



Чтобы не раздувать сообщение, публикую скрипт в виде вложения текстового файла, хоть сам скрипт небольшой.

(на момент внесения изменений файл уже имел 2 скачивания)
Вложения
Тип файла: txt Увеличение формы ответа.js.txt (3.1 Кб, 4 просмотров)

Последний раз редактировалось Вадим Мошев; 01.06.2018 в 00:55.
Вадим Мошев вне форума   Ответить с цитированием
Старый 30.05.2018, 21:50   #78
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,008
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
публикую скрипт в виде вложения текстового файла
Alex11223 вне форума   Ответить с цитированием
Старый 01.06.2018, 00:59   #79
Вадим Мошев
гигаМодератор :)
Заслуженный модератор
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес:
Сообщений: 7,612
Репутация: 3689
По умолчанию

Да, надо будет всё-таки завести аккаунт на гитХабе, по крайней мере для скриптов.

Кстати, немного подправил скрипт для увеличения форм ответа. Проблема состояла в том, что у НЕ_модераторов (то есть, у простых пользователей) поле "причина редактирования" не растягивалась. Исправил. Перекачайте себе скрипт. Модераторам делать ничего не надо.
Вадим Мошев вне форума   Ответить с цитированием
Старый 06.06.2018, 01:41   #80
Вадим Мошев
гигаМодератор :)
Заслуженный модератор
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес:
Сообщений: 7,612
Репутация: 3689
По умолчанию Обращение к пользователю по его нику

Написал скрипт для обращения к пользователю по его нику. Его ник вставляется и выделяется жирным. Вот гиф-картинка с действиями


Ссылка на установку

Сам скрипт в виде вложения: Обратиться по нику.js.txt

Последний раз редактировалось Вадим Мошев; 06.06.2018 в 22:36.
Вадим Мошев вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрипты для imacros synthex JavaScript, Ajax 0 21.03.2014 17:35
нужно для форума сделать картинку размер 1000х150 {шапка форума} vit111 Фриланс 5 02.03.2014 11:25
Полезные компоненты для Delphi Стертор Компоненты Delphi 13 26.07.2013 17:23
Полезные вещи для новичков... из С++ Chris D Общие вопросы C/C++ 3 09.09.2010 20:34
скрипты для opera Cardinal_ Помощь студентам 0 04.06.2009 13:22


07:38.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru