Open main menu

MediaWiki:Gadget-UpdateWikiBio.js

Revision as of 10:03, 23 June 2020 by Jayprakash (talk | contribs) (Created page with "// <nowiki> $( document ).ready( function (){ function init() { // Remove the default content $('#mw-content-text > p').remove(); $('#firstHeading').text('Create Fe...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
// <nowiki>
$( document ).ready( function (){

	function init() {
		// Remove the default content
		$('#mw-content-text > p').remove();
    	$('#firstHeading').text('Create Fellow Page');

		// Check user login
    	if( mw.config.get("wgUserId") === null){
    		$('#mw-content-text').append("You have to login first.");
    		return;
    	}
    	
    	// Wait Message
    	var waitMsg = $('<p>').text('Wait, Page is loading.....').css('font-weight','bold' );
    	$('#mw-content-text').append( waitMsg );
    	
    	// Creating API Object
    	requestAPI = new mw.Api();

		// Create widgets
		var bio = new OO.ui.MultilineTextInputWidget( {
            	placeholder: 'Bio',
            	autosize: true, 
            	rows: 10
        	} ),
        	achievements = new OO.ui.MultilineTextInputWidget( {
            	placeholder: 'Achievements',
            	autosize: true, 
            	rows: 10
        	} ),
        	social = new OO.ui.MultilineTextInputWidget( {
            	placeholder: 'Social media profiles',
            	autosize: true, 
            	rows: 10
        	} ),
			currentPage = new OO.ui.TextInputWidget( { 
				placeholder: 'https://universityinnovation.org/wiki/Fellow:ABCD'
			} ),
	        name = new OO.ui.TextInputWidget( { 
	            placeholder: 'Name'
	        } ),
			school = new OO.ui.TextInputWidget( { 
			    placeholder: 'School'
			} ),
	        cohort = new OO.ui.TextInputWidget( { 
			    placeholder: '2019 Fall'
			} ),
	        image = new OO.ui.TextInputWidget( { 
	            placeholder: 'https://universityinnovation.org/wiki/File:ABCD'
	        } ),
	        major = new OO.ui.TextInputWidget( { 
	            placeholder: 'Majoring in'
	        } ),
	        country = new OO.ui.TextInputWidget( { 
	            placeholder: 'Country'
	        } ),
			createBtn = new OO.ui.ButtonWidget( { 
			    label: 'Create Page', 
			    flags: [ 'progressive', 'primary' ]
			} ),
			cancelBtn = new OO.ui.ButtonWidget( {
			    label: 'Cancel',
			    flags: [ 'primary', 'destructive' ],
			    href:  mw.config.get( 'wgServer' )
			} ),
			label1 = $('<p>').text('Current Fellow link:').css('font-weight','bold' ),
			label2 = $('<p>').text('Name:').css('font-weight','bold' ),
			label3 = $('<p>').text('School:').css('font-weight','bold' ),
			label4 = $('<p>').text('Cohort:').css('font-weight','bold' ),
			uploadLink = $("<a>").attr("href", "https://universityinnovation.org/wiki/Special:Upload").attr( "target", "_blank" ).text("Upload"),
			label5 = $('<p>').html('Image page link: (' + uploadLink.prop('outerHTML') + ' if did not upload yet!)' ).css('font-weight','bold' ),
			label6 = $('<p>').text('Majoring in:').css('font-weight','bold' ),
			label7 = $('<p>').text('Country:').css('font-weight','bold' ),
			label8 = $('<p>').text('Bio:').css('font-weight','bold' ),
			label9 = $('<p>').text('Achievements:').css('font-weight','bold' ),
			label10 = $('<p>').text('Social media profiles:').css('font-weight','bold' ),
			divMainBox = $('<div />').css( {
				'box-shadow': '0 .5rem 1rem rgba(0, 0, 0, .15)',
				'border': '1px solid',
				'padding': '1rem',
				'margin-bottom': '3rem',
				'border-radius': '.5rem'
			});

		divMainBox.append(
			label1, currentPage.$element,
			label2, name.$element,
			label3, school.$element,
			label4, cohort.$element,
			label5, image.$element,
			label6, major.$element,
			label7, country.$element, 
			label8, bio.$element,
			label9, achievements.$element,
			label10, social.$element,
			'<br/>',
			createBtn.$element,
			cancelBtn.$element
		);

		waitMsg.remove();
		$( '#mw-content-text' ).append( divMainBox );
		
		// Create button click event handler
		createBtn.on( 'click', function() {
			currentPageResp = currentPage.getValue().trim(),
			nameResp = name.getValue().trim(),
			schoolResp = school.getValue().trim(),
			cohortResp = cohort.getValue().trim(),
			imageResp = image.getValue().trim(),
			majorResp = major.getValue().trim();
			countryResp = country.getValue().trim(),
			bioResp = bio.getValue().trim();
			achievementsResp = achievements.getValue().trim(),
			socialResp = social.getValue().trim();
			
			// Check whether user gave current Fellow link
			if( currentPageResp.toLowerCase().indexOf("fellow:") === -1){
				mw.notify( "Please give current Fellow page link.", { autoHide: false } );
				return;
			}

			// Check whether the all fields are enough to run the function
			if( nameResp !== "" && schoolResp !== "" &&
				cohortResp !== "" && majorResp !== "" && countryResp !== "" ) {

				wikiContent = '{| class="wikitable" style="border: 5px ridge grey; float:right;" \n|-\n|';
				try {
					wikiContent += "[[File:"+ /File:(.+\.\w{3})/i.exec(imageResp)[1] +"|300px]]\n";
				}
				catch(err) {
					wikiContent += "[[File:OOjs UI icon userAvatar.svg|300px]]\n";
				}
				wikiContent += "|-\n|\n";
				wikiContent += ";Name: " + nameResp + "\n";
				wikiContent += ";School (Cohort): " + schoolResp + " (" + cohortResp + ")\n";
				wikiContent += ";Majoring in: " + majorResp + "\n";
				wikiContent += ";Country: " + countryResp + "\n";
				wikiContent += ";Email: [[Special:EmailUser/" + mw.config.get("wgUserName") + "]]\n";
				wikiContent += "|}\n";
				wikiContent += "==Bio==\n" + bioResp + "\n";
				wikiContent += "==Achievements==\n" + achievementsResp + "\n";
				wikiContent += "==Social media profiles==\n" + socialResp + "\n";

				pageTitle = /Fellow:([^&\?]*)/i.exec( currentPageResp )[0];
				
				categoriesParam = {
					"action": "query",
					"format": "json",
					"prop": "categories",
					"titles": pageTitle,
					"utf8": 1
				};

				requestAPI.get( categoriesParam ).done( function(dataResp){
					categories = dataResp.query.pages[Object.keys(dataResp.query.pages)[0]].categories;
					
					categories.forEach( function(cat){
						wikiContent += "\n[[" + cat.title + "]]";	
					});

					// Editing the Fellow page
					doEdit(pageTitle, wikiContent);
				}).fail(function(){
					mw.notify( "Can't fetc current Fellow page categories.", { autoHide: false } );
				});
			} else {
				mw.notify( "Some fields have no text :( Please fill them." );
				return;
			}

    	});

    	function doEdit(title, wikiContent){

    		// Edit the page
			var editParams = {
				action: 'edit',
				title: title,
				text: wikiContent,
				summary: "Recreated Fellow Page",
				format: 'json'
			};
	
			requestAPI.postWithToken( 'csrf', editParams, { async: false } ).done( function ( res ) {
				if( res.edit.result === "Success"){
					mw.notify( title + " page has created :)");
					window.location.replace( mw.config.get( 'wgServer' ) + "/wiki/" + title );
				} else{
					mw.notify( "Something went worng :(" );
				}
			} );

    	}
	}
	
	if ( mw.config.get('wgCanonicalSpecialPageName') === 'Blankpage' && mw.config.get('wgTitle').split('/', 2)[1] === 'CreateFellow' ) {
		mw.loader.using( ['oojs-ui-core', 'mediawiki.api', 'mediawiki.notify'], init );
	}
});

// </nowiki>