From 7f64d0c7ace9c9cb253ec4696e0bbef27c642129 Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Fri, 30 Dec 2016 17:34:55 +0000 Subject: [PATCH] refactored the subgraphs in the code folder view --- codepot/src/codepot/views/code_folder.php | 468 +++++++++++++--------- 1 file changed, 272 insertions(+), 196 deletions(-) diff --git a/codepot/src/codepot/views/code_folder.php b/codepot/src/codepot/views/code_folder.php index 7ccba1a9..998f0c39 100644 --- a/codepot/src/codepot/views/code_folder.php +++ b/codepot/src/codepot/views/code_folder.php @@ -89,42 +89,26 @@ function show_alert (outputMsg, titleMsg) }); } -function show_tooltip(id, x, y, contents) { - $('
' + contents + '
').css( { - position: 'absolute', - display: 'none', - top: y + 5, - left: x + 5, - border: '1px solid #fdd', - padding: '2px', - 'background-color': '#fee', - 'font-size': '0.8em', - 'font-family': 'inherit', - opacity: 0.80 - }).appendTo("body").fadeIn(200); -} - - -var RevGraphApp = (function () +var GraphApp = (function () { // ------------------------------------------------------------------- // CONSTRUCTOR // ------------------------------------------------------------------- - function App () + function App (top_container, graph_container, graph_canvas, graph_button, graph_spin, graph_url, graph_title) { - if (this.constructor != App) - { - return new App (); - } - - this.window = $(window); - this.graph_container = $("#code_folder_revision_graph_container"); - this.graph_canvas = $("#code_folder_revision_graph"); - this.graph_button = $("#code_folder_revision_graph_button"); - this.graph_spin = $("#code_folder_revision_graph_spin"); + //if (this.constructor != App) + //{ + // return new App (top_container, graph_container, graph_canvas, graph_button, graph_spin, graph_title); + //} + this.top_container = top_container; + this.graph_container = graph_container; + this.graph_canvas = graph_canvas; + this.graph_button = graph_button; + this.graph_spin = graph_spin; this.graph_ajax = null; - this.revision_network = null; + this.graph_url = graph_url; + this.graph_title = graph_title; return this; } @@ -142,79 +126,30 @@ var RevGraphApp = (function () { show_alert ('Invalid data received', "lang->line('Error')?>"); } - else if (data.nodes.length <= 0) + /* else if (data.nodes.length <= 0) { show_alert ('No data to show', "lang->line('Error')?>"); - } + } */ else { - var options = { - autoResize: false, - height: '500px', - width: '100%', - clickToUse: false, - layout: { - hierarchical: { - enabled: true, - //levelSeparation: 150, - //nodeSpacing: 200, - //treeSpacing: 300, - direction: 'LR', //'LR' 'UD', 'DU', 'RL' - sortMethod: 'directed' // 'hubsize' - } - }, - edges: { - smooth: { - type: 'cubicBezier', - forceDirection: 'horizontal', // 'vertical', - roundness: 0.4 - } - }, - physics: { - enabled: true - } - }; + this.renderGraph (data); - var i, j; - - j = data.nodes.length; - for (i = 0; i < j; i++) - { - data.nodes[i].shape = 'box'; - } - - j = data.edges.length; - for (i = 0; i < j; i++) - { - data.edges[i].length = 60; - data.edges[i].width = 1; - data.edges[i].arrows = 'to'; - data.edges[i].font = { color: 'red' }; - } - - if (this.revision_network === null) - { - this.revision_network = new vis.Network(this.graph_canvas[0], data, options); - } - else - { - this.revision_network.setData (data); - } - - this.graph_container.dialog("option", "height", (this.window.height() * 90 / 100)); - this.graph_container.dialog("option", "width", (this.window.width() * 90 / 100)); + this.graph_container.dialog("option", "height", (this.top_container.height() * 90 / 100)); + this.graph_container.dialog("option", "width", (this.top_container.width() * 90 / 100)); this.graph_container.dialog ({ position: { my: "center center", at: "center center", - of: this.window + of: this.top_container } }); - on_graph_container_resize.call (this); + + this.resizeGraph (); } this.graph_button.button("enable"); this.graph_spin.removeClass ("fa-cog fa-spin"); + this.graph_ajax = null; } function on_graph_error (jqXHR, textStatus, errorThrown) @@ -222,9 +157,10 @@ var RevGraphApp = (function () show_alert (xhr.status + ' ' + thrownError, "lang->line('Error')?>"); this.graph_button.button("enable"); this.graph_spin.removeClass ("fa-cog fa-spin"); + this.graph_ajax = null; } - function open_revision_graph() + function open_graph() { this.graph_button.button ("disable"); this.graph_spin.addClass ("fa-cog fa-spin"); @@ -232,25 +168,13 @@ var RevGraphApp = (function () if (this.graph_ajax != null) this.graph_ajax.abort(); this.graph_ajax = $.ajax ({ - url: codepot_merge_path ( - "", - "/graph/enjson_revision_graph/id; ?>/"), + url: this.graph_url, context: this, success: on_graph_success, error: on_graph_error }); } - function on_graph_container_resize() - { - if (this.revision_network != null) - { - this.revision_network.setSize (this.graph_container.width(), this.graph_container.height()); - this.revision_network.redraw(); - this.revision_network.fit(); - } - } - // ------------------------------------------------------------------- // PUBLIC FUNCTIONS // ------------------------------------------------------------------- @@ -259,7 +183,7 @@ var RevGraphApp = (function () var self = this; this.graph_container.dialog ({ - title: 'lang->line('Revision')?>', + title: this.graph_title, resizable: true, autoOpen: false, width: 'auto', @@ -267,44 +191,185 @@ var RevGraphApp = (function () modal: true, buttons: { 'lang->line('Close')?>': function () { - if (this.graph_ajax != null) return; + if (self.graph_ajax != null) return; self.graph_container.dialog('close'); } }, - beforeClose: function() { - return this.graph_ajax == null; + beforeClose: function() { + return self.graph_ajax == null; }, }); this.graph_container.on ("dialogresize", function (evt, ui) { - on_graph_container_resize.call (self); + self.resizeGraph (); }); this.graph_button.button().click (function () { - open_revision_graph.call (self); + open_graph.call (self); return false; }); }; + // ------------------------------------------------------------------- + // VIRTUAL FUNCTIONS + // ------------------------------------------------------------------- + App.prototype.renderGraph = function (json) + { + /* SHOULD BE IMPLEMENTED BY INHERITER */ + } + + App.prototype.resizeGraph = function () + { + /* SHOULD BE IMPLEMENTED BY INHERITER */ + } + + return App; +})(); + +var RevGraphApp = (function () +{ + function App (top_container, graph_container, graph_canvas, graph_button, graph_spin, graph_url, graph_title) + { + GraphApp.call (this, top_container, graph_container, graph_canvas, graph_button, graph_spin, graph_url, graph_title); + this.revision_network = null; + return this; + } + App.prototype = Object.create (GraphApp.prototype); + App.prototype.constructor = App; + + App.prototype.renderGraph = function (data) + { + var options = { + autoResize: false, + height: '400px', + width: '90%', + clickToUse: false, + layout: { + hierarchical: { + enabled: true, + //levelSeparation: 150, + //nodeSpacing: 200, + //treeSpacing: 300, + direction: 'LR', //'LR' 'UD', 'DU', 'RL' + sortMethod: 'directed' // 'hubsize' + } + }, + edges: { + smooth: { + type: 'cubicBezier', + forceDirection: 'horizontal', // 'vertical', + roundness: 0.4 + } + }, + physics: { + enabled: true + } + }; + + var i, j; + + j = data.nodes.length; + for (i = 0; i < j; i++) + { + data.nodes[i].shape = 'box'; + } + + j = data.edges.length; + for (i = 0; i < j; i++) + { + data.edges[i].length = 60; + data.edges[i].width = 1; + data.edges[i].arrows = 'to'; + data.edges[i].font = { color: 'red' }; + } + + if (this.revision_network === null) + { + this.revision_network = new vis.Network(this.graph_canvas[0], data, options); + } + else + { + this.revision_network.setData (data); + } + } + + App.prototype.resizeGraph = function () + { + if (this.revision_network != null) + { + this.revision_network.setSize (this.graph_container.width(), this.graph_container.height()); + this.revision_network.redraw(); + this.revision_network.fit(); + } + } + return App; })(); - -function show_loc_by_lang_graph (response) +var LocLangApp = (function () { - var loc; - try { loc = $.parseJSON(response); } - catch (e) { loc = null; } - - if (loc == null) + function App (top_container, graph_container, graph_canvas, graph_button, graph_spin, graph_url, graph_title) { - show_alert ('Invalid data received', "lang->line('Error')?>"); + GraphApp.call (this, top_container, graph_container, graph_canvas, graph_button, graph_spin, graph_url, graph_title); + this.tooltip = null; + this.plot_last_point = null; + this.plot_dataset = null; + this.plot_options = null; + return this; } - else + + App.prototype = Object.create (GraphApp.prototype); + App.prototype.constructor = App; + + function show_tooltip(id, x, y, contents) { + var gco = this.graph_container.offset(); + + if (this.tooltip != null) this.tooltip.remove(); + + this.tooltip = $('
' + contents + '
').css( { + position: 'absolute', + display: 'none', + top: y - gco.top, + left: x - gco.left, + border: '1px solid #fdd', + padding: '2px', + 'background-color': '#fee', + 'font-size': '0.8em', + 'font-family': 'inherit', + opacity: 0.80 + }); + this.tooltip.appendTo(this.graph_container).fadeIn(200); + } + + function on_plot_hover (item) + { + if (item) + { + if (this.plot_last_point != item.datapoint) + { + this.plot_last_point = item.datapoint; + show_tooltip.call (this, "code_folder_loc_by_lang_tooltip", item.pageX, item.pageY, item.datapoint[1]); + } + } + else + { + if (this.plot_last_point != null) this.plot_last_point = null; + if (this.tooltip != null) + { + this.tooltip.remove(); + this.tooltip = null; + } + } + } + + App.prototype.renderGraph = function (loc) + { + var self = this; + var blank = []; for (var key in loc) blank.push ([ key, loc[key][1]] ); @@ -322,7 +387,6 @@ function show_loc_by_lang_graph (response) ]; var options = { - series: { stack: true, shadowSize: 0, @@ -348,52 +412,69 @@ function show_loc_by_lang_graph (response) yaxes: { } }; - $("#code_folder_loc_by_lang_graph").width(550).height(400); - $.plot($("#code_folder_loc_by_lang_graph"), dataset, options); + //this.graph_canvas.width(550).height(400); + //$.plot(this.graph_canvas, dataset, options); - var code_folder_loc_by_lang_graph_previous_point = null; + this.plot_dataset = dataset; + this.plot_options = options; + this.plot_last_point = null; - $("#code_folder_loc_by_lang_graph").bind("plothover", function (event, pos, item) { - if (item) - { - if (code_folder_loc_by_lang_graph_previous_point != item.datapoint) - { - code_folder_loc_by_lang_graph_previous_point = item.datapoint; - $("#code_folder_loc_by_lang_graph_tooltip").remove(); - show_tooltip("code_folder_loc_by_lang_graph_tooltip", item.pageX, item.pageY - 20, item.datapoint[1]); - } - } - else - { - $("#code_folder_loc_by_lang_graph_tooltip").remove(); - code_folder_loc_by_lang_graph_previous_point = null; - } + this.graph_canvas.bind("plothover", function (event, pos, item) { + on_plot_hover.call (self, item); }); } - $("#code_folder_loc_by_lang_button").button("enable"); - $("#code_folder_loc_by_lang_spin" ).removeClass ("fa-cog fa-spin"); -} + App.prototype.resizeGraph = function () + { + if (this.plot_dataset != null) + { + this.graph_canvas.width (this.graph_container.width() - 5); + this.graph_canvas.height (this.graph_container.height() - 10); + $.plot(this.graph_canvas, this.plot_dataset, this.plot_options); + } + } + return App; +})(); -function show_loc_by_file_graph (response) + +var LocFileApp = (function () { - var loc; - try { loc = $.parseJSON(response); } - catch (e) { loc = null; } + function App (top_container, graph_container, graph_canvas, graph_button, graph_spin, graph_url, graph_title) + { + GraphApp.call (this, top_container, graph_container, graph_canvas, graph_button, graph_spin, graph_url, graph_title); + this.cf = null; + this.loc_data = null; - if (loc == null) - { - show_alert ('Invalid data received', "lang->line('Error')?>"); - } - else - { - var f = new CodeFlower("#code_folder_loc_by_file_graph", 550, 400); - f.update (loc); + var self = this; + this.graph_container.on ("dialogclose", function (evt) { + if (self.fc != null) + { + self.fc.cleanup (); + self.fc = null; + } + }); + return this; } - $("#code_folder_loc_by_file_button").button("enable"); - $("#code_folder_loc_by_file_spin" ).removeClass ("fa-cog fa-spin"); -} + App.prototype = Object.create (GraphApp.prototype); + App.prototype.constructor = App; + + App.prototype.renderGraph = function (loc) + { + this.loc_data = loc; + } + + App.prototype.resizeGraph = function () + { + if (this.fc == null) + { + this.fc = new CodeFlower ("#code_folder_loc_by_file", this.graph_container.width() - 5, this.graph_container.height() - 10); + if (this.loc_data != null) this.fc.update (this.loc_data); + } + } + return App; +})(); + function render_readme() { @@ -850,49 +931,39 @@ $(function () { return false; }); - $("#code_folder_loc_by_lang_button").button().click (function () { - $("#code_folder_loc_by_lang_button").button("disable"); - $("#code_folder_loc_by_lang_spin").addClass ("fa-cog fa-spin"); - - var ajax_req = $.ajax ({ - url: codepot_merge_path ( - "", - "/graph/enjson_loc_by_lang/id; ?>/"), - context: document.body, - success: show_loc_by_lang_graph, - error: function (xhr, ajaxOptions, thrownError) { - show_alert (xhr.status + ' ' + thrownError, "lang->line('Error')?>"); - $("#code_folder_loc_by_lang_button").button("enable"); - $("#code_folder_loc_by_lang_spin" ).removeClass ("fa-cog fa-spin"); - } - }); - - return false; - }); - - $("#code_folder_loc_by_file_button").button().click (function () { - $("#code_folder_loc_by_file_button").button("disable"); - $("#code_folder_loc_by_file_spin").addClass ("fa-cog fa-spin"); - var ajax_req = $.ajax ({ - url: codepot_merge_path ( - "", - "/graph/enjson_loc_by_file/id; ?>/"), - context: document.body, - success: show_loc_by_file_graph, - error: function (xhr, ajaxOptions, thrownError) { - show_alert (xhr.status + ' ' + thrownError, "lang->line('Error')?>"); - $("#code_folder_loc_by_file_button").button("enable"); - $("#code_folder_loc_by_file_spin" ).removeClass ("fa-cog fa-spin"); - } - }); - - return false; - }); - - - var rev_graph_app = new RevGraphApp (); + var rev_graph_app = new RevGraphApp ( + $(window), + $("#code_folder_revision_graph_container"), + $("#code_folder_revision_graph"), + $("#code_folder_revision_graph_button"), + $("#code_folder_revision_graph_spin"), + codepot_merge_path ("", "/graph/enjson_revision_graph/id; ?>/"), + "lang->line('Revision')?>" + ); rev_graph_app.initWidgets (); + var loc_by_lang_app = new LocLangApp ( + $(window), + $("#code_folder_loc_by_lang_container"), + $("#code_folder_loc_by_lang"), + $("#code_folder_loc_by_lang_button"), + $("#code_folder_loc_by_lang_spin"), + codepot_merge_path ("", "/graph/enjson_loc_by_lang/id; ?>/"), + "LOC-lang->line('Language')?>" + ); + loc_by_lang_app.initWidgets (); + + var loc_by_file_app = new LocFileApp ( + $(window), + $("#code_folder_loc_by_file_container"), + $("#code_folder_loc_by_file"), + $("#code_folder_loc_by_file_button"), + $("#code_folder_loc_by_file_spin"), + codepot_merge_path ("", "/graph/enjson_loc_by_file/id; ?>/"), + "LOC-lang->line('File')?>" + ); + loc_by_file_app.initWidgets (); + $('#code_search_invertedly').button(); $('#code_search_case_insensitively').button(); @@ -1135,8 +1206,13 @@ $this->load->view (
-
-
+
+
+
+ +
+
+