]> source.dussan.org Git - archiva.git/commitdiff
start ui to add/delete artifact metadata properties
authorOlivier Lamy <olamy@apache.org>
Mon, 26 Mar 2012 09:53:36 +0000 (09:53 +0000)
committerOlivier Lamy <olamy@apache.org>
Mon, 26 Mar 2012 09:53:36 +0000 (09:53 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1305280 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/search.js
archiva-modules/archiva-web/archiva-webapp-js/src/main/webapp/js/archiva/templates/search.html

index 42a30f7a85605fa012ce619164ff6ccb50986c64..ffc5fc19152480de8262c54bb0fd004b53e59311 100644 (file)
@@ -149,6 +149,7 @@ $(function() {
     artifactVersionDetailViewModel.display();
   }
 
+
   ArtifactVersionDetailViewModel=function(groupId,artifactId,version){
     var mainContent = $("#main-content");
     var self=this;
@@ -156,7 +157,7 @@ $(function() {
     this.artifactId=artifactId;
     this.version=version;
     this.projectVersionMetadata=null;
-
+    this.entries=ko.observableArray([]);
 
     displayGroupId=function(groupId){
       displayGroupDetail(groupId,null);
@@ -244,6 +245,29 @@ $(function() {
                   }
                 }
 
+                if ($(e.target).attr("href")=="#artifact-details-metadatas-content") {
+                  $.log("artifact metadata");
+                  var metadatasContentDiv=mainContent.find("#artifact-details-metadatas-content" );
+                  //if( $.trim(metadatasContentDiv.html()).length<1){
+                    //metadatasContentDiv.html(mediumSpinnerImg());
+                    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) {
+                        self.entries([new MetadataEntry("foo","bar")]);
+                      }
+                    });
+                  //}
+                }
+
+
               });
             }
           });
@@ -267,6 +291,69 @@ $(function() {
       var artifactVersionDetailViewModel = new ArtifactVersionDetailViewModel (groupId,artifactId,version)
       artifactVersionDetailViewModel.display();
     }
+
+
+    addProperty=function(){
+      self.entries.push(new MetadataEntry("","",true));
+    }
+
+    deleteProperty=function(entry){
+
+      self.entries.remove(entry);
+    }
+
+    saveProperty=function(entry){
+      var metadatasContentDiv=mainContent.find("#artifact-details-metadatas-content" );
+      //if( $.trim(metadatasContentDiv.html()).length<1){
+        //metadatasContentDiv.html(mediumSpinnerImg());
+        var metadatasUrl="restServices/archivaServices/browseService/metadatas/"+encodeURIComponent(groupId);
+        metadatasUrl+="/"+encodeURIComponent(artifactId);
+        metadatasUrl+="/"+encodeURIComponent(version);
+        metadatasUrl+="/"+encodeURIComponent(entry.key());
+        metadatasUrl+="/"+encodeURIComponent(entry.value());
+        var selectedRepo=getSelectedBrowsingRepository();
+        if (selectedRepo){
+          metadatasUrl+="?repositoryId="+encodeURIComponent(selectedRepo);
+        }
+        $.ajax(metadatasUrl, {
+          type: "PUT",
+          dataType: 'json',
+          success: function(data) {
+            displaySuccessMessage( $.i18n.prop("artifact.metadata.added"));
+            entry.modified(false);
+          }
+        });
+    }
+
+
+    this.gridMetatadasViewModel = new ko.simpleGrid.viewModel({
+      data: self.entries,
+      columns: [
+        {
+          headerText: $.i18n.prop('browse.artifact.metadata.key'),
+          rowText: "key",
+          id: "key"
+        },
+        {
+          headerText: $.i18n.prop('browse.artifact.metadata.value'),
+          rowText: "value",
+          id: "value"
+        }
+      ],
+      pageSize: 10
+    });
+
+  }
+
+
+  MetadataEntry=function(key,value,editable){
+    var self=this;
+    this.key=ko.observable(key);
+    this.key.subscribe(function(newValue){self.modified(true)});
+    this.value=ko.observable(value);
+    this.value.subscribe(function(newValue){self.modified(true)});
+    this.editable=ko.observable(editable);
+    this.modified=ko.observable(false)
   }
 
   TreeEntry=function(artifact,childs){
index 2bfa8a9315ebeaa7759e9a31bbdbeb47c5a59b44..35ff4f119484f5dff817ed2f1438cfa5a602675e 100644 (file)
       </div>
 
       <div id="artifact-details-metadatas-content" class="tab-pane">
-        metadatas
+        <table class="table table-striped table-bordered" id="artifact-details-metadatas-content-table"
+               data-bind="simpleGrid: gridMetatadasViewModel,simpleGridTemplate:'artifact_metadata_properties_tmpl',pageLinksId:'artifactMetadata_Pagination'">
+
+        </table>
+        <div id="artifactMetadata_Pagination"></div>
+        <a href="#" class="btn btn-primary" data-bind="click: addProperty">${$.i18n.prop('browse.artifact.metadatas.add')}</a>
       </div>
 
     </div>
       </li>
     {{/each}}
     </ul>
+</script>
+
+<script id="artifact_metadata_properties_tmpl" type="text/html">
+    <thead>
+      <tr>
+        {{each(i, columnDefinition) columns}}
+          <th title="${columnDefinition.title }">${columnDefinition.headerText }</th>
+        {{/each}}
+        <th title="${$.i18n.prop('browse.artifact.metadatas.delete')}">${$.i18n.prop('browse.artifact.metadatas.delete')}</th>
+        <th title="${$.i18n.prop('browse.artifact.metadatas.delete')}">${$.i18n.prop('browse.artifact.metadatas.save')}</th>
+      </tr>
+
+    </thead>
+    <tbody>
+    {{each(i, row) itemsOnCurrentPage()}}
+      <tr>
+        {{each(j, columnDefinition) columns}}
+          {{if row.editable}}
+            <td><input type="text" data-bind="value: row[columnDefinition.rowText]"/></td>
+          {{else}}
+            <td>${ typeof columnDefinition.rowText == 'function' ? columnDefinition.rowText(row) : row[columnDefinition.rowText] }</td>
+          {{/if}}
+        {{/each}}
+        <td><a href="#" class="btn btn-danger" data-bind="click: function(){deleteProperty(row)}">${$.i18n.prop('browse.artifact.metadatas.delete')}</a></td>
+        <td>
+          {{if row.modified}}
+            <a href="#" class="btn btn-warning" data-bind="click: function(){saveProperty(row)}">${$.i18n.prop('browse.artifact.metadatas.save')}</a>
+          {{/if}}
+        </td>
+      </tr>
+    {{/each}}
+    </tbody>
 </script>
\ No newline at end of file