Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Portabilitate Bookmarklet - Verifica in ce retea suni

Portabilitate Bookmarklet

Verifică în ce rețea suni

Cum arata cand folosesti bookmarkletul

Instalare

Copiază textul fișierului portabilitate-bookmarklet.min.js și pune-l în câmpul URL când creezi un nou bookmark.

Folosire

Selectează un număr (fără prefixul de țară) și dă clic pe bookmarklet. Operatorul de telefonie la care e numărul respectiv o să apară în dreptul selecției.

Despre

Datele sunt preluate direct de pe pagini portabilitate.ro însă pentru a asigura funcționarea bookmarkletului pe cât mai multe site-uri e nevoie de un CORS proxy: https://cors-anywhere.herokuapp.com/http://portabilitate.ro/ro-no-07123457890

TODO

  • Error handling for rate limiting
  • Sane structure
  • Fix range, it selects the result
/*jshint -W028, esversion: 6 */
javascript:
(function() {
window.Portabilitate = {
init: function() {
// Împotriva site-urilor malefice care strică Dev Tools
if(!console.info || !console.error) fixConsole();
// Există selecție făcută de utilizator pe pagină?
var sel = (window.getSelection().toString()) ? window.getSelection() : null,
// Preia numarul din selecția făcută de utilizator
number = window.getSelection().toString().replace(/\D/g, ''),
// Tag-ul care va ține raspunsul cu rețeaua curentă
node = document.createElement('mark'),
manual = false;
// Utilizatorul nu a selectat nimic, preia numărul printr-un prompt
if (!number) {
manual = true;
number = (prompt('Află dacă următorul număr e portat:\n', 'ex. 07xx xxx xx xx') || '')
.replace(/\D/g, '');
}
function fixConsole() {
// Restore console object from iframe
var i = document.createElement('iframe');
i.style.display = 'none';
document.body.appendChild(i);
window.console = i.contentWindow.console;
}
function initUI() {
// Afișează în consolă ce cautare a început
console.info((sel || number) + ' e portat?...');
// Definește stilul răspunsului
node.class = 'portabilitate';
node.style.margin = '0 4px';
node.style.padding = '0 8px';
// Ce placeholder să apară până se încarcă
node.appendChild(document.createTextNode('?...'));
// Inserează răspunsul după selecția făcuta de utilizator
var range;
if (sel && sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.collapse(false);
range.insertNode(node);
}
}
initUI();
function showResults() {
// Afișează rezultatul căutării în consolă
var r = (Portabilitate.result.portat) ? 'Da. ' : 'Nu. ',
msg = r + 'E in ' + Portabilitate.result.reteaCurenta + '.\n\n';
console.info(msg);
// Dacă s-a introdus în prompt, afișează și în alertbox
if (manual) { alert(msg); }
// Afiseaza rezultatul în dreptul selecției
node.textContent = Portabilitate.result.reteaCurenta;
// Simbolizează că numărul e portat
if (Portabilitate.result.portat) { node.style.color = 'red'; }
}
// Hitting the endpoint directly doesn't work on HTTPS pages
// So we have to use a CORS proxy in order to make an HTTPS request
let url = 'https://cors-anywhere.herokuapp.com/http://portabilitate.ro/ro-no-' + number;
fetch(url, { headers: new Headers({'Origin': location.origin}), mode: 'cors' })
.then(response => response.text())
// .then(str => (new window.DOMParser()).parseFromString(str, "text/xml"))
.then(data => Portabilitate.parse(data))
.then(data => showResults())
.catch(e => console.error('Sorry. The number you have dialed is not in service'));
},
parse: function (data) {
Portabilitate.result = {
portat: !/\d{3,} nu este portat/g.test(data),
reteaCurenta: /(?:lnkOperator">)(.+?)(?=<)/g.exec(data)[1]
};
// Afișare mai omenească a rețelei curente
const retele = {
'VODAFONE ROMANIA': 'Vodafone',
'ORANGE ROMANIA': 'Orange',
'TELEKOM ROMANIA MOBILE (COSMOTE)': 'Telekom Mobil',
'TELEMOBIL': 'ZAPP',
'TELEKOM ROMANIA (ROMTELECOM)': 'Telekom Fix',
'RCS & RDS': 'RDS',
'UPC ROMANIA': 'UPC',
};
Portabilitate.result.reteaCurenta = retele[Portabilitate.result.reteaCurenta];
}
};
window.Portabilitate.init();
}());
javascript:(function(){window.Portabilitate={init:function(){if(!console.info||!console.error)fixConsole();var sel=window.getSelection().toString()?window.getSelection():null,number=window.getSelection().toString().replace(/\D/g,""),node=document.createElement("mark"),manual=false;if(!number){manual=true;number=(prompt("Află dacă următorul număr e portat:\n","ex. 07xx xxx xx xx")||"").replace(/\D/g,"")}function fixConsole(){var i=document.createElement("iframe");i.style.display="none";document.body.appendChild(i);window.console=i.contentWindow.console}function initUI(){console.info((sel||number)+" e portat?...");node.class="portabilitate";node.style.margin="0 4px";node.style.padding="0 8px";node.appendChild(document.createTextNode("?..."));var range;if(sel&&sel.getRangeAt&&sel.rangeCount){range=sel.getRangeAt(0);range.collapse(false);range.insertNode(node)}}initUI();function showResults(){var r=Portabilitate.result.portat?"Da. ":"Nu. ",msg=r+"E in "+Portabilitate.result.reteaCurenta+".\n\n";console.info(msg);if(manual){alert(msg)}node.textContent=Portabilitate.result.reteaCurenta;if(Portabilitate.result.portat){node.style.color="red"}}let url="https://cors-anywhere.herokuapp.com/http://portabilitate.ro/ro-no-"+number;fetch(url,{headers:new Headers({Origin:location.origin}),mode:"cors"}).then(response=>response.text()).then(data=>Portabilitate.parse(data)).then(data=>showResults()).catch(e=>console.error("Sorry. The number you have dialed is not in service"))},parse:function(data){Portabilitate.result={portat:!/\d{3,} nu este portat/g.test(data),reteaCurenta:/(?:lnkOperator">)(.+?)(?=<)/g.exec(data)[1]};const retele={"VODAFONE ROMANIA":"Vodafone","ORANGE ROMANIA":"Orange","TELEKOM ROMANIA MOBILE (COSMOTE)":"Telekom Mobil",TELEMOBIL:"ZAPP","TELEKOM ROMANIA (ROMTELECOM)":"Telekom Fix","RCS & RDS":"RDS","UPC ROMANIA":"UPC"};Portabilitate.result.reteaCurenta=retele[Portabilitate.result.reteaCurenta]}};window.Portabilitate.init()})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment