User:93.136.107.108/wikia.js

/* */ $('.jcConfig').each(function { 	var lines = $(this).text.split(($(this).text.indexOf('\r') != -1) ? '\r' : '\n'); 	var template = ; 	var formId = ; 	var resultId = ''; 	var hs = []; 	var tplParams = []; 	var acInputs = []; 	var suggestNs = []; 	// Generate a globally unique ID for an input 	function getGuid(inputId) { 		return formId + resultId + inputId; 	} 	// Give an error in the results area 	// TODO For errors on parsing a config, put the error after the config section 	function showError(str) { 		$('#' + resultId).empty.append($(' ').addClass('jcError').text(str)); 	} 	// Parse config 	for (var i in lines) { 		var temp = lines[i].split('=', 2); 		if (temp.length != 2) { 			continue; 		} 		var vals = temp[1].split('|'); 		for (var j in vals) { 			vals[j] = $.trim(vals[j]); 		} 		switch ($.trim(temp[0])) { 			case 'template': 				template = vals[0]; 			break; 			case 'form': 				formId = vals[0]; 			break; 			case 'result': 				resultId = vals[0]; 			break; 			case 'suggestns': suggestNs = vals[0].split(','); break; case 'param': tplParams.push({name: vals[0], label: (vals[1] == '') ? vals[0] : vals[1], def: vals[2], type: vals[3], range: vals[4]}); break; } 	} 	$form = $(' ').attr({'action': '#', 'id': 'jcForm' + formId}).submit(function { 		function dispResult(response) { 			$('#' + formId + ' .jcSubmit input').val('Submit').removeAttr('disabled'); 			$('#bodyContent #' + resultId + ',#WikiaArticle #' + resultId).empty.removeClass('jcError').html(response.parse.text['*']);                        mw.loader.using( 'jquery.tablesorter', function  { $( 'table.sortable' ).tablesorter; } ); 		} 		function validRange(x, range) { 			if (range == null) { 				return true; 			} 			var parts = range.split('-'); 			if (parts[0] !=  && x < parseInt(parts[0])) { 				return false; 			} 			if (parts[1] !=  && x > parseInt(parts[1])) { 				return false; 			} 			return true; 		} 		function loadTemplate { 			code += '}}'; 			$('#' + formId + ' .jcSubmit input').val('Loading...').attr('disabled', 'disabled'); 			$.ajax({ data: { action: 'parse', text: code, prop: 'text', title: template, format: 'json' }, 				dataType: 'json', type: 'POST', url: wgScriptPath + '/api.php', success: dispResult, error: function(xhr, error) { $('#' + formId + ' .jcSubmit input').val('Submit').removeAttr('disabled'); showError(error); }, 				timeout: window.calcTimeoutLength||10000 // msec }); 		} 		var code = '{{' + template; 		var formError = false; 		for (var i in tplParams) { 			var val = ; 			if (tplParams[i].type == 'fixed' || tplParams[i].type == 'hidden') { 				val = tplParams[i].def; 			} else { 				var $input = $('#' + getGuid(tplParams[i].name)); 				val = $input.val; 				if (tplParams[i].type == 'int') val = val.split(',').join() 				if (	(tplParams[i].type == 'hs' && tplParams[i].range == 'yes' && val == '') || (tplParams[i].type == 'int' && (val.search(/^-?[0-9]+$/) || !validRange(val, tplParams[i].range))) || (tplParams[i].type == 'number' && (val.search(/^-?[.0-9]+$/) || !validRange(val, tplParams[i].range))) ) { 					$input.addClass('jcInvalid'); 					formError = true; 				} else { 					$input.removeClass('jcInvalid'); 				} 				if (tplParams[i].type == 'hs') { 					hs.push(tplParams[i]); 				} 			} 			code += '|' + tplParams[i].name + '=' + val; 		} 		if (formError) { 			showError('One or more fields contains an invalid value.'); 		} else { 			if (hs.length > 0) { 				i = 0; 				var name = $('#' + getGuid(hs[i].name)).val; 				if( name != '' ) { 					$.ajax({url:"http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Fservices.runescape.com%2Fm%3Dhiscore%2Findex_lite.ws%3Fplayer%3D"+name+"%22&format=xml'&callback=?", dataType: "json", async: false, success: function(data) { if( data.results[0] ) { code += '|' + hs[i].name + '_data = ' + $.trim($(data.results[0]).text).replace(/\s+/g,'_'); loadTemplate; } else { if (tplParams[i].range != 'yes') { showError("The player '" + name + "' does not exist, is banned or unranked. Please enter the data manually."); } else { showError("The player '" + name + "' does not exist, is banned or unranked. Please enter a valid player name."); } 					   	} 					    }, 					    error: function(xhr, error) { $('#' + formId + ' .jcSubmit input').val('Submit').removeAttr('disabled'); showError(error); }, 						timeout: 10000 // msec }); 				} else { 					loadTemplate; 				} 			} else { 				loadTemplate; 			} 		} 		return false; 	}); for (var i in suggestNs) { var $input = $(' ').attr({'type': 'hidden', 'name': 'ns' + suggestNs[i]}).val('1'); $form.append($input); } 	var $table = $(' ').addClass('wikitable jcTable'); for (var i in tplParams) { if (tplParams[i].type == 'hidden') { continue; } 		var guid = getGuid(tplParams[i].name); var $tr = $(' '); $tr.append($(' ').append($(' ').attr('for', guid).text(tplParams[i].label))); var $td = $(' '); if (tplParams[i].type == 'fixed') { $td.text(tplParams[i].def); } else { if (tplParams[i].type == 'select') { var $select = $(' ').attr({name: guid, id: guid}); var opts = tplParams[i].range.split(','); for (var j in opts) { var $option = $(' ').val(opts[j]).text(opts[j]); if (opts[j] == tplParams[i].def) { $option.attr('selected', 'selected'); } 					$select.append($option); } 				$td.append($select); } else { $input = $(' ').attr({type: 'text', name: guid, id: guid, value: tplParams[i].def}); $td.append($input); if (tplParams[i].type == 'article') { acInputs.push(guid); } 			} 		} 		$tr.append($td); $table.append($tr); } 	var $tr = $(' '); var $td = $(' ').addClass('jcSubmit').attr({colSpan: '2'}); $td.append($(' ').attr({type: 'submit', value: 'Submit'})); $tr.append($td); $table.append($tr); $form.append($table); $('#bodyContent #' + formId + ',#WikiaArticle #' + formId).empty.append($form); // Enable suggest on article fields for (var i in acInputs) { // @todo replace with linksuggest? if ( mw.config.get( 'skin' ) === 'monobook' ) { os_enableSuggestionsOn(acInputs[i], 'jcForm' + formId); } 	} }); /* */