Društvo LJUDMILA
Rozmanova ulica 12
1000 Ljubljana
Slovenia
Prostori: osmo/za

MediaWiki:Custom-skin.js

Opomba: Da bodo spremembe prišle do veljave, po shranitvi izpraznite predpomnilnik svojega brskalnika.

  • Firefox/Safari: Držite Shift in kliknite Ponovno naloži (Reload) ali pritisnite Ctrl-Shift-R ali Ctrl-R (⌘-R na sistemu Mac)
  • Internet Explorer: Držite Ctrl-F5 in kliknite Osveži (Refresh) ali pritisnite Ctrl-F5
  • Google Chrome: Pritisnite Ctrl-Shift-R (⌘-Shift-R na sistemu Mac)
  • Opera: Počistite predpomnilnik v Tools → Preferences
function editCSS() {

  var width = Math.max(300,Math.min(parseInt(window.localStorage.cssEditorWidth),500));

  var $page = 
  $('<div id="cssedit-page"></div>')
  $('body').html($page);

  var windowName = 'w'+((Math.random()*10000)|0);
  var href = location.href.split('#')[0];
  href = href + (location.href.indexOf('?') > -1 ? '&' : '?') + 'tools=mainframe';
  var $iframe = 
  $('<div id="cssedit-html"><iframe style="width:100%;height:100%" name="'+windowName+'" id="htmlframe" src="'+href+'"></iframe></div>')
  .appendTo($page);

  function _getSheets(sheet,sheets) {
    sheets.push(sheet);
    for (var i = 0; i<sheet.cssRules.length; i++) {
      var s = sheet.cssRules.item(i);
      if (s.type==3) _getSheets(s.styleSheet,sheets);
    }
  }
  
  function getSheets(doc) {
    var sheets = [];
    for (var i=0; i < doc.styleSheets.length; i++) {
      _getSheets(doc.styleSheets.item(i),sheets);
    }
    return sheets;
  }
  function removeSheets(doc,sheets) {
    for (var i=0; i<sheets.length;i++) {
      $(sheets[i].ownerNode).remove();
    }
  }
  
  function makeBoxes(doc,sheets) {
    var boxes = [];
    $tabs.empty();
    for (var i=0; i<sheets.length;i++) {
      boxes.push(makeBox(doc,sheets[i]));
    }
    return boxes;
  }

  function setupBox(doc,box) {
      box.$style = $('<style>' + box.$text.val() + '</style>').appendTo($('head',doc));
      box.$style.html(box.$text.val());
  }
  
  function setupBoxes(doc,boxes) {
    for (var i = 0; i<boxes.length; i++) {
      setupBox(doc,boxes[i]);
    }
  }
  
  var loaded = false;
  var boxes = [];

  $('#htmlframe').load(function () {
    var doc = frames[windowName].document;
    sheets = getSheets(doc);
    if(!loaded) boxes = makeBoxes(doc,sheets);
    removeSheets(doc,sheets);
    if (loaded) setupBoxes(doc,boxes);
    loaded = true;
  });
  
  var $editor = 
  $('<div id="cssedit-editor"></div>')
  .appendTo($page);
  
  var $tabs = 
  $('<div id="cssedit-tabs"></div>')
  .appendTo($editor);
 
  function setWidth(w) {
    width = Math.max(200,Math.min(w,1000));
    $editor.width(width);
    $iframe.css('left',width);
    window.localStorage.cssEditorWidth = width;
    
  }
  setWidth(width); 
  var $more = 
  $('<button id="cssedit-more">&gt;</button>')
  .click(function() {
    setWidth(width+100);
  })
  .appendTo($tabs);
  var $less = 
  $('<button id="cssedit-less">&lt;</button>')
  .click(function() {
    setWidth(width-100);
  })
  .appendTo($tabs);

  
  function makeBox(doc,sheet) {
    var msg = sheet.href.match( /css[/]([^?]*)/ );
    if (!msg) return;
    msg = msg[1];

    var box = {
      doc:doc,
      sheet:sheet,
      msg:msg
    }
    
    box.$box = 
    $('<div class="cssedit-box"></div>')
    .appendTo($editor);

    box.$tab =
    $('<button class="cssedit-tab">'+msg+'</button>')
    .click(function() {
      box.$box.appendTo($editor);
      $tabs.find('.cssedit-tab.selected').removeClass('selected');
      box.$tab.addClass('selected');
    })
    .appendTo($tabs);
    box.$tab.click();


    $.get(sheet.href, function(data) {
      var T = null;
      var oldtext = data;
      
      box.$textwrap= 
      $('<div class="cssedit-textwrap"></div>')
      .appendTo(box.$box);

      box.$text =
      $('<textarea class="cssedit-textarea">'+data+'</textarea>')
      .keyup(function() {
        clearTimeout(T);
        T = setTimeout(function() {
          box.$tab.text('*'+msg);
          box.$style.html(box.$text.val());
          box.$save.removeAttr('disabled');
        }, 1000)
      })
      .appendTo(box.$textwrap);

      box.$bar = 
      $('<div class="cssedit-bar"></div>')
      .appendTo(box.$box);

      box.$save =
      $('<button id="cssedit-save" class="cssedit-button">save</button>')
      .click(function() {
        box.$save.attr('disabled','disabled');
	      $.get('/w/api.php?format=json&action=query&meta=userinfo',function(data){
		      var user = data.query.userinfo.name;
		      var title = 'MediaWiki:'+msg+'.css';
		      $.get('/w/api.php?format=json&action=query&prop=info&intoken=edit&titles='+title,function(data){
			      var token;
			      for (var i in data.query.pages) {
				      token = data.query.pages[i].edittoken;
			      };
			      var args = {
				      action:'edit',
				      title: title,
				      text: box.$text.val(),
				      summary: 'from css editor',
				      token: token,
				      format: 'json'
			      };
			      $.post('/w/api.php', args, function(data) {
              box.$save.attr('disabled','disabled');
              box.$tab.text(msg);
			      });
		      },'json');
	      },'json');
      })
      .appendTo(box.$bar);

      box.$close =
      $('<button id="cssedit-close" class="cssedit-button">close</button>')
      .click(function() {
        top.location.reload(true);
      })
      .appendTo(box.$bar);
      setupBox(doc,box);
    });  
    return box;
  }
}



$(function() {
   var editors = [];

  $('a[href=#EditCss]').click(function(e) { 
    editCSS();
  });
  
  var lnk = document.createElement('a');
  lnk.setAttribute('href','/Special:userlogin');
  lnk.className = 'login-link';
  document.body.appendChild(lnk);
  
   (function (sel){
       if (wgTitle.match(/[.]js$/)) var mode = 'javascript';
       else if (wgTitle.match(/[.]css$/)) var mode = 'css';
       else return;
   
     $(sel).each(function() {
       var $this = $(this);
       var name = $this.attr('id');
       if (editors[name]) return;
       var id = name + "_editor";
       var div = $('<div id="' + id + '"></div>');
       div.height($this.height());
       div.width($this.width());
       $this.before(div);
//       else if (wgTitle.match(/[.]xml$/)) var mode = 'xml';
//       else var mode = 'html';
     
       editors[name] = ace.edit(id);
       editors[name].setTheme("ace/theme/chrome");
       editors[name].setShowPrintMargin(false);
       editors[name].session.setMode("ace/mode/"+mode);
       editors[name].session.setFoldStyle('markbegin');
       editors[name].session.setTabSize(2);
       editors[name].getSession().setValue($this.val());
       editors[name].commands.addCommand({
         name: 'compile',
         bindKey: {
             win: 'Ctrl-S',
             mac: 'Command-S',
             sender: name
         },
         exec: function(env, args, request) {
             $('#wpSave').click();
         }
       })
       $this.parent('form').submit(function(){$this.val(editors[name].getSession().getValue());});
     });
  })('#wpTextbox1');
 
 //reflow 
 var reflow = function(doc){
    var max = 0;
    var col = [0,0];
    var boxen = doc.querySelectorAll('.album');
    for (var i=0;i<boxen.length;i++) {
      var box = boxen.item(i);
    	var k = i % 2;
    	var min = max;
    	var k = 0;
    	for (var j=0;j<col.length;j++) {
    	  if (col[j]<min || col[j]==min && j<k) {
    	    min = col[j];
    	    k = j;
    	  }
    	}
    	if (!box.done || force) {
          box.style.position = 'absolute';
          box.style.top = col[k]+'px';
          box.style.left = k*370 + 'px';
          box.style.opacity = 1;
          box.done = 1;
        }        col[k] += box.scrollHeight+5;
    	if (col[k]>max) max = col[k];
    }
    if (i>0) doc.style.height = max + "px";
  };

  $('#albums, div.section').each( function(idx,itm) {
    reflow(itm);
  });

  $('#sidebar-wrap').prepend($('#toc'));

  var content = document.getElementById('main');
	var sidebar = document.getElementById('sidebar-wrap');
	var maxdiff = content.scrollHeight-sidebar.scrollHeight;
	if (maxdiff<0) {
		maxdiff = 0;
		//sidebar = article;
	}
	var minscroll = content.offsetTop;
   //console.log (sidebar);
	var positionArticleSidebar = true;
	function positionArticleContent() {
	   if (!positionArticleSidebar) return;
      var maxscroll = maxdiff + minscroll;
		var scroll = window.pageYOffset || document.body.scrollTop ||     document.documentElement.scrollTop;
		//console.log(content.scrollHeight,sidebar.scrollHeight,'min='+minscroll+' max='+maxscroll+' SCROLL='+scroll);
		if (scroll>maxscroll) scroll = maxscroll;
		if (scroll>minscroll) {
			//sidebar.style.marginTop = (scroll-minscroll) + 'px';
      sidebar.style.position = 'fixed';
      sidebar.style.top = '18px';
      
      // Sidebar vecji od okna?
      if (window.innerHeight < sidebar.scrollHeight + 18) {
        omax = window.innerHeight - sidebar.scrollHeight - 18;
        smax = content.scrollHeight - window.scrollHeight;
        sidebar.style.top = (scroll/smax) * omax + 18 + 'px';
      }
		} else {
			//sidebar.style.marginTop = 0;
      sidebar.style.position = 'relative';
		}
	}

	if( window.attachEvent ) {
	  window.attachEvent('onresize',function(e){positionArticleContent()});
	  window.attachEvent('onscroll',function(e){positionArticleContent()});
	} else if( document.addEventListener ) {
	  window.addEventListener('resize',function(e){positionArticleContent()},false);
	  document.addEventListener('scroll',function(e){positionArticleContent()},false);
	}

	window.onload=function(){
		maxdiff = content.scrollHeight-sidebar.scrollHeight;
		if (maxdiff<0) {
			maxdiff = 0;
		}
		minscroll = content.offsetTop;
		if (maxdiff) positionArticleContent();
	}


  $('.events').each(function() {
    var animateEvents = true;
    var $events=$(this);
    (function animate() {
      if (animateEvents) {
        var $sel = $events.find('.event.selected').next('.event');
        if (!$sel.length) $sel = $events.find('.event').eq(0);
        $events.find('.event').removeClass('selected');
        $sel.addClass('selected');
        setTimeout(animate,4000);
      } else {
        setTimeout(animate,60000);
        animateEvents = true;
      }

    })()
  
    $('.events').delegate('.event-tab','click',function() {
       animateEvents = false;
       var $this = $(this);
       $events.find('.event').removeClass('selected');
       $this.closest('.event').addClass('selected');
    })
  });

})

$(window).ready(function() {
  // focus search box, if no other inputs present and no anchor
  if($('input').length==4 && !window.location.hash) {
    $('#searchInput').focus();
  }
  $('.sidebar-extra').appendTo('#sidebar-extra');

 // Application.setup();
});


var toolbarInsertButton = function ( imageFile, speedTip, tagOpen, tagClose, sampleText) {
  var image = $('<img>', {
  	width : 23,
  	height: 22,
  	src   : '/w/skins/common/images/button_'+imageFile+'.png',
  	alt   : speedTip,
  	title : speedTip,
  	'class': 'mw-toolbar-editbutton'
	} ).click( function () {
		toolbarInsertTags( tagOpen, tagClose, sampleText);
		return false;
	} );

	$('#toolbar').append( image );
	return true;
};
var toolbarInsertTags = function ( tagOpen, tagClose, sampleText) {
  var box = $('#wpTextbox1')[0];
  if (!box) return;
  var start = box.selectionStart;
  var end = box.selectionEnd;
  var len = end-start;
  var old = box.value;
  var txt = tagOpen + (len == 0 ? sampleText : old.substring(start,end)) + tagClose;
  box.value = old.substr(0,start)+txt+old.substr(end);
  $(box).focus();
  box.selectionStart = start+tagOpen.length;
  box.selectionEnd = end+txt.length-len-tagClose.length;
};
$(function(){
  toolbarInsertButton('bold','b',"'''","'''",'bold text');
  toolbarInsertButton('italic','i',"''","''",'italic text');
  toolbarInsertButton('link','l',"[[","|","]]",'page name|title');
  toolbarInsertButton('extlink','e',"["," title]",'http://www.example.com');
  toolbarInsertButton('image','i',"\n[[Image:","]]",'example.jpg');
  toolbarInsertButton('nowiki','n',"<nowiki>","</nowiki>",'no wiki text');

  if(!wgUserName) $('.img-edit-link').remove();
});