KOKINIO - MANAGER
Edit File: ce8b347cc4ba5559ff7317420ef93c00
<?php $__env->startSection('content'); ?> <script src="<?php echo URL::to('/').'/js/Counters.js'; ?> "></script> <!-- Page content --> <div id="page-content"> <!-- Dashboard Header --> <!-- For an image header add the class 'content-header-media' and an image as in the following example <div class="content-header"> --> <div class="block"> <!-- Example Title --> <div class="block-title"> <h2>Status</h2> </div> <!-- END Example Title --> <form action="page_forms_general.html" method="post" enctype="multipart/form-data" class="form-horizontal form-bordered" onsubmit="return false;"> <div class="row"> <div class="col-sm-6 col-lg-3"> <!-- Widget --> <a href="page_ready_article.html" class="widget widget-hover-effect1"> <div class="widget-simple"> <div class="widget-icon pull-left themed-background-autumn animation-fadeIn"> <i class="fa fa-calendar"></i> </div> <h3 class="widget-content text-right animation-pullDown"> <strong><script>document.write(cuentaDiasGobierno)</script></strong> Días de Gobierno<br> <small><script>document.write(numDiaActual)+document.write("/")+document.write(strMesActual)+document.write("/")+document.write(numAñoActual)</script></small> </h3> </div> </a> <!-- END Widget --> </div> <div class="col-sm-6 col-lg-3"> <!-- Widget --> <a href="page_comp_charts.html" class="widget widget-hover-effect1"> <div class="widget-simple"> <div class="widget-icon pull-left themed-background-autumn animation-fadeIn"> <i class="gi gi-stopwatch"></i> </div> <h3 class="widget-content text-right animation-pullDown"> <strong><script>document.write(cuentaInicioProceso)</script></strong> Días para Inicio del Proceso<br> <small>01/Oct/2017</small> </h3> </div> </a> <!-- END Widget --> </div> <div class="col-sm-6 col-lg-3"> <!-- Widget --> <a href="page_ready_inbox.html" class="widget widget-hover-effect1"> <div class="widget-simple"> <div class="widget-icon pull-left themed-background-spring animation-fadeIn"> <i class="fa fa-file-text-o"></i> </div> <h3 class="widget-content text-right animation-pullDown"> <strong><script>document.write(cuentaDiasLicencia)</script></strong> Días para Licencia<br> <small>13/Nov/2017</small> </h3> </div> </a> <!-- END Widget --> </div> <div class="col-sm-6 col-lg-3"> <!-- Widget --> <a href="page_comp_gallery.html" class="widget widget-hover-effect1"> <div class="widget-simple"> <div class="widget-icon pull-left themed-background-spring animation-fadeIn"> <i class="fa fa-bullhorn"></i> </div> <h3 class="widget-content text-right animation-pullDown"> <strong><script>document.write(cuentaInicioCampañas)</script></strong> Días para Inicio de Campañas<br> <small>02/Mar/2018</small> </h3> </div> </a> <!-- END Widget --> </div> <div class="col-sm-6 col-lg-3"> <!-- Widget --> <a href="page_ready_article.html" class="widget widget-hover-effect1"> <div class="widget-simple"> <div class="widget-icon pull-left themed-background-spring animation-fadeIn"> <i class="gi gi-group"></i> </div> <h3 class="widget-content text-right animation-pullDown"> <strong><script>document.write(cuentaDiasTransicion)</script></strong> Días de Transición<br> <small>06/Dic/2018</small> </h3> </div> </a> <!-- END Widget --> </div> <div class="col-sm-6 col-lg-3"> <!-- Widget --> <a href="page_comp_charts.html" class="widget widget-hover-effect1"> <div class="widget-simple"> <div class="widget-icon pull-left themed-background-spring animation-fadeIn"> <i class="gi gi-flag"></i> </div> <h3 class="widget-content text-right animation-pullDown"> <strong><script>document.write(cuentaDiasD)</script> Días para el Día D</strong> <small>03/Jun/2018</small> </h3> </div> </a> <!-- END Widget --> </div> <div class="col-sm-6 col-lg-3"> <!-- Widget --> <a href="page_ready_inbox.html" class="widget widget-hover-effect1"> <div class="widget-simple"> <div class="widget-icon pull-left themed-background-fire animation-fadeIn"> <i class="fa fa-scissors"></i> </div> <h3 class="widget-content text-right animation-pullDown"> <<strong><script>document.write(cuentaDiasRevocacion)</script></strong> Días para Revocación de Mandato<br> <small>01/Abr/2017</small> </h3> </div> </a> <!-- END Widget --> </div> </div> </form> <!-- END Basic Form Elements Content --> <!-- END Example Block--> </div> END Dashboard Header --> <div class="block"> <!-- Basic Form Elements Title --> <div class="block-title"> <h2><strong>Redes de</strong> Poder</h2> <form class="form-inline"> <div class="form-group"> <label class="col-md-2 control-label" for="network-actor-id">Actor</label> <div class="col-md-8"> <select id="network-actor-id" name="network-actor-id" class="select-chosen col-md-5 form-control" data-placeholder="Actor"> <?php if( isset( $actors ) ): ?> <?php foreach( $actors as $key => $actor ): ?> <option value="<?php echo e($actor->id); ?>"><?php echo e($actor->name); ?></option> <?php endforeach; ?> <?php else: ?> <option></option><!-- Required for data-placeholder attribute to work with Chosen plugin --> <?php endif; ?> </select> </div> </div> <div class="form-group"> <label class="col-md-3 control-label" for="type-relationship-id">Relacion</label> <div class="col-md-8"> <select id="type-relationship-id" name="type-relationship-id" class="select-chosen col-md-5 form-control" data-placeholder="Tipo de Relacion"> <option value="-1">Todos los tipos</option><!-- Required for data-placeholder attribute to work with Chosen plugin --> <?php if( isset( $types ) ): ?> <?php foreach( $types as $key => $type ): ?> <option value="<?php echo e($type->id); ?>"><?php echo e($type->name); ?></option> <?php endforeach; ?> <?php endif; ?> </select> </div> </div> <div class="form-group"> <label class="col-md-4 control-label" for="search-depth">Profundidad</label> <div class="col-md-8"> <select id="search-depth" name="search-depth" class="select-chosen col-md-5 form-control" data-placeholder="Profundidad de la busqueda"> <option value="1">Primer nivel</option><!-- Required for data-placeholder attribute to work with Chosen plugin --> <option value="2">Segundo nivel</option><!-- Required for data-placeholder attribute to work with Chosen plugin --> <option value="3">Tercer Nivel</option><!-- Required for data-placeholder attribute to work with Chosen plugin --> </select> </div> </div> <div class="form-group"> <button class="btn btn-sm btn-primary" type="submit" id="network-btn"> <i class="fa fa-repeat"></i> Cargar </button> </div> </form> <svg id="my_svg" ></svg> </div> </div> </div> </div> </div> <!-- END Page Content --> <?php echo Html::script('js/PowerNetwork.js'); ?> <?php echo Html::style('css/nodes.css'); ?> <script src="http://d3js.org/d3.v3.min.js"></script> <script type="text/javascript"> // set up SVG for D3 var Graph = function(){ return { // set up initial nodes and links // - nodes are known by 'id', not by index in array. // - reflexive edges are indicated on the node (as a bold black circle). // - links are always source < target; edge directions are set by 'left' and 'right'. nodes: null, links: null, lastNodeId: null, width: 1560, height: 800, colors: d3.scale.category10(), init: function(){ var colors = d3.scale.category10(); var svg = d3.select('svg') .attr('oncontextmenu', 'return false;') .attr('width', Graph.width) .attr('height', Graph.height); var distance = Math.sqrt( ( Graph.width * Graph.height ) / Math.pow( Graph.lastNodeId,2 ) ); console.log( distance ); // init D3 force layout var force = d3.layout.force() .nodes(Graph.nodes) .links(Graph.links) .size([Graph.width, Graph.height]) .linkDistance( distance ) .charge(-800) .on('tick', tick) // define arrow markers for graph links svg.append('svg:defs').append('svg:marker') .attr('id', 'end-arrow') .attr('viewBox', '0 -5 10 10') .attr('refX', 6) .attr('markerWidth', 3) .attr('markerHeight', 3) .attr('orient', 'auto') .append('svg:path') .attr('d', 'M0,-5L10,0L0,5') .attr('fill', '#000'); svg.append('svg:defs').append('svg:marker') .attr('id', 'start-arrow') .attr('viewBox', '0 -5 10 10') .attr('refX', 4) .attr('markerWidth', 3) .attr('markerHeight', 3) .attr('orient', 'auto') .append('svg:path') .attr('d', 'M10,-5L0,0L10,5') .attr('fill', '#000'); // line displayed when dragging new nodes var drag_line = svg.append('svg:path') .attr('class', 'link dragline hidden') .attr('d', 'M0,0L0,0'); // handles to link and node element groups var path = svg.append('svg:g').selectAll('path'), circle = svg.append('svg:g').selectAll('g'); // mouse event vars var selected_node = null, selected_link = null, mousedown_link = null, mousedown_node = null, mouseup_node = null; function resetMouseVars() { mousedown_node = null; mouseup_node = null; mousedown_link = null; } // update force layout (called automatically each iteration) function tick() { // draw directed edges with proper padding from node centers path.attr('d', function(d) { var deltaX = d.target.x - d.source.x, deltaY = d.target.y - d.source.y, dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY), normX = deltaX / dist, normY = deltaY / dist, sourcePadding = d.left ? 17 : 12, targetPadding = d.right ? 17 : 12, sourceX = d.source.x + (sourcePadding * normX), sourceY = d.source.y + (sourcePadding * normY), targetX = d.target.x - (targetPadding * normX), targetY = d.target.y - (targetPadding * normY); return 'M' + sourceX + ',' + sourceY + 'L' + targetX + ',' + targetY; }); circle.attr('transform', function(d) { return 'translate(' + d.x + ',' + d.y + ')'; }); } // update graph (called when needed) function restart() { // path (link) group path = path.data(Graph.links); // update existing links path.classed('selected', function(d) { return d === selected_link; }) .style('marker-start', function(d) { return d.left ? 'url(#start-arrow)' : ''; }) .style('marker-end', function(d) { return d.right ? 'url(#end-arrow)' : ''; }); // add new links path.enter().append('svg:path') .attr('class', 'link') .classed('selected', function(d) { return d === selected_link; }) .style('marker-start', function(d) { return d.left ? 'url(#start-arrow)' : ''; }) .style('marker-end', function(d) { return d.right ? 'url(#end-arrow)' : ''; }) .on('mousedown', function(d) { if(d3.event.ctrlKey) return; // select link mousedown_link = d; if(mousedown_link === selected_link) selected_link = null; else selected_link = mousedown_link; selected_node = null; restart(); }); // remove old links path.exit().remove(); // circle (node) group // NB: the function arg is crucial here! nodes are known by id, not by index! circle = circle.data( Graph.nodes, function(d) { return d.id; }); // update existing nodes (reflexive & selected visual states) circle.selectAll('circle') .style('fill', function(d) { return (d === selected_node) ? d3.rgb(colors(d.id)).brighter().toString() : colors(d.id); }) .classed('reflexive', function(d) { return d.reflexive; }); // add new nodes var g = circle.enter().append('svg:g'); g.append('svg:circle') .attr('class', 'node') .attr('r', 12) .attr('active_', 'false' ) .style('fill', function(d) { return (d === selected_node) ? d3.rgb(colors(d.id)).brighter().toString() : colors(d.id); }) .style('stroke', function(d) { return d3.rgb(colors(d.id)).darker().toString(); }) .classed('reflexive', function(d) { return d.reflexive; }) .on('mouseover', function(d) { if(!mousedown_node || d === mousedown_node) return; // enlarge target node d3.select(this).attr('transform', 'scale(1.1)'); }) .on('mouseout', function(d) { if(!mousedown_node || d === mousedown_node) return; // unenlarge target node d3.select(this).attr('transform', ''); }) .on('mousedown', function(d) { if(d3.event.ctrlKey) return; // select node mousedown_node = d; if(mousedown_node === selected_node) selected_node = null; else selected_node = mousedown_node; selected_link = null; if( d3.select(this).attr('active_') == 'false' ){ d3.select(this).attr('transform', 'scale(3.1)'); d3.select(this).attr('active_', 'true' ); var _name_ = $( 'text', $( this ).parent() ).html(); $.ajax({ url: main_path + '/redespoder/actor/relationships/byname/' + _name_, data: {}, type: 'POST', success: function(response) { }, fail: function(response){ } }); } else { d3.select(this).attr('transform', 'scale(1.1)'); d3.select(this).attr('active_', 'false' ); var _name_ = $( 'text', $( this ).parent() ).html(); } restart(); }) .on('mouseup', function(d) { if(!mousedown_node) return; // needed by FF drag_line .classed('hidden', true) .style('marker-end', ''); // check for drag-to-self mouseup_node = d; if(mouseup_node === mousedown_node) { resetMouseVars(); return; } // unenlarge target node d3.select(this).attr('transform', ''); // add link to graph (update if exists) // NB: links are strictly source < target; arrows separately specified by booleans var source, target, direction; if(mousedown_node.id < mouseup_node.id) { source = mousedown_node; target = mouseup_node; direction = 'right'; } else { source = mouseup_node; target = mousedown_node; direction = 'left'; } var link; link = Graph.links.filter(function(l) { return (l.source === source && l.target === target); })[0]; if(link) { link[direction] = true; } else { link = {source: source, target: target, left: false, right: false}; link[direction] = true; links.push(link); } // select new link selected_link = link; selected_node = null; restart(); }); // show node IDs g.append('svg:text') .attr('x', 0) .attr('y', 2) .attr('class', 'id') .text(function(d) { return d.id; }); // Adding data to events // g.attr('backend_id', 'id').text(function(d) { return d.position; }); // remove old nodes circle.exit().remove(); // set the graph in motion force.start(); } function mousedown() { // prevent I-bar on drag //d3.event.preventDefault(); // because :active only works in WebKit? svg.classed('active', true); if(d3.event.ctrlKey || mousedown_node || mousedown_link) return; // insert new node at point var point = d3.mouse(this), node = {id: ++Graph.lastNodeId, reflexive: false}; node.x = point[0]; node.y = point[1]; // Graph.nodes.push(node); restart(); } function mousemove() { if(!mousedown_node) return; // update drag line drag_line.attr('d', 'M' + mousedown_node.x + ',' + mousedown_node.y + 'L' + d3.mouse(this)[0] + ',' + d3.mouse(this)[1]); restart(); } function mouseup() { if(mousedown_node) { // hide drag line drag_line .classed('hidden', true) .style('marker-end', ''); } // because :active only works in WebKit? svg.classed('active', false); // clear mouse event vars resetMouseVars(); } function spliceLinksForNode(node) { var toSplice = Graph.links.filter(function(l) { return (l.source === node || l.target === node); }); toSplice.map(function(l) { Graph.links.splice(Graph.links.indexOf(l), 1); }); } // only respond once per keydown var lastKeyDown = -1; function keydown() { d3.event.preventDefault(); if(lastKeyDown !== -1) return; lastKeyDown = d3.event.keyCode; // ctrl if(d3.event.keyCode === 17) { circle.call(force.drag); svg.classed('ctrl', true); } if(!selected_node && !selected_link) return; switch(d3.event.keyCode) { case 8: // backspace case 46: // delete if(selected_node) { Graph.nodes.splice(Graph.nodes.indexOf(selected_node), 1); spliceLinksForNode(selected_node); } else if(selected_link) { Graph.links.splice(Graph.links.indexOf(selected_link), 1); } selected_link = null; selected_node = null; restart(); break; case 66: // B if(selected_link) { // set link direction to both left and right selected_link.left = true; selected_link.right = true; } restart(); break; case 76: // L if(selected_link) { // set link direction to left only selected_link.left = true; selected_link.right = false; } restart(); break; case 82: // R if(selected_node) { // toggle node reflexivity selected_node.reflexive = !selected_node.reflexive; } else if(selected_link) { // set link direction to right only selected_link.left = false; selected_link.right = true; } restart(); break; } } function keyup() { lastKeyDown = -1; // ctrl if(d3.event.keyCode === 17) { circle .on('mousedown.drag', null) .on('touchstart.drag', null); svg.classed('ctrl', false); } } // app starts here svg.on('mousedown', mousedown) .on('mousemove', mousemove) .on('mouseup', mouseup); d3.select(window) .on('keydown', keydown) .on('keyup', keyup); restart(); } } }(); //My settings :) PowerNetwork.init(); //end of setting events $.ajax({ url: main_path + '/mas_test', data: {}, type: 'GET', success: function( response ){ // init D3 force layout Graph.nodes = response.nodes; Graph.lastNodeId = response.lastNodeId; Graph.links = response.links; if( Graph.nodes != null && Graph.nodes.length > 0 ){ Graph.init(); } }, fail: function ( response ) { PowerNetwork.nodes = [ {id: 'Aristoteles Sandoval', reflexive: false}, {id: 'Papayon', reflexive: true }, {id: 'Coco Velazquez', reflexive: false} ], PowerNetwork.lastNodeId = 2, PowerNetwork.links = [ {source: nodes[ 0 ], target: nodes[ 2 ], left: false, right: true }, {source: nodes[ 0 ], target: nodes[ 1 ], left: false, right: true }, {source: nodes[ 2 ], target: nodes[ 1 ], left: false, right: true } ]; } }); </script> <?php $__env->stopSection(); ?> <?php echo $__env->make('layout', array_except(get_defined_vars(), array('__data', '__path')))->render(); ?>