codenautas/fast-devel-server

View on GitHub
server/auto.js

Summary

Maintainability
B
5 hrs
Test Coverage
"use strict";

var visibleFrame;

var actualFrames=[];

function resize(){
    visibleFrame.style.width=innerWidth-visibleFrame.controlTagLateral.offsetWidth-40+'px';
    visibleFrame.style.height=innerHeight-50+'px';
}

function ajaxSimple(params){
    var ajax = new XMLHttpRequest();
    ajax.open('get',params.url);
    ajax.onload=function(e){
        try{
            params.onload.call(this,e);
        }catch(err){
            params.onerror(err);
        }
    }
    ajax.onerror=params.onerror;
    ajax.send();
}

function loadFrames(){
    var pattern=/^((https?:\/\/)?[-a-z.0-9]+(:\d+)?)\/file(\/|$)/;
    actualFrames.forEach(function(frame){
        frame.controlTagLateral.textContent='T';
        if(!frame.codenautas_info){
            frame.codenautas_info={
                mtime:"",
                autorefresh:!(/^((https?:\/\/)?[-a-z.0-9]+(:\d+)?)\/auto\/\!/.test(document.URL))
            };
        }
        if(frame.codenautas_info.autorefresh){
            var parametrosQuery=function(){
                return frame.codenautas_info.originFileName && convertir.checked?"?from-original="+encodeURIComponent(frame.codenautas_info.originFileName):"";
            }
            ajaxSimple({
                url:'/info'+frame.dataset.path+parametrosQuery(),
                onload:function(e){
                    var info=JSON.parse(this.responseText);
                    frame.codenautas_info.originFileName=info.originFileName;
                    if(frame.codenautas_info.mtime!='ignored' && frame.codenautas_info.mtime<info.mtime){
                        frame.controlTagLateral.textContent='R';
                        frame.controlTagLateral.title='Refreshing';
                        frame.src='/file'+frame.dataset.path+parametrosQuery();
                        frame.onload=function(){
                            var insideFrame=false;
                            try{
                                insideFrame=pattern.test(frame.contentDocument.URL);
                            }catch(err){
                                insideFrame=false;
                            }
                            if(insideFrame){
                                var newUrl=frame.contentDocument.URL.replace(pattern,'$1/auto/')
                                var loadedPath='/'+frame.contentDocument.URL.replace(pattern,'');
                                frame.contentDocument.addEventListener('click',function(){
                                    alert('ok');
                                });
                                var autorefresh=true;
                            }else{
                                var newUrl='/auto/!EXTERNAL';
                                var loadedPath='!EXTERNAL';
                                var autorefresh=false;
                            }
                            if(loadedPath != frame.dataset.path){
                                frame.dataset.path = loadedPath;
                                frame.codenautas_info.mtime='ignored';
                                frame.codenautas_info.autorefresh=autorefresh;
                                window.history.replaceState(null, document.title, newUrl);
                            }
                            frame.controlTagLateral.textContent='L';
                            frame.controlTagLateral.title=frame.src;
                            setTimeout(resize,100);
                            // setTimeout(loadFrames,1000);
                        }
                        frame.codenautas_info.mtime=info.mtime;
                    }else{
                        if(frame.codenautas_info.mtime=='ignored'){
                            frame.codenautas_info.mtime=info.mtime;
                        }else{
                            frame.controlTagLateral.textContent='I';
                        }
                        // setTimeout(loadFrames,1000);
                    }
                    for(var name in frame.codenautas_info){
                        var element=document.getElementById(name);
                        if(element){
                            element.textContent=frame.codenautas_info[name];
                        }
                    }
                    opcion_originFileName.style.display=(frame.codenautas_info.originFileName?"":"none");
                },
                onerror:function(err){
                    // setTimeout(loadFrames,1000);
                }
            });
        }
    });
}

window.addEventListener("popstate", function(e) {
    console.log(e);
    swapPhoto(location.pathname);
});

window.addEventListener('load',function(){
    visibleFrame=frame1;
    visibleFrame.controlTagLateral=lateral1;
    actualFrames.push(visibleFrame);
    window.addEventListener('resize', resize);
    setTimeout(resize,100);
    // setTimeout(loadFrames,1000);
    setInterval(loadFrames,1000);
});