Difference between revisions of "MediaWiki:Gadget-2020Cohort.js"

From University Innovation Fellows
Jump to navigation Jump to search
(Updating create Fellow page to 2023)
(Updating the profile page creation for 2025)
 
(2 intermediate revisions by the same user not shown)
Line 6: Line 6:
 
$('#mw-content-text > p').remove();
 
$('#mw-content-text > p').remove();
 
     if( mw.config.get("skin") === "minerva" ){
 
     if( mw.config.get("skin") === "minerva" ){
     $('#section_0').text('Create Public Profile - 2023');
+
     $('#section_0').text('Create Public Profile - 2025');
 
     } else {
 
     } else {
                 $('#firstHeading').text('Create Public Profile - 2023');
+
                 $('#firstHeading').text('Create Public Profile - 2025');
 
         }
 
         }
  
Line 24: Line 24:
 
     requestAPI = new mw.Api();
 
     requestAPI = new mw.Api();
  
// API param to get Category:2023 cohort members  
+
// API param to get Category:2025 cohort members  
 
     catMemberParam = {
 
     catMemberParam = {
 
"action": "query",
 
"action": "query",
 
"format": "json",
 
"format": "json",
 
"list": "categorymembers",
 
"list": "categorymembers",
"cmtitle": "Category:2023 cohort",
+
"cmtitle": "Category:2025 cohort",
 
"cmprop": "title",
 
"cmprop": "title",
 
"cmtype": "subcat",
 
"cmtype": "subcat",
Line 215: Line 215:
 
title: title,
 
title: title,
 
text: wikiContent,
 
text: wikiContent,
summary: "Created Fellow Page - 2023",
+
summary: "Created Fellow Page - 2025",
 
format: 'json'
 
format: 'json'
 
};
 
};

Latest revision as of 04:46, 19 August 2025

// <nowiki>
$( document ).ready( function (){

	function init() {
		// Remove the default content
		$('#mw-content-text > p').remove();
    	if( mw.config.get("skin") === "minerva" ){
    		$('#section_0').text('Create Public Profile - 2025');
    	} else {
                 $('#firstHeading').text('Create Public Profile - 2025');
        }

		// Check user login  	2
    	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();

		// API param to get Category:2025 cohort members 
    	catMemberParam = {
			"action": "query",
			"format": "json",
			"list": "categorymembers",
			"cmtitle": "Category:2025 cohort",
			"cmprop": "title",
			"cmtype": "subcat",
			"cmlimit": "500"
		};

		requestAPI.get( catMemberParam, { async: false }  ).done( function(resData){
			schoolAndCohortOptions = [];
			members = resData.query.categorymembers;

			// Creating MenuItems array from Category Members
			members.forEach( function(mem){
				schoolAndCohortOptions.push(
						new OO.ui.MenuOptionWidget( {
						data: mem.title.replace("Category:", ""),
						label: mem.title.replace("Category:", "")
					} )
				);
			});

			// 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
	        	} ),
		        name = new OO.ui.TextInputWidget( { 
		            placeholder: 'Name'
		        } ),
		        schoolAndcohort = new OO.ui.DropdownWidget( { 
		            label: 'Select school and Cohort',
		            menu: {
						items: schoolAndCohortOptions 
					}
		        } ),
		        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('Name:').css('font-weight','bold' ),
				label2 = $('<p>').text('School (Cohort):').css('font-weight','bold' ),
				uploadLink = $("<a>").attr("href", "https://universityinnovation.org/wiki/Special:Upload").attr( "target", "_blank" ).text("Upload"),
				label3 = $('<p>').html('Image page link: (' + uploadLink.prop('outerHTML') + ' if did not upload yet!)' ).css('font-weight','bold' ),
				label4 = $('<p>').text('Majoring in:').css('font-weight','bold' ),
				label5 = $('<p>').text('Country:').css('font-weight','bold' ),
				label6 = $('<p>').text('Bio:').css('font-weight','bold' ),
				label7 = $('<p>').text('Achievements:').css('font-weight','bold' ),
				label8 = $('<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, name.$element,
				label2, schoolAndcohort.$element,
				label3, image.$element,
				label4, major.$element,
				label5, country.$element, 
				label6, bio.$element,
				label7, achievements.$element,
				label8, social.$element,
				'<br/>',
				createBtn.$element,
				cancelBtn.$element
			);

			waitMsg.remove();
			$( '#mw-content-text' ).append( divMainBox );

			// Event handler for Select cohort
			schoolResp = '';
			schoolAndcohortResp = '';
			schoolAndcohort.getMenu().on('select', function(data){
				schoolAndcohortResp = data.getData();
				patternReg = /(.*)\(\d{4}/gim;
				schoolResp = patternReg.exec( schoolAndcohortResp )[1].trim();
			});
			
			// Create button click event handler
			createBtn.on( 'click', function() {
				nameResp = name.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 the all fields are enough to run the function
				if( nameResp !== "" && schoolAndcohortResp !== "" && schoolResp !== ""
					&& 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): " + schoolAndcohortResp + "\n";
					wikiContent += ";Majoring in: " + majorResp + "\n";
					wikiContent += ";Country: " + countryResp + "\n";
					wikiContent += ";Email: [[Special:EmailUser/" + mw.config.get("wgUserName") + "]]\n";
					wikiContent += "|}\n";
					wikiContent += "\n==Bio==\n" + bioResp + "\n";
					wikiContent += "\n==Achievements==\n" + achievementsResp + "\n";
					wikiContent += "\n==Social media profiles==\n" + socialResp + "\n";
					wikiContent += "\n[[Category:" + schoolAndcohortResp + "]]\n";
					wikiContent += "[[Category:Student Contributors]]\n";
					wikiContent += "\n{{CatTree|" + schoolResp + "}}\n";
	
					pageTitle = "Fellow:" + nameResp;
					
					requestAPI.get( {
						formatversion: 2,
						action: 'query',
						titles: pageTitle,
						redirects: true
					}, { async: false } ).then( function ( response ) {
						var page = response.query.pages[ 0 ];
						if ( page.missing || page.invalid ) {
							doEdit( pageTitle, wikiContent );
						} else {
							requestAPI.get( {
								formatversion: 2,
								action: 'query',
								titles: pageTitle + " (" + /\d{4}/.exec( schoolAndcohortResp.replace("Category:", "") ) + ")",
								redirects: true
							}, { async: false } ).then( function ( response ) {
								var page = response.query.pages[ 0 ];
								if ( page.missing || page.invalid ) {
									doEdit( pageTitle + " (" + /\d{4}/.exec( schoolAndcohortResp.replace("Category:", "") ) + ")", wikiContent );
								} else {
									pageTitle = pageTitle + " (" + /(^.+)\(/.exec(schoolAndcohortResp.replace("Category:", ""))[1].trim() + ", " + /\d{4}/.exec( schoolAndcohortResp.replace("Category:", "") ) + ")";
									doEdit( pageTitle, wikiContent );
								}
							});
						}
					} );
				} else {
					mw.notify( "Some fields have no text :( Please fill them." );
					return;
				}
	
	    	});
		}).fail( function(){
			$( '#mw-content-text' ).append( "Something went wront. Please report it to Jay Prakash (User:Jayprakash)." );
		});

    	function doEdit(title, wikiContent){

    		// Edit the page
			var editParams = {
				action: 'edit',
				title: title,
				text: wikiContent,
				summary: "Created Fellow Page - 2025",
				format: 'json'
			};
	
			requestAPI.postWithToken( 'csrf', editParams, { async: false } ).done( function ( res ) {
				if( res.edit.result === "Success"){
					var editUserpage = {
						action: 'edit',
						title: 'User:' + mw.config.get("wgUserName"),
						text: '#REDIRECT [[' + title + ']]',
						summary: "Redirect to Fellow Page",
						format: 'json'
					};
					requestAPI.postWithToken( 'csrf', editUserpage, { async: false } ).done( function ( res ) {
						mw.notify( title + " page has created :) and userpage redirected.");
						window.location.replace( mw.config.get( 'wgServer' ) + "/wiki/" + title );
					}).fail( function(){
						mw.notify( title + " page has created :) but userpage redirecction failed.");
						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] === 'CreatePublicProfile' ) {
		mw.loader.using( ['oojs-ui-core', 'oojs-ui-widgets', 'mediawiki.api', 'mediawiki.notify'], init );
	}
});

// </nowiki>