LLWiki正在建设中,欢迎加入我们!
“MediaWiki:Gadget-autocomplete-core.js”的版本间差异
跳转到导航
跳转到搜索
小 |
小 |
||
第1行: | 第1行: | ||
$(function() { |
$(function() { |
||
var editbox |
var editbox, prefix, |
||
api = new mw.Api(), |
api = new mw.Api(), |
||
autocomplete = false; |
autocomplete = false; |
||
第24行: | 第24行: | ||
//console.log('Autocompletion begins.'); |
//console.log('Autocompletion begins.'); |
||
autocomplete = true; |
autocomplete = true; |
||
if(prefix[1]) { updateHints(); } |
|||
if(prefix[1]) { updateHints(prefix); } |
|||
editbox.on('input', function() { |
editbox.on('input', function() { |
||
prefix = getPrefix(); |
|||
if(!prefix) { |
if(!prefix) { |
||
hideHints(); |
hideHints(); |
||
第33行: | 第32行: | ||
else { |
else { |
||
setTimeout(function() { |
setTimeout(function() { |
||
updateHints( |
updateHints(); |
||
}, 500); |
}, 500); |
||
} |
} |
||
第44行: | 第43行: | ||
$('#autocompleteHints').remove(); |
$('#autocompleteHints').remove(); |
||
}; |
}; |
||
var updateHints = function( |
var updateHints = function() { |
||
var hints; |
var hints; |
||
if( $('#autocompleteHints').length ) { |
if( $('#autocompleteHints').length ) { |
||
第91行: | 第90行: | ||
}; |
}; |
||
$('body').on('keydown', '#wpTextbox1, #Wikiplus-Quickedit', function(e) { |
|||
editbox = $(this); |
|||
if(e.keyCode == 9) { |
if(e.keyCode == 9) { |
||
prefix = getPrefix(); |
|||
e.preventDefault(); |
e.preventDefault(); |
||
if(prefix && !autocomplete) { |
if(prefix && !autocomplete) { |
2020年9月7日 (一) 11:23的版本
$(function() { var editbox, prefix, api = new mw.Api(), autocomplete = false; const regexp1 = /\[\[((?:(?!(\[|]|\|)).)*)$/, regexp2 = /{{((?:(?!({|}|\||:|#)).)*)$/, regexp3 = /{{#invoke:((?:(?!({|}|\|)).)*)$/i, regexp4 = /{{#widget:((?:(?!({|}|\|)).)*)$/i; var getPrefix = function() { var position = editbox.prop('selectionEnd'), left = editbox.val().substring(0, position), result = null; if(result = left.match(regexp1)) { if( /^(.+):/.test(result[1]) ) { return ['*', result[1]]; } if( /^:/.test(result[1]) ) { return ['6|14', result[1]]; } return ['0', result[1]]; } if(result = left.match(regexp2)) { return ['10', result[1]]; } if(result = left.match(regexp3)) { return ['828', result[1]]; } if(result = left.match(regexp4)) { return ['274', result[1]]; } return null; }; var showHints = function() { //console.log('Autocompletion begins.'); autocomplete = true; if(prefix[1]) { updateHints(); } editbox.on('input', function() { prefix = getPrefix(); if(!prefix) { hideHints(); } else { setTimeout(function() { updateHints(); }, 500); } }); }; var hideHints = function() { //console.log('Autocompletion ends.'); autocomplete = false; editbox.off('input'); $('#autocompleteHints').remove(); }; var updateHints = function() { var hints; if( $('#autocompleteHints').length ) { hints = $('#autocompleteHints').eq(0); } else { hints = $('<div id="autocompleteHints" class="ui-widget-content">').insertAfter(editbox); hints.draggable(); hints.on('click', 'li', function(e) { var ele = $(e.target), position = editbox.prop('selectionEnd'), left = editbox.val().substring(0, position), right = editbox.val().substring(position); if(prefix[0] == '*' || prefix[0] == '0') { editbox.val(left.replace(regexp1,'[[') + ele.text() + ']]' + right); } if(prefix[0] == '6|14') { editbox.val(left.replace(regexp1,'[[:') + ele.text() + ']]' + right); } else if(prefix[0] == '10') { editbox.val(left.replace(regexp2,'{{') + ele.text().substring(9) + '}}' + right); } else if(prefix[0] == '828') { editbox.val(left.replace(regexp3,'{{#invoke') + ele.text().substring(2) + '}}' + right); } else if(prefix[0] == '274') { editbox.val(left.replace(regexp4,'{{#') + ele.text() + '}}' + right); } hideHints(); }); } if(!prefix[1]) { hints.html('<span class="error">' + wgUCS("请输入页面部分标题", "請輸入頁面部分標題") + '</span>'); return; } api.get({action:'query', list:'prefixsearch', pssearch:prefix[1].replace(/^:/, ''), psnamespace:prefix[0], formatversion:2}) .then(function(data) { var titles = data.query.prefixsearch.map( (ele) => '<li>' + ele.title + '</li>' ); if(titles.length) { hints.html('<ul>' + titles.join('') + '</ul>'); } else { hints.html('<span class="error">' + wgUCS("没有对应页面", "沒有對應頁面") + '</span>'); } }); }; $('body').on('keydown', '#wpTextbox1, #Wikiplus-Quickedit', function(e) { editbox = $(this); if(e.keyCode == 9) { prefix = getPrefix(); e.preventDefault(); if(prefix && !autocomplete) { showHints(); } } if(e.keyCode == 27) { e.preventDefault(); if(autocomplete) { hideHints(); } } }); });