Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
function jb2script () {
    if( mw.config.get('wgNamespaceNumber') == 6 ) {
        mw.util.addPortletLink( 'p-cactions', "javascript:jb2script.callback()", "JB2", "jb2script", "Tag for moval by John Bot II", "");
    }
}
addOnloadHook(jb2script);
 
jb2script.callback = function jb2scriptCallback() {
    var Window = new SimpleWindow( 600, 300 );
    Window.setTitle( "John Bot II image mover tool" );
    var form = new QuickForm( jb2script.callback.evaluate );
    var categories = form.append( {
            type: 'select',
            name: 'movable',
            label: 'Is the image movable? ',
            tooltip: 'Please chose the correct option.',
            event: jb2script.callback.change_category
        } );
    categories.append( {
            type: 'option',
            label: 'Yes - It can be moved by John Bot II',
            selected: true,
            value: 'yes'
        } );
    categories.append( {
            type: 'option',
            label: "No - It can't be moved by John Bot II",
            selected: false,
            value: 'no'
        } );
    categories.append( {
            type: 'option',
            label: "It was already moved",
            selected: false,
            value: 'moved'
        } );
    form.append( {
            type: 'field',
            label:'Work area',
            name: 'work_area'
        } );
    var result = form.render();
    Window.setContent( result );
    Window.display();
 
    // We must init the
    var evt = document.createEvent( "Event" );
    evt.initEvent( 'change', true, true );
    result.movable.dispatchEvent( evt );
}
 
jb2script.callback.change_category = function jb2scriptCallbackChangeCategory(e) {
    var value = e.target.value;
    var root = e.target.form;
    var old_area;
    var childNodes = root.childNodes;
    for( var i = 0; i < childNodes.length; ++i ) {
        var node = childNodes[i];
        if( 
            node instanceof Element &&
            node.getAttribute( 'name' ) == 'work_area' 
        ) {
            old_area = node;
            break;
        }
    }
    var work_area = null;
 
    switch( value ) {
    case 'yes':
        work_area = new QuickForm.element( { 
            type: 'field',
            label: 'Movable',
            name: 'work_area'
        } );
        work_area.append( {
            type: 'input',
            name: 'newname',
            label: 'New name: '
        } );
        work_area.append( {
            type: 'input',
            name: 'comCat1',
            label: 'Commons Cat #1: '
        } );
        work_area.append( {
            type: 'input',
            name: 'comCat2',
            label: 'Commons Cat #2: '
        } );
        work_area.append( {
            type: 'input',
            name: 'comCat3',
            label: 'Commons Cat #3: '
        } );
        work_area.append( {
            type: 'input',
            name: 'comCat4',
            label: 'Commons Cat #4: '
        } );
        work_area.append( {
            type: 'input',
            name: 'comCat5',
            label: 'Commons Cat #5: '
        } );
        work_area.append( {
            type: 'input',
            name: 'comCat6',
            label: 'Commons Cat #6: '
        } );
        work_area.append( {
            type: 'checkbox',
            name: 'keeplocal',
            list: [
                { label: 'Keep local', value: 'keeplocal' }
            ]

        } );
        work_area.append( { type:'submit' } );
        work_area = work_area.render();
        old_area.parentNode.replaceChild( work_area, old_area );
        break;
    case 'no':
        work_area = new QuickForm.element( {
            type: 'field',
            label: 'Cannot be moved',
            name: 'work_area'
        } );
        work_area.append( {
            type: 'textarea',
            name: 'reason',
            label: 'Reason:'
        } );
        work_area.append( { type:'submit' } );
        work_area = work_area.render();
        old_area.parentNode.replaceChild( work_area, old_area );
        break;
    case 'moved':
        work_area = new QuickForm.element( {
            type: 'field',
            label: 'Already Moved',
            name: 'work_area'
        } );
        work_area.append( {
            type: 'input',
            name: 'newname',
            label: 'New name:'
        } );
        work_area.append( { type:'submit' } );
        work_area = work_area.render();
        old_area.parentNode.replaceChild( work_area, old_area );
        break;
    default:
        work_area = new QuickForm.element( { 
                type: 'field',
                label: 'Nothing for anything',
                name: 'work_area'
            } );
        work_area = work_area.render();
        old_area.parentNode.replaceChild( work_area, old_area );
        break;
 
 
    }
}
 
jb2script.callbacks = {
    yes: function ( self ) {
        newname = self.params.newname;
 
        cc1 = self.params.cc1;
        cc2 = self.params.cc2;
        cc3 = self.params.cc3;
        cc4 = self.params.cc4;
        cc5 = self.params.cc5;
        cc6 = self.params.cc6;
        
        keeplocal = self.params.keeplocal;
 
        template = '\{\{jb2move|canMove=yes'
        template += '|user=' + mw.config.get('wgUserName');
 
        if ( cc1 != '' ) {
            template += '|comCat1=' + cc1;
        }
        if ( cc2 != '' ) {
            template += '|comCat2=' + cc2;
        }
        if ( cc3 != '' ) {
            template += '|comCat3=' + cc3;
        }
        if ( cc4 != '' ) {
            template += '|comCat4=' + cc4;
        }
        if ( cc5 != '' ) {
            template += '|comCat5=' + cc5;
        }
        if ( cc6 != '' ) {
            template += '|comCat6=' + cc6;
        }
 
        if( newname != '' ) {
            template += '|newName=' + newname;
        }
        
        /*var form = e.target;
        var checked = form.getChecked( 'keeplocal' );
        if( checked.length == 0 ) {
            template += '|keepLocal=yes';
        }*/
		
		if( keeplocal ) {
            template += '|keepLocal=yes';
        }
 
        template += '\}\}\n';
 
        var form = self.responseXML.getElementById('editform');
 
        if( !form ) {
            self.statelem.error( 'Failed to get edit Form' );
        }
 
        var text = form.wpTextbox1.value;
 
        var postData = {
            'wpMinoredit': true, 
            'wpWatchthis': false,
            'wpStarttime': form.wpStarttime.value,
            'wpEdittime': form.wpEdittime.value,
            'wpAutoSummary': form.wpAutoSummary.value,
            'wpEditToken': form.wpEditToken.value,
            'wpSummary': 'Reviewing image for [[User:John Bot II|JB-II]] (Image OK)',
            'wpTextbox1': template + text
        };
 
        self.post( postData );
    },
    no: function ( self ) {
        var reason = self.params.reason;
        template = '\{\{jb2move|canMove=no'
        template += '|user=' + mw.config.get('wgUserName');
        template += '|reason=' + reason;
        template += '\}\}\n'
 
        var form = self.responseXML.getElementById('editform');
 
        if( !form ) {
            self.statelem.error( 'Failed to get edit Form' );
        }
 
        var text = form.wpTextbox1.value;
 
        var postData = {
            'wpMinoredit': true, 
            'wpWatchthis': false,
            'wpStarttime': form.wpStarttime.value,
            'wpEdittime': form.wpEdittime.value,
            'wpAutoSummary': form.wpAutoSummary.value,
            'wpEditToken': form.wpEditToken.value,
            'wpSummary': 'Reviewing image for [[User:John Bot II|JB-II]] (Image NOT OK)',
            'wpTextbox1': template + text
        };
 
        self.post( postData );
    },
    moved: function ( self ) {
        var newname = self.params.newname;
        var form = self.responseXML.getElementById('editform');
 
        if( !form ) {
            self.statelem.error( 'Failed to get edit Form' );
        }
 
        var text = form.wpTextbox1.value;
 
        var fText;
 
        var re = new RegExp( "\\{\\{jb2move" );
 
        var myArr;
        if( (myArr = re.exec( text ) ) ) {
            self.statelem.error( 'Sorry, you gotta do this one manaul.' );
            return;
        } else {
            fText = '\{\{jb2move';
            fText += '|user=' + mw.config.get('wgUserName');
            fText += '|canMove=moved'
            if( newname != '' ) {
                fText += '|newName=' + newname;
            }
            fText += '\}\}';
        }
 
        var text = form.wpTextbox1.value;
 
        var postData = {
            'wpMinoredit': true, 
            'wpWatchthis': false,
            'wpStarttime': form.wpStarttime.value,
            'wpEdittime': form.wpEdittime.value,
            'wpAutoSummary': form.wpAutoSummary.value,
            'wpEditToken': form.wpEditToken.value,
            'wpSummary': 'Reviewing image for [[User:John Bot II|JB-II]] (Image MOVED)',
            'wpTextbox1': fText
        };
 
        self.post( postData );
    }
} 
 
jb2script.callback.evaluate = function(e) {
    var form = e.target;
    var reason = "";
    switch( form.movable.value ) {
    default:
    case 'yes':
        var query = {
                'title': mw.config.get('wgPageName'),
                'action': 'submit',
        };
        var newname = form.newname.value;
        var cc1 = form.comCat1.value;
        var cc2 = form.comCat2.value;
        var cc3 = form.comCat3.value;
        var cc4 = form.comCat4.value;
        var cc5 = form.comCat5.value;
        var cc6 = form.comCat6.value;
        var keeplocal = form.keeplocal.checked;
		
 
        Status.init( form );
 
        wikipedia_wiki = new Wikipedia.wiki( 'Tagging Image', query, jb2script.callbacks.yes );
        wikipedia_wiki.params = { newname:newname, cc1:cc1, cc2:cc2, cc3:cc3, cc4:cc4, cc5:cc5, cc6:cc6, keeplocal:keeplocal }
        wikipedia_wiki.get();
        break;
    case 'no':
        var query = {
                'title': mw.config.get('wgPageName'),
                'action': 'submit',
                'unwatch': 'true',
        };
        var reason = form.reason.value;
 
        Status.init( form );
 
        wikipedia_wiki = new Wikipedia.wiki( 'Tagging Image', query, jb2script.callbacks.no );
        wikipedia_wiki.params = { reason:reason }
        wikipedia_wiki.get();
        break;
    case 'moved':
        var query = {
                'title': mw.config.get('wgPageName'),
                'action': 'submit',
                'unwatch': 'true',
        };
        var newname = form.newname.value;
 
        Status.init( form );
 
        wikipedia_wiki = new Wikipedia.wiki( 'Tagging Image', query, jb2script.callbacks.moved );
        wikipedia_wiki.params = { newname:newname }
        wikipedia_wiki.get();
        break;
    }
}