Commit 97161dee938fd00c8f2a0f696a9d0b7791e9ffaa
Committed by
Alessandro Palmeira
1 parent
253ca723
Exists in
staging
and in
42 other branches
[Mezuro] Draft to show_repository view (javascripts pending)
Showing
6 changed files
with
217 additions
and
171 deletions
Show diff stats
plugins/mezuro/controllers/profile/mezuro_plugin_repository_controller.rb
| @@ -2,7 +2,7 @@ class MezuroPluginRepositoryController < MezuroPluginProfileController | @@ -2,7 +2,7 @@ class MezuroPluginRepositoryController < MezuroPluginProfileController | ||
| 2 | 2 | ||
| 3 | append_view_path File.join(File.dirname(__FILE__) + '/../../views') | 3 | append_view_path File.join(File.dirname(__FILE__) + '/../../views') |
| 4 | 4 | ||
| 5 | - def new_repository | 5 | + def new |
| 6 | @project_content = profile.articles.find(params[:id]) | 6 | @project_content = profile.articles.find(params[:id]) |
| 7 | 7 | ||
| 8 | @repository_types = Kalibro::Repository.repository_types | 8 | @repository_types = Kalibro::Repository.repository_types |
| @@ -18,26 +18,39 @@ class MezuroPluginRepositoryController < MezuroPluginProfileController | @@ -18,26 +18,39 @@ class MezuroPluginRepositoryController < MezuroPluginProfileController | ||
| 18 | end | 18 | end |
| 19 | end | 19 | end |
| 20 | 20 | ||
| 21 | - def create_repository | 21 | + def create |
| 22 | project_content = profile.articles.find(params[:id]) | 22 | project_content = profile.articles.find(params[:id]) |
| 23 | - project_content_name = project_content.name | ||
| 24 | 23 | ||
| 25 | repository = Kalibro::Repository.new( params[:repository] ) | 24 | repository = Kalibro::Repository.new( params[:repository] ) |
| 26 | repository.save(project_content.project_id) | 25 | repository.save(project_content.project_id) |
| 27 | 26 | ||
| 28 | if( repository.errors.empty? ) | 27 | if( repository.errors.empty? ) |
| 29 | - redirect_to "/#{profile.identifier}/#{project_content_name.downcase.gsub(/\s/, '-')}" | 28 | + redirect_to "/#{profile.identifier}/#{project_content.name.downcase.gsub(/\s/, '-')}" |
| 30 | else | 29 | else |
| 31 | redirect_to_error_page repository.errors[0].message | 30 | redirect_to_error_page repository.errors[0].message |
| 32 | end | 31 | end |
| 33 | end | 32 | end |
| 34 | 33 | ||
| 35 | - def show_repository | 34 | + def show |
| 36 | project_content = profile.articles.find(params[:id]) | 35 | project_content = profile.articles.find(params[:id]) |
| 37 | @project_name = project_content.name | 36 | @project_name = project_content.name |
| 38 | @repository = project_content.repositories.select{ |repository| repository.id == params[:repository_id].to_s }.first | 37 | @repository = project_content.repositories.select{ |repository| repository.id == params[:repository_id].to_s }.first |
| 39 | @configuration_name = Kalibro::Configuration.find(@repository.configuration_id).name | 38 | @configuration_name = Kalibro::Configuration.find(@repository.configuration_id).name |
| 39 | + @processing = processing(@repository.id) | ||
| 40 | end | 40 | end |
| 41 | + | ||
| 42 | + def destroy | ||
| 43 | + project_content = profile.articles.find(params[:id]) | ||
| 44 | + repository = project_content.repositories.select{ |repository| repository.id == params[:repository_id].to_s }.first | ||
| 45 | + repository.destroy | ||
| 46 | + if( repository.errors.empty? ) | ||
| 47 | + redirect_to "/#{profile.identifier}/#{project_content.name.downcase.gsub(/\s/, '-')}" | ||
| 48 | + else | ||
| 49 | + redirect_to_error_page repository.errors[0].message | ||
| 50 | + end | ||
| 51 | + end | ||
| 52 | + | ||
| 53 | + private | ||
| 41 | 54 | ||
| 42 | def processing(repository_id) | 55 | def processing(repository_id) |
| 43 | begin | 56 | begin |
plugins/mezuro/lib/kalibro/repository.rb
| @@ -25,6 +25,7 @@ class Kalibro::Repository < Kalibro::Model | @@ -25,6 +25,7 @@ class Kalibro::Repository < Kalibro::Model | ||
| 25 | def save(project_id) | 25 | def save(project_id) |
| 26 | begin | 26 | begin |
| 27 | self.id = self.class.request(:save_repository, {:repository => self.to_hash, :project_id => project_id})[:repository_id] | 27 | self.id = self.class.request(:save_repository, {:repository => self.to_hash, :project_id => project_id})[:repository_id] |
| 28 | + process_repository | ||
| 28 | true | 29 | true |
| 29 | rescue Exception => exception | 30 | rescue Exception => exception |
| 30 | add_error exception | 31 | add_error exception |
| @@ -0,0 +1,135 @@ | @@ -0,0 +1,135 @@ | ||
| 1 | +var processingTree = false; | ||
| 2 | +var metricName; | ||
| 3 | +jQuery(function (){ | ||
| 4 | + jQuery('.source-tree-link').live("click", reloadModule); | ||
| 5 | + jQuery('[show-metric-history]').live("click", display_metric_history); | ||
| 6 | + jQuery('[show-grade-history]').live("click", display_grade_history); | ||
| 7 | + jQuery('#project_date_submit').live("click", reloadProjectWithDate); | ||
| 8 | + showLoadingProcess(true); | ||
| 9 | + showProcessing(); | ||
| 10 | +}); | ||
| 11 | + | ||
| 12 | +function showProcessing() { | ||
| 13 | + callAction('processing', 'processing_state', {}, showProcessingFor); | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +function display_metric_history() { | ||
| 17 | + var module_name = jQuery(this).attr('data-module-name'); | ||
| 18 | + var metric_name = jQuery(this).attr('show-metric-history'); | ||
| 19 | + toggle_mezuro("." + metric_name); | ||
| 20 | + metricName = metric_name; | ||
| 21 | + callAction('module', 'module_metrics_history', {module_id: module_id, module_result_id: module_result_id}, show_metrics); | ||
| 22 | + return false; | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +function display_grade_history() { | ||
| 26 | + var module_name = jQuery(this).attr('data-module-name'); | ||
| 27 | + toggle_mezuro("#historical-grade"); | ||
| 28 | + callAction('module', 'module_grade_history', {module_name: module_name}, show_grades); | ||
| 29 | + return false; | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +function show_metrics(content) { | ||
| 33 | + jQuery('#historical-' + metricName).html(content); | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +function show_grades(content) { | ||
| 37 | + jQuery('#historical-grade').html(content); | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +function toggle_mezuro(element){ | ||
| 41 | + jQuery(element).toggle(); | ||
| 42 | + return false; | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +function reloadModule(){ | ||
| 46 | + var results_root_id = jQuery(this).attr('results_root_id'); | ||
| 47 | + showLoadingProcess(false); | ||
| 48 | + processingTree = true; | ||
| 49 | + callAction('module_result', 'project_tree', {results_root_id: results_root_id }, showProjectTree); | ||
| 50 | + callAction('module_result', 'module_result', {results_root_id: results_root_id}, showModuleResult); | ||
| 51 | + return false; | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +function reloadProjectWithDate(date){ | ||
| 55 | + reloadProject(date + "T00:00:00+00:00"); | ||
| 56 | + return false; | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +function reloadProject(date){ | ||
| 60 | + showLoadingProcess(true); | ||
| 61 | + | ||
| 62 | + callAction('processing', 'processing', {date: date}, showProjectResult); | ||
| 63 | + callAction('module_result', 'project_tree', {date: date}, showProjectTree); | ||
| 64 | + callAction('module_result', 'module_result', {date: date}, showModuleResult); | ||
| 65 | +} | ||
| 66 | + | ||
| 67 | +function showProcessingFor(state){ | ||
| 68 | + if (state == 'ERROR') { | ||
| 69 | + jQuery('#project-state').html('<div style="color:Red">ERROR</div>'); | ||
| 70 | + callAction('processing', 'processing_error', {}, showProcessing); | ||
| 71 | + } | ||
| 72 | + else if (state == 'READY') { | ||
| 73 | + jQuery('#msg-time').html(''); | ||
| 74 | + jQuery('#processing-state').html('<div style="color:Green">READY</div>'); | ||
| 75 | + callAction('processing', 'processing', {}, showProcessing); | ||
| 76 | + callAction('module_result','project_tree', {}, showProjectTree); | ||
| 77 | + var module_result_id = jQuery("#processing").attr('results_root_id'); | ||
| 78 | + callAction('module_result', 'module_result', {module_result_id: module_result_id}, showModuleResult); | ||
| 79 | + } | ||
| 80 | + else if (state.endsWith("ING")) { | ||
| 81 | + jQuery('#processing-state').html('<div style="color:DarkGoldenRod">'+ state +'</div>'); | ||
| 82 | + jQuery('#msg-time').html("The project analysis may take long. <br/> You'll receive an e-mail when it's ready!"); | ||
| 83 | + showProjectContentAfter(20); | ||
| 84 | + } | ||
| 85 | +} | ||
| 86 | + | ||
| 87 | +function showProjectContentAfter(seconds){ | ||
| 88 | + if (seconds > 0){ | ||
| 89 | + setTimeout(function() { showProjectContentAfter(seconds - 10);}, 10000); | ||
| 90 | + } else { | ||
| 91 | + showProjectContent(); | ||
| 92 | + } | ||
| 93 | +} | ||
| 94 | + | ||
| 95 | +function showProjectResult(content) { | ||
| 96 | + jQuery('#processing').html(content); | ||
| 97 | +} | ||
| 98 | + | ||
| 99 | +function showProjectTree(content){ | ||
| 100 | + processingTree = false; | ||
| 101 | + jQuery('#project-tree').html(content); | ||
| 102 | + return false; | ||
| 103 | +} | ||
| 104 | + | ||
| 105 | +function showModuleResult(content){ | ||
| 106 | + if (processingTree != true){ | ||
| 107 | + jQuery('#module-result').html(content); | ||
| 108 | + } | ||
| 109 | + return false; | ||
| 110 | +} | ||
| 111 | + | ||
| 112 | +function callAction(controller, action, params, callback){ | ||
| 113 | + var profile = projectContentData('profile'); | ||
| 114 | + var content = projectContentData('content'); | ||
| 115 | + var endpoint = '/profile/' + profile + '/plugin/mezuro/' + controller + '/' + action + '/' + content; | ||
| 116 | + jQuery.get(endpoint, params, callback); | ||
| 117 | +} | ||
| 118 | + | ||
| 119 | +function projectContentData(data){ | ||
| 120 | + return jQuery('#processing').attr('data-' + data); | ||
| 121 | +} | ||
| 122 | + | ||
| 123 | +function showLoadingProcess(firstLoad){ | ||
| 124 | + if(firstLoad) | ||
| 125 | + showProjectResult("<img src='/images/loading-small.gif'/>"); | ||
| 126 | + | ||
| 127 | + showProjectTree("<img src='/images/loading-small.gif'/>"); | ||
| 128 | + showModuleResult("<img src='/images/loading-small.gif'/>"); | ||
| 129 | +} | ||
| 130 | + | ||
| 131 | +function sourceNodeToggle(id){ | ||
| 132 | + var suffixes = ['_hidden', '_plus', '_minus']; | ||
| 133 | + for (var i in suffixes) | ||
| 134 | + jQuery('#' + id + suffixes[i]).toggle(); | ||
| 135 | +} |
plugins/mezuro/public/javascripts/project_content.js
| @@ -1,135 +0,0 @@ | @@ -1,135 +0,0 @@ | ||
| 1 | -var processingTree = false; | ||
| 2 | -var metricName; | ||
| 3 | -jQuery(function (){ | ||
| 4 | - jQuery('.source-tree-link').live("click", reloadModule); | ||
| 5 | - jQuery('[show-metric-history]').live("click", display_metric_history); | ||
| 6 | - jQuery('[show-grade-history]').live("click", display_grade_history); | ||
| 7 | - jQuery('#project_date_submit').live("click", reloadProjectWithDate); | ||
| 8 | - showLoadingProcess(true); | ||
| 9 | - showProjectContent(); | ||
| 10 | -}); | ||
| 11 | - | ||
| 12 | -function showProjectContent() { | ||
| 13 | - callAction('project', 'project_state', {}, showProjectContentFor); | ||
| 14 | -} | ||
| 15 | - | ||
| 16 | -function display_metric_history() { | ||
| 17 | - var module_name = jQuery(this).attr('data-module-name'); | ||
| 18 | - var metric_name = jQuery(this).attr('show-metric-history'); | ||
| 19 | - toggle_mezuro("." + metric_name); | ||
| 20 | - metricName = metric_name; | ||
| 21 | - callAction('module', 'module_metrics_history', {module_id: module_id, module_result_id: module_result_id}, show_metrics); | ||
| 22 | - return false; | ||
| 23 | -} | ||
| 24 | - | ||
| 25 | -function display_grade_history() { | ||
| 26 | - var module_name = jQuery(this).attr('data-module-name'); | ||
| 27 | - toggle_mezuro("#historical-grade"); | ||
| 28 | - callAction('module', 'module_grade_history', {module_name: module_name}, show_grades); | ||
| 29 | - return false; | ||
| 30 | -} | ||
| 31 | - | ||
| 32 | -function show_metrics(content) { | ||
| 33 | - jQuery('#historical-' + metricName).html(content); | ||
| 34 | -} | ||
| 35 | - | ||
| 36 | -function show_grades(content) { | ||
| 37 | - jQuery('#historical-grade').html(content); | ||
| 38 | -} | ||
| 39 | - | ||
| 40 | -function toggle_mezuro(element){ | ||
| 41 | - jQuery(element).toggle(); | ||
| 42 | - return false; | ||
| 43 | -} | ||
| 44 | - | ||
| 45 | -function reloadModule(){ | ||
| 46 | - var module_name = jQuery(this).attr('data-module-name'); | ||
| 47 | - showLoadingProcess(false); | ||
| 48 | - processingTree = true; | ||
| 49 | - callAction('project', 'project_tree', {module_name: module_name }, showProjectTree); | ||
| 50 | - callAction('module', 'module_result', {module_name: module_name}, showModuleResult); | ||
| 51 | - return false; | ||
| 52 | -} | ||
| 53 | - | ||
| 54 | -function reloadProjectWithDate(date){ | ||
| 55 | - reloadProject(date + "T00:00:00+00:00"); | ||
| 56 | - return false; | ||
| 57 | -} | ||
| 58 | - | ||
| 59 | -function reloadProject(date){ | ||
| 60 | - showLoadingProcess(true); | ||
| 61 | - | ||
| 62 | - callAction('project', 'project_result', {date: date}, showProjectResult); | ||
| 63 | - callAction('project', 'project_tree', {date: date}, showProjectTree); | ||
| 64 | - callAction('module', 'module_result', {date: date}, showModuleResult); | ||
| 65 | -} | ||
| 66 | - | ||
| 67 | -function showProjectContentFor(state){ | ||
| 68 | - if (state == 'ERROR') { | ||
| 69 | - jQuery('#project-state').html('<div style="color:Red">ERROR</div>'); | ||
| 70 | - callAction('project', 'project_error', {}, showProjectResult); | ||
| 71 | - } | ||
| 72 | - else if (state == 'READY') { | ||
| 73 | - jQuery('#msg-time').html(''); | ||
| 74 | - jQuery('#project-state').html('<div style="color:Green">READY</div>'); | ||
| 75 | - callAction('project', 'project_result', {}, showProjectResult); | ||
| 76 | - callAction('project','project_tree', {}, showProjectTree); | ||
| 77 | - var project_name = jQuery("#project-result").attr('data-project-name'); | ||
| 78 | - callAction('module', 'module_result', {module_name: project_name}, showModuleResult); | ||
| 79 | - } | ||
| 80 | - else if (state.endsWith("ING")) { | ||
| 81 | - jQuery('#project-state').html('<div style="color:DarkGoldenRod">'+ state +'</div>'); | ||
| 82 | - jQuery('#msg-time').html("The project analysis may take long. <br/> You'll receive an e-mail when it's ready!"); | ||
| 83 | - showProjectContentAfter(20); | ||
| 84 | - } | ||
| 85 | -} | ||
| 86 | - | ||
| 87 | -function showProjectContentAfter(seconds){ | ||
| 88 | - if (seconds > 0){ | ||
| 89 | - setTimeout(function() { showProjectContentAfter(seconds - 10);}, 10000); | ||
| 90 | - } else { | ||
| 91 | - showProjectContent(); | ||
| 92 | - } | ||
| 93 | -} | ||
| 94 | - | ||
| 95 | -function showProjectResult(content) { | ||
| 96 | - jQuery('#project-result').html(content); | ||
| 97 | -} | ||
| 98 | - | ||
| 99 | -function showProjectTree(content){ | ||
| 100 | - processingTree = false; | ||
| 101 | - jQuery('#project-tree').html(content); | ||
| 102 | - return false; | ||
| 103 | -} | ||
| 104 | - | ||
| 105 | -function showModuleResult(content){ | ||
| 106 | - if (processingTree != true){ | ||
| 107 | - jQuery('#module-result').html(content); | ||
| 108 | - } | ||
| 109 | - return false; | ||
| 110 | -} | ||
| 111 | - | ||
| 112 | -function callAction(controller, action, params, callback){ | ||
| 113 | - var profile = projectContentData('profile'); | ||
| 114 | - var content = projectContentData('content'); | ||
| 115 | - var endpoint = '/profile/' + profile + '/plugin/mezuro/' + controller + '/' + action + '/' + content; | ||
| 116 | - jQuery.get(endpoint, params, callback); | ||
| 117 | -} | ||
| 118 | - | ||
| 119 | -function projectContentData(data){ | ||
| 120 | - return jQuery('#project-result').attr('data-' + data); | ||
| 121 | -} | ||
| 122 | - | ||
| 123 | -function showLoadingProcess(firstLoad){ | ||
| 124 | - if(firstLoad) | ||
| 125 | - showProjectResult("<img src='/images/loading-small.gif'/>"); | ||
| 126 | - | ||
| 127 | - showProjectTree("<img src='/images/loading-small.gif'/>"); | ||
| 128 | - showModuleResult("<img src='/images/loading-small.gif'/>"); | ||
| 129 | -} | ||
| 130 | - | ||
| 131 | -function sourceNodeToggle(id){ | ||
| 132 | - var suffixes = ['_hidden', '_plus', '_minus']; | ||
| 133 | - for (var i in suffixes) | ||
| 134 | - jQuery('#' + id + suffixes[i]).toggle(); | ||
| 135 | -} |
plugins/mezuro/views/content_viewer/show_project.rhtml
| @@ -18,21 +18,29 @@ | @@ -18,21 +18,29 @@ | ||
| 18 | <td><%= @project.description %></td> | 18 | <td><%= @project.description %></td> |
| 19 | </tr> | 19 | </tr> |
| 20 | </table> | 20 | </table> |
| 21 | - | ||
| 22 | - <%= _('Repositories') %> | 21 | + <br/> |
| 22 | + <h5><%= _('Repositories') %></h5> | ||
| 23 | + <table> | ||
| 23 | <% @page.repositories.each do |repository| %> | 24 | <% @page.repositories.each do |repository| %> |
| 24 | - <%= repository.name %> | ||
| 25 | - <%= link_to repository.name, :controller => "mezuro_plugin_repository", | 25 | + <tr> |
| 26 | + <td><%= link_to repository.name, :controller => "mezuro_plugin_repository", | ||
| 26 | :profile => @page.profile.identifier, | 27 | :profile => @page.profile.identifier, |
| 27 | - :action => "show_repository", | 28 | + :action => "show", |
| 28 | :id => @page.id, | 29 | :id => @page.id, |
| 29 | - :repository_id => repository.id %><br/> | 30 | + :repository_id => repository.id %></td> |
| 31 | + <td><%= link_to "#{image_tag ('/plugins/mezuro/images/minus.png')}", :controller => "mezuro_plugin_repository", | ||
| 32 | + :profile => @page.profile.identifier, | ||
| 33 | + :action => "destroy", | ||
| 34 | + :id => @page.id, | ||
| 35 | + :repository_id => repository.id %></td> | ||
| 36 | + </tr> | ||
| 30 | <% end %> | 37 | <% end %> |
| 38 | + </table> | ||
| 31 | 39 | ||
| 32 | <br> | 40 | <br> |
| 33 | <%= link_to "#{image_tag ('/plugins/mezuro/images/plus.png')}Add Repository", :controller => "mezuro_plugin_repository", | 41 | <%= link_to "#{image_tag ('/plugins/mezuro/images/plus.png')}Add Repository", :controller => "mezuro_plugin_repository", |
| 34 | :profile => @page.profile.identifier, | 42 | :profile => @page.profile.identifier, |
| 35 | - :action => "new_repository", | 43 | + :action => "new", |
| 36 | :id => @page.id %><br/> | 44 | :id => @page.id %><br/> |
| 37 | 45 | ||
| 38 | <% end %> | 46 | <% end %> |
plugins/mezuro/views/mezuro_plugin_repository/show_repository.html.erb
| 1 | - <p> | ||
| 2 | - <%= "Project Name: " + @project_name %> | ||
| 3 | - </p> | ||
| 4 | - <p> | ||
| 5 | - <%= "Name: " + @repository.name %> | ||
| 6 | - </p> | ||
| 7 | - <p> | ||
| 8 | - <%= "Description: " + @repository.description %> | ||
| 9 | - </p> | ||
| 10 | - <p> | ||
| 11 | - <%= "License: " + @repository.license %> | ||
| 12 | - </p> | ||
| 13 | - <p> | ||
| 14 | - <%= "Process Period: " + @repository.process_period %> | ||
| 15 | - </p> | ||
| 16 | - <p> | ||
| 17 | - <%= "Type: " + @repository.type %> | ||
| 18 | - </p> | ||
| 19 | - <p> | ||
| 20 | - <%= "Address: " + @repository.address %> | ||
| 21 | - </p> | ||
| 22 | - <p> | ||
| 23 | - <%= "Configuration: " + @configuration_name %> | ||
| 24 | - </p> | 1 | +<script src="/plugins/mezuro/javascripts/processing.js" type="text/javascript"></script> |
| 2 | +<h3><%= @project_name %></h3> | ||
| 3 | + | ||
| 4 | +<table> | ||
| 5 | + <tr> | ||
| 6 | + <td><%= _('Name') %></td> | ||
| 7 | + <td><%= @repository.name %></td> | ||
| 8 | + </tr> | ||
| 9 | + <tr> | ||
| 10 | + <td><%= _('Description') %></td> | ||
| 11 | + <td><%= @repository.description %></td> | ||
| 12 | + </tr> | ||
| 13 | + <tr> | ||
| 14 | + <td><%= _('License') %></td> | ||
| 15 | + <td><%= @repository.license %></td> | ||
| 16 | + </tr> | ||
| 17 | + <tr> | ||
| 18 | + <td><%= _('Process Period') %></td> | ||
| 19 | + <td><%= MezuroPlugin::Helpers::ContentViewerHelper.get_periodicity_option(@repository.process_period) %></td> | ||
| 20 | + </tr> | ||
| 21 | + <tr> | ||
| 22 | + <td><%= _('Type') %></td> | ||
| 23 | + <td><%= @repository.type %></td> | ||
| 24 | + </tr> | ||
| 25 | + <tr> | ||
| 26 | + <td><%= _('Address') %></td> | ||
| 27 | + <td><%= @repository.address %></td> | ||
| 28 | + </tr> | ||
| 29 | + <tr> | ||
| 30 | + <td><%= _('Configuration') %></td> | ||
| 31 | + <td><%= @configuration_name %></td> | ||
| 32 | + </tr> | ||
| 33 | + <tr> | ||
| 34 | + <td><%= _('Status')%></td> | ||
| 35 | + <td> | ||
| 36 | + <div id="processing-state" style="color:DarkGoldenRod"><%= @processing.state %></div> | ||
| 37 | + <div id="msg-time"></div> | ||
| 38 | + </td> | ||
| 39 | + </tr> | ||
| 40 | +</table> | ||
| 41 | + | ||
| 42 | + | ||
| 43 | +<br /> | ||
| 44 | + | ||
| 45 | +<div id="processing" data-profile="<%= @page.profile.identifier %>" data-content="<%= @page.id %>" | ||
| 46 | + data-repository-id="<%= @repository.id %>"></div> | ||
| 47 | +<div id="project-tree"></div> | ||
| 48 | +<div id="module-result"></div> |