Usuari:Coet/scripts/api.js: diferència entre les revisions

De la Viquipèdia, l'enciclopèdia lliure
Contingut suprimit Contingut afegit
{{1000+AQ}}, {{1.000+AB}} i {{1000 éssers}} tb s'han esborrat; ordre alfabètic
<nowiki>...</nowiki> dóna problemes amb la categorització!
Línia 1: Línia 1:
//<nowiki>
/**************
/**************
*
*
Línia 246: Línia 247:
QueryString.prototype.create = QueryString.create;
QueryString.prototype.create = QueryString.create;
}
}
//</nowiki>

Revisió del 11:40, 28 ago 2009

//<nowiki>
/**************
 *
 * Implemented by w:ca:User:Pasqual

   This source code needs topaz.js 
   Find it at w:ca:User:Pasqual/scripts/topaz.js
   Original script is at:
   * w:en:User:Topaz/init.js
   * w:en:User:Topaz/comm.js
   * w:en:User:Topaz/util.js 
   * w:en:User:Topaz/wputil.js                    *
                                                  *
                                     **************/

editingSection = location.href.search(/&action=edit&section=\d+/g)>-1

function get_sizes(){ 
  langs=['aa', 'ab', 'af', 'ak', 'als', 'am', 'an', 'ang', 'ar', 'arc', 'arz', 'as', 'ast', 'av',
  'ay', 'az', 'ba', 'bar', 'bat-smg', 'bcl', 'be', 'be-x-old', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo',
  'bpy', 'br', 'bs', 'bug', 'bxr', 'ca', 'cbk-zam', 'cdo', 'ce', 'ceb', 'ch', 'cho', 'chr', 'chy',
  'closed-zh-tw', 'co', 'cr', 'crh', 'cs', 'csb', 'cu', 'cv', 'cy', 'cz', 'da', 'de', 'diq', 'dk',
  'dsb', 'dv', 'dz', 'ee', 'el', 'eml', 'en', 'eo', 'epo', 'es', 'et', 'eu', 'ext', 'fa', 'ff',
  'fi', 'fiu-vro', 'fj', 'fo', 'fr', 'frp', 'fur', 'fy', 'ga', 'gan', 'gd', 'gl', 'glk', 'gn',
  'got', 'gu', 'gv', 'ha', 'hak', 'haw', 'he', 'hi', 'hif', 'ho', 'hr', 'hsb', 'ht', 'hu', 'hy',
  'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ilo', 'io', 'is', 'it', 'iu', 'ja', 'jbo', 'jp', 'jv',
  'ka', 'kaa', 'kab', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ksh', 'ku',
  'kv', 'kw', 'ky', 'la', 'lad', 'lb', 'lbe', 'lg', 'li', 'lij', 'lmo', 'ln', 'lo', 'lt', 'lv',
  'map-bms', 'mdf', 'mg', 'mh', 'mi', 'minnan', 'mk', 'ml', 'mn', 'mo', 'mr', 'ms', 'mt', 'mus',
  'my', 'myv', 'mzn', 'na', 'nah', 'nan', 'nap', 'nb', 'nds', 'nds-nl', 'ne', 'new', 'ng', 'nl',
  'nn', 'no', 'nomcom', 'nov', 'nrm', 'nv', 'ny', 'oc', 'om', 'or', 'os', 'pa', 'pag', 'pam',
  'pap', 'pdc', 'pi', 'pih', 'pl', 'pms', 'pnt', 'ps', 'pt', 'qu', 'rm', 'rmy', 'rn', 'ro',
  'roa-rup', 'roa-tara', 'ru', 'rw', 'sa', 'sah', 'sc', 'scn', 'sco', 'sd', 'se', 'sg', 'sh', 'si',
  'simple', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'srn', 'ss', 'st', 'stq', 'su', 'sv', 'sw',
  'szl', 'ta', 'te', 'tet', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tokipona', 'tp', 'tpi',
  'tr', 'ts', 'tt', 'tum', 'tw', 'ty', 'udm', 'ug', 'uk', 'ur', 'uz', 've', 'vec', 'vi', 'vls',
  'vo', 'wa', 'war', 'wo', 'wuu', 'xal', 'xh', 'yi', 'yo', 'za', 'zea', 'zh', 'zh-cfr',
  'zh-classical', 'zh-min-nan', 'zh-yue', 'zu']

  // fetch
  params   =  {"titles": wgPageName,
               "prop": "revisions",
               "rvprop": "size|content",
               "indexpageids": "1"}

    api_url  =  wgServer + '/w/api.php?format=json&action=query&'
    api_url  += QueryString.create(params)
    api_req  =  topaz.comm.doreq(api_url);
    api_data =  api_req.responseText
    api_data =  eval('(' + api_data + ')');

  // handle response
  if (api_data["query"] != "undefined"){
    page_data = api_data["query"]["pages"]
    page_id   = api_data["query"]["pageids"][0] //= wgArticleId
    rev   = page_data[page_id]["revisions"][0]
    bytes = rev["size"]
    
    textbox=document.getElementById("wpTextbox1")
    text  = ((wgAction == "edit" && textbox != null) || wgAction == "submit") && !editingSection
          ? textbox.value
          : rev["*"]
    text_without_iw = text
    text_without_cmt = text

    //Got any template of the 1000 articles?
    is1of1000=false
    tpls=['{{1000}}', '{{Els1000}}', '{{1000 Arts}}', '{{1000 Biografies}}', '{{1000 Ciència}}', 
          '{{1000 Ciències naturals}}', '{{1000 Filosofia}}', '{{1000 Geografia}}',
          '{{1000 Història}}', '{{1000 Llenguatge}}', '{{1000 Religió}}', '{{1000 Societat}}', 
          '{{1000 Tecnologia}}']
    for (tpl in tpls){ if (text.indexOf(tpls[tpl])>-1) {is1of1000=true; break;}};

    //remove interwiki links
    reInterwikis=new RegExp("\\[\\[.*:\[^\\]\\n\\|\]+\\]\\] *\\r?\\n?", "gi")
    iw=0
    do {
      skip = String(reInterwikis.exec(text))
      sep_idx  = skip.indexOf(":")
      cur_lang = skip.substring(2,sep_idx)
      for (lang in langs) {
        if (langs[lang] == cur_lang) {
          ++iw
          text_without_iw = text_without_iw.replace(skip,"")
          //alert(langs[lang]+" :: "+cur_lang+" :: "+skip)
        }
      }
    } while (skip!="null")

    //remove comments
    reComments=new RegExp("<!--\[^>\]*--> *\\r?\\n?", "gi")
    do {
      skip = String(reComments.exec(text))
      text_without_cmt = text_without_cmt.replace(skip,"")
    } while (skip!="null")

    text_length       = text.length
    iw_chars_number   = text.length - text_without_iw.length
    cmt_chars_number  = text.length - text_without_cmt.length
    valid_chars_number= text.length - (iw_chars_number+cmt_chars_number)
    return [text_length, iw_chars_number, cmt_chars_number, valid_chars_number, bytes, is1of1000]
  }
}

function carrega_mides(){
  bc_sizes=get_sizes()
  text_length       = bc_sizes[0]
  iw_chars_number   = bc_sizes[1]
  cmt_chars_number  = bc_sizes[2]
  valid_chars_number= bc_sizes[3]
  bytes             = bc_sizes[4]
  is1of1000         = bc_sizes[5]
  meta_idx          = valid_chars_number * 1.1
  to_first_dec      = meta_idx.toString().indexOf(".")+1
  meta_idx          = meta_idx.toPrecision(to_first_dec)

  colour = ["#FFFFE0","orange","blue"]
  if (is1of1000 == true) {
     if (meta_idx < 10000) colour=["red","orange","yellow"]
     else if (meta_idx < 30000) colour=["orange","red","blue"]
     else if (meta_idx >= 30000) colour=["lightgreen","yellow","black"]
  }


  var primer="content", segon="bodyContent";
  primerObj = document.getElementById(primer)
  segonObj  = document.getElementById(segon)

  var divSizes = document.createElement("div");
  avis = wgAction == "edit" || wgAction == "submit" ? "<b>No heu desat l'article!</b><br/></a>" : ""
  if (editingSection) avis +=  '<font size="-15%">Les dades corresponen<br/>a la darrera versió desada.</font><br/>'
  divSizes.innerHTML = '<div class="veSizes" id="sizes" style="position:fixed; right:5px; '+
                       'bottom:420px; float:right; padding:6px; z-index: 1; ' +
                       'background-color:'+colour[0]+'; '+
                       'border:1px solid '+colour[1]+'; color:'+colour[2]+';" ><a '+
                       'onclick="tanca()">'+avis+'<font size="-10%">'+
                       'octets:\t'+bytes+'<br/>'+
                       'caràcters:\t'+valid_chars_number+'</font><br/>'+
                       'índex:\t'+meta_idx+'</div>';
 
  primerObj.insertBefore(divSizes, segonObj);
  sizes=document.getElementById("sizes")
  setTimeout("amagaMostra()",6000)
}; 
if (wgNamespaceNumber == 0 && wgServer.indexOf("wikipedia.org")>-1) addOnloadHook (carrega_mides);

function amagaMostra(){sizes.style.display="None"}

function tanca(){
  sizes = document.getElementById("sizes")
  if (sizes) sizes.style.display="None"
}

/************************ *  *   *    *     *      *       *        *         *
 *
 * The following part of this script it is not necessary if you load Twinkle.js
 *
 */

if (typeof QueryString == "undefined") {
  function QueryString(qString) {
	this.string = qString;
	this.params = {};
 
	if( qString.length == 0 ) {
		return;
	}
 
	qString.replace(/\+/, ' ');
	var args = qString.split('&');
 
	for( var i = 0; i < args.length; ++i ) {
		var pair = args[i].split( '=' );
		var key = decodeURIComponent( pair[0] ), value = key;
 
		if( pair.length == 2 ) {
			value = decodeURIComponent( pair[1] );
		}
 
		this.params[key] = value;
	}
  }
 
  QueryString.static = null;
 
  QueryString.staticInit = function() {
	if( QueryString.static == null ) {
		QueryString.static = new QueryString(location.search.substring(1));
	}
  }
 
  QueryString.get = function(key) {
	QueryString.staticInit();
	return QueryString.static.get(key);
  };
 
  QueryString.prototype.get = function(key) {
	return this.params[key] ? this.params[key] : null;
  };
 
  QueryString.exists = function(key) {
	QueryString.staticInit();
	return QueryString.static.exists(key);
  }
 
  QueryString.prototype.exists = function(key) {
	return this.params[key] ? true : false;
  }
 
  QueryString.equals = function(key, value) {
	QueryString.staticInit();
	return QueryString.static.equals(key, value);
  }
 
  QueryString.prototype.equals = function(key, value) {
	return this.params[key] == value ? true : false;
  }
 
  QueryString.toString = function() {
	QueryString.staticInit();
	return QueryString.static.toString();
  }
 
  QueryString.prototype.toString = function() {
	return this.string ? this.string : null;
  }
 
  QueryString.create = function( arr ) {
	var resarr = Array();
	for( var i in arr ) {
		if( typeof arr[i] == 'undefined' ) {
			continue;
		}
		if( arr[i] instanceof Array ){
			var v =  Array();
			for(var j = 0; j < arr[i].length; ++j ) {
				v[j] = encodeURIComponent( arr[i][j] );
			}
			resarr.push( encodeURIComponent( i ) + '=' +  v.join('|') );
		} else {
			resarr.push( encodeURIComponent( i ) + '=' + encodeURIComponent( arr[i] ) );
		}
	}
 
	return resarr.join('&');
  }
  QueryString.prototype.create = QueryString.create;
}
//</nowiki>