Difference between revisions of "User:Fbstj/gadget/history-test.js"

From The Coppermind
Jump to navigation Jump to search
m (smaller links)
m (+notices junk)
Line 14: Line 14:
   
 
});
 
});
  +
  +
  +
/* see User:Fbstj/notice_sandbox */
  +
  +
/*
  +
filters for the first previous `sel` on each of `this`
  +
cb gets the passed element and the first matched element (or _default, if nothing matched)
  +
*/
  +
$.fn.previous = function (sel, cb/*(el)*/, _default) {
  +
$(this).each(function () {
  +
var pre = $(this).prevAll(sel);
  +
cb.call(this, pre.length ? pre.first() : _default);
  +
})
  +
}
  +
/* returns true if the element has the passed class */
  +
$.fn.classed = function (cls) {
  +
return $(this)[0].classList ? $(this)[0].classList.contains(cls) : false;
  +
}
  +
  +
/*
  +
filter for all .notice instances (not including .stub's)
  +
returning the 'parent' header:
  +
- subsection: the hX of the subsection
  +
- preamble: the first h1 element
  +
*/
  +
function NoticeHeaderPairs(cb/*(el_header)*/){
  +
$('.notice:not(.stub)').previous('h1,h2,h3,h4,h5', cb, $('h1'))
  +
}
  +
  +
/*
  +
pass to NoticeHeaderPairs to add notices to headers
  +
*/
  +
function AddNoticeToHeader(h){
  +
var that = $(this)
  +
function _match(cls,el){
  +
if (!that.classed(cls))
  +
return;
  +
h.append(el);
  +
that.hide();
  +
el.click(function(){ that.toggle(); });
  +
}
  +
function _el(text,color){ return ne('span').attr('class','notice').attr('title',text).css('color',color); }
  +
function _img(source,text){ return ne('img').attr('class','notice').attr('src', source).attr('alt', text).attr('title', text); }
  +
/* matches */
  +
_match('exemplary',_el('This article is exemplary','gold').text('★'));
  +
_match('attention',_el('This article needs serious attention', 'red').text('!'));
  +
_match('delete',_img('http://upload.wikimedia.org/wikipedia/commons/9/93/Trash_can.svg', 'This article is to be deleted'));
  +
_match('move',_el('This article may be moved', 'blue').text('⇄'));
  +
_match('copyright',_el('This article is copyright','brown').text('©'));
  +
_match('spoilers',_el('This article/section has spoilers','#FAA').text('¬.¬'));
  +
_match('theory',_el('This article/section contains theory or speculation','#29F').text('¿'));
  +
}
  +
  +
jQuery(function ($) {
  +
$('h1,h2:not(.notes),h3,h4', $('#content')).children(':not(.editsection,.notice)').css('margin-right','1em');
  +
})

Revision as of 09:58, 27 May 2015

/* Add edit buttons to templates */
$(function () {

function edit_button(i, v) {
  if (!v) return v;
  v = v.replace(/\.(\d+)/, "%$1");
  var a = "<a href='/edit/Template:" + v +"'>edit</a>";
  $('.title', this).append("<span class='mw-editsection' style='float: right;' >[" + a + "]</span>");
}

$('.navbar').attr('id', edit_button);

$('.infobox').attr('id', edit_button);

});


/* see User:Fbstj/notice_sandbox  */

/*
filters for the first previous `sel` on each of `this`
cb gets the passed element and the first matched element (or _default, if nothing matched)
*/
$.fn.previous = function (sel, cb/*(el)*/, _default) {
 $(this).each(function () {
   var pre = $(this).prevAll(sel);
   cb.call(this, pre.length ? pre.first() : _default);
  })
}
/* returns true if the element has the passed class */
$.fn.classed = function (cls) {
  return $(this)[0].classList ? $(this)[0].classList.contains(cls) : false;
}

/*
filter for all .notice instances (not including .stub's)
returning the 'parent' header:
- subsection: the hX of the subsection
- preamble: the first h1 element
*/
function NoticeHeaderPairs(cb/*(el_header)*/){
  $('.notice:not(.stub)').previous('h1,h2,h3,h4,h5', cb, $('h1'))
}

/*
  pass to NoticeHeaderPairs to add notices to headers
*/
function AddNoticeToHeader(h){
var that = $(this)
 function _match(cls,el){
    if (!that.classed(cls))
        return;
    h.append(el);
    that.hide();
    el.click(function(){ that.toggle(); });
 }
 function _el(text,color){ return ne('span').attr('class','notice').attr('title',text).css('color',color); }
 function _img(source,text){ return ne('img').attr('class','notice').attr('src', source).attr('alt', text).attr('title', text); }
/* matches */
_match('exemplary',_el('This article is exemplary','gold').text('★'));
_match('attention',_el('This article needs serious attention', 'red').text('!'));
_match('delete',_img('http://upload.wikimedia.org/wikipedia/commons/9/93/Trash_can.svg', 'This article is to be deleted'));
_match('move',_el('This article may be moved', 'blue').text('⇄'));
_match('copyright',_el('This article is copyright','brown').text('©'));
_match('spoilers',_el('This article/section has spoilers','#FAA').text('¬.¬'));
_match('theory',_el('This article/section contains theory or speculation','#29F').text('¿'));
}

jQuery(function ($) {
  $('h1,h2:not(.notes),h3,h4', $('#content')).children(':not(.editsection,.notice)').css('margin-right','1em');
})