Created
August 13, 2017 11:59
-
-
Save LeonardoCiaccio/5f91033440e701322cef23b32f0e6455 to your computer and use it in GitHub Desktop.
Universal Signature ( uSignature )
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| 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 !" ); | |
| } ); | |
| } )(); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* 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