[MRM-1620] add a tab to browse artifact content in artifact detail view

add javascript architecture.

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1339394 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2012-05-16 22:16:49 +00:00
parent 34cb0a7608
commit 7633fc863e
2 changed files with 98 additions and 23 deletions

View File

@ -151,7 +151,7 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
}
ArtifactVersionDetailViewModel=function(groupId,artifactId,version){
ArtifactVersionDetailViewModel=function(groupId,artifactId,version,repositoryId){
var mainContent = $("#main-content");
var self=this;
this.groupId=groupId;
@ -159,6 +159,7 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
this.version=version;
this.projectVersionMetadata=null;
this.entries=ko.observableArray([]);
this.repositoryId=repositoryId;
displayGroupId=function(groupId){
displayGroupDetail(groupId,null);
@ -250,28 +251,40 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
if ($(e.target).attr("href")=="#artifact-details-metadatas-content") {
$.log("artifact metadata");
var metadatasContentDiv=mainContent.find("#artifact-details-metadatas-content" );
var metadatasUrl="restServices/archivaServices/browseService/metadatas/"+encodeURIComponent(groupId);
metadatasUrl+="/"+encodeURIComponent(artifactId);
metadatasUrl+="/"+encodeURIComponent(version);
var selectedRepo=getSelectedBrowsingRepository();
if (selectedRepo){
metadatasUrl+="?repositoryId="+encodeURIComponent(selectedRepo);
var metadatasUrl="restServices/archivaServices/browseService/metadatas/"+encodeURIComponent(groupId);
metadatasUrl+="/"+encodeURIComponent(artifactId);
metadatasUrl+="/"+encodeURIComponent(version);
var selectedRepo=getSelectedBrowsingRepository();
if (selectedRepo){
metadatasUrl+="?repositoryId="+encodeURIComponent(selectedRepo);
}
$.ajax(metadatasUrl, {
type: "GET",
dataType: 'json',
success: function(data) {
var entries= $.map(data,function(e,i){
return new MetadataEntry( e.key, e.value,false);
});
self.entries(entries);
}
$.ajax(metadatasUrl, {
type: "GET",
dataType: 'json',
success: function(data) {
var entries= $.map(data,function(e,i){
return new MetadataEntry( e.key, e.value,false);
});
self.entries(entries);
}
});
});
}
if ($(e.target).attr("href")=="#artifact-details-pom-data-content") {
$.log("pom content");
if ($(e.target).attr("href")=="#artifact-details-file-content") {
$.log("file content:"+self.groupId+":"+self.artifactId+":"+self.version);
var entriesUrl = "restServices/archivaServices/browseService/artifactContentEntries/"+encodeURIComponent(self.groupId);
entriesUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(self.version);
entriesUrl+="?repositoryId="+encodeURIComponent(self.repositoryId);
$.ajax(entriesUrl,{
type: "GET",
dataType: 'json',
success: function(data) {
var artifactContentEntryViewModel=
new ArtifactContentEntryViewModel(self.groupId,self.artifactId,self.version,mapArtifactContentEntries(data));
$("#artifact-details-file-content").html($("#artifact_content_main_tmpl").tmpl());
ko.applyBindings(artifactContentEntryViewModel,mainContent.find("#artifact_file_content_div").get(0));
}
});
}
@ -373,6 +386,53 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
}
ArtifactContentEntry=function(name,file,depth){
this.name=name;
this.file=file;
this.depth=depth;
}
mapArtifactContentEntries=function(data){
if(data==null){
return [];
}
if ( $.isArray(data)){
return $.map(data,function(e){
return new ArtifactContentEntry(e.name,e.file,e.depth);
})
}
return new ArtifactContentEntry(data.name,data.file,data.depth);
}
ArtifactContentEntryViewModel=function(groupId,artifactId,version,artifactContentEntries){
var self=this;
this.groupId=groupId;
this.artifactId=artifactId;
this.version=version;
this.artifactContentEntries=ko.observableArray(artifactContentEntries);
$.log("size:"+this.artifactContentEntries().length);
entries=function(){
return self.artifactContentEntries;
}
displayPath=function(artifactContentEntry){
$.log("ArtifactContentEntryViewModel#displayPath:"+artifactContentEntry.name);
var entriesUrl = "restServices/archivaServices/browseService/artifactContentEntries/"+encodeURIComponent(self.groupId);
entriesUrl+="/"+encodeURIComponent(self.artifactId)+"/"+encodeURIComponent(self.version);
entriesUrl+="?repositoryId="+encodeURIComponent(getSelectedBrowsingRepository());
entriesUrl+="&p="+encodeURIComponent(artifactContentEntry.name);
$.ajax(entriesUrl,{
type: "GET",
dataType: 'json',
success: function(data) {
self.artifactContentEntries(mapArtifactContentEntries(data));
}
});
}
}
MetadataEntry=function(key,value,editable){
var self=this;
@ -1172,7 +1232,7 @@ define("search",["jquery","i18n","jquery.tmpl","choosen","order!knockout","knock
dataType: 'json',
success: function(data) {
mainContent.find("#selected_repository" ).html($("#selected_repository_tmpl" ).tmpl({repositories:data,selected:repositoryId}));
var artifactVersionDetailViewModel=new ArtifactVersionDetailViewModel(groupId,artifactId,version);
var artifactVersionDetailViewModel=new ArtifactVersionDetailViewModel(groupId,artifactId,version,repositoryId);
artifactVersionDetailViewModel.display(true);
}
});

View File

@ -433,7 +433,7 @@
<a data-toggle="tab" href="#artifact-details-dependency-tree-content">${$.i18n.prop('artifact.detail.tab.header.dependency.tree')}</a>
</li>
<li>
<a data-toggle="tab" href="#artifact-details-pom-data-content">${$.i18n.prop('artifact.detail.tab.header.pom.content')}</a>
<a data-toggle="tab" href="#artifact-details-file-content">${$.i18n.prop('artifact.detail.tab.header.file.content')}</a>
</li>
<li>
<a data-toggle="tab" href="#artifact-details-used-by-content">${$.i18n.prop('artifact.detail.tab.header.used.by')}</a>
@ -628,7 +628,7 @@
<div id="artifact-details-dependency-tree-content" class="tab-pane">
</div>
<div id="artifact-details-pom-data-content" class="tab-pane">
<div id="artifact-details-file-content" class="tab-pane">
</div>
<div id="artifact-details-used-by-content" class="tab-pane"></div>
@ -789,3 +789,18 @@
{{/each}}
</tbody>
</script>
<script id="artifact_content_main_tmpl" type="text/html">
<div id="artifact_file_content_div" data-bind='template:{name:"artifact_content_tmpl"}'>
</div>
</script>
<script id="artifact_content_tmpl" type="text/html">
<ul>
{{each(i, artifactContentEntry) artifactContentEntries()}}
<li data-bind="css: { 'browse-list': artifactContentEntry.file==false }">
<a href="#" data-bind="click: function(){displayPath(artifactContentEntry)}">${artifactContentEntry.name}</a>
</li>
{{/each}}
</ul>
</script>