123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- /*const wiki = document.getElementById('wb-settings-wiki');
- if ( wiki ) wiki.addEventListener( 'input', function (event) {
- if ( wiki.validity.valid ) {
- wiki.setCustomValidity('I am expecting an e-mail address!');
- }
- else {
- wiki.setCustomValidity();
- }
- } );
- const prefix = document.getElementById('wb-settings-prefix');
- if ( prefix ) prefix.addEventListener( 'input', function (event) {
- if ( prefix.validity.patternMismatch ) {
- prefix.setCustomValidity('The prefix may not include spaces or code markdown!');
- }
- else {
- prefix.setCustomValidity();
- }
- } );
- const form = document.getElementById('wb-settings');
- if ( form ) form.addEventListener( 'submit', function (event) {
- if ( prefix && prefix.validity.patternMismatch ) {
- prefix.setCustomValidity('The prefix may not include spaces or code markdown!');
- event.preventDefault();
- }
- else if ( wiki && wiki.validity.valid ) {
- wiki.value
- fetch()
- got.get( wikinew + 'api.php?&action=query&meta=siteinfo&siprop=general&format=json' ).then( response => {
- if ( !isForced && response.statusCode === 404 && typeof response.body === 'string' ) {
- let api = cheerio.load(response.body)('head link[rel="EditURI"]').prop('href');
- if ( api ) {
- wikinew = new Wiki(api.split('api.php?')[0], wikinew);
- return got.get( wikinew + 'api.php?action=query&meta=siteinfo&siprop=generals&format=json' );
- }
- }
- return response;
- } ).then( response => {
- var body = response.body;
- if ( response.statusCode !== 200 || !body?.query?.allmessages || !body?.query?.general || !body?.query?.extensions ) {
- console.log( '- ' + response.statusCode + ': Error while testing the wiki: ' + body?.error?.info );
- if ( reaction ) reaction.removeEmoji();
- msg.reactEmoji('nowiki', true);
- return msg.replyMsg( lang.get('settings.wikiinvalid') + wikihelp, {}, true );
- }
- if ( !isForced ) wikinew.updateWiki(body.query.general);
- if ( wikinew.isGamepedia() && !isForced ) {
- let site = allSites.find( site => site.wiki_domain === wikinew.hostname );
- if ( site ) wikinew = new Wiki('https://' + ( site.wiki_crossover || site.wiki_domain ) + '/');
- }
- else if ( wikinew.isFandom() && !isForced ) {
- let crossover = '';
- if ( body.query.allmessages[0]['*'] ) {
- crossover = 'https://' + body.query.allmessages[0]['*'] + '.gamepedia.com/';
- }
- else if ( body.query.allmessages[1]['*'] ) {
- let merge = body.query.allmessages[1]['*'].split('/');
- crossover = 'https://' + merge[0] + '.fandom.com/' + ( merge[1] ? merge[1] + '/' : '' );
- }
- if ( crossover ) wikinew = new Wiki(crossover);
- }
- }, ferror => {
- console.log( '- Error while testing the wiki: ' + ferror );
- if ( reaction ) reaction.removeEmoji();
- msg.reactEmoji('nowiki', true);
- return msg.replyMsg( lang.get('settings.wikiinvalid') + wikihelp, {}, true );
- } );
- }
- else form.dispatchEvent(new Event('submit'));
- } );
- var collapsible = document.getElementsByClassName('collapsible');
- for ( var i = 0; i < collapsible.length; i++ ) {
- collapsible[i].onclick = function() {
- this.classList.toggle('active');
- if ( this.id === 'wb-settings-wiki-search' ) {
- wiki.toggleAttribute('readonly');
- }
- var content = this.nextElementSibling;
- if ( content.style.display === 'block' ) {
- content.style.display = 'none';
- }
- else {
- content.style.display = 'block';
- }
- }
- }
- */
- var baseSelect = document.getElementsByTagName('select');
- for ( var b = 0; b < baseSelect.length; b++ ) {
- if ( baseSelect[b].parentNode.querySelector('button.addmore') ) {
- baseSelect[b].addEventListener( 'input', toggleOption );
- toggleOption.call(baseSelect[b]);
- }
- }
- var addmore = document.getElementsByClassName('addmore');
- for ( var j = 0; j < addmore.length; j++ ) {
- addmore[j].onclick = function() {
- var clone = this.previousElementSibling.cloneNode(true);
- clone.classList.add('wb-settings-additional-select');
- clone.removeAttribute('id');
- clone.removeAttribute('required');
- clone.childNodes.forEach( function(child) {
- child.removeAttribute('hidden');
- child.removeAttribute('selected');
- } );
- clone.querySelector('option.defaultSelect').setAttribute('selected', '');
- clone.addEventListener( 'input', toggleOption );
- this.before(clone);
- toggleOption.call(clone);
- }
- }
- /**
- * @this HTMLSelectElement
- */
- function toggleOption() {
- var options = [];
- var selected = [];
- var allSelect = this.parentNode.querySelectorAll('select');
- allSelect.forEach( function(select) {
- options.push(...select.options);
- selected.push(...select.selectedOptions);
- } );
- var button = this.parentNode.querySelector('button.addmore');
- if ( selected.some( function(option) {
- if ( option && option.value ) return false;
- else return true;
- } ) || allSelect.length >= 10 || allSelect.length >= this.options.length-1 ) {
- button.setAttribute('hidden', '');
- }
- else button.removeAttribute('hidden');
- selected = selected.filter( function(option) {
- if ( option && option.value ) return true;
- else return false;
- } ).map( function(option) {
- return option.value;
- } );
- options.forEach( function(option) {
- if ( selected.includes(option.value) && !option.selected ) {
- option.setAttribute('disabled', '');
- }
- else if ( option.disabled ) option.removeAttribute('disabled');
- } );
- }
- const wiki = document.getElementById('wb-settings-wiki');
- if ( wiki ) {
- const feeds = document.getElementById('wb-settings-feeds');
- if ( feeds ) {
- const hidefeeds = document.getElementById('wb-settings-feeds-hide');
- const feedsonly = document.getElementById('wb-settings-feeds-only');
- const hidefeedsonly = document.getElementById('wb-settings-feeds-only-hide');
- feeds.addEventListener( 'change', function() {
- if ( this.checked ) {
- hidefeedsonly.removeAttribute('style');
- if ( !hidefeeds.hasAttribute('style') ) feedsonly.removeAttribute('disabled');
- }
- else {
- hidefeedsonly.setAttribute('style', 'visibility: hidden;');
- feedsonly.setAttribute('disabled', '');
- }
- } );
- wiki.addEventListener( 'input', function() {
- if ( this.validity.valid && /\.(?:fandom\.com|wikia\.org)$/.test(new URL(this.value).hostname) ) {
- hidefeeds.removeAttribute('style');
- feeds.removeAttribute('disabled');
- if ( !hidefeedsonly.hasAttribute('style') ) feedsonly.removeAttribute('disabled');
- }
- else {
- hidefeeds.setAttribute('style', 'visibility: hidden;');
- feeds.setAttribute('disabled', '');
- feedsonly.setAttribute('disabled', '');
- }
- } );
- }
- }
|