(Created page with "//<pre> //emotions. src: MediaWiki:Emoticons or template/doc. //profanity patterns: template/obscene (function ($) { //autocapitalize and emoiconize //profanity filt...") Thẻ: sourceedit |
Không có tóm lược sửa đổi Thẻ: sourceedit |
||
Dòng 13: | Dòng 13: | ||
var nbUseEmoList = typeof(nSettings.useemolist) !== 'undefined' ? nSettings.useemolist : true; |
var nbUseEmoList = typeof(nSettings.useemolist) !== 'undefined' ? nSettings.useemolist : true; |
||
var nbUseTemplate = typeof(nSettings.usetemplate) !== 'undefined' ? nSettings.usetemplate : true; |
var nbUseTemplate = typeof(nSettings.usetemplate) !== 'undefined' ? nSettings.usetemplate : true; |
||
− | var nTemplateName = ' |
+ | var nTemplateName = 'Emo'; //hardcoded must be profanity filter for //typeof(nSettings.templatename) !== 'undefined' ? nSettings.templatename : 'emo'; //uses template/doc for list |
var nProfanityString = nbUseTemplate ? '{{' + nTemplateName + '|(ban)|obscene={0}}} ' : '[[file:ban.gif]]'; |
var nProfanityString = nbUseTemplate ? '{{' + nTemplateName + '|(ban)|obscene={0}}} ' : '[[file:ban.gif]]'; |
||
var nObscene; //= []; //profanity patterns |
var nObscene; //= []; //profanity patterns |
Bản mới nhất lúc 04:33, ngày 10 tháng 9 năm 2017
//<pre>
//emotions. src: MediaWiki:Emoticons or template/doc.
//profanity patterns: template/obscene
(function ($) {
//autocapitalize and emoiconize
//profanity filter too
var neditApi = null;
var nSettings=window.nAutoCap || {};
var nbEmoticons = typeof(nSettings.emoticons) !== 'undefined' ? nSettings.emoticons : true; //smiles
var nbAutoCap = typeof(nSettings.autocap) !== 'undefined' ? nSettings.autocap : true; //autocapitalization
var nbProfanity = typeof(nSettings.profanity) !== 'undefined' ? nSettings.profanity : true;
var nbUseEmoList = typeof(nSettings.useemolist) !== 'undefined' ? nSettings.useemolist : true;
var nbUseTemplate = typeof(nSettings.usetemplate) !== 'undefined' ? nSettings.usetemplate : true;
var nTemplateName = 'Emo'; //hardcoded must be profanity filter for //typeof(nSettings.templatename) !== 'undefined' ? nSettings.templatename : 'emo'; //uses template/doc for list
var nProfanityString = nbUseTemplate ? '{{' + nTemplateName + '|(ban)|obscene={0}}} ' : '[[file:ban.gif]]';
var nObscene; //= []; //profanity patterns
var nObsceneExcl; //= []; //excl patterns
var nbDebug = typeof(nSettings.debug) !== 'undefined' ? nSettings.debug : false;
var nbReady = false; //multiple doc.ready protection
//var nEmoticons;
var nEmoCodes;
var nemoList; //emo window
var nemoListClass = 'nemo-list';
var nemoSmileClass = 'nemo-smile';
var nemoClass='nemo-button';
var nNamespace = 0;
//is here smthng to do
if (((!nbAutoCap) && (!nbEmoticons) && (!nbProfanity)) || nbReady) {return}
String.prototype.format = function () {
//stackoverflow.com/questions/1038746
var args = arguments;
return this.replace(/\{(\d+)\}/g, function (m, n) { return args[n]; });
}; //string.format
if (nbEmoticons || nbProfanity) {
if (nbDebug) console.log('ac. load emo');
mw.loader.using('mediawiki.util', nloadData);
}
function gguid() {
return ("00000000" + (Math.random()*Math.pow(36,6) << 0).toString(16)).slice(-8);
}//gguid
function escapeRegExp(str) {
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
} //escapeRegExp
function nshowEmoList (e) {
//show emo window
//if (nbDebug) console.log($(e.target).position());
var nx, ny, np;
np=$(e.target).position();
if (nbDebug) console.log('ac.sel npl:'+np.left+' npt:'+np.top+' eh:'+$(nemoList).height()+' ew:'+$(nemoList).width());
if (($(e.target).offset().left - $(window).scrollLeft() - $(nemoList).width())>1) {
nx=$(e.target).offset().left - $(window).scrollLeft() - $(nemoList).width();
} else {
nx=$(e.target).offset().left - $(window).scrollLeft();
}
if (($(e.target).offset().top - $(window).scrollTop() - $(nemoList).height())>1) {
ny=$(e.target).offset().top - $(window).scrollTop() - $(nemoList).height();
} else {
ny=$(e.target).offset().top - $(window).scrollTop();
}
$(nemoList).css('left', nx).css('top', ny);
$(nemoList).toggle();
if (nbDebug) console.log('ac.sel x:'+nx+' y:'+ny);
} //nshowEmoList
function nemoListHandler (e) {
//emo window event handler
$(nemoList).hide();
if ($(e.target).is('img')) {
if (nbDebug) console.log('esrc:'+$(e.target).attr('src'));
var ns = neditApi.getMessage();
//ns = typeof(ns) === 'undefined' ? '' : ns;
//nsetMessage(ns + ' ' + $(e.target).attr('alt') + ' ');
ns = ns + ' ' + $(e.target).attr('alt') + ' ';
neditApi.setMessage(ns, true);
}
} //nemoListHandler
function nemobHandler (e) {
//emo button click handler
nshowEmoList(e);
} //nemobHandler
function ncreateEmoList() {
//create emo list
if (nbDebug) console.log('ac. create emo list');
var nbs='.speech-bubble-buttons';//'.MiniEditorWrapper .cke_toolbar_insert';//'.speech-bubble-buttons';//'.speech-bubble-message .toolbar';
nemoList=$('<div/>', {
class: nemoListClass,
width: '250px',
style: 'z-index: 10; position: fixed; display: block;',
//height: 'auto',
text: ''
}).appendTo('body');//.ready(function(){
$(nemoList).hide();
//$('body').append($(nemoList));
$(nemoList).on('click', nemoListHandler);
//fill list
if (nbDebug) console.log('ac.cel emo.len:'+nEmoCodes.length);
var nimg, nprev;
for (var i=0; i<nEmoCodes.length; i++) {
if (nEmoCodes[i][1] !== nprev) {
nprev=nEmoCodes[i][1];
nimg=$('<img>', {
src: nEmoCodes[i][1],
class: nemoSmileClass,
alt: nEmoCodes[i][0],
title: nEmoCodes[i][0],
style: 'width: 19px; height: 19px;'
});
$(nemoList).append(nimg);
}
}
//$('body').on('click keydown keypress', nemoListHandler);
//var nemoButton=$('<button/>', {
var nemoButton=$('<img>', {
src: nEmoCodes[0][1],
alt: '(smile)', //nEmoCodes[0][1],
title: 'Smile',
style: 'width: 19px; height: auto; vertical-align: top; margin-top: 11px;',
//type: 'button',
//text: 'emo',
class: nemoClass
});
$(nbs).append(nemoButton).ready(function(){$(nemoButton).on('click', nemobHandler)});
$(window).on('keypress click', function(e) {
//ignore emo button events
if ($(e.target).hasClass(nemoClass)) return;
$(nemoList).hide();
});
//console.log('el.len:'+$(nemoList).find('img').length);
} //createEmoList
function nparseEmo (data) {
//nEmoticons=[];
if (nbDebug) console.log('ac. parse emo');
nEmoCodes=[];
var nimg;
var $nemos=$(data);
$nemos.children('ul:first').children('li').each(function(index, value){
//get img and put it in emoticons
nimg=$(value).find('img');
$(value).children('ul:first').children('li').each(function(index, value){
nEmoCodes.push([$(value).text().trim(), nimg.attr('src')]);
});
});
if (nbUseEmoList) {
ncreateEmoList();
}
} //nparseEmo
function nparseObscene (data) {
//load profanity filters
if (nbDebug) console.log('ac. parse obscene. data:'+data.length);
nObscene = [];
nObsceneExcl = [];
var $data = $('<div/>'); //malformed(?!) data override
$data.append($(data));
$data.find('.obscene li').each(function(index, value){
nObscene.push($(value).text().trim());
});
$data.find('.obscene_excl li').each(function(index, value){
nObsceneExcl.push($(value).text().trim());
});
if (nbDebug) {
console.log('ac.po obsc:'+nObscene.length+' excl:'+nObsceneExcl.length);
window.nAutoCap.Obscene = nObscene;
window.nAutoCap.ObsceneExcl = nObsceneExcl;
}
} //nparseObscene
function nloadData() {
//var url='MediaWiki:Emoticons';
if (nbDebug) console.log('ac. load data started');
if (nbEmoticons) {
if (nbUseTemplate) {
$.get(mw.util.getUrl('template:' + nTemplateName + '/doc', {action: 'render'})).done(nparseEmo);
} else {
$.get(mw.util.getUrl('MediaWiki:Emoticons', {action: 'render'})).done(nparseEmo);
}
} //if emoticons
if (nbProfanity) {
$.get(mw.util.getUrl('template:' + nTemplateName + '/obscene', {action: 'render'})).done(nparseObscene);
} //if profanity
} //nloadEmo
function nHandler (e) {
//click handler
var nmsg = neditApi.getMessage();
if (nmsg && nmsg.length > 0) {
var nnewMsg = ncapitalize(nmsg);
if (nbDebug) console.log('ac.m: ' + nnewMsg);
neditApi.setMessage(nnewMsg, true);
}
return true;
} //nHandler
function nhlpReplacer (match, p1) {
//replacer helper function
return nProfanityString.format(match);
}//hlpReplacer
function ncapitalize (nstring) {
//add additional spaces
var i, i1, len, len1;
nstring = nstring.replace(/>/g, '> ').replace(/</g, ' <').replace(/\}\}/g, '}} '); //.replace(/ /g, ' ');
//apply profanity filter
if (nbProfanity) {
//remove exclusions
var ns1 = nstring, na = [], repl = [], r, re;
for (i=0, len=nObsceneExcl.length; i<len; i++) {
re = new RegExp(nObsceneExcl[i], 'igm');
na = ns1.match(re) || [];
if (nbDebug) console.log('ac.c excl:'+na.length+':'+nObsceneExcl[i]);
for (i1=0, len1=na.length; i1<len1; i1++) {
r = {id: gguid(), value: na[i1]};
repl.push(r);
if (nbDebug) console.log('ac.c exclude '+r.id+':'+r.value);
ns1 = ns1.replace(new RegExp(escapeRegExp(r.value), 'im'), r.id);
//break; //1 is (not) enough
} //for i1
} //for i (obsc excl)
//remove obscene
if (nbDebug) console.log('ac.c r obsc s: '+ns1);
for (i=0, len=nObscene.length; i<len; i++) {
re = new RegExp(nObscene[i], 'igm');
//ns1 = escapeRegExp(ns1);
ns1 = ns1.replace(re, nhlpReplacer);
}//for i (obsc)
//restore exclusions
for (i=0, len=repl.length; i<len; i++) {
r = repl[i];
re = new RegExp(r.id, 'im');
ns1 = ns1.replace(re, r.value);
}//for i (restore excl)
nstring = ns1;
} //if profanity
if (nbAutoCap) {
nstring=nstring.replace(/.*?(\}\}|[\.\?\!\>])(\s|$)/gm, function (txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1);
});
} //if autocap
if (nbEmoticons) {
for (i=0, len=nEmoCodes.length; i<len; i++) {
if (nbUseTemplate) {
nstring=nstring.replace(new RegExp('(\\s|^)(' + escapeRegExp(nEmoCodes[i][0]) + ')(\\s|$)', 'igm'), ' {{' + nTemplateName + '|smile=' + nEmoCodes[i][0] + '}} ');
} else {
nstring=nstring.replace(new RegExp('(\\s|^)(' + escapeRegExp(nEmoCodes[i][0]) + ')(\\s|$)', 'igm'), ' ' + nEmoCodes[i][1] + ' ');
}
}
} //if emoticons
//remove spaces added
nstring=nstring.replace(/> /g,'>').replace(/ </g, '<').replace(/\}\} /g, '}}').replace(/ /g, ' ');
return nstring;
} //ncapitalize
function nmain() {
//document.ready
$(function() {
//document.ready
if (nbReady) return; //multiple doc.ready protection
nbReady = true; //multiple doc.ready protection
switch (mw.config.get('wgNamespaceNumber')) {
case 0:
//wikia article
nNamespace = 2;
//w8 4 comm. forever
var ntimer=setInterval(function() {
$('.MiniEditorWrapper input[type="submit"]').off('focusin', nHandler);
$('.MiniEditorWrapper input[type="submit"]').on('focusin', nHandler);
}, 3000);
break;
case 500:
//blog = wikia article
nNamespace = 2;
//w8 4 comm. forever
var ntimer1=setInterval(function() {
$('.MiniEditorWrapper input[type="submit"]').off('focusin', nHandler);
$('.MiniEditorWrapper input[type="submit"]').on('focusin', nHandler);
}, 3000);
break;
case 1201:
//forum
nNamespace = 1;
$('.MiniEditorWrapper .replyButton, .MiniEditorWrapper .previewButton').on('focusin', nHandler);
break;
default:
nNamespace = 0;
if (nbDebug) console.log('ac.namespace:' + nNamespace);
break;
} //switch namespacenumber
if (nNamespace === 0) {
//nowhere to work
return false;
}
//get edit api. should be after namespace checks
neditApi = new window.ngMsgEditAPI();
}); //document.ready
} //nmain
if (!window.ngMsgEditAPI || !window.ngMsgEditAPI.version) {
//load edit api
if(nbDebug) console.log('ac. load edit api');
$.ajaxSetup({cache: true});
$.getScript('http://ru.borderlands.wikia.com/index.php?title=MediaWiki:MessageEditAPI.js&action=raw&ctype=text/javascript', nmain); //getscript
} else {
nmain();
} //if not edipapi
}(jQuery)); //autocapitalize