Skip to content

Instantly share code, notes, and snippets.

@LeonardoCiaccio
Created August 13, 2017 11:59
Show Gist options
  • Select an option

  • Save LeonardoCiaccio/5f91033440e701322cef23b32f0e6455 to your computer and use it in GitHub Desktop.

Select an option

Save LeonardoCiaccio/5f91033440e701322cef23b32f0e6455 to your computer and use it in GitHub Desktop.
Universal Signature ( uSignature )
/*
Puoi creare il bookmarklet utilizzando questo servizio https://chriszarate.github.io/bookmarkleter/
*/
// --> [ uSignature lib ]
!function(t){"use strict";function n(t,n){var e=(65535&t)+(65535&n),r=(t>>16)+(n>>16)+(e>>16);return r<<16|65535&e}function e(t,n){return t<<n|t>>>32-n}function r(t,r,u,o,c,i){return n(e(n(n(r,t),n(o,i)),c),u)}function u(t,n,e,u,o,c,i){return r(n&e|~n&u,t,n,o,c,i)}function o(t,n,e,u,o,c,i){return r(n&u|e&~u,t,n,o,c,i)}function c(t,n,e,u,o,c,i){return r(n^e^u,t,n,o,c,i)}function i(t,n,e,u,o,c,i){return r(e^(n|~u),t,n,o,c,i)}function f(t,e){t[e>>5]|=128<<e%32,t[(e+64>>>9<<4)+14]=e;var r,f,a,l,s,d=1732584193,h=-271733879,m=-1732584194,g=271733878;for(r=0;r<t.length;r+=16)f=d,a=h,l=m,s=g,d=u(d,h,m,g,t[r],7,-680876936),g=u(g,d,h,m,t[r+1],12,-389564586),m=u(m,g,d,h,t[r+2],17,606105819),h=u(h,m,g,d,t[r+3],22,-1044525330),d=u(d,h,m,g,t[r+4],7,-176418897),g=u(g,d,h,m,t[r+5],12,1200080426),m=u(m,g,d,h,t[r+6],17,-1473231341),h=u(h,m,g,d,t[r+7],22,-45705983),d=u(d,h,m,g,t[r+8],7,1770035416),g=u(g,d,h,m,t[r+9],12,-1958414417),m=u(m,g,d,h,t[r+10],17,-42063),h=u(h,m,g,d,t[r+11],22,-1990404162),d=u(d,h,m,g,t[r+12],7,1804603682),g=u(g,d,h,m,t[r+13],12,-40341101),m=u(m,g,d,h,t[r+14],17,-1502002290),h=u(h,m,g,d,t[r+15],22,1236535329),d=o(d,h,m,g,t[r+1],5,-165796510),g=o(g,d,h,m,t[r+6],9,-1069501632),m=o(m,g,d,h,t[r+11],14,643717713),h=o(h,m,g,d,t[r],20,-373897302),d=o(d,h,m,g,t[r+5],5,-701558691),g=o(g,d,h,m,t[r+10],9,38016083),m=o(m,g,d,h,t[r+15],14,-660478335),h=o(h,m,g,d,t[r+4],20,-405537848),d=o(d,h,m,g,t[r+9],5,568446438),g=o(g,d,h,m,t[r+14],9,-1019803690),m=o(m,g,d,h,t[r+3],14,-187363961),h=o(h,m,g,d,t[r+8],20,1163531501),d=o(d,h,m,g,t[r+13],5,-1444681467),g=o(g,d,h,m,t[r+2],9,-51403784),m=o(m,g,d,h,t[r+7],14,1735328473),h=o(h,m,g,d,t[r+12],20,-1926607734),d=c(d,h,m,g,t[r+5],4,-378558),g=c(g,d,h,m,t[r+8],11,-2022574463),m=c(m,g,d,h,t[r+11],16,1839030562),h=c(h,m,g,d,t[r+14],23,-35309556),d=c(d,h,m,g,t[r+1],4,-1530992060),g=c(g,d,h,m,t[r+4],11,1272893353),m=c(m,g,d,h,t[r+7],16,-155497632),h=c(h,m,g,d,t[r+10],23,-1094730640),d=c(d,h,m,g,t[r+13],4,681279174),g=c(g,d,h,m,t[r],11,-358537222),m=c(m,g,d,h,t[r+3],16,-722521979),h=c(h,m,g,d,t[r+6],23,76029189),d=c(d,h,m,g,t[r+9],4,-640364487),g=c(g,d,h,m,t[r+12],11,-421815835),m=c(m,g,d,h,t[r+15],16,530742520),h=c(h,m,g,d,t[r+2],23,-995338651),d=i(d,h,m,g,t[r],6,-198630844),g=i(g,d,h,m,t[r+7],10,1126891415),m=i(m,g,d,h,t[r+14],15,-1416354905),h=i(h,m,g,d,t[r+5],21,-57434055),d=i(d,h,m,g,t[r+12],6,1700485571),g=i(g,d,h,m,t[r+3],10,-1894986606),m=i(m,g,d,h,t[r+10],15,-1051523),h=i(h,m,g,d,t[r+1],21,-2054922799),d=i(d,h,m,g,t[r+8],6,1873313359),g=i(g,d,h,m,t[r+15],10,-30611744),m=i(m,g,d,h,t[r+6],15,-1560198380),h=i(h,m,g,d,t[r+13],21,1309151649),d=i(d,h,m,g,t[r+4],6,-145523070),g=i(g,d,h,m,t[r+11],10,-1120210379),m=i(m,g,d,h,t[r+2],15,718787259),h=i(h,m,g,d,t[r+9],21,-343485551),d=n(d,f),h=n(h,a),m=n(m,l),g=n(g,s);return[d,h,m,g]}function a(t){var n,e="",r=32*t.length;for(n=0;r>n;n+=8)e+=String.fromCharCode(t[n>>5]>>>n%32&255);return e}function l(t){var n,e=[];for(e[(t.length>>2)-1]=void 0,n=0;n<e.length;n+=1)e[n]=0;var r=8*t.length;for(n=0;r>n;n+=8)e[n>>5]|=(255&t.charCodeAt(n/8))<<n%32;return e}function s(t){return a(f(l(t),8*t.length))}function d(t,n){var e,r,u=l(t),o=[],c=[];for(o[15]=c[15]=void 0,u.length>16&&(u=f(u,8*t.length)),e=0;16>e;e+=1)o[e]=909522486^u[e],c[e]=1549556828^u[e];return r=f(o.concat(l(n)),512+8*n.length),a(f(c.concat(r),640))}function h(t){var n,e,r="0123456789abcdef",u="";for(e=0;e<t.length;e+=1)n=t.charCodeAt(e),u+=r.charAt(n>>>4&15)+r.charAt(15&n);return u}function m(t){return unescape(encodeURIComponent(t))}function g(t){return s(m(t))}function v(t){return h(g(t))}function p(t,n){return d(m(t),m(n))}function y(t,n){return h(p(t,n))}function T(t,n,e){return n?e?p(n,t):y(n,t):e?g(t):v(t)}"function"==typeof define&&define.amd?define(function(){return T}):"object"==typeof module&&module.exports?module.exports=T:t.md5=T}(this),function(){"use strict";function t(){try{return new XMLHttpRequest}catch(t){}try{return new ActiveXObject("Msxml3.XMLHTTP")}catch(t){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(t){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(t){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(t){}try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(t){}return null}function n(n,e){e=e||function(){};var r=t();return r?(r.responseType="document",r.overrideMimeType("text/html"),r.open("GET",n,!0),r.onload=function(){r.readyState===r.DONE&&e(r.responseXML)},void r.send(null)):e()}function e(t){try{for(var n=t.getElementsByTagName("*"),e=0;e<n.length;e++){var u="",o=n[e].getAttribute("class")||"*",c="",i=n[e].closest("["+r+"]");u=n[e].tagName.toUpperCase()+o,i&&(c=i.getAttribute(r)||""),n[e].setAttribute(r,md5(u+c))}return t}catch(f){return console.error(f.message),null}}var r="u-signature";window.uSignature={signCurrentPage:function(t,u){t=t||function(){},u=u||function(){},n(document.location.href,function(n){var o=e(n);return o?(document.body=o.body,void t(r)):u()})},sign:function(t){return e(t)}}}();
// --> Bookmarklet
( function(){
var
_exclusive = "*" // "a,p,div,"
,_overed = "outline: 3px dashed #e61616!important;"
;
function _addEvent( evnt, elem, func ){
try{
if( elem.addEventListener ){
elem.addEventListener( evnt, func, false );
}else if( elem.attachEvent ){
var r = elem.attachEvent( "on" + evnt, func );
}
return true;
}catch( e ){
return false;
}
};
uSignature.signCurrentPage( function( _attrName ){
var all = document.querySelectorAll( "[" + _attrName + "]" );
for( var i = 0; i < all.length; i++ ){
// --> Inibisco eventuali eventi non gestiti
all[ i ].setAttribute( "onclick", "return false;" );
_addEvent( "mouseover", all[ i ], function( evt ){
if( evt.currentTarget.tagName.toUpperCase() == "BODY" )return false;
if( _exclusive != "*" ){
var tagExclusive = _exclusive.split( "," ).map( function( item ){
return item.toUpperCase().trim();
} );
if( tagExclusive.indexOf( evt.currentTarget.tagName.toUpperCase() ) < 0 )return false;
}
// --> Applico lo stesso stile a tutti gli elementi uguali
var myuSignature = evt.currentTarget.getAttribute( _attrName );
if( !myuSignature || myuSignature == "" )return false;
// --> Prelevo tutti gli elementi
var allSimilar = document.querySelectorAll( "[" + _attrName + "='" + myuSignature + "']" );
for( var i = 0; i < allSimilar.length; i++ ){
var currentStyle = allSimilar[ i ].getAttribute( "style" ) || "";
if( currentStyle.indexOf( _overed ) < 0 ){
allSimilar[ i ].setAttribute( "style", _overed + currentStyle );
}
}
evt.stopPropagation();
} );
_addEvent( "click", all[ i ], function( evt ){
if( evt.currentTarget.tagName.toUpperCase() == "BODY" )return false;
if( _exclusive != "*" ){
var tagExclusive = _exclusive.split( "," ).map( function( item ){
return item.toUpperCase().trim();
} );
if( tagExclusive.indexOf( evt.currentTarget.tagName.toUpperCase() ) < 0 )return false;
}
// --> Prelevo il codice
var myuSignature = evt.currentTarget.getAttribute( _attrName ) || "Error :(";
prompt( "uSignature :", myuSignature );
evt.stopPropagation();
return false;
} );
_addEvent( "mouseout", all[ i ], function( evt ){
// --> Prelevo tutti gli elementi
var all = document.querySelectorAll( "*" );
for( var i = 0; i < all.length; i++ ){
var currentStyle = all[ i ].getAttribute( "style" ) || "";
all[ i ].setAttribute( "style", currentStyle.replace( _overed, "" ) );
}
evt.stopPropagation();
} );
} // <-- for
alert( "Now you can select your uSignature, move mouse on page" );
}, function(){
alert( "uSignature errors !" );
} );
} )();
/* Universal Signature - Creato il 13.08.2017 alle 11:27 da Leonardo Ciaccio [ leonardo.ciaccio@gmail.com ]
A COSA SERVE :
Viene utilizzata per identificare i nodi in un documento per attinenza, un po come avviene
con le classi. Caratterizza un nodo, in un insieme di nodi nel quale possono esistere nodi
simili.
DOVE UTILIZZARE QUESTA LIBRERIA
Nasce per servire plugin/estensioni nei più moderni browser, se eseguita in una qualsiasi pagina
riesce a caratterizzare ogni nodo partendo dai dati grezzi.
PERCHE'
Ogni utente utilizza il browser in modi diversi con diverse estensioni, alcune estensioni potrebbero
aggiungere/eliminare elementi nella pagina modificando di fatto il sorgente iniziale, con questa libreria
si effettua una signature su ogni elemento fissando le caratteristiche iniziali di ogni nodo per poi
essere identificate a piacimento.
IN SINTESI
Segna con un attributo 'uSignature' ogni elemento originale ( sorgente senza manipolazioni ).
FUNZIONI
uSignature.signCurrentPage( onEnd( _attrName ), onError ) // --> Segna tutti i nodi ed esegue i callback se passati
uSignature.sign( _dom ) // --> Restituisce gli elementi passati segnati
CREDITS/DIPENDENZE
MD5 lib https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.8.0/js/md5.min.js
*/
// --> [ MD5 lib https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.8.0/js/md5.min.js ]
!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[(r+64>>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,h=v,d=m,l=o(l,g,v,m,n[e],7,-680876936),m=o(m,l,g,v,n[e+1],12,-389564586),v=o(v,m,l,g,n[e+2],17,606105819),g=o(g,v,m,l,n[e+3],22,-1044525330),l=o(l,g,v,m,n[e+4],7,-176418897),m=o(m,l,g,v,n[e+5],12,1200080426),v=o(v,m,l,g,n[e+6],17,-1473231341),g=o(g,v,m,l,n[e+7],22,-45705983),l=o(l,g,v,m,n[e+8],7,1770035416),m=o(m,l,g,v,n[e+9],12,-1958414417),v=o(v,m,l,g,n[e+10],17,-42063),g=o(g,v,m,l,n[e+11],22,-1990404162),l=o(l,g,v,m,n[e+12],7,1804603682),m=o(m,l,g,v,n[e+13],12,-40341101),v=o(v,m,l,g,n[e+14],17,-1502002290),g=o(g,v,m,l,n[e+15],22,1236535329),l=u(l,g,v,m,n[e+1],5,-165796510),m=u(m,l,g,v,n[e+6],9,-1069501632),v=u(v,m,l,g,n[e+11],14,643717713),g=u(g,v,m,l,n[e],20,-373897302),l=u(l,g,v,m,n[e+5],5,-701558691),m=u(m,l,g,v,n[e+10],9,38016083),v=u(v,m,l,g,n[e+15],14,-660478335),g=u(g,v,m,l,n[e+4],20,-405537848),l=u(l,g,v,m,n[e+9],5,568446438),m=u(m,l,g,v,n[e+14],9,-1019803690),v=u(v,m,l,g,n[e+3],14,-187363961),g=u(g,v,m,l,n[e+8],20,1163531501),l=u(l,g,v,m,n[e+13],5,-1444681467),m=u(m,l,g,v,n[e+2],9,-51403784),v=u(v,m,l,g,n[e+7],14,1735328473),g=u(g,v,m,l,n[e+12],20,-1926607734),l=c(l,g,v,m,n[e+5],4,-378558),m=c(m,l,g,v,n[e+8],11,-2022574463),v=c(v,m,l,g,n[e+11],16,1839030562),g=c(g,v,m,l,n[e+14],23,-35309556),l=c(l,g,v,m,n[e+1],4,-1530992060),m=c(m,l,g,v,n[e+4],11,1272893353),v=c(v,m,l,g,n[e+7],16,-155497632),g=c(g,v,m,l,n[e+10],23,-1094730640),l=c(l,g,v,m,n[e+13],4,681279174),m=c(m,l,g,v,n[e],11,-358537222),v=c(v,m,l,g,n[e+3],16,-722521979),g=c(g,v,m,l,n[e+6],23,76029189),l=c(l,g,v,m,n[e+9],4,-640364487),m=c(m,l,g,v,n[e+12],11,-421815835),v=c(v,m,l,g,n[e+15],16,530742520),g=c(g,v,m,l,n[e+2],23,-995338651),l=f(l,g,v,m,n[e],6,-198630844),m=f(m,l,g,v,n[e+7],10,1126891415),v=f(v,m,l,g,n[e+14],15,-1416354905),g=f(g,v,m,l,n[e+5],21,-57434055),l=f(l,g,v,m,n[e+12],6,1700485571),m=f(m,l,g,v,n[e+3],10,-1894986606),v=f(v,m,l,g,n[e+10],15,-1051523),g=f(g,v,m,l,n[e+1],21,-2054922799),l=f(l,g,v,m,n[e+8],6,1873313359),m=f(m,l,g,v,n[e+15],10,-30611744),v=f(v,m,l,g,n[e+6],15,-1560198380),g=f(g,v,m,l,n[e+13],21,1309151649),l=f(l,g,v,m,n[e+4],6,-145523070),m=f(m,l,g,v,n[e+11],10,-1120210379),v=f(v,m,l,g,n[e+2],15,718787259),g=f(g,v,m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,h),m=t(m,d);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function d(n){return a(i(h(n),8*n.length))}function l(n,t){var r,e,o=h(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),o+=e.charAt(t>>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);
// --> [ uSignature lib ]
( function(){
"use strict";
// --> Variabili globali
var _attrName = "u-signature";
// --> Funzioni globali
function _xhr(){ // <-- Oggetto adeguato per caricare un documento
try{
return new XMLHttpRequest();
}catch( e ){}
try{
return new ActiveXObject( "Msxml3.XMLHTTP" );
}catch( e ){}
try{
return new ActiveXObject( "Msxml2.XMLHTTP.6.0" );
}catch( e ){}
try{
return new ActiveXObject( "Msxml2.XMLHTTP.3.0" );
}catch( e ){}
try{
return new ActiveXObject( "Msxml2.XMLHTTP" );
}catch( e ){}
try{
return new ActiveXObject( "Microsoft.XMLHTTP" );
}catch( e ){}
return null;
};
function _get( url, onEnd ){ // <-- Carica un documento
onEnd = onEnd || function(){};
var xhr = _xhr();
if( !xhr )return onEnd();
xhr.responseType = "document";
xhr.overrideMimeType( "text/html" );
xhr.open( "GET", url, true);
xhr.onload = function(){
if( xhr.readyState === xhr.DONE ){
//if( xhr.status === 200 )onEnd( xhr.responseXML );
onEnd( xhr.responseXML );
}
};
xhr.send( null );
};
function _sign( _dom ){ // <-- Segna i nodi
try{
// --> Mi faccio un giro e segno ogni elemento
var all = _dom.getElementsByTagName( "*" );
for( var x = 0; x < all.length; x++ ){
var
concat = ""
,myclass = all[ x ].getAttribute( "class" ) || "*"
,parentSigned = ""
,parentClosest = all[ x ].closest( "[" + _attrName + "]" );
;
concat = all[ x ].tagName.toUpperCase() + myclass;
if( parentClosest )parentSigned = parentClosest.getAttribute( _attrName ) || "";
all[ x ].setAttribute( _attrName, md5( concat + parentSigned ) );
}
return _dom;
}catch( e ){
console.error( e.message );
return null
}
};
// --> Espongo l'ogetto pubblico
window.uSignature = {
signCurrentPage : function( onEnd, onError ){
onEnd = onEnd || function(){};
onError = onError || function(){};
// --> Carico il documento, non mi riferisco al code 200
_get( document.location.href, function( _dom ){
var signed = _sign( _dom );
if( !signed )return onError();
document.body = signed.body;
onEnd( _attrName );
} );
} // <-- signCurrentPage
,
sign : function( _dom ){
return _sign( _dom );
} // <-- sign
};
} )();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment