VitaliyFilippov has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/71617


Change subject: Replace step-by-step publishing with publish-staying-in-editmode
......................................................................

Replace step-by-step publishing with publish-staying-in-editmode

Change-Id: I1c716b60369a248a54646d9866408f16c3fb78e7
---
M WikiEditor.i18n.php
M WikiEditor.php
M modules/jquery.wikiEditor.publish.js
3 files changed, 119 insertions(+), 171 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikiEditor 
refs/changes/17/71617/1

diff --git a/WikiEditor.i18n.php b/WikiEditor.i18n.php
index e2f9390..fc26238 100644
--- a/WikiEditor.i18n.php
+++ b/WikiEditor.i18n.php
@@ -27,15 +27,9 @@
        'wikieditor-previewDialog-tab' => 'Preview',
        'wikieditor-previewDialog-loading' => 'Loading...',
        /* Publish */
-       'wikieditor-publish-preference' => 'Enable step-by-step publishing',
+       'wikieditor-publish-preference' => 'Enable publishing while staying in 
edit mode',
        'wikieditor-publish-button-publish' => 'Publish',
-       'wikieditor-publish-button-cancel' => 'Cancel',
-       'wikieditor-publish-dialog-title' => 'Publish to {{SITENAME}}',
-       'wikieditor-publish-dialog-summary' => 'Edit summary (briefly describe 
the changes you have made):',
-       'wikieditor-publish-dialog-minor' => 'Minor edit',
-       'wikieditor-publish-dialog-watch' => 'Watch this page',
-       'wikieditor-publish-dialog-publish' => 'Publish',
-       'wikieditor-publish-dialog-goback' => 'Go back',
+       'wikieditor-publish-error' => 'Error publishing: $1',
        /* Template Editor */
        'wikieditor-template-editor-preference' => 'Enable form-based editing 
of wiki templates',
        'wikieditor-template-editor-dialog-title' => 'Edit template',
@@ -316,23 +310,9 @@
        'wikieditor-previewDialog-loading' => 'Alt text for spinner displayed 
while preview is being loaded
 {{Identical|Loading}}',
        'wikieditor-publish-preference' => "Option in [[Special:Preferences]], 
tab ''{{int:prefs-editing}}''",
-       'wikieditor-publish-button-publish' => 'Button to the right of the 
Edit/Preview tabs that opens a dialog window that lets the user save their edit
+       'wikieditor-publish-button-publish' => 'Button to the right of the 
Edit/Preview tabs that publishes the article without leaving edit mode
 
 {{Identical|Publish}}',
-       'wikieditor-publish-button-cancel' => 'Button to the right of the 
Edit/Preview tabs that has the same effect as the {{msg-mw|Cancel}} link below 
the edit box.
-
-{{Identical|Cancel}}',
-       'wikieditor-publish-dialog-title' => 'Title of the dialog that opens 
when the user clicks the Publish button',
-       'wikieditor-publish-dialog-summary' => 'Label for the edit summary 
textbox in the dialog that opens when the user clicks the Publish button. See 
also {{msg-mw|Summary}}.',
-       'wikieditor-publish-dialog-minor' => 'Label for the minor edit checkbox 
in the dialog that opens when the user clicks the Publish button. See also 
{{msg-mw|Minoredit}}',
-       'wikieditor-publish-dialog-watch' => 'Label for the watch checkbox in 
the dialog that opens when the user clicks the Publish button
-
-{{Identical|Watch this page}}',
-       'wikieditor-publish-dialog-publish' => "Button that saves the user's 
edit in the dialog that opens when the user clicks the Publish button
-
-{{Identical|Publish}}",
-       'wikieditor-publish-dialog-goback' => 'Button that closes the dialog 
that opens when the user clicks the Publish button.
-{{Identical|Go back}}',
        'wikieditor-template-editor-dialog-submit' => '{{Identical|Update}}',
        'wikieditor-template-editor-dialog-cancel' => '{{Identical|Cancel}}',
        'wikieditor-toc-preference' => "Option at [[Special:Preferences]], tab 
''{{int:prefs-editing}}''",
@@ -23417,15 +23397,9 @@
        'wikieditor-previewDialog-preference' => 'Включить диалог 
предпросмотра',
        'wikieditor-previewDialog-tab' => 'Предпросмотр',
        'wikieditor-previewDialog-loading' => 'Загрузка…',
-       'wikieditor-publish-preference' => 'Включить пошаговую публикацию',
+       'wikieditor-publish-preference' => 'Включить публикацию без выхода из 
редактирования',
        'wikieditor-publish-button-publish' => 'Опубликовать',
-       'wikieditor-publish-button-cancel' => 'Отмена',
-       'wikieditor-publish-dialog-title' => 'Опубликование в проекте 
{{SITENAME}}',
-       'wikieditor-publish-dialog-summary' => 'Описание изменений (кратко 
укажите какие изменения были произведены):',
-       'wikieditor-publish-dialog-minor' => 'Малое изменение',
-       'wikieditor-publish-dialog-watch' => 'Наблюдать за этой страницей',
-       'wikieditor-publish-dialog-publish' => 'Опубликовать',
-       'wikieditor-publish-dialog-goback' => 'Назад',
+       'wikieditor-publish-error' => 'Ошибка сохранения: $1',
        'wikieditor-template-editor-preference' => 'Включить редактирование 
шаблонов с помощью форм',
        'wikieditor-template-editor-dialog-title' => 'Изменение шаблона',
        'wikieditor-template-editor-dialog-submit' => 'Обновить',
diff --git a/WikiEditor.php b/WikiEditor.php
index dc6df0a..a367425 100644
--- a/WikiEditor.php
+++ b/WikiEditor.php
@@ -468,13 +468,7 @@
                ),
                'messages' => array(
                        'wikieditor-publish-button-publish',
-                       'wikieditor-publish-button-cancel',
-                       'wikieditor-publish-dialog-title',
-                       'wikieditor-publish-dialog-summary',
-                       'wikieditor-publish-dialog-minor',
-                       'wikieditor-publish-dialog-watch',
-                       'wikieditor-publish-dialog-publish',
-                       'wikieditor-publish-dialog-goback',
+                       'wikieditor-publish-error',
                ),
        ),
        'ext.wikiEditor.templateEditor' => $wikiEditorTpl + array(
diff --git a/modules/jquery.wikiEditor.publish.js 
b/modules/jquery.wikiEditor.publish.js
index b61140d..16090b3 100644
--- a/modules/jquery.wikiEditor.publish.js
+++ b/modules/jquery.wikiEditor.publish.js
@@ -4,152 +4,132 @@
 $.wikiEditor.modules.publish = {
 
 /**
- * Compatability map
- */
-browsers: {
-       // Left-to-right languages
-       ltr: {
-               msie: [['>=', 7]],
-               firefox: [['>=', 3]],
-               opera: [['>=', 9.6]],
-               safari: [['>=', 4]]
-       },
-       // Right-to-left languages
-       rtl: {
-               msie: [['>=', 8]],
-               firefox: [['>=', 3]],
-               opera: [['>=', 9.6]],
-               safari: [['>=', 4]]
-       }
-},
-/**
  * Internally used functions
  */
 fn: {
        /**
-        * Creates a publish module within a wikiEditor
+        * Creates a publish-staying-in-edit-mode button within a wikiEditor
         * @param context Context object of editor to create module in
         * @param config Configuration object to create module from
         */
        create: function ( context, config ) {
-               // Build the dialog behind the Publish button
-               var dialogID = 'wikiEditor-' + context.instance + '-dialog';
-               $.wikiEditor.modules.dialogs.fn.create(
-                       context,
-                       {
-                               previewsave: {
-                                       id: dialogID,
-                                       titleMsg: 
'wikieditor-publish-dialog-title',
-                                       html: '\
-                                               <div 
class="wikiEditor-publish-dialog-copywarn"></div>\
-                                               <div 
class="wikiEditor-publish-dialog-editoptions">\
-                                                       <form id="wikieditor-' 
+ context.instance + '-publish-dialog-form">\
-                                                               <div 
class="wikiEditor-publish-dialog-summary">\
-                                                                       <label 
for="wikiEditor-' + context.instance + '-dialog-summary"\
-                                                                               
rel="wikieditor-publish-dialog-summary"></label>\
-                                                                       <br />\
-                                                                       <input 
type="text" id="wikiEditor-' + context.instance + '-dialog-summary"\
-                                                                               
style="width: 100%;" />\
-                                                               </div>\
-                                                               <div 
class="wikiEditor-publish-dialog-options">\
-                                                                       <input 
type="checkbox"\
-                                                                               
id="wikiEditor-' + context.instance + '-dialog-minor" />\
-                                                                       <label 
for="wikiEditor-' + context.instance + '-dialog-minor"\
-                                                                               
rel="wikieditor-publish-dialog-minor"></label>\
-                                                                       <input 
type="checkbox"\
-                                                                               
id="wikiEditor-' + context.instance + '-dialog-watch" />\
-                                                                       <label 
for="wikiEditor-' + context.instance + '-dialog-watch"\
-                                                                               
rel="wikieditor-publish-dialog-watch"></label>\
-                                                               </div>\
-                                                       </form>\
-                                               </div>',
-                                       init: function () {
-                                               var i;
-
-                                               $(this).find( '[rel]' ).each( 
function () {
-                                                       $(this).text( 
mediaWiki.msg( $(this).attr( 'rel' ) ) );
-                                               });
-
-                                               /* REALLY DIRTY HACK! */
-                                               // Reformat the copyright 
warning stuff
-                                               var copyWarnHTML = $( 
'#editpage-copywarn p' ).html();
-                                               // TODO: internationalize by 
splitting on other characters that end statements
-                                               var copyWarnStatements = 
copyWarnHTML.split( '. ' );
-                                               var newCopyWarnHTML = '<ul>';
-                                               for ( i = 0; i < 
copyWarnStatements.length; i++ ) {
-                                                       if ( 
copyWarnStatements[i] !== '' ) {
-                                                               var 
copyWarnStatement = $.trim( copyWarnStatements[i] ).replace( /\.*$/, '' );
-                                                               newCopyWarnHTML 
+= '<li>' + copyWarnStatement + '.</li>';
-                                                       }
+               if ( !document.editform ) {
+                       return;
+               }
+               var saving = false;
+               context.$controls.show();
+               context.$buttons.show();
+               // Do not use context.fn.addButton as it prevents Enter click 
on other form fields to correctly submit the form
+               var btn = $( '<input type="button" disabled="disabled" 
id="wikieditor-publish-button" />' )
+                       .val( $.wikiEditor.autoMsg( { captionMsg: 
'wikieditor-publish-button-publish' }, 'caption' ) )
+                       .appendTo( context.$buttons );
+               var doSave = function( newsection ) {
+                       var sect = ( document.editform.wpSection || {} ).value;
+                       var d = {
+                               action: 'edit',
+                               format: 'json',
+                               title: mw.config.get( 'wgTitle' ),
+                               summary: document.editform.wpSummary.value,
+                               text: context.$textarea.val(),
+                               basetimestamp: 
document.editform.wpEdittime.value,
+                               token: document.editform.wpEditToken.value,
+                               minor: ( document.editform.wpMinoredit || {} 
).checked ? 1 : undefined,
+                               watch: ( document.editform.wpWatchthis || {} 
).checked ? 1 : undefined
+                       };
+                       if ( sect ) {
+                               d.section = sect;
+                       }
+                       $.ajax( {
+                               url: mw.util.wikiScript( 'api' ),
+                               type: 'POST',
+                               dataType: 'json',
+                               data: d,
+                               success: function ( data ) {
+                                       if ( data.error ) {
+                                               console.log( data.error );
+                                               alert( mw.msg( 
'wikieditor-publish-error', data.error.info ) );
+                                       } else {
+                                               if ( data.edit.newtimestamp ) {
+                                                       
document.editform.wpEdittime.value = data.edit.newtimestamp.replace( /\D+/g, '' 
);
                                                }
-                                               newCopyWarnHTML += '</ul>';
-                                               // No list if there's only one 
element
-                                               $(this).find( 
'.wikiEditor-publish-dialog-copywarn' ).html(
-                                                               
copyWarnStatements.length > 1 ? newCopyWarnHTML : copyWarnHTML
-                                               );
-                                               /* END OF REALLY DIRTY HACK */
-
-                                               if ( $( '#wpMinoredit' ).length 
=== 0 )
-                                                       $( '#wikiEditor-' + 
context.instance + '-dialog-minor' ).hide();
-                                               else if ( $( '#wpMinoredit' 
).is( ':checked' ) )
-                                                       $( '#wikiEditor-' + 
context.instance + '-dialog-minor' )
-                                                               .prop( 
'checked', true );
-                                               if ( $( '#wpWatchthis' ).length 
=== 0 )
-                                                       $( '#wikiEditor-' + 
context.instance + '-dialog-watch' ).hide();
-                                               else if ( $( '#wpWatchthis' 
).is( ':checked' ) )
-                                                       $( '#wikiEditor-' + 
context.instance + '-dialog-watch' )
-                                                               .prop( 
'checked', true );
-
-                                               $(this).find( 'form' ).submit( 
function ( e ) {
-                                                       $(this).closest( 
'.ui-dialog' ).find( 'button:first' ).click();
-                                                       e.preventDefault();
-                                               });
-                                       },
-                                       immediateCreate: true,
-                                       dialog: {
-                                               buttons: {
-                                                       
'wikieditor-publish-dialog-publish': function () {
-                                                               var 
minorChecked = $( '#wikiEditor-' + context.instance +
-                                                                       
'-dialog-minor' ).is( ':checked' ) ?
-                                                                               
'checked' : '';
-                                                               var 
watchChecked = $( '#wikiEditor-' + context.instance +
-                                                                       
'-dialog-watch' ).is( ':checked' ) ?
-                                                                               
'checked' : '';
-                                                               $( 
'#wpMinoredit' ).prop( 'checked', minorChecked );
-                                                               $( 
'#wpWatchthis' ).prop( 'checked', watchChecked );
-                                                               $( '#wpSummary' 
).val( $( '#wikiEditor-' + context.instance +
-                                                                       
'-dialog-summary' ).val() );
-                                                               $( '#editform' 
).submit();
-                                                       },
-                                                       
'wikieditor-publish-dialog-goback': function () {
-                                                               $(this).dialog( 
'close' );
-                                                       }
-                                               },
-                                               open: function () {
-                                                       $( '#wikiEditor-' + 
context.instance + '-dialog-summary' ).focus();
-                                               },
-                                               width: 500
-                                       },
-                                       resizeme: false
+                                               btn.prop( 'disabled', true );
+                                               if ( newsection ) {
+                                                       
document.editform.wpSection.value = sect = newsection;
+                                               }
+                                               if ( sect ) {
+                                                       $.ajax( {
+                                                               url: 
mw.util.wikiScript( 'api' ),
+                                                               type: 'POST',
+                                                               dataType: 
'json',
+                                                               data: {
+                                                                       action: 
'parse',
+                                                                       format: 
'json',
+                                                                       page: 
mw.config.get( 'wgTitle' ),
+                                                                       prop: 
'wikitext',
+                                                                       
section: sect
+                                                               },
+                                                               success: 
function ( data ) {
+                                                                       if ( 
data.parse && data.parse.wikitext && data.parse.wikitext['*'] !== undefined ) {
+                                                                               
context.$textarea.val( data.parse.wikitext['*'] );
+                                                                       }
+                                                               }
+                                                       } );
+                                               }
+                                       }
+                               },
+                               complete: function() {
+                                       document.getElementById( 'wpSave' 
).disabled = false;
+                                       saving = false;
                                }
+                       });
+               }
+               btn.click( function () {
+                       if ( saving ) {
+                               return;
                        }
-               );
-
-               context.fn.addButton( {
-                       'captionMsg': 'wikieditor-publish-button-publish',
-                       'action': function () {
-                               $( '#' + dialogID ).dialog( 'open' );
-                               return false;
+                       saving = true;
+                       document.getElementById( 'wpSave' ).disabled = true;
+                       var sect = ( document.editform.wpSection || {} ).value;
+                       if ( sect == 'new' ) {
+                               // Query for the last section number before 
saving
+                               // X+1 will be the new section number
+                               $.ajax( {
+                                       url: mw.util.wikiScript( 'api' ),
+                                       type: 'POST',
+                                       dataType: 'json',
+                                       data: {
+                                               action: 'parse',
+                                               format: 'json',
+                                               page: mw.config.get( 'wgTitle' 
),
+                                               prop: 'sections'
+                                       },
+                                       success: function( data ) {
+                                               if ( data.parse && 
data.parse.sections ) {
+                                                       doSave( parseInt( 
data.parse.sections[data.parse.sections.length-1].index ) + 1 );
+                                               } else {
+                                                       if ( data.error ) {
+                                                               console.log( 
data.error );
+                                                               alert( mw.msg( 
'wikieditor-publish-error', data.error.info ) );
+                                                       }
+                                                       
document.getElementById( 'wpSave' ).disabled = false;
+                                                       saving = false;
+                                               }
+                                       },
+                                       error: function() {
+                                               document.getElementById( 
'wpSave' ).disabled = false;
+                                               saving = false;
+                                       }
+                               } );
+                       } else {
+                               doSave();
                        }
+                       return false;
                } );
-
-               context.fn.addButton( {
-                       'captionMsg': 'wikieditor-publish-button-cancel',
-                       'action': function () {
-                               window.location.href = $( '#mw-editform-cancel' 
).attr( 'href' );
-                               return false;
-                       }
-               } );
+               var chg = function() {
+                       btn.prop( 'disabled', false );
+                       return true;
+               };
+               context.$textarea.bind( 'cut paste keypress change', chg );
        }
 }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/71617
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1c716b60369a248a54646d9866408f16c3fb78e7
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikiEditor
Gerrit-Branch: master
Gerrit-Owner: VitaliyFilippov <vita...@yourcmc.ru>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to