(function () {
var _muteWords = loadData();
var $editorEl = $(
'<div id="muteEditor" class="dialog" style="display: none;">' +
'<form>' +
' <textarea id="muteEditor-text" placeholder="감출 키워드를 한 줄에 하나씩 입력하세요."></textarea>' +
' <input type="submit" value="저장">' +
' <input type="reset" value="취소">' +
'</form>' +
'<p>' +
' 키워드는 페미위키 서버가 아닌 사용자 브라우저에 저장됩니다.' +
' 여러 브라우저로 페미위키를 이용하시는 분들은 각 브라우저별로' +
' 키워드를 등록해주시기 바랍니다.' +
'</p>' +
'</div>'
);
function _initUI() {
$(document.body).append($editorEl);
$(
mw.util.addPortletLink(
'p-personal',
'#',
'뮤트',
'p-mute',
'금지어를 설정합니다.'
)
).on('click', function (e) {
e.preventDefault();
$editorEl.show();
var muteWords = loadData();
$('#muteEditor-text').val(muteWords.join('\n')).focus();
});
$editorEl.find('form').on('submit', function (e) {
e.preventDefault();
var muteWords = $('#muteEditor-text').val().trim();
saveData(muteWords ? muteWords.split('\n') : []);
$editorEl.hide();
});
$editorEl.find('input[type="reset"]').on('click', function (e) {
e.preventDefault();
$editorEl.hide();
});
}
function _showTriggerWarning() {
// Do nothing if it's edit mode
if ($('body.action-edit').length) return;
if ($('html.ve-activated').length) return;
var text = $('#content').html();
if (!shouldMute(text)) return;
// Show trigger warning
$('#mw-content-text').prepend(
'<div class="notice warning">' +
'가림 단어가 포함된 문서입니다. 이 문서의 제목 또는 본문에 한 개 이상의 가림 단어가 있습니다.' +
'</div>'
);
}
// Load, save
function loadData() {
return JSON.parse(localStorage.getItem('muteWords') || '[]');
}
function saveData(muteWords) {
try {
localStorage.setItem('muteWords', JSON.stringify(muteWords));
_muteWords = muteWords;
} catch (e) {
alert('프라이버시 모드에서는 이 기능을 사용하실 수 없습니다.');
}
}
// Should mute or not?
function shouldMute(text) {
for (var i = 0; i < _muteWords.length; i++) {
if (text.match(_muteWords[i])) return true;
}
return false;
}
// Init UI
$(function () {
_initUI();
_showTriggerWarning();
});
// Expose public APIs
var _FW = _FW || {};
_FW.mute = {
loadData: loadData,
saveData: saveData,
shouldMute: shouldMute,
};
})();