// Arrow settings var debug = 1; var exampleDropOptions = { tolerance:'touch', hoverClass:'dropHover', activeClass:'dragActive' }; var connectorPaintStyle = { lineWidth:5, strokeStyle:"#deea18", joinstyle:"round" }; // .. and this is the hover style. var connectorHoverStyle = { lineWidth:7, strokeStyle:"#2e2aF8" }; //Admin arrows var edit_arrow_color = '#ccc'; var editEndpointOptions = { isTarget:true, maxConnections:100, endpoint:"Rectangle", paintStyle:{ fillStyle:"yellow" } }; //Student arrows //If user does not completed the skill var default_arrow_color = '#ccc'; //gray var defaultEndpoint = { connector:[ "Flowchart", { stub:28 } ], anchors: ['BottomCenter','TopCenter'], endpoint:"Rectangle", paintStyle:{ width:1, height:1, fillStyle:default_arrow_color }, isSource:false, scope:'blue rectangle', maxConnections:10, connectorStyle : { gradient:{ stops:[[0, default_arrow_color], [0.5, default_arrow_color], [1, default_arrow_color]] }, lineWidth:5, strokeStyle:default_arrow_color }, isTarget:false, setDraggableByDefault : false, }; // If user completed the skill var done_arrow_color = '#73982C'; //green var doneEndpointOptions = { connector:[ "Flowchart", { stub:28 } ], anchors: ['BottomCenter','TopCenter'], endpoint:"Rectangle", paintStyle:{ width:1, height:1, fillStyle:done_arrow_color}, isSource:false, scope:'blue rectangle', maxConnections:10, connectorStyle : { gradient:{ stops:[[0, done_arrow_color], [0.5, done_arrow_color], [1, done_arrow_color]] }, lineWidth:5, strokeStyle:done_arrow_color }, isTarget:false, setDraggableByDefault : false, }; //Functions /* Clean window block classes*/ function cleanclass(obj) { obj.removeClass('first_window'); obj.removeClass('second_window'); obj.removeClass('third_window'); } /* When clicking the red block */ function open_parent(parent_id, id) { if (debug) console.log("open_parent call : id " + id + " parent_id:" + parent_id); var numeric_parent_id = parent_id.split('_')[1]; var numeric_id = id.split('_')[1]; load_parent(numeric_parent_id, numeric_id); } function open_block_student(id) { open_block(id, 1) } /* * When clicking a children block @param string block id i.e "block_1" @param int load user data or not */ function open_block(id, load_user_data, create_root) { if (debug) console.log("open_block id : " + id+" load_user_data: " +load_user_data + ', create_root ' + create_root); var numeric_id = id.split('_')[1]; for (var i = 0; i < skills.length; i++) { //Remove everything except parents if (jQuery.inArray(skills[i].element, parents) == -1) { if (debug) console.log('deleting this skill '+ skills[i].element + " id: " + i); jsPlumb.detachAllConnections(skills[i].element); jsPlumb.removeAllEndpoints(skills[i].element); $("#"+skills[i].element).remove(); } } /*/Modifying current block position pos = $('#'+id).position(); left_value = center_x; if (parents.length == 2) { top_value = space_between_blocks_y + offset_y; } else { top_value = 100; } jsPlumb.animate(id, { left: left_value, top:top_value }, { duration:duration_value }); //Modifying root block position pos_parent = $('#'+parents[0]).position(); jsPlumb.animate(parents[0], { left: center_x, top:offset_y }, { duration:duration_value }); top_value = 2*space_between_blocks_y +offset_y ; */ load_children(numeric_id, 0, load_user_data, create_root); } function load_children(my_id, top_value, load_user_data, create_root) { if (debug) console.log("load_children : my_id " + my_id + ", top_value:" + top_value +", load_user_data: "+load_user_data+", create_root: "+create_root); //Fix the block vertical position //$('#block_'+my_id).css('top', '150px'); my_top = 50; //Creating the root if (create_root == 1) { my_top = 0; if (my_id == 1) { $('#skill_tree').append('