Difference between revisions of "MediaWiki:Gadget-2020Cohort.js"
Jump to navigation
Jump to search
Jayprakash (talk | contribs) |
Ghanashyam (talk | contribs) (Updating the profile page creation for 2025) |
||
| (17 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
| + | // <nowiki> | ||
$( document ).ready( function (){ | $( document ).ready( function (){ | ||
| Line 4: | Line 5: | ||
// Remove the default content | // Remove the default content | ||
$('#mw-content-text > p').remove(); | $('#mw-content-text > p').remove(); | ||
| − | $('#firstHeading').text('Create | + | if( mw.config.get("skin") === "minerva" ){ |
| + | $('#section_0').text('Create Public Profile - 2025'); | ||
| + | } else { | ||
| + | $('#firstHeading').text('Create Public Profile - 2025'); | ||
| + | } | ||
| − | // Check user login | + | // Check user login 2 |
if( mw.config.get("wgUserId") === null){ | if( mw.config.get("wgUserId") === null){ | ||
$('#mw-content-text').append("You have to login first."); | $('#mw-content-text').append("You have to login first."); | ||
| Line 18: | Line 23: | ||
// Creating API Object | // Creating API Object | ||
requestAPI = new mw.Api(); | requestAPI = new mw.Api(); | ||
| − | + | ||
| + | // API param to get Category:2025 cohort members | ||
catMemberParam = { | catMemberParam = { | ||
"action": "query", | "action": "query", | ||
"format": "json", | "format": "json", | ||
"list": "categorymembers", | "list": "categorymembers", | ||
| − | "cmtitle": "Category: | + | "cmtitle": "Category:2025 cohort", |
"cmprop": "title", | "cmprop": "title", | ||
"cmtype": "subcat", | "cmtype": "subcat", | ||
| Line 30: | Line 36: | ||
requestAPI.get( catMemberParam, { async: false } ).done( function(resData){ | requestAPI.get( catMemberParam, { async: false } ).done( function(resData){ | ||
| − | + | schoolAndCohortOptions = []; | |
members = resData.query.categorymembers; | members = resData.query.categorymembers; | ||
// Creating MenuItems array from Category Members | // Creating MenuItems array from Category Members | ||
members.forEach( function(mem){ | members.forEach( function(mem){ | ||
| − | + | schoolAndCohortOptions.push( | |
new OO.ui.MenuOptionWidget( { | new OO.ui.MenuOptionWidget( { | ||
data: mem.title.replace("Category:", ""), | data: mem.title.replace("Category:", ""), | ||
| Line 63: | Line 69: | ||
} ), | } ), | ||
schoolAndcohort = new OO.ui.DropdownWidget( { | schoolAndcohort = new OO.ui.DropdownWidget( { | ||
| − | label: 'Select school', | + | label: 'Select school and Cohort', |
menu: { | menu: { | ||
| − | items: | + | items: schoolAndCohortOptions |
} | } | ||
| + | } ), | ||
| + | image = new OO.ui.TextInputWidget( { | ||
| + | placeholder: 'https://universityinnovation.org/wiki/File:ABCD' | ||
} ), | } ), | ||
major = new OO.ui.TextInputWidget( { | major = new OO.ui.TextInputWidget( { | ||
| Line 83: | Line 92: | ||
href: mw.config.get( 'wgServer' ) | 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' ), | label4 = $('<p>').text('Majoring in:').css('font-weight','bold' ), | ||
label5 = $('<p>').text('Country:').css('font-weight','bold' ), | label5 = $('<p>').text('Country:').css('font-weight','bold' ), | ||
| Line 99: | Line 110: | ||
divMainBox.append( | divMainBox.append( | ||
| − | label2, | + | label1, name.$element, |
| − | label3, | + | label2, schoolAndcohort.$element, |
| + | label3, image.$element, | ||
label4, major.$element, | label4, major.$element, | ||
label5, country.$element, | label5, country.$element, | ||
| Line 115: | Line 127: | ||
// Event handler for Select cohort | // Event handler for Select cohort | ||
| + | schoolResp = ''; | ||
schoolAndcohortResp = ''; | schoolAndcohortResp = ''; | ||
schoolAndcohort.getMenu().on('select', function(data){ | schoolAndcohort.getMenu().on('select', function(data){ | ||
schoolAndcohortResp = data.getData(); | schoolAndcohortResp = data.getData(); | ||
| + | patternReg = /(.*)\(\d{4}/gim; | ||
| + | schoolResp = patternReg.exec( schoolAndcohortResp )[1].trim(); | ||
}); | }); | ||
| Line 123: | Line 138: | ||
createBtn.on( 'click', function() { | createBtn.on( 'click', function() { | ||
nameResp = name.getValue().trim(), | nameResp = name.getValue().trim(), | ||
| + | imageResp = image.getValue().trim(), | ||
majorResp = major.getValue().trim(); | majorResp = major.getValue().trim(); | ||
countryResp = country.getValue().trim(), | countryResp = country.getValue().trim(), | ||
| Line 130: | Line 146: | ||
// Check whether the all fields are enough to run the function | // Check whether the all fields are enough to run the function | ||
| − | if( nameResp !== "" && schoolAndcohortResp !== "" | + | if( nameResp !== "" && schoolAndcohortResp !== "" && schoolResp !== "" |
&& majorResp !== "" && countryResp !== "" ) { | && majorResp !== "" && countryResp !== "" ) { | ||
wikiContent = '{| class="wikitable" style="border: 5px ridge grey; float:right;" \n|-\n|'; | wikiContent = '{| class="wikitable" style="border: 5px ridge grey; float:right;" \n|-\n|'; | ||
| − | wikiContent += "[[File: | + | 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 += ";Name: " + nameResp + "\n"; | ||
wikiContent += ";School (Cohort): " + schoolAndcohortResp + "\n"; | wikiContent += ";School (Cohort): " + schoolAndcohortResp + "\n"; | ||
| Line 141: | Line 163: | ||
wikiContent += ";Email: [[Special:EmailUser/" + mw.config.get("wgUserName") + "]]\n"; | wikiContent += ";Email: [[Special:EmailUser/" + mw.config.get("wgUserName") + "]]\n"; | ||
wikiContent += "|}\n"; | wikiContent += "|}\n"; | ||
| − | wikiContent += "==Bio==\n" + bioResp + "\n"; | + | wikiContent += "\n==Bio==\n" + bioResp + "\n"; |
| − | wikiContent += "==Achievements==\n" + achievementsResp + "\n"; | + | wikiContent += "\n==Achievements==\n" + achievementsResp + "\n"; |
| − | wikiContent += "==Social media profiles==\n" + socialResp + "\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; | pageTitle = "Fellow:" + nameResp; | ||
| Line 160: | Line 185: | ||
formatversion: 2, | formatversion: 2, | ||
action: 'query', | action: 'query', | ||
| − | titles: pageTitle + " (" + /\d{4}/.exec( schoolAndcohortResp ) + ")", | + | titles: pageTitle + " (" + /\d{4}/.exec( schoolAndcohortResp.replace("Category:", "") ) + ")", |
redirects: true | redirects: true | ||
}, { async: false } ).then( function ( response ) { | }, { async: false } ).then( function ( response ) { | ||
var page = response.query.pages[ 0 ]; | var page = response.query.pages[ 0 ]; | ||
if ( page.missing || page.invalid ) { | if ( page.missing || page.invalid ) { | ||
| − | doEdit( pageTitle + " (" + /\d{4}/.exec( schoolAndcohortResp ) + ")", wikiContent ); | + | doEdit( pageTitle + " (" + /\d{4}/.exec( schoolAndcohortResp.replace("Category:", "") ) + ")", wikiContent ); |
} else { | } else { | ||
| − | pageTitle = pageTitle + " (" + /(^.+)\(/.exec( | + | pageTitle = pageTitle + " (" + /(^.+)\(/.exec(schoolAndcohortResp.replace("Category:", ""))[1].trim() + ", " + /\d{4}/.exec( schoolAndcohortResp.replace("Category:", "") ) + ")"; |
doEdit( pageTitle, wikiContent ); | doEdit( pageTitle, wikiContent ); | ||
} | } | ||
| Line 190: | Line 215: | ||
title: title, | title: title, | ||
text: wikiContent, | text: wikiContent, | ||
| − | summary: "Created Fellow Page - | + | summary: "Created Fellow Page - 2025", |
format: 'json' | format: 'json' | ||
}; | }; | ||
| Line 196: | Line 221: | ||
requestAPI.postWithToken( 'csrf', editParams, { async: false } ).done( function ( res ) { | requestAPI.postWithToken( 'csrf', editParams, { async: false } ).done( function ( res ) { | ||
if( res.edit.result === "Success"){ | if( res.edit.result === "Success"){ | ||
| − | mw.notify( title + " page has created :)"); | + | var editUserpage = { |
| − | window.location.replace( mw.config.get( 'wgServer' ) + "/wiki/" + title ); | + | 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{ | } else{ | ||
mw.notify( "Something went worng :(" ); | mw.notify( "Something went worng :(" ); | ||
| Line 205: | Line 242: | ||
} | } | ||
| − | if ( mw.config.get('wgCanonicalSpecialPageName') === 'Blankpage' && mw.config.get('wgTitle').split('/', 2)[1] === ' | + | 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 ); | mw.loader.using( ['oojs-ui-core', 'oojs-ui-widgets', 'mediawiki.api', 'mediawiki.notify'], init ); | ||
} | } | ||
}); | }); | ||
| + | |||
| + | // </nowiki> | ||
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>