Hide JavaScript code from the client

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • acoder7777
    New Member
    • Mar 2018
    • 9

    #31
    pls visit samy.pl he is hiding his entire code how

    Comment

    • Taro
      New Member
      • Jan 2015
      • 4

      #32
      samy.pl
      /code/no.js
      Code:
      function disableclick(event){if(event.button==2)return false;}
      document.onmousedown=disableclick;
      and it's all? nothing more interesting?

      Comment

      • gits
        Recognized Expert Moderator Expert
        • May 2007
        • 5388

        #33
        this doesn't hide anything - it just disables the right click on that document. so open the developer tools of a browser and see the complete code there - its pointless to try such as stated many times already in this thread - since you cannot have success - its simply how webpages with javascript have to work - it cannot be prevented to deliver the javascript code to the client - thus it is not protectable. its interpreted code - even if you obfuscate or somehow encode it - its at the client and thus decodable - it just makes no sense to try it - its pointless overhead. Putting anything into javascript that would need protection is just plain wrong architecture of the application - period.

        Comment

        • acoder7777
          New Member
          • Mar 2018
          • 9

          #34
          You are right he disabled right click but when you try to see the code through following method see what happens.
          view-source:https://samy.pl. Pls reply

          Comment

          • gits
            Recognized Expert Moderator Expert
            • May 2007
            • 5388

            #35
            well - i dont want to post all the code of that mentioned page here - may be its enough to post the names of the included javascript files in that page when the reload cant work correctly:

            jquery.min.js
            animatedcollaps e.js
            baffle.min.js
            no.js (for whatever reason this is loaded 2x)
            code.js
            mc-validate.js
            dc.js

            in line 741 of the source of the (rendered) page is:

            Code:
            e.preventDefault();
            so - as i said - its pointless to try. basically the right click is disabled and its checking whether the devtools are opened and does a reload all time unless its closed again. it took 5min to find a way to still view the code in the devtools anyway by just using another method of inspecting. As i said more then once already - it is NOT secure to put any sensitive things into clientside code of a webpage - no matter what someone will try - the technology itself requires it to be at the client and thus can be revealed by a consumer of the page in any case. You can make it harder - but never secure.
            Last edited by gits; Mar 28 '18, 02:50 PM.

            Comment

            • acoder7777
              New Member
              • Mar 2018
              • 9

              #36
              I'm sorry git. Still you are giving the code of http://samy.pl/code
              But u are not giving code of view-source:samy.pl you can visite at view-source:samy.pl
              Code:
              <!------------------------------------------------------------------------------
               ! Welcome to samy.pl.
               !
               ! In the various pages, you'll find benign code execution,
               ! seemingly invasive data exfiltration (that remains local
               ! to your machine and never reaches my system) and various
               ! innocuous challenges. Have fun!
               !
               ! -samy kamkar
               !------------------------------------------------------------------------------>
              <html><head>
              	<META NAME="Description" CONTENT="samy kamkar's open source code, applied hacking, projects, hardware, videos, press, talks, blog, email address, and other infectious technology.">
              	<META NAME="keywords" CONTENT="samy kamkar, applied hacking, code, evercookie, usbdriveby, skyjack, lockpicking, master lock, keysweeper, combobreaker, combo breaker, quickjack, myspace, proxygambit, proxmark3, pwnat, clickjacking, xss, hacker, nat pinning, geolocation, android, google, iphone, packets, radio, rtl-sdr, hackrf, im-me, imme, arduino, teensy, poisontap, magspoof, ownstar, rolljam, raspberry pi, drones">
              	<title>samy kamkar - home</title>
              </head>
              <body>
              <script src="/load.js">/* No source for you! Easter egg #5 */</script>
              </body></html>

              Comment

              • Rabbit
                Recognized Expert MVP
                • Jan 2007
                • 12517

                #37
                All you need to do is turn on the IE console and it shows this code that's run when the site is first loaded.

                Code:
                if(!window.$)(s=(z=document).getElementsByTagName(x="script")[0]).parentNode.insertBefore(z.createElement(x),s).src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js";
                (function(){if(typeof window.CustomEvent==="function")return false;
                function CustomEvent(event,params){params=params||{bubbles:false,cancelable:false,detail:undefined};
                var evt=document.createEvent("CustomEvent");
                evt.initCustomEvent(event,params.bubbles,params.cancelable,params.detail);
                return evt}CustomEvent.prototype=window.Event.prototype;
                window.CustomEvent=CustomEvent})();
                (function(){"use strict";
                var devtools={open:false,first:true,orientation:null};
                window.lq=devtools;
                var threshold=160;
                var emitEvent=function(state,orientation,eventname){if(!eventname)eventname="devtoolschange";
                window.dispatchEvent(new CustomEvent(eventname,{detail:{open:state,orientation:orientation}}))};
                setInterval(function(){var widthThreshold=window.outerWidth-window.innerWidth>threshold;
                var heightThreshold=window.outerHeight-window.innerHeight>threshold;
                var orientation=widthThreshold?"vertical":"horizontal";
                if(!(heightThreshold&&widthThreshold)&&(window.Firebug&&window.Firebug.chrome&&window.Firebug.chrome.isInitialized||widthThreshold||heightThreshold)){if(!devtools.open||devtools.orientation!==orientation){emitEvent(true,orientation);
                if(lq.first){lq.first=false;
                emitEvent(true,orientation,"firstevent")}}devtools.open=true;
                devtools.orientation=orientation}else{if(devtools.open){emitEvent(false,null);
                if(lq.first){lq.first=false;
                emitEvent(false,null,"firstevent")}}devtools.open=false;
                devtools.orientation=null}},1e3);
                if(typeof module!=="undefined"&&module.exports){module.exports=devtools}else{window.devtools=devtools}})();
                var ua=navigator.userAgent.toLowerCase();
                var msie=ua.indexOf("msie")>-1;
                if(!msie&&navigator.appName=="Netscape"&&ua.indexOf("trident/")>-1)msie=true;
                var safari=ua.indexOf("chrome")>-1;
                var chrome=ua.indexOf("safari")>-1;
                var firefox=ua.indexOf("firefox")>-1;
                function dc(event){if(event.button==2){alert("You found Easter Egg #12!");
                return false}}document.onmousedown=dc;
                var delay=150;
                var MyDesktop;
                var currentChar=0;
                var destination="[not defined]";
                var text="";
                var fb=0;
                function type(){if(document.getElementById){var dest=document.getElementById(destination);
                if(dest){if(text.substr(currentChar,1)=="\n")dest.innerHTML=dest.innerHTML+"<br>";
                else dest.innerHTML=dest.innerHTML+text.substr(currentChar,1);
                currentChar++;
                if(currentChar==text.length){}else if(currentChar<text.length){setTimeout(function(){type()},delay+Math.floor(Math.random()*delay))}}}}function startTyping(textParam,destinationParam){if(text)text+="\n";
                text+=textParam;
                var ndiv=document.createElement("div");
                destination="dest2";
                ndiv.id=destination;
                if(document.getElementById(destinationParam))document.getElementById(destinationParam).appendChild(ndiv);
                type()}var iw=0;
                var og,ob;
                function loadcodewin(){if(iw++>500)return;
                var d=document.getElementById("x-desktop").style;
                var o=function(evt){if(!evt.gamma&&!evt.beta){evt.gamma=-(evt.x*(180/Math.PI));
                evt.beta=-(evt.y*(180/Math.PI))}var overThreshold=Math.abs(evt.gamma)>8||Math.abs(evt.beta)>8;
                og=evt.gamma;
                ob=evt.beta;
                var gamma=overThreshold?og:0;
                var beta=overThreshold?ob:0;
                if(this._lastGamma!=gamma||this._lastBeta!=beta){var x=Math.round(1.5*gamma);
                var y=Math.round(1.5*beta);
                d.left=x.toString()+"px";
                d.top=y.toString()+"px";
                d.WebkitTransition=d.Transition="all .5s linear";
                d.transform=d.MsTransform=d.WebkitTransform=d.OTransform=d.MozTransform="rotateY("+-2*gamma+"deg) rotateX("+-2*beta+"deg)";
                this._lastGamma=gamma;
                this._lastBeta=beta}};
                if(window.addEventListener){window.addEventListener("deviceorientation",o,false);
                window.addEventListener("MozOrientation",o,false)}if(typeof MyDesktop=="undefined"||MyDesktop.modules==null||typeof MyDesktop.getModule("code-win")=="undefined"){setTimeout(function(){loadcodewin()},50)}else{MyDesktop.getModule("code-win").createWindow()}}function getFFip(){var ip;
                try{if(typeof java!="undefined"&&typeof java.net!="undefined"){var sock=new java.net.Socket;
                sock.bind(new java.net.InetSocketAddress("0.0.0.0",0));
                sock.connect(new java.net.InetSocketAddress(document.domain,!document.location.port?80:document.location.port));
                ip=sock.getLocalAddress().getHostAddress()}}catch(e){}return ip}function pwn(){var ip;
                loadcodewin();
                if(ip){startTyping("  ","terminal");
                startTyping("loading code into memory...","terminal");
                startTyping("spinning cpu for no apparent reason...","terminal");
                if(ip)startTyping("interrogating your local ip "+ip+"...\n","terminal");
                else startTyping("interrogating your system...\n","terminal")}}var ifrnum=0;
                var ifrs=new Array;
                function detectR(url,text){var ifr=document.createElement("iframe");
                ifrs[ifrnum]=ifr;
                var timer=setTimeout(function(){killifr(ifrnum)},1);
                ifrnum++;
                ifr.src=url;
                ifr.style.visibility="hidden";
                ifr.style.display="block";
                ifr.style.position="absolute";
                ifr.style.width="1px";
                ifr.style.height="1px";
                ifr.onload=function(){clearTimeout(timer);
                startTyping(text+"...\n","terminal")};
                ref.parentNode.insertBefore(ifr,ref)}function killifr(x){var ifr=ifrs[x];
                ifr.onload=function(){};
                ifr.src="javascript:void(0)";
                ref.parentNode.removeChild(ref)}function click(e){if(event.button==2){alert("You found Easter Egg #12!");
                return false}else if(document.layers&&e.which==3){alert("You found Easter Egg #12!");
                return false}}if(document.layers)document.captureEvents(Event.MOUSEDOWN);
                document.onmousedown=click;
                Ext.onReady(function(){new Ext.ToolTip({target:"fbw",anchor:"bottom",width:200,html:"You have nothing to worry about.",trackMouse:false})});
                Ext.QuickTips.init();
                MyDesktop=new Ext.app.App({init:function(){Ext.QuickTips.init()},getModules:function(){return[new MyDesktop.WebWindow({id:"code-win",url:"code/",name:"code",width:700,height:document.documentElement.clientHeight?document.documentElement.clientHeight-70:480}),new MyDesktop.WebWindow({id:"list-win",url:"mlist/",name:"mailing list",width:600,height:190}),new MyDesktop.WebWindow({id:"tw-win",url:"/twitter",name:"twitter (@samykamkar)",width:800,height:480}),new MyDesktop.MailWindow({id:"mail-win",url:"mailto:site@samy.pl",name:"email me",width:740,height:480})]},getStartConfig:function(){return{title:"samy kamkar",iconCls:"user"}}});
                MyDesktop.WebWindow=Ext.extend(Ext.app.Module,{appType:"window",init:function(){this.launcher={text:this.name,iconCls:this.iconCls||"tabs",handler:this.createWindow,scope:this}},createWindow:function(){var desktop=this.app.getDesktop();
                var win=desktop.getWindow(this.name+"-win");
                if(!win){win=desktop.createWindow({id:this.name+"-win",title:this.name,width:this.width||740,height:this.height||480,iconCls:this.iconCls||"tabs",shim:false,animCollapse:false,constrainHeader:true,layout:"fit",items:new Ext.Panel({bodyCfg:{tag:"div",cls:"x-panel-body",children:[{tag:"iframe",name:this.name,id:this.name,src:this.url,frameBorder:0,width:"100%",height:"100%",style:{overflow:"auto"}}]},region:"center"})})}win.show()}});
                MyDesktop.MailWindow=Ext.extend(Ext.app.Module,{init:function(){this.launcher={text:this.name,iconCls:this.iconCls||"tabs",handler:this.createWindow,scope:this}},createWindow:function(){document.location=this.url}});
                document.addEventListener("keydown",function(e){if(e.keyCode==123||(window.navigator.platform.match("Mac")?e.metaKey:e.ctrlKey)&&(e.keyCode==117||e.keyCode==85||e.keyCode==115||e.keyCode==83||e.keyCode==105||e.keyCode==73||e.keyCode==110||e.keyCode==78||e.keyCode==112||e.keyCode==80||e.keyCode==106||e.keyCode==74)){e.preventDefault();
                alert("You found Easter Egg #10!")}},false);
                var deb=0;
                var intr,_b;
                var timerMax=deb?2e3:500;
                var element=new Image;
                var egg8msg="No source for you! You found easter egg #8. Close the console to return to samy.pl ;
                )";
                var utm="__utmq";
                var firstload=1;
                var solecon=clone(console);
                function clone(obj){if(null==obj||"object"!=typeof obj)return obj;
                var copy=obj.constructor();
                for(var attr in obj)if(obj.hasOwnProperty(attr))copy[attr=="log"?"go":attr]=obj[attr];
                return copy}function al(x){if(!deb)return;
                solecon.go(x)}function rmbody(){al("rm1");
                if(readCookie(utm)==2)return;
                al("rm2");
                createCookie(utm,2,365*10);
                location.reload(true)}function noconsole3(){al("NOC3");
                noconsole()}function noconsole2(){al("NOC2");
                noconsole()}function noconsole(){al("noc1");
                if(readCookie(utm)==1)return;
                al("noc2");
                createCookie(utm,1,365*10);
                location.reload(true)}function egg8log(){if(msie)solecon.go(egg8msg);
                else solecon.go("%c"+egg8msg,"background: black;
                 color: #00ff00;
                 font-size: x-large;
                ")}if(window.location.href.indexOf("noint")==-1){if(readCookie(utm)!=1){al("ngood");
                var noconyet=0;
                var threshold=160;
                var widthThreshold=window.outerWidth-window.innerWidth>threshold;
                var heightThreshold=window.outerHeight-window.innerHeight>threshold;
                var orientation=widthThreshold?"vertical":"horizontal";
                if(!(heightThreshold&&widthThreshold)&&(window.Firebug&&window.Firebug.chrome&&window.Firebug.chrome.isInitialized||widthThreshold||heightThreshold)){if(!devtools.open||devtools.orientation!==orientation){}}else{al("n1");
                noconyet=1}}element.__defineGetter__("id",function(){al("dg");
                if(intr)clearTimeout(intr);
                if(!_b)rmbody();
                intr=setTimeout(noconsole2,timerMax*1.5)});
                if(chrome||safari){intr=setTimeout(noconsole3,timerMax*2);
                al("c||s");
                setInterval(function(){solecon.go(element);
                solecon.clear();
                egg8log()},timerMax)}else{al("elsec||s");
                window.addEventListener("devtoolschange",function(e){if(e.detail.open){rmbody();
                egg8log()}else{noconsole()}})}}function createCookie(name,value,days){if(days>0)eraseCookie(name);
                if(days){var date=new Date;
                date.setTime(date.getTime()+days*24*60*60*1e3);
                var expires=";
                 expires="+date.toGMTString()}else var expires="";
                document.cookie=name+"="+value+expires+";
                 path=/"}function readCookie(name){var nameEQ=name+"=";
                var ca=document.cookie.split(";
                ");
                for(var i=0;
                i<ca.length;
                i++){var c=ca[i];
                while(c.charAt(0)==" ")c=c.substring(1,c.length);
                if(c.indexOf(nameEQ)==0)return c.substring(nameEQ.length,c.length)}return null}function eraseCookie(name){createCookie(name,"",-1)}
                The console also shows that the following javascript files are loaded and which you can download separately if you wish to see the code in each of those js files:
                Code:
                URL	Protocol	Method	Result	Type	Received	Taken	Initiator	Wait‎‎	Start‎‎	Request‎‎	Response‎‎	Cache read‎‎	Gap‎‎
                /adapter/ext/ext-base.js	HTTPS	GET	200	application/javascript	32.34 KB	94 ms	<script>	296	31	47	16	0	4617
                /ext-all.js	HTTPS	GET	200	application/javascript	0.62 MB	78 ms	<script>	405	0	78	0	0	4524
                /js/StartMenu.js	HTTPS	GET	200	application/javascript	7.42 KB	78 ms	<script>	593	0	78	0	0	4336
                /js/TaskBar.js	HTTPS	GET	200	application/javascript	14.31 KB	31 ms	<script>	671	0	31	0	0	4305
                /js/Desktop.js	HTTPS	GET	200	application/javascript	3.47 KB	47 ms	<script>	702	0	47	0	0	4258
                /js/App.js	HTTPS	GET	200	application/javascript	2.26 KB	31 ms	<script>	749	0	31	0	0	4227
                /js/Module.js	HTTPS	GET	200	application/javascript	0.77 KB	31 ms	<script>	780	0	15	16	0	4196
                /js/jquery-1.12.4.min.js	HTTPS	GET	200	application/javascript	95.32 KB	47 ms	<script>	811	0	47	0	0	4149
                /js/jquery.min.js	HTTPS	GET	200	application/javascript	56.34 KB	47 ms	<script>	3666	0	47	0	0	1294
                /js/animatedcollapse.js	HTTPS	GET	200	application/javascript	11.98 KB	47 ms	<script>	3666	0	47	0	0	1294
                /js/baffle.min.js	HTTPS	GET	200	application/javascript	5.28 KB	47 ms	<script>	3666	0	47	0	0	1294
                /code/no.js	HTTPS	GET	200	application/javascript	0.53 KB	47 ms	<script>	3666	15	32	0	0	1294
                /js/code.js	HTTPS	GET	200	application/javascript	0.74 KB	32 ms	<script>	3681	0	32	0	0	1294
                /code/no.js	HTTPS	GET	200	application/javascript	0.53 KB	31 ms	<script>	3900	0	31	0	0	1076
                https://s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js	HTTPS	GET	200	application/javascript	139.93 KB	0.84 s	<script>	3900	296	546	0	0	265

                Comment

                • Rabbit
                  Recognized Expert MVP
                  • Jan 2007
                  • 12517

                  #38
                  JavaScript, HTML, and CSS is client side code. You can use whatever techniques you want to hide or obfuscate the code but you can't get by this immutable fact: At some point the client needs to see the code so it can run the code.

                  At the end of the day, regardless of what technique is used, the client user can go down to the lowest level and just look at the packets being sent to their computer to see the raw data.
                  Last edited by Rabbit; Mar 28 '18, 10:56 PM.

                  Comment

                  • gits
                    Recognized Expert Moderator Expert
                    • May 2007
                    • 5388

                    #39
                    the point is - as you might see after all - someone can make it harder to look at the code - but its by any means not avoidable - and that's a fact. I really cannot understand why people still try to think they can do it - with current state of how websites and browsers work. By finding some way to prevent something - there are countless other ways that will still be open - for someone that wants to use that view-source:samy.pl method the guy who made the site obviously found a way to prevent it so that those that want to use this method are unable - because obviously they don't know anything about how to retrieve the information another way. But that's not the point - the point is to avoid the need! of that - and putting something that needs to be hidden into a website's clientside code is just wrong design.

                    PS: @acoder7777 - if you only know that method of viewing the sourcecode of a webpage - then your just out of luck if someone can prevent that - but as you can see - here are a minimum of 3 people in row that know other ways and did it with very little effort. So - even your question is wrong - there is no different code - no matter what method you use to look at that - its just different what you see - and what other people can see. So seen the code probably fulfilled at least the purpose of making it too hard for some people. The basic principle of how this particular script works is up there - so if you still want to do such - try coding it instead of may be copy&paste it without understanding how it really works.
                    Last edited by gits; Mar 29 '18, 09:06 AM.

                    Comment

                    • Taro
                      New Member
                      • Jan 2015
                      • 4

                      #40
                      With a little effort, you can see the source code.
                      View the initial source code - it's impossible to avoid, fact.

                      Comment

                      • gits
                        Recognized Expert Moderator Expert
                        • May 2007
                        • 5388

                        #41
                        so you suggest to dynamically load encrypted javascript code to the client when needed? the decryption method would need to be at the client then already - and during a session somehow the javascript code would have to be decryptable by the app itself thus it can be most likely hooked into - i am not saying that there is no way to do as much effort as you wish to obfuscate something - i am saying if its sensitive information of any kind for you the clientside is the worst place to have it implemented, since it is the easiest point for someone to figure out what is in there - since he/she already has the code that in some way would need to be interpretable there. And if its not sensitive - why hide it then - it just wouldn't make sense to me. I am still standing for the fact - if you feel the need to do that for javascript code - then you did something wrong with the entire application architecture.

                        PS: To make my point more clear - it is not and cannot be made secure to have anything in clientside javascript code that you consider as something someone shouldn't retrieve. Obfuscation is only an option to make it harder for 'normal' people - but if its something that has a real value of some kind or is something that can be used to do bigger damage (thus has such value as well) - then it shouldn't be implemented in clientside javascript - since if someone else is finding it worth to get that value, it is retrievable from the client right away with more or less effort. On the serverside you have much better and powerful protection mechanisms - so leave such information, and whatever is valueable for you, there, and protect it there.
                        Last edited by gits; Mar 29 '18, 12:16 PM.

                        Comment

                        • acoder7777
                          New Member
                          • Mar 2018
                          • 9

                          #42
                          you are right but im 17 years old and learning all this i had made a website in which i had us emailjs (emailjs) to send email whoever had contacted me to do this i have to make my account id and all other sensitive imformation public as i dont know any of the sever-side language expect java(jsp) and i didnt wanted to write this all messy code in java..
                          so i waqnt to hide my sensitive imformation.


                          please sorry for bad english and spelling mistakes.


                          is there any website which can convert js to php?

                          thnx

                          Comment

                          • Taro
                            New Member
                            • Jan 2015
                            • 4

                            #43
                            Suppose that you can imagine a code that does not enable you to understand it. And there is no benefit from the fact that you see this code.
                            The use of this code will be that it will be able to deliver to the client some information that is incomprehensibl e to others.
                            The question is, do you need such a script?
                            Where is it reasonable to apply it?

                            Comment

                            • acoder7777
                              New Member
                              • Mar 2018
                              • 9

                              #44
                              this forms are only for practice i recieave an email about the person who had filled the form as well as the person reaceves an email this is for educational purpose only .
                              see it MOD:REMOVED_URL[if it contains sensitive information then it shouldnt be linked here so that many people can get those]
                              Last edited by gits; Mar 29 '18, 12:40 PM. Reason: remove URL

                              Comment

                              • acoder7777
                                New Member
                                • Mar 2018
                                • 9

                                #45
                                I FOUND A WAY TO SEE THE CODE
                                IN Earlier Firefox;
                                I Open the console before the script can load and page opens and i am able to see the code.
                                Code:
                                    <!--
                                
                                    --------------------------------------------------…
                                
                                    -->
                                    <html>
                                        <head>
                                            <title></title>
                                            <script type="text/javascript" charset="utf-8" async="" src="https://platform.twitter.com/js/timeline.f3704eb7aa37eaac805e4960db90c894.js"></script>
                                        </head>
                                        <body id="ext-gen3" class=" ext-gecko ext-gecko3" oncontextmenu="return false" onload="pwn()" scroll="no">
                                            <title></title>
                                            <link href="resources/css/ext-all.css" type="text/css" rel="stylesheet"></link>
                                            <link href="css/desktop.css" type="text/css" rel="stylesheet"></link>
                                            <link href="resources/css/xtheme-slickness.css" type="text/css" rel="stylesheet"></link>
                                            <link href="resources/css/xtheme-symphony.css" type="text/css" rel="stylesheet"></link>
                                            <div id="allc">
                                                <div id="x-desktop" style="height: 0px;">
                                                    <a class="lnk" href="mailto:code@samy.pl"></a>
                                                    <dl id="x-shortcuts"></dl>
                                                    <div id="terminal">
                                                        <iframe id="twitter-widget-0" class="twitter-timeline twitter-timeline-rendered" frameborder="0" scrolling="no" allowtransparency="true" allowfullscreen="true" style="position: static; visibility: visible; display: inline-block…0px; margin-top: 0px; margin-bottom: 0px; min-height: 200px;" data-widget-id="494045919193485312" title="Twitter Timeline">
                                                            #document
                                                                <html class="SandboxRoot env-bp-min">
                                                                    <head></head>
                                                                    <body>
                                                                        <div class="timeline-Widget timeline-Widget--edge" lang="en" data-iframe-title="Twitter Timeline" data-twitter-event-id="0">
                                                                            <div class="timeline-Header timeline-InformationCircle-widgetParent" data-scribe="section:header"></div>
                                                                            <div class="timeline-Body customisable-border">
                                                                                <div class="timeline-Body-notification timeline-NewTweetsNotification new-tweets-bar" aria-relevant="additions" aria-atomic="false" aria-live="polite" role="alert"></div>
                                                                                <div class="timeline-Viewport" style="height: 507px;">
                                                                                    <ol class="timeline-TweetList">
                                                                                        <li class="timeline-TweetList-tweet customisable-border">
                                                                                            <div class="timeline-Tweet timeline-Tweet--isRetweet u-cf js-tweetIdInfo" data-scribe="component:tweet" data-rendered-tweet-id="978279787461468160" data-tweet-id="978854583148695558">
                                                                                                <div class="timeline-Tweet-brand u-floatRight"></div>
                                                                                                <div class="timeline-Tweet-retweetCredit"></div>
                                                                                                <div class="timeline-Tweet-author js-inViewportScribingTarget">
                                                                                                    <div class="TweetAuthor js-inViewportScribingTarget" data-scribe="component:author">
                                                                                                        <a class="TweetAuthor-link Identity u-linkBlend" aria-label="Brit Bennett (screen name: britrbennett)" href="https://twitter.com/britrbennett" data-scribe="element:user_link">
                                                                                                            <div class="TweetAuthor-nameScreenNameContainer">
                                                                                                                <span class="TweetAuthor-decoratedName">
                                                                                                                    <span class="TweetAuthor-name Identity-name customisable-highlight" data-scribe="element:name" title="Brit Bennett"></span>
                                                                                                                </span>
                                                                                                                <span class="TweetAuthor-screenName Identity-screenName" dir="ltr" data-scribe="element:screen_name" title="@britrbennett"></span>
                                                                                                            </div>
                                                                                                        </a>
                                                                                                    </div>
                                                                                                </div>
                                                                                                <p class="timeline-Tweet-text" lang="en" dir="ltr"></p>
                                                                                                <div class="timeline-Tweet-media">
                                                                                                    <article class="MediaCard customisable-border" dir="ltr" data-scribe="component:card">
                                                                                                        <div class="MediaCard-media">
                                                                                                            <div class="MediaCard-widthConstraint js-cspForcedStyle" data-style="max-width: 351px" style="max-width: 351px">
                                                                                                                <div class="MediaCard-mediaContainer js-cspForcedStyle" data-style="padding-bottom: 54.7009%" style="padding-bottom: 54.7009%">
                                                                                                                    <a class="MediaCard-mediaAsset NaturalImage NaturalImage--roundedTop NaturalImage--roundedBottom" data-scribe="element:photo" href="https://twitter.com/britrbennett/status/978279787461468160/photo/1">
                                                                                                                        <img class="NaturalImage-image" width="351" height="192" alt="View image on Twitter" title="View image on Twitter" data-image="https://pbs.twimg.com/media/DZOMP3KVQAARdGk" src="https://pbs.twimg.com/media/DZOMP3KVQAARdGk?format=jpg&name=360x360"></img>
                                                                                                                    </a>
                                                                                                                </div>
                                                                                                            </div>
                                                                                                        </div>
                                                                                                    </article>
                                                                                                </div>
                                                                                                <div class="timeline-Tweet-metadata"></div>
                                                                                                <ul class="timeline-Tweet-actions" aria-label="Tweet actions" role="menu" data-scribe="component:actions"></ul>
                                                                                            </div>
                                                                                        </li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border">
                                                                                            <div class="timeline-Tweet u-cf js-tweetIdInfo" data-scribe="component:tweet" data-rendered-tweet-id="978023617043693568" data-tweet-id="978023617043693568">
                                                                                                <div class="timeline-Tweet-brand u-floatRight"></div>
                                                                                                <div class="timeline-Tweet-author ">
                                                                                                    <div class="TweetAuthor js-inViewportScribingTarget" data-scribe="component:author">
                                                                                                        <a class="TweetAuthor-link Identity u-linkBlend" aria-label="Samy Kamkar (screen name: samykamkar)" href="https://twitter.com/samykamkar" data-scribe="element:user_link">
                                                                                                            <div class="TweetAuthor-nameScreenNameContainer">
                                                                                                                <span class="TweetAuthor-decoratedName">
                                                                                                                    <span class="TweetAuthor-name Identity-name customisable-highlight" data-scribe="element:name" title="Samy Kamkar"></span>
                                                                                                                    <span class="TweetAuthor-verifiedBadge" data-scribe="element:verified_badge"></span>
                                                                                                                </span>
                                                                                                                <span class="TweetAuthor-screenName Identity-screenName" dir="ltr" data-scribe="element:screen_name" title="@samykamkar"></span>
                                                                                                            </div>
                                                                                                        </a>
                                                                                                    </div>
                                                                                                </div>
                                                                                                <p class="timeline-Tweet-text" lang="en" dir="ltr">
                                
                                                                                                    Amazing YouTube channel from Michel van Biezen wit…
                                
                                                                                                    <a class="link customisable" data-scribe="element:url" title="https://www.youtube.com/channel/UCiGxYawhEp4QyFcX0R60YdQ" target="_blank" data-expanded-url="https://www.youtube.com/channel/UCiGxYawhEp4QyFcX0R60YdQ" dir="ltr" rel="nofollow noopener" href="https://t.co/lnPus6Wws4">
                                                                                                        <span class="u-hiddenVisually"></span>
                                                                                                        <span class="Tweet-complexLink"></span>
                                                                                                        <span class="u-hiddenVisually"></span>
                                
                                                                                                        …
                                
                                                                                                    </a>
                                                                                                </p>
                                                                                                <div class="timeline-Tweet-media">
                                                                                                    <div class="PrerenderedCard is-constrainedByMaxWidth is-loaded" data-scribe="component:card" data-css="https://ton.twimg.com/tfw/css/syndication_bundle_v1_2801d83f2f75998762a22055f578875d6e10fd1d.css" data-card-name="summary">
                                                                                                        <div class="TwitterCardsGrid TwitterCard">
                                                                                                            <script type="text/twitter-cards-serialization"></script>
                                                                                                            <div class="TwitterCardsGrid-col--12 TwitterCardsGrid-col--spacerBottom CardContent">
                                                                                                                <a class="js-openLink u-block TwitterCardsGrid-col--12 TwitterCard-container TwitterCard-container--clickable SummaryCard--small" rel="noopener" href="https://t.co/lnPus6Wws4" data-card-breakpoints="w200 w150 w100 w50 " data-theme="dark">
                                                                                                                    <div class="SummaryCard-image TwitterCardsGrid-float--prev">
                                                                                                                        <div class="tcu-imageContainer tcu-imageAspect--1to1">
                                                                                                                            <style></style>
                                                                                                                            <div class="tcu-imageWrapper tcu-image-978023617043693568 js-cspForcedStyle" data-style="background-image: url(https://pbs.twimg.com/card_img/9772451…kaui1ANC?format=jpg&name=144x144_2); background-size: cover;">
                                                                                                                                <img class="u-block" alt="" src="https://pbs.twimg.com/card_img/977245149158891521/kaui1ANC?format=jpg&name=144x144_2"></img>
                                                                                                                            </div>
                                                                                                                        </div>
                                                                                                                    </div>
                                                                                                                    <div class="SummaryCard-contentContainer TwitterCardsGrid-float--prev"></div>
                                                                                                                </a>
                                                                                                            </div>
                                                                                                        </div>
                                                                                                    </div>
                                                                                                </div>
                                                                                                <div class="timeline-Tweet-metadata"></div>
                                                                                                <ul class="timeline-Tweet-actions" aria-label="Tweet actions" role="menu" data-scribe="component:actions"></ul>
                                                                                            </div>
                                                                                        </li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                        <li class="timeline-TweetList-tweet customisable-border"></li>
                                                                                    </ol>
                                                                                    <div class="timeline-LoadMore timeline-LoadMore--edge"></div>
                                                                                </div>
                                                                            </div>
                                                                            <footer class="timeline-Footer u-cf" data-scribe="section:footer">
                                                                                <a class="u-floatLeft" href="https://publish.twitter.com/?url=https%3A%2F%2Ftwitter.com%2Fsamykamkar" data-scribe="element:embed_url"></a>
                                                                                <a class="u-floatRight" href="https://twitter.com/samykamkar" data-scribe="element:twitter_url"></a>
                                                                            </footer>
                                                                        </div>
                                                                    </body>
                                                                </html>
                                                        </iframe>
                                                    </div>
                                                    <div id="ext-gen28" class="x-window-proxy" style="display: none; width: 698px; height: 556px; left: 290px; top: 20px; opacity: 0.5;"></div>
                                                    <div id="ext-gen43" class="x-shadow" style="z-index: 9002; left: 286px; top: 3px; width: 708px; height: 558px; display: block;"></div>
                                                    <div id="code-win" class=" x-window x-resizable-pinned" style="position: absolute; z-index: 9003; visibility: visible; left: 290px; top: 0px; width: 700px; display: block;">
                                                        <div class="x-window-tl"></div>
                                                        <div id="ext-gen19" class="x-window-bwrap">
                                                            <div class="x-window-ml">
                                                                <div class="x-window-mr">
                                                                    <div id="ext-gen22" class="x-window-mc">
                                                                        <div id="ext-gen20" class="x-window-body" style="width: 686px; height: 528px;">
                                                                            <div id="ext-comp-1009" class=" x-panel" style="width: 686px;">
                                                                                <div id="ext-gen30" class="x-panel-bwrap">
                                                                                    <div id="ext-gen31" class="x-panel-body x-panel-body-noheader" style="width: 684px; height: 526px;">
                                                                                        <iframe id="code" width="100%" height="100%" frameborder="0" style="overflow:auto;" src="code/" name="code">
                                                                                            #document
                                                                                                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                                                                                                <html xmlns="http://www.w3.org/1999/xhtml">
                                                                                                    <head></head>
                                                                                                    <body oncontextmenu="return false">
                                                                                                        <div id="menu"></div>
                                                                                                        <!--
                                
                                                                                                         end #menu 
                                
                                                                                                        -->
                                                                                                        <div id="header"></div>
                                                                                                        <!--
                                
                                                                                                         end #header 
                                
                                                                                                        -->
                                                                                                        <div id="wrapper">
                                                                                                            <div id="content">
                                                                                                                <div id="posts">
                                                                                                                    <iframe width="100%" height="105" frameborder="0" style="padding: 10px" src="/list/nohead.html" border="0" scrolling="no">
                                                                                                                        #document
                                                                                                                            <html></html>
                                                                                                                    </iframe>
                                                                                                                    <div class="post">
                                                                                                                        <h2 class="title">
                                                                                                                            <a onclick="animatedcollapse.toggle('rest1');return false;" href="#"></a>
                                                                                                                        </h2>
                                                                                                                        <div id="rest1" style="display:none" fade="1"></div>
                                                                                                                    </div>
                                                                                                                    <div class="post">
                                                                                                                        <h2 class="title">
                                                                                                                            <a onclick="animatedcollapse.toggle('rest2');return false;" href="#"></a>
                                                                                                                        </h2>
                                                                                                                        <div id="rest2" style="display:none" fade="1"></div>
                                                                                                                    </div>
                                                                                                                    <div class="post">
                                                                                                                        <h2 class="title">
                                                                                                                            <a onclick="animatedcollapse.toggle('rest3');return false;" href="#"></a>
                                                                                                                        </h2>
                                                                                                                        <div id="rest3" style="display:none" fade="1"></div>
                                                                                                                    </div>
                                                                                                                    <div class="post">
                                                                                                                        <h2 class="title">
                                                                                                                            <a onclick="animatedcollapse.toggle('rest4');return false;" href="#"></a>
                                                                                                                        </h2>
                                                                                                                        <div id="rest4" style="display:none" fade="1"></div>
                                                                                                                    </div>
                                                                                                                    <div class="post">
                                                                                                                        <h2 class="title">
                                                                                                                            <a onclick="animatedcollapse.toggle('rest5');return false;" href="#"></a>
                                                                                                                        </h2>
                                                                                                                        <div id="rest5" style="display:none" fade="1"></div>
                                                                                                                    </div>
                                                                                                                    <div class="post">
                                                                                                                        <h2 class="title">
                                                                                                                            <a onclick="animatedcollapse.toggle('rest6');return false;" href="#"></a>
                                                                                                                        </h2>
                                                                                                                        <div id="rest6" style="display:none" fade="1"></div>
                                                                                                                    </div>
                                                                                                                    <div class="post">
                                                                                                                        <h2 class="title">
                                                                                                                            <a onclick="animatedcollapse.toggle('rest7');return false;" href="#"></a>
                                                                                                                        </h2>
                                                                                                                        <div id="rest7" style="display:none" fade="1"></div>
                                                                                                                    </div>
                                                                                                                    <div class="post">
                                                                                                                        <h2 class="title">
                                                                                                                            <a onclick="animatedcollapse.toggle('rest8');return false;" href="#"></a>
                                                                                                                        </h2>
                                                                                                                        <div id="rest8" style="display:none" fade="1"></div>
                                                                                                                    </div>
                                                                                                                    <div class="post">
                                                                                                                        <h2 class="title"></h2>
                                                                                                                        <div id="rest9" style="display:none" fade="1"></div>
                                                                                                                    </div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                    <div class="post"></div>
                                                                                                                </div>
                                                                                                                <!--
                                
                                                                                                                 end #posts 
                                
                                                                                                                -->
                                                                                                                <!--
                                
                                                                                                                 bottom padding 
                                
                                                                                                                -->
                                                                                                                <div style="clear: both;"></div>
                                                                                                            </div>
                                                                                                            <!--
                                
                                                                                                             end #content 
                                
                                                                                                            -->
                                                                                                        </div>
                                                                                                        <!--
                                
                                                                                                         end #wrapper 
                                
                                                                                                        -->
                                                                                                        <div id="footer"></div>
                                                                                                        <!--
                                
                                                                                                         end #footer 
                                
                                                                                                        -->
                                                                                                        <script src="../js/code.js" type="text/javascript"></script>
                                                                                                        <script></script>
                                                                                                    </body>
                                                                                                </html>
                                                                                        </iframe>
                                                                                    </div>
                                                                                </div>
                                                                            </div>
                                                                        </div>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                            <div id="ext-gen21" class="x-window-bl x-panel-nofooter"></div>
                                                        </div>
                                                        <a id="ext-gen27" class="x-dlg-focus" tabindex="-1" href="#"></a>
                                                        <div id="ext-gen32" class="x-resizable-handle x-resizable-handle-north x-unselectable" style="-moz-user-select: none;"></div>
                                                        <div id="ext-gen33" class="x-resizable-handle x-resizable-handle-south x-unselectable" style="-moz-user-select: none;"></div>
                                                        <div id="ext-gen34" class="x-resizable-handle x-resizable-handle-east x-unselectable" style="-moz-user-select: none;"></div>
                                                        <div id="ext-gen35" class="x-resizable-handle x-resizable-handle-west x-unselectable" style="-moz-user-select: none;"></div>
                                                        <div id="ext-gen36" class="x-resizable-handle x-resizable-handle-northeast x-unselectable" style="-moz-user-select: none;"></div>
                                                        <div id="ext-gen37" class="x-resizable-handle x-resizable-handle-northwest x-unselectable" style="-moz-user-select: none;"></div>
                                                        <div id="ext-gen38" class="x-resizable-handle x-resizable-handle-southeast x-unselectable" style="-moz-user-select: none;"></div>
                                                        <div id="ext-gen39" class="x-resizable-handle x-resizable-handle-southwest x-unselectable" style="-moz-user-select: none;"></div>
                                                    </div>
                                                </div>
                                                <div id="ux-taskbar" class=" x-border-layout-ct" style="margin: 0px; border: 0px none;">
                                                    <div id="ux-taskbar-start" class=" x-border-panel" style="width: 86px; left: 0px; top: 0px; height: 30px;"></div>
                                                    <div id="ux-taskbuttons-panel" class=" x-border-panel" style="overflow: auto; left: 94px; top: 0px; width: 1186px; height: 30px;"></div>
                                                    <div class="x-clear"></div>
                                                    <div id="fbw"></div>
                                                    <div id="TaskBarStart-xsplit" class="x-layout-split x-layout-split-west x-splitbar-h" style="left: 86px; top: 0px; height: 30px;"></div>
                                                </div>
                                            </div>
                                            <div id="ext-comp-1002" class=" x-tip" style="position: absolute; z-index: 20000; visibility: hidden; display: none;"></div>
                                            <div id="ext-gen17" class=" x-unselectable x-splitbar-proxy x-splitbar-proxy-h" style="-moz-user-select: none;"></div>
                                            <iframe frameborder="0" scrolling="no" allowtransparency="true" src="https://platform.twitter.com/widgets/widget_iframe.4ed13d9ce94e60c41048ece32559b04c.html?origin=https%3A%2F%2Fsamy.pl" style="display: none;"></iframe>
                                            <div id="code-win-rzproxy" class="x-resizable-proxy x-unselectable" style="-moz-user-select: none; z-index: 9007;"></div>
                                            <iframe id="rufous-sandbox" frameborder="0" scrolling="no" allowtransparency="true" allowfullscreen="true" style="position: absolute; visibility: hidden; display: none; width: 0px; height: 0px; padding: 0px; border: medium none;" title="Twitter analytics iframe"></iframe>
                                        </body>
                                    </html>
                                Code:
                                /*!
                                 * Ext JS Library 3.1.0
                                 * Copyright(c) 2006-2009 Ext JS, LLC
                                 * licensing@extjs.com
                                 * http://www.extjs.com/license
                                 */
                                /**
                                 * @class Ext.ux.StartMenu
                                 * @extends Ext.menu.Menu
                                 * A start menu object.
                                 * @constructor
                                 * Creates a new StartMenu
                                 * @param {Object} config Configuration options
                                 *
                                 * SAMPLE USAGE:
                                 *
                                 * this.startMenu = new Ext.ux.StartMenu({
                                 *		iconCls: 'user',
                                 *		height: 300,
                                 *		shadow: true,
                                 *		title: get_cookie('memberName'),
                                 *		width: 300
                                 *	});
                                 *
                                 * this.startMenu.add({
                                 *		text: 'Grid Window',
                                 *		iconCls:'icon-grid',
                                 *		handler : this.createWindow,
                                 *		scope: this
                                 *	});
                                 *
                                 * this.startMenu.addTool({
                                 *		text:'Logout',
                                 *		iconCls:'logout',
                                 *		handler:function(){ window.location = "logout.php"; },
                                 *		scope:this
                                 *	});
                                 */
                                
                                Ext.namespace("Ext.ux");
                                
                                Ext.ux.StartMenu = Ext.extend(Ext.menu.Menu, {
                                    initComponent: function(config) {
                                    	Ext.ux.StartMenu.superclass.initComponent.call(this, config);
                                
                                        var tools = this.toolItems;
                                        this.toolItems = new Ext.util.MixedCollection();
                                        if(tools){
                                            this.addTool.apply(this, tools);
                                        }
                                    },
                                
                                    // private
                                    onRender : function(ct, position){
                                        Ext.ux.StartMenu.superclass.onRender.call(this, ct, position);
                                        var el = this.el.addClass('ux-start-menu');
                                
                                        var header = el.createChild({
                                        	tag: "div",
                                        	cls: "x-window-header x-unselectable x-panel-icon "+this.iconCls
                                        });
                                
                                		this.header = header;
                                
                                		var headerText = header.createChild({
                                			tag: "span",
                                			cls: "x-window-header-text"
                                		});
                                		var tl = header.wrap({
                                			cls: "ux-start-menu-tl"
                                		});
                                		var tr = header.wrap({
                                			cls: "ux-start-menu-tr"
                                		});
                                		var tc = header.wrap({
                                			cls: "ux-start-menu-tc"
                                		});
                                
                                		this.menuBWrap = el.createChild({
                                			tag: "div",
                                			cls: "x-window-body x-border-layout-ct ux-start-menu-body"
                                		});
                                		var ml = this.menuBWrap.wrap({
                                			cls: "ux-start-menu-ml"
                                		});
                                		var mc = this.menuBWrap.wrap({
                                			cls: "x-window-mc ux-start-menu-bwrap"
                                		});
                                
                                		this.menuPanel = this.menuBWrap.createChild({
                                			tag: "div",
                                			cls: "x-panel x-border-panel ux-start-menu-apps-panel"
                                		});
                                		this.toolsPanel = this.menuBWrap.createChild({
                                			tag: "div",
                                			cls: "x-panel x-border-panel ux-start-menu-tools-panel"
                                		});
                                
                                		var bwrap = ml.wrap({cls: "x-window-bwrap"});
                                		var bc = bwrap.createChild({
                                			tag: "div",
                                			cls: "ux-start-menu-bc"
                                		});
                                		var bl = bc.wrap({
                                			cls: "ux-start-menu-bl x-panel-nofooter"
                                		});
                                		var br = bc.wrap({
                                			cls: "ux-start-menu-br"
                                		});
                                
                                        this.ul.appendTo(this.menuPanel);
                                
                                        var toolsUl = this.toolsPanel.createChild({
                                        	tag: "ul",
                                        	cls: "x-menu-list"
                                        });
                                
                                        this.mon(toolsUl, 'click', this.onClick, this);
                                        this.mon(toolsUl, 'mouseover', this.onMouseOver, this);
                                        this.mon(toolsUl, 'mouseout', this.onMouseOut, this);
                                
                                        this.items.each(function(item){
                                            item.parentMenu = this;
                                        }, this);
                                
                                        this.toolItems.each(
                                        	function(item){
                                	            var li = document.createElement("li");
                                	            li.className = "x-menu-list-item";
                                	            toolsUl.dom.appendChild(li);
                                	            item.render(li);
                                                item.parentMenu = this;
                                	        }, this);
                                
                                        this.toolsUl = toolsUl;
                                
                                        this.menuBWrap.setStyle('position', 'relative');
                                        this.menuBWrap.setHeight(this.height - 28);
                                
                                        this.menuPanel.setStyle({
                                        	padding: '2px',
                                        	position: 'absolute',
                                        	overflow: 'auto'
                                        });
                                
                                        this.toolsPanel.setStyle({
                                        	padding: '2px 4px 2px 2px',
                                        	position: 'absolute',
                                        	overflow: 'auto'
                                        });
                                
                                        this.setTitle(this.title);
                                    },
                                
                                    // private
                                    findTargetItem : function(e){
                                        var t = e.getTarget(".x-menu-list-item", this.ul,  true);
                                        if(t && t.menuItemId){
                                        	if(this.items.get(t.menuItemId)){
                                            	return this.items.get(t.menuItemId);
                                            }else{
                                            	return this.toolItems.get(t.menuItemId);
                                            }
                                        }
                                    },
                                
                                    /**
                                     * Displays this menu relative to another element
                                     * @param {Mixed} element The element to align to
                                     * @param {String} position (optional) The {@link Ext.Element#alignTo} anchor position to use in aligning to
                                     * the element (defaults to this.defaultAlign)
                                     * @param {Ext.ux.StartMenu} parentMenu (optional) This menu's parent menu, if applicable (defaults to undefined)
                                     */
                                    show : function(el, pos, parentMenu){
                                        this.parentMenu = parentMenu;
                                        if(!this.el){
                                            this.render();
                                        }
                                
                                        this.fireEvent("beforeshow", this);
                                        this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign), parentMenu, false);
                                        var tPanelWidth = 100;
                                        var box = this.menuBWrap.getBox();
                                        this.menuPanel.setWidth(box.width-tPanelWidth);
                                        this.menuPanel.setHeight(box.height);
                                
                                        this.toolsPanel.setWidth(tPanelWidth);
                                        this.toolsPanel.setX(box.x+box.width-tPanelWidth);
                                        this.toolsPanel.setHeight(box.height);
                                    },
                                
                                    addTool : function(){
                                        var a = arguments, l = a.length, item;
                                        for(var i = 0; i < l; i++){
                                            var el = a[i];
                                            if(el.render){ // some kind of Item
                                                item = this.addToolItem(el);
                                            }else if(typeof el == "string"){ // string
                                                if(el == "separator" || el == "-"){
                                                    item = this.addToolSeparator();
                                                }else{
                                                    item = this.addText(el);
                                                }
                                            }else if(el.tagName || el.el){ // element
                                                item = this.addElement(el);
                                            }else if(typeof el == "object"){ // must be menu item config?
                                                item = this.addToolMenuItem(el);
                                            }
                                        }
                                        return item;
                                    },
                                
                                    /**
                                     * Adds a separator bar to the Tools
                                     * @return {Ext.menu.Item} The menu item that was added
                                     */
                                    addToolSeparator : function(){
                                        return this.addToolItem(new Ext.menu.Separator({itemCls: 'ux-toolmenu-sep'}));
                                    },
                                
                                    addToolItem : function(item){
                                        this.toolItems.add(item);
                                        if(this.ul){
                                            var li = document.createElement("li");
                                            li.className = "x-menu-list-item";
                                            this.ul.dom.appendChild(li);
                                            item.render(li, this);
                                            this.delayAutoWidth();
                                        }
                                        return item;
                                    },
                                
                                    addToolMenuItem : function(config){
                                        if(!(config instanceof Ext.menu.Item)){
                                            if(typeof config.checked == "boolean"){ // must be check menu item config?
                                                config = new Ext.menu.CheckItem(config);
                                            }else{
                                                config = new Ext.menu.Item(config);
                                            }
                                        }
                                        return this.addToolItem(config);
                                    },
                                
                                    setTitle : function(title, iconCls){
                                        this.title = title;
                                        this.header.child('span').update(title);
                                        return this;
                                    }
                                });
                                IT IS IMPOSSIBLE TO HIDE THE CODE JUST YOU CAN MAKE IT MORE DIFFICULT TO ACCESS

                                Comment

                                Working...