MediaWiki:Gadget-autosave.js: различия между версиями

Новая страница: «// ================================================= // === «Автосохранение вики-черновиков» === // ================================================= // Работает даже на старых версиях MediaWiki (начиная с 1.19) // Не рассчитан для браузера Internet Explorer 10 и ниже // Автосохранение срабатывает через 3 сек. после то...»
 
Минус индикатор, ибо налазит на панель
Строка 8: Строка 8:
// При выходе со страницы сохранение происходит мгновенно (без задержки)
// При выходе со страницы сохранение происходит мгновенно (без задержки)
// Ручное сохранение (кнопка «Сохранить черновик» или Ctrl+S) тоже мгновенное
// Ручное сохранение (кнопка «Сохранить черновик» или Ctrl+S) тоже мгновенное
// Индикатор показывает «Редактирование…» пока вы печатаете, и иное по делу
// Работает даже без интернета (если страница уже загружена)
// Работает даже без интернета (если страница уже загружена)
// Не нагружает сервер, обработка на стороне устройства пользователя
// Не нагружает сервер, обработка на стороне устройства пользователя
Строка 80: Строка 79:
             }
             }
              
              
            updateIndicator( 'saved' );
             return true;
             return true;
         } catch ( e ) {
         } catch ( e ) {
Строка 188: Строка 186:
             }
             }
         } );
         } );
    }
    // Индикатор
    function addStatusIndicator() {
        if ( $( '#autosave-indicator' ).length ) return;
        var $indicator = $( '<div>' )
            .attr( 'id', 'autosave-indicator' )
            .css( {
                'font-size': '0.9em',
                'margin': '5px 0',
                'padding': '4px 8px',
                'background': '#f8f9fa',
                'border-radius': '2px'
            } )
            .text( 'Черновик не сохранён' );
        $textbox.after( $indicator );
    }
    // Обновление индикатора
    function updateIndicator( status ) {
        var $indicator = $( '#autosave-indicator' );
        if ( !$indicator.length ) return;
        var messages = {
            'saved': { text: 'Черновик сохранён', color: '#00af89' },
            'editing': { text: 'Редактирование...', color: '#36c' },
            'error': { text: 'Ошибка сохранения', color: '#d33' },
            'idle': { text: 'Черновик не сохранён', color: '#72777d' }
        };
        var msg = messages[ status ] || messages.idle;
        $indicator.text( msg.text ).css( 'color', msg.color );
     }
     }


Строка 228: Строка 192:
         $( '#wpSave' ).on( 'click', function() {
         $( '#wpSave' ).on( 'click', function() {
             localStorage.removeItem( storageKey );
             localStorage.removeItem( storageKey );
            updateIndicator( 'idle' );
             console.log( 'AutoSave: Черновик очищен после сохранения' );
             console.log( 'AutoSave: Черновик очищен после сохранения' );
         } );
         } );
Строка 238: Строка 201:
             clearTimeout( saveTimeout );
             clearTimeout( saveTimeout );
         }
         }
        updateIndicator( 'editing' );
         saveTimeout = setTimeout( function() {
         saveTimeout = setTimeout( function() {
             saveDraft( true ); // silent mode
             saveDraft( true ); // silent mode
Строка 258: Строка 220:
         setTimeout( function() {
         setTimeout( function() {
             addSaveButton();
             addSaveButton();
            addStatusIndicator();
             restoreDraft();
             restoreDraft();
             clearOnSave();
             clearOnSave();