X-Git-Url: https://git.ktnx.net/?p=icedeb.git;a=blobdiff_plain;f=icedeb.js;h=41117778fa9a08fc08acb30ff44b05acb69b465b;hp=dcd1197506839e86cebcd3920cb37f021f2a0fb2;hb=c28c4dad3eb96d8ad3a01ea68aa1c29c4fbddce9;hpb=770b99eb23ca37c131fd5497cb5d1ce22bfb1b8d diff --git a/icedeb.js b/icedeb.js index dcd1197..4111777 100644 --- a/icedeb.js +++ b/icedeb.js @@ -30,38 +30,97 @@ function trim(word) { word = word.replace(/^[^a-zA-Z0-9]+/, ''); word = word.replace(/[^a-zA-Z0-9]+$/, ''); word = word.replace(/^Bug#/i, ''); + word = word.replace(/^#/, ''); } while ( oldword != word ); return word; } function open_tab(url) { - browser.tabs.create({url:url}) - .then( - function() {}, - function(err) { - console.log('Error creating tab', err); - } - ); + return new Promise((resolve, reject) => { + browser.tabs.create({url:url, active:false}) + .then( + function() { + resolve(); + }, + function(err) { + //console.log('Error creating tab', err); + reject(err); + } + ); + }); } -document.addEventListener('click', (e) => { - console.log(e.button); - if ( !e.target.classList.contains('icedeb-button') ) - return; +function open_link(url, in_new_tab) { + //console.log('open_link', url, in_new_tab); + + if (in_new_tab) { + return open_tab(url); + } + + //console.log('querying active tab'); + return new Promise((resolve, reject) => { + browser.tabs.query({active:true, currentWindow:true}) + .then( + function(tabs) { + //console.log('active tab queried'); + browser.tabs.executeScript(tabs[0].id, {file: '/icedeb-content.js'}) + .then( + function(){ + //console.log('content script executed'); + browser.tabs.sendMessage( tabs[0].id, {url:url} ) + .then( + function() { + //console.log('message sent'); + resolve(); + }, + function(err) { + console.log('error sending message', err); + reject(err); + } + ); + }, + function(err){ + console.log('Error executing script. Probably a system tab is active', err, tabs[0]); + open_tab(url) + .then( + function() { resolve(); }, + function(err) { reject(err); } ); + }); + }, + function(err) { + console.log('Error querying the active tab of the current window', err); + open_tab(url) + .then( + function() { resolve(); }, + function(err) { reject(err) } + ); + } + ); + }); +} + +function link_clicked(e) { + //console.log(e.target.tagName); let autoclose = true; - let clip_input = document.getElementById("clipboard"); - clip_input.focus(); - if (!document.execCommand("paste")) { - let err = document.getElementById('error'); - err.textContent = 'Error executing Paste'; - err.classList.remove('hidden'); - return; + if (e.target.tagName == 'A') { + open_link(e.target.href, e.button == 1) + .then( function() { + if (autoclose) { + //console.log('closing pop-up'); + window.close(); + } + }); + e.preventDefault(); + return false; } - let clip = trim(clip_input.textContent); + let clip_input = document.getElementById("clipboard"); + let clip = trim(clip_input.value); + + if(clip_input.value == '') return; let url; @@ -79,63 +138,119 @@ document.addEventListener('click', (e) => { url = 'https://lists.debian.org/msgid-search/' + clip; break; case 'ddpo': - url = 'https://qa.debian.org/developer.php'; - if (clip != '') - url += '?login=' + clip; + url = 'https://qa.debian.org/developer.php?login=' + clip; + break; + case 'dmd': + url = 'https://udd.debian.org/dmd.cgi?email1=' + clip; break; case 'buildd': url = 'https://buildd.debian.org/' + clip; break; case 'security': - url = 'https://security-tracker.debian.org/'; - if (clip != '') - url += 'tracker/' + clip; + clip = clip.replace(' ', '-'); + clip = clip.toUpperCase(); + url = 'https://security-tracker.debian.org/tracker/' + clip; + break; + case 'piuparts': + url = `https://piuparts.debian.org/sid/source/${clip.substring(0,1)}/${clip}.html`; + break; + case 'r-b': + url = 'https://tests.reproducible-builds.org/debian/rb-pkg/' + clip + '.html'; break; } - if (e.button == 1) { - open_tab(url); - if (autoclose) window.close(); - return; - } - - browser.tabs.query({active:true, currentWindow:true}) - .then( - function(tabs) { - browser.tabs.executeScript(tabs[0].id, {file: '/icedeb-content.js'}) - .then( - function(){ - browser.tabs.sendMessage( tabs[0].id, {url:url} ); - if (autoclose) window.close(); - }, - function(err){ - console.log('Error executing script', err); - }); - - }, - function(err) { - console.log('Error querying the active tab of the current window', err); - open_tab(url); - if (autoclose) window.close(); + open_link(url, e.button == 1) + .then( function() { + if (autoclose) { + //console.log('closing pop-up'); + window.close(); } - ); -}); + }); -document.addEventListener('change', (e) => { - if ( !e.target.classList.contains('icedeb-option') ) - return; + e.preventDefault(); + return false; +} - save_settings(); -}); +function check_likely_inputs(q) { + let cnt = document.getElementById('button-list-container').classList; + + cnt.remove('like-b', 'like-p', 'like-m', 'like-i', 'like-s'); + document.querySelectorAll('.likely') + .forEach((el) => { + el.classList.remove('likely'); + }); + + q = q.replace(/^\s+/, ''); + q = q.replace(/\s+$/, ''); -browser.runtime.getPlatformInfo() - .then(function(info) { - console.log(info.os); + if ( /^#?\d+$/.test(q) || /^CVE-/.test(q) ) + cnt.add('like-b'); - switch (info.os) { - case 'linux': - case 'openbsd': - document.getElementById('sorry').classList.remove('hidden'); - break; + if ( /^[a-z0-9][a-z0-9\-+.]+$/.test(q) ) + cnt.add('like-p'); + + if ( /.@[a-z0-9-]/i.test(q) ) + cnt.add('like-m'); + + if ( /^<.+@.+>$/.test(q) ) + cnt.add('like-i'); + + if ( /^d[sl]a[- ]\d+(-\d+)?$/i.test(q) ) + cnt.add('like-s'); + + document.querySelectorAll('.like-b .hint.b, .like-p .hint.p, .like-m .hint.m, .like-i .hint.i, .like-s .hint.s') + .forEach((el) => { + el.parentElement.parentElement.classList.add('likely'); + } ); +} + +function react_to_clipboard_text(text) { + let clip_input = document.getElementById("clipboard"); + clip_input.value = text; + clip_input.focus(); + clip_input.setSelectionRange(0, clip_input.value.length); + + check_likely_inputs(text); +} + +function get_clipboard_contents() { + if (navigator.clipboard && navigator.clipboard.readText) { + navigator.clipboard.readText().then(function(q){ + react_to_clipboard_text(q); + }); + } + else { + let clip_pot = document.getElementById('clip-pot'); + let clip_input = document.getElementById("clipboard"); + clip_pot.focus(); + if (document.execCommand("Paste")) { + let q = clip_pot.textContent.trim(); + react_to_clipboard_text(q); } + } +} + +window.addEventListener('DOMContentLoaded', (e) => { + document.querySelectorAll('.icedeb-button, #button-list-container a') + .forEach(function(el){ + el.addEventListener('mouseup', link_clicked); + }); + + document.querySelector('#clipboard') + .addEventListener('input', function(ev) { + check_likely_inputs(ev.target.value); + }); + + document.addEventListener('change', (e) => { + if ( !e.target.classList.contains('icedeb-option') ) + return; + + save_settings(); + }); + + window.requestAnimationFrame(()=>{ + window.requestAnimationFrame(get_clipboard_contents); }); +}); + +// vim: sw=2