|
|
| (103 גרסאות ביניים של 15 משתמשים אינן מוצגות) |
| שורה 1: |
שורה 1: |
| //<pre><nowiki>
| | if ( mw.config.get( 'wgNamespaceNumber') == 14 ) { |
| | | window.catALotPrefs = { editpages: true, subcatcount: 500 }; |
| //Install by copying the following line to your monobook.js user sub-page: | | mw.loader.using(['jquery.ui', 'mediawiki.util']).done(function(){ |
| // document.write('<script type="text/javascript" src="http://commons.wikimedia.org/w/index.php?title=MediaWiki:Cat-a-lot.js&action=raw&ctype=text/javascript&dontcountme=s"></script>'); | | mw.util.addCSS("#cat_a_lot { left: inherit !important; }"); // for some reason, cat-a-lot from commons has a quirk with RLT, and this fixes it |
| | | mw.util.addCSS("#cat_a_lot_settings { display:none !important;}"); // preferences depend on some other gadgets,not available on hewiki, so hide linkette |
| // Variables | | mw.loader.load('//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-Cat-a-lot.js&action=raw&ctype=text/javascript'); |
| var cat_a_lot_mark_color = "#3399FF" ;
| | mw.loader.load('//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-Cat-a-lot.css&action=raw&ctype=text/css', 'text/css'); |
| var cat_a_lot_api_url = "/w/api.php" ;
| | }); |
| var cat_a_lot_query_url = "/w/query.php" ;
| |
| var cat_a_lot_edit_url = "/w/index.php?title=" ;
| |
| | |
| String.prototype.ucFirst = function () {
| |
| return this.substr(0,1).toUpperCase() + this.substr(1,this.length);
| |
| } | | } |
|
| |
| String.prototype.lcFirst = function () {
| |
| return this.substr(0,1).toLowerCase() + this.substr(1,this.length);
| |
| }
| |
|
| |
| String.prototype.replaceAll = function ( s , r ) {
| |
| return this.split(s).join(r);
| |
| }
| |
|
| |
| if ( wgNamespaceNumber == 14 ) {
| |
| // document.addEventListener("DOMContentLoaded", init_cat_a_lot, false);
| |
| addOnloadHook ( init_cat_a_lot ) ;
| |
| }
| |
|
| |
| // Add this to URLs to get around cache issues
| |
| function cat_a_lot_dummy_time() {
| |
| return "" ; // Non-function, maybe it works...
| |
| // var t = new Date () ;
| |
| // return "&dummytime=" + t.getTime() ;
| |
| }
| |
|
| |
| function init_cat_a_lot () {
| |
| var c1_div = document.getElementById("column-one") ;
| |
| c1_div.innerHTML += '<div id="cat_a_lot" style="z-index:9999;display:block;background-color:white; width:108px height:145px; position:fixed; bottom:0; left:0;">' +
| |
| '<div class="cat_a_lot_data" id="cat_a_lot_data" style="display:none;border:1px solid black">' +
| |
|
| |
| '<div style="border-bottom:1px solid black">' +
| |
| '<form name="cat_a_lot_searchcat" method="post" onSubmit="false;">' +
| |
| '<input type="text" input="8" name="cat_a_lot_searchcatname" />' +
| |
| '<input type="button" name="cat_a_lot_go" value="Go" onclick="cat_a_lot_search_cat();"/>' +
| |
| '</form>' +
| |
| '</div>' +
| |
|
| |
| '<div class="cat_a_lot_category_list" id="cat_a_lot_category_list" style="border-bottom:1px solid black"> </div>' +
| |
| '<div class="cat_a_lot_mark_counter" id="cat_a_lot_mark_counter"> </div>' +
| |
| '<div class="cat_a_lot_selections" id="cat_a_lot_selections" style="border-top:1px solid black">Select ' +
| |
| '<a href="#" onClick="cat_a_lot_mark_all(' + "'2'" + ');">all</a> / ' +
| |
| '<a href="#" onClick="cat_a_lot_mark_all(' + "'3'" + ');">none</a>' +
| |
| '</div>' +
| |
| '<form name="cat_a_lot_edit" enctype="multipart/form-data" method="post" target="_blank">' +
| |
| '<input type="hidden" name="wpTextbox1" />' +
| |
| '<input type="hidden" name="wpSummary" />' +
| |
| '<input type="hidden" name="wpDiff" value="wpDiff" />' +
| |
| '<input type="hidden" name="wpStarttime" />' +
| |
| '<input type="hidden" name="wpEdittime" />' +
| |
| '</form>' +
| |
| '</div>' +
| |
| '<div id="cat_a_lot_head" class="pBody">' +
| |
| '<form><input id="cat_a_lot_mode" type="checkbox" onchange="run_cat_a_lot();"/><label for="cat_a_lot_mode">Cat-a-lot mode</label></form>' +
| |
| '</div></div>' ;
| |
| }
| |
|
| |
| function cat_a_lot_get_marked_labels () {
| |
| var ret = new Array () ;
| |
| var divs = document.getElementsByTagName ( "div" ) ;
| |
| for ( i = 0 ; i < divs.length ; i++ ) {
| |
| if ( divs[i].className != "gallerytext" ) continue ;
| |
| if ( divs[i].style.backgroundColor == "" ) continue ;
| |
| var files = divs[i].getElementsByTagName ( "a" ) ;
| |
| ret.push ( files[0].title ) ;
| |
| }
| |
| return ret ;
| |
| }
| |
|
| |
| function cat_a_lot_update_selection_counter () {
| |
| var cat_a_lot_mark_counter = document.getElementById("cat_a_lot_mark_counter") ;
| |
| var l = cat_a_lot_get_marked_labels () ;
| |
| cat_a_lot_mark_counter.innerHTML = l.length + " files selected." ;
| |
| }
| |
|
| |
| function cat_a_lot_on_click_label ( title ) {
| |
| cat_a_lot_alter_label ( title , "onclick" ) ;
| |
| }
| |
|
| |
| function cat_a_lot_invalidate_label ( title ) {
| |
| cat_a_lot_alter_label ( title , "invalidate" ) ;
| |
| }
| |
|
| |
| function cat_a_lot_alter_label ( title , mode ) {
| |
| var divs = document.getElementsByTagName ( "div" ) ;
| |
| for ( i = 0 ; i < divs.length ; i++ ) {
| |
| if ( divs[i].className != "gallerytext" ) continue ;
| |
| var files = divs[i].getElementsByTagName ( "a" ) ;
| |
| if ( files.length == 0 ) continue ;
| |
| if ( files[0].title != title ) continue ;
| |
|
| |
| if ( mode == "invalidate" ) {
| |
| divs[i].innerHTML = "<div style='width:100%;color:white;background-color:red;text-align:center'>Moved to new category</div>" ;
| |
| divs[i].style.backgroundColor = "#FF0000" ;
| |
| }
| |
|
| |
| // Clicked on this element
| |
| if ( divs[i].style.backgroundColor != "" ) {
| |
| divs[i].style.backgroundColor = "" ;
| |
| } else {
| |
| divs[i].style.backgroundColor = cat_a_lot_mark_color ;
| |
| }
| |
| cat_a_lot_update_selection_counter () ;
| |
| return ;
| |
| }
| |
| }
| |
|
| |
| function cat_a_lot_mark_all ( how ) {
| |
| var divs = document.getElementsByTagName ( "div" ) ;
| |
| for ( i = 0 ; i < divs.length ; i++ ) {
| |
| if ( divs[i].className != "gallerytext" ) continue ;
| |
| var files = divs[i].getElementsByTagName ( "a" ) ;
| |
| if ( files.length == 0 ) continue ;
| |
|
| |
| divs[i].style.backgroundColor = "" ; // Deselect
| |
| if ( how == 1 ) { // Activate
| |
| eval("divs[i].onclick = function () { cat_a_lot_on_click_label('" + files[0].title + "'); };") ;
| |
| } else if ( how == 2 ) { // Select
| |
| divs[i].style.backgroundColor = cat_a_lot_mark_color ;
| |
| } else if ( how == 0 ) { // Deactivate
| |
| divs[i].onclick = "" ;
| |
| }
| |
| }
| |
| cat_a_lot_update_selection_counter () ;
| |
| }
| |
|
| |
| function cat_a_lot_get_subcategories () {
| |
| var url = cat_a_lot_query_url + "?what=category&format=xml&cpnamespace=14&cptitle=" + cat_a_lot_current_category + cat_a_lot_dummy_time() ;
| |
| var xmlreq = new XMLHttpRequest() ;
| |
| xmlreq.open ( "GET" , url , false ) ;
| |
| xmlreq.send ( null ) ;
| |
| xml = xmlreq.responseXML ;
| |
| var cls = xml.getElementsByTagName('title') ;
| |
| var ret = new Array () ;
| |
| for ( var i = 0 ; i < cls.length ; i++ ) {
| |
| var title = cls[i].firstChild.data ;
| |
| title = title.split(":",2)[1] ;
| |
| ret.push ( title ) ;
| |
| }
| |
| return ret ;
| |
| }
| |
|
| |
| function cat_a_lot_get_parent_categories () {
| |
| var url = cat_a_lot_api_url + "?action=query&format=xml&prop=categories&titles=Category:" + cat_a_lot_current_category + cat_a_lot_dummy_time() ;
| |
| var xmlreq = new XMLHttpRequest() ;
| |
| xmlreq.open ( "GET" , url , false ) ;
| |
| xmlreq.send ( null ) ;
| |
| xml = xmlreq.responseXML ;
| |
| var cls = xml.getElementsByTagName('cl') ;
| |
| var ret = new Array () ;
| |
| for ( var i = 0 ; i < cls.length ; i++ ) {
| |
| var title = cls[i].attributes.getNamedItem("title").value ;
| |
| title = title.split(":",2)[1] ;
| |
| ret.push ( title ) ;
| |
| }
| |
| return ret ;
| |
| }
| |
|
| |
| function cat_a_lot_replace_category ( text , sourcecat , targetcat , catname , ending ) {
| |
| // alert ( "[[" + catname + ":" + sourcecat + ending + " : " + "[[Category:" + targetcat + ending ) ;
| |
| return text.replaceAll ( "[[" + catname + ":" + sourcecat + ending , "[[Category:" + targetcat + ending ) ;
| |
| }
| |
|
| |
|
| |
| function cat_a_lot_fix_time ( time ) {
| |
| time = time.replace ( /:/g , "" ) ;
| |
| time = time.replace ( / /g , "" ) ;
| |
| time = time.replace ( /-/g , "" ) ;
| |
| time = time.replace ( /Z/g , "" ) ;
| |
| time = time.replace ( /T/g , "" ) ;
| |
| return time ;
| |
| }
| |
|
| |
| function cat_a_lot_get_article_timestamp ( title ) {
| |
| var ret ;
| |
| var url = cat_a_lot_query_url + '?format=xml&what=revisions&rvlimit=1&rvcomments&titles=' + title ;
| |
|
| |
| var xmlreq = new XMLHttpRequest() ;
| |
| xmlreq.open ( "GET" , url , false ) ;
| |
| xmlreq.send ( null ) ;
| |
| var xml = xmlreq.responseXML ;
| |
| var rev = xml.getElementsByTagName('rv') ;
| |
| if ( rev.length == 0 ) return cat_a_lot_get_current_utc_timestamp () ;
| |
|
| |
| ret = rev.item(0).getAttribute('timestamp') ;
| |
| return cat_a_lot_fix_time ( ret ) ;
| |
| }
| |
|
| |
| function cat_a_lot_edit_move ( filename , targetcat ) {
| |
| var sourcecat = wgTitle ;
| |
| var url = cat_a_lot_edit_url + filename + "&action=raw" + cat_a_lot_dummy_time() ;
| |
| var xmlreq = new XMLHttpRequest() ;
| |
| xmlreq.open ( "GET" , url , false ) ;
| |
| xmlreq.send ( null ) ;
| |
| var otext = xmlreq.responseText ;
| |
|
| |
| // Check if that file is already in that category
| |
| if ( otext.indexOf ( "ategory:" + targetcat.ucFirst() ) != -1 ||
| |
| otext.indexOf ( "ategory:" + targetcat.lcFirst() ) != -1 ) {
| |
| alert ( filename + " is already in category " + targetcat + " - skipping." ) ;
| |
| return ;
| |
| }
| |
|
| |
| // Fix text
| |
| var text = otext ;
| |
| text = cat_a_lot_replace_category ( text , sourcecat.ucFirst() , targetcat , "category" , "]]" ) ;
| |
| text = cat_a_lot_replace_category ( text , sourcecat.lcFirst() , targetcat , "category" , "]]" ) ;
| |
| text = cat_a_lot_replace_category ( text , sourcecat.ucFirst() , targetcat , "Category" , "]]" ) ;
| |
| text = cat_a_lot_replace_category ( text , sourcecat.lcFirst() , targetcat , "Category" , "]]" ) ;
| |
| text = cat_a_lot_replace_category ( text , sourcecat.ucFirst() , targetcat , "category" , "|" ) ;
| |
| text = cat_a_lot_replace_category ( text , sourcecat.lcFirst() , targetcat , "category" , "|" ) ;
| |
| text = cat_a_lot_replace_category ( text , sourcecat.ucFirst() , targetcat , "Category" , "|" ) ;
| |
| text = cat_a_lot_replace_category ( text , sourcecat.lcFirst() , targetcat , "Category" , "|" ) ;
| |
|
| |
| if ( text == otext ) {
| |
| alert ( "Could not find an occurrence of category " + sourcecat + " in description of file " + filename + " - skipping." ) ;
| |
| return ;
| |
| }
| |
|
| |
| var time = new Date () ;
| |
| var last_version_timestamp = cat_a_lot_get_article_timestamp ( "Category:" + targetcat ) ;
| |
| var starttime = cat_a_lot_get_current_utc_timestamp () ;
| |
|
| |
| var comment = "Moving from [[Category:" + sourcecat + "]] to [[Category:" + targetcat + "]]" ;
| |
| url = cat_a_lot_edit_url + filename + "&action=edit" ;
| |
| document.cat_a_lot_edit.action = url ;
| |
| document.cat_a_lot_edit.wpSummary.value = comment ;
| |
| document.cat_a_lot_edit.wpTextbox1.value = text ;
| |
| document.cat_a_lot_edit.wpStarttime.value = starttime ;
| |
| document.cat_a_lot_edit.wpEdittime.value = last_version_timestamp ;
| |
| document.cat_a_lot_edit.submit () ;
| |
|
| |
| cat_a_lot_invalidate_label ( filename ) ;
| |
| }
| |
|
| |
| // Generates current timestamp
| |
| function cat_a_lot_get_current_utc_timestamp () {
| |
| var today=new Date() ;
| |
|
| |
| var y = "00" + today.getUTCFullYear() ;
| |
| var mo = today.getUTCMonth() + 1 ;
| |
| var d = "00" + today.getUTCDate() ;
| |
| mo = "00" + mo ;
| |
|
| |
| var h = "00" + today.getUTCHours() ;
| |
| var m = "00" + today.getUTCMinutes() ;
| |
| var s = "00" + today.getUTCSeconds() ;
| |
|
| |
| var ret = "" ;
| |
| ret += y.substr ( y.length - 4 ) ;
| |
| ret += mo.substr ( mo.length - 2 ) ;
| |
| ret += d.substr ( d.length - 2 ) ;
| |
| ret += h.substr ( h.length - 2 ) ;
| |
| ret += m.substr ( m.length - 2 ) ;
| |
| ret += s.substr ( s.length - 2 ) ;
| |
| return ret ;
| |
| }
| |
|
| |
|
| |
|
| |
| function cat_a_lot_move_here ( targetcat ) {
| |
| var files = cat_a_lot_get_marked_labels () ;
| |
| if ( files.length == 0 ) {
| |
| alert ( "No files selected." ) ;
| |
| return ;
| |
| }
| |
| for ( var i = 0 ; i < files.length ; i++ ) {
| |
| cat_a_lot_edit_move ( files[i] , targetcat ) ;
| |
| }
| |
| }
| |
|
| |
| function cat_a_lot_get_cat_links ( symbol , list ) {
| |
| var ret = "" ;
| |
| list.sort () ;
| |
| for ( var i = 0 ; i < list.length ; i++ ) {
| |
| ret += "<tr style='border:1px solid #AAAAAA'><td>" + symbol + "</td><td>" ;
| |
| ret += '<a href="#" onclick ="cat_a_lot_update_cats(\'' + list[i] + '\')">' + list[i] + '</a>' ;
| |
| ret += "</td><td>" ;
| |
| if ( list[i] != wgTitle ) { // Can't move to source category
| |
| ret += '<a href="#" onclick ="cat_a_lot_move_here(\'' + list[i] + '\')"><b>Move</b></a>' ;
| |
| }
| |
| ret += "</td></tr>" ;
| |
| }
| |
| return ret ;
| |
| }
| |
|
| |
| function cat_a_lot_show_category_list () {
| |
| var parcats = cat_a_lot_get_parent_categories () ;
| |
| var subcats = cat_a_lot_get_subcategories () ;
| |
| var thiscat = new Array () ;
| |
| thiscat.push ( cat_a_lot_current_category ) ;
| |
|
| |
| var out = "<table border='0'>" ;
| |
| out += cat_a_lot_get_cat_links ( "↑" , parcats ) ;
| |
| out += cat_a_lot_get_cat_links ( "→" , thiscat ) ;
| |
| out += cat_a_lot_get_cat_links ( "↓" , subcats ) ;
| |
| out += "</table>" ;
| |
|
| |
| catlist = document.getElementById("cat_a_lot_category_list") ;
| |
| catlist.innerHTML = out ;
| |
| document.body.style.cursor = 'auto' ;
| |
| }
| |
|
| |
| function cat_a_lot_update_cats ( newcat ) {
| |
| document.body.style.cursor = 'wait' ;
| |
| cat_a_lot_current_category = newcat ;
| |
| catlist = document.getElementById("cat_a_lot_category_list") ;
| |
| catlist.innerHTML = '<div style="background-color:red;color:white">Loading...</div>' ;
| |
| window.setTimeout("cat_a_lot_show_category_list()", 0);
| |
| }
| |
|
| |
| function cat_a_lot_search_cat() {
| |
| var newcat = document.cat_a_lot_searchcat.cat_a_lot_searchcatname.value ;
| |
| cat_a_lot_update_cats ( newcat ) ;
| |
| }
| |
|
| |
| function run_cat_a_lot () {
| |
| cat_a_lot_data = document.getElementById("cat_a_lot_data") ;
| |
| cat_a_lot_mode = document.getElementById("cat_a_lot_mode").checked ;
| |
| if ( cat_a_lot_mode == false ) {
| |
| cat_a_lot_data.style.display = "none" ;
| |
| cat_a_lot_mark_all ( 0 ) ;
| |
| } else {
| |
| cat_a_lot_mark_all ( 1 ) ;
| |
| cat_a_lot_data.style.display = "block" ;
| |
| cat_a_lot_update_cats ( wgTitle ) ;
| |
| }
| |
| }
| |
|
| |
| //</nowiki></pre>
| |