You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by sk...@apache.org on 2013/05/25 17:43:05 UTC
svn commit: r1486339 [3/4] - in
/archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp:
./ src/main/webapp/ src/main/webapp/js/ src/main/webapp/js/archiva/
src/main/webapp/js/archiva/admin/features/10networkproxies/ src/main/weba...
Added: archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js?rev=1486339&view=auto
==============================================================================
--- archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js (added)
+++ archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js Sat May 25 15:43:04 2013
@@ -0,0 +1,1304 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+define("archiva/admin/repository/maven2/repositories",["jquery","i18n","jquery.tmpl","bootstrap","jquery.validate","knockout","knockout.simpleGrid"],
+function(jquery,i18n,jqueryTmpl,bootstrap,jqueryValidate,ko) {
+
+ // FIXME this must be dynamic if we do a plugin mechanism with dynamic repositories types
+ // FIXME i18n
+
+ ManagedRepositoryType=function(type,label){
+ this.type=type;
+ this.label=label;
+ }
+
+ window.managedRepositoryTypes = [
+ new ManagedRepositoryType("default","Maven 2.x Repository"),
+ new ManagedRepositoryType("legacy", "Maven 1.x Repository")
+ ];
+
+ ManagedRepository=function(id,name,layout,indexDirectory,location,snapshots,releases,blockRedeployments,cronExpression,
+ scanned,daysOlder,retentionCount,deleteReleasedSnapshots,stageRepoNeeded,description,
+ skipPackedIndexCreation,feedsUrl,url){
+
+ var self=this;
+
+ //private String id;
+ this.id=ko.observable(id);
+ this.id.subscribe(function(newValue){self.modified(true)});
+
+ //private String name;
+ this.name=ko.observable(name);
+ this.name.subscribe(function(newValue){self.modified(true)});
+
+ //private String layout = "default";
+ this.layout=ko.observable(layout);
+ this.layout.subscribe(function(newValue){self.modified(true)});
+
+ //private String indexDirectory;
+ this.indexDirectory=ko.observable(indexDirectory);
+ this.indexDirectory.subscribe(function(newValue){self.modified(true)});
+
+ //private String location;
+ this.location=ko.observable(location);
+ this.location.subscribe(function(newValue){self.modified(true)});
+
+ //private String cronExpression = "0 0 * * * ?";
+ this.cronExpression=ko.observable(cronExpression);
+ this.cronExpression.subscribe(function(newValue){self.modified(true)});
+
+ //private ManagedRepository stagingRepository;
+
+ //private int daysOlder = 100;
+ this.daysOlder=ko.observable(daysOlder);
+ this.daysOlder.subscribe(function(newValue){self.modified(true)});
+
+ //private int retentionCount = 2;
+ this.retentionCount=ko.observable(retentionCount);
+ this.retentionCount.subscribe(function(newValue){self.modified(true)});
+
+ //private boolean scanned = true;
+ this.scanned=ko.observable(scanned?scanned:true);
+ this.scanned.subscribe(function(newValue){self.modified(true)});
+
+ //private boolean deleteReleasedSnapshots;
+ this.deleteReleasedSnapshots=ko.observable(deleteReleasedSnapshots);
+ this.deleteReleasedSnapshots.subscribe(function(newValue){self.modified(true)});
+
+ //private boolean stageRepoNeeded;
+ this.stageRepoNeeded=ko.observable(stageRepoNeeded);
+ this.stageRepoNeeded.subscribe(function(newValue){self.modified(true)});
+
+ //private boolean snapshots = false;
+ this.snapshots=ko.observable(snapshots?snapshots:false);
+ this.snapshots.subscribe(function(newValue){self.modified(true)});
+
+ //private boolean releases = true;
+ this.releases=ko.observable(releases?releases:false);
+ this.releases.subscribe(function(newValue){self.modified(true)});
+
+ //private boolean blockRedeployments = false;
+ this.blockRedeployments=ko.observable(blockRedeployments?blockRedeployments:false);
+ this.blockRedeployments.subscribe(function(newValue){self.modified(true)});
+
+ //private String name;
+ this.description=ko.observable(description);
+ this.description.subscribe(function(newValue){self.modified(true)});
+
+ this.skipPackedIndexCreation=ko.observable(skipPackedIndexCreation?skipPackedIndexCreation:false);
+ this.skipPackedIndexCreation.subscribe(function(newValue){self.modified(true)});
+
+ this.feedsUrl=feedsUrl;
+
+ this.url=url;
+
+ this.getTypeLabel=function(){
+ for(var i=0;i<window.managedRepositoryTypes.length;i++){
+ if (window.managedRepositoryTypes[i].type==self.layout()){
+ return window.managedRepositoryTypes[i].label;
+ }
+ }
+ return "no label";
+ }
+
+ this.modified=ko.observable(false);
+ }
+
+ ArchivaRepositoryStatistics=function(scanEndTime,scanStartTime,totalArtifactCount,totalArtifactFileSize,totalFileCount,
+ totalGroupCount,totalProjectCount,newFileCount,duration,managedRepository,lastScanDate){
+ //private Date scanEndTime;
+ this.scanEndTime = ko.observable(scanEndTime);
+
+ //private Date scanStartTime;
+ this.scanStartTime = ko.observable(scanStartTime);
+
+ //private long totalArtifactCount;
+ this.totalArtifactCount = ko.observable(totalArtifactCount);
+
+ //private long totalArtifactFileSize;
+ this.totalArtifactFileSize = ko.observable(totalArtifactFileSize);
+
+ //private long totalFileCount;
+ this.totalFileCount = ko.observable(totalFileCount);
+
+ //private long totalGroupCount;
+ this.totalGroupCount = ko.observable(totalGroupCount);
+
+ //private long totalProjectCount;
+ this.totalProjectCount = ko.observable(totalProjectCount);
+
+ //private long newFileCount;
+ this.newFileCount = ko.observable(newFileCount);
+
+ this.duration = ko.observable(duration);
+
+ this.managedRepository = managedRepository;
+
+ this.lastScanDate=ko.observable(lastScanDate);
+ }
+
+ mapManagedRepositories=function(data,applicationUrl){
+ var mappedManagedRepositories = $.map(data, function(item) {
+ var managedRepository = mapManagedRepository(item);
+ managedRepository.feedsUrl=applicationUrl+"/feeds/"+managedRepository.id();
+ managedRepository.url=applicationUrl+"/repository/"+managedRepository.id()
+ return managedRepository;
+ });
+ return mappedManagedRepositories;
+ }
+ mapManagedRepository=function(data){
+ if (data==null){
+ return null;
+ }
+ return new ManagedRepository(data.id,data.name,data.layout,data.indexDirectory,data.location,data.snapshots
+ ,data.releases,
+ data.blockRedeployments,data.cronExpression,
+ data.scanned,data.daysOlder,data.retentionCount,data.deleteReleasedSnapshots,
+ data.stageRepoNeeded,data.description,data.skipPackedIndexCreation);
+ }
+
+ mapArchivaRepositoryStatistics=function(data){
+ if (data==null){
+ return null;
+ }
+ return new ArchivaRepositoryStatistics(data.scanEndTime,data.scanStartTime,data.totalArtifactCount,data.totalArtifactFileSize,
+ data.totalFileCount,data.totalGroupCount,data.totalProjectCount,data.newFileCount,
+ data.duration,data.managedRepository,data.lastScanDate)
+ }
+
+ ManagedRepositoryViewModel=function(managedRepository, update, managedRepositoriesViewModel){
+ this.managedRepository=managedRepository;
+ this.managedRepositoriesViewModel = managedRepositoriesViewModel;
+ this.update = update;
+
+ var self = this;
+
+ this.availableLayouts = window.managedRepositoryTypes;
+
+ showCronExpressionDoc=function(){
+ //$.log("showCronExpressionDoc") ;
+ }
+
+ this.save=function(){
+ $.log('managedrepo save');
+ var valid = $("#main-content").find("#managed-repository-edit-form").valid();
+ if (valid==false) {
+ return;
+ }
+ $.log("save:"+this.managedRepository.name());
+ clearUserMessages();
+ var userMessages=$("#user-messages");
+ userMessages.html(mediumSpinnerImg());
+ $("#managed-repository-save-button" ).button('loading');
+ if (this.update){
+ $.ajax("restServices/archivaServices/managedRepositoriesService/updateManagedRepository",
+ {
+ type: "POST",
+ data: ko.toJSON(this.managedRepository),
+ contentType: 'application/json',
+ dataType: 'json',
+ success: function(data) {
+ displaySuccessMessage($.i18n.prop('managedrepository.updated',self.managedRepository.id()));
+ activateManagedRepositoriesGridTab();
+ self.managedRepository.modified(false);
+ },
+ complete: function(){
+ $("#managed-repository-save-button" ).button('reset');
+ removeMediumSpinnerImg(userMessages);
+ }
+ }
+ );
+ } else {
+ var url="restServices/archivaServices/managedRepositoriesService/fileLocationExists";
+ url+="?fileLocation="+encodeURIComponent(self.managedRepository.location());
+ $.ajax(url,
+ {
+ type: "GET",
+ dataType: 'json',
+ success: function(data) {
+ if (data){
+ var completeCallbackFn = function(){window.modalConfirmDialog.modal('hide')};
+ openDialogConfirm(
+ function(){addManagedRepository(self.managedRepository,completeCallbackFn)},
+ $.i18n.prop('ok'), $.i18n.prop('cancel'),
+ $.i18n.prop('managedrepository.add.title'),
+ $("#managed-repository-location-warning-tmpl").tmpl(self.managedRepository));
+ }else{
+ addManagedRepository(self.managedRepository);
+ }
+ },
+ complete: function(){
+ $("#managed-repository-save-button" ).button('reset');
+ removeMediumSpinnerImg(userMessages);
+ }
+ });
+ }
+ }
+
+ addManagedRepository=function(managedRepository,completeCallbackFn){
+ var curManagedRepository=managedRepository;
+ var callbackFn = completeCallbackFn;
+ var dataJson=ko.toJSON(managedRepository);
+ $.log("managedRepository.release:"+managedRepository.releases()+",dataJson:"+dataJson);
+ $.ajax("restServices/archivaServices/managedRepositoriesService/addManagedRepository",
+ {
+ type: "POST",
+ contentType: 'application/json',
+ data: dataJson,
+ dataType: 'json',
+ success: function(data) {
+ if (managedRepository.stageRepoNeeded()){
+ $.log("stageRepoNeeded:"+managedRepository.stageRepoNeeded());
+ // reload all to see the new staged repo
+ loadManagedRepositories(function(data){
+ self.managedRepositoriesViewModel.managedRepositories(mapManagedRepositories(data));
+ });
+ } else {
+ curManagedRepository.location(data.location);
+ self.managedRepositoriesViewModel.managedRepositories.push(curManagedRepository);
+ }
+
+ displaySuccessMessage($.i18n.prop('managedrepository.added',curManagedRepository.id()));
+ curManagedRepository.modified(false);
+ activateManagedRepositoriesGridTab();
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete:function(data){
+ if(callbackFn){
+ callbackFn();
+ }
+ }
+ }
+ );
+ }
+
+ displayGrid=function(){
+ activateManagedRepositoriesGridTab();
+ }
+
+ }
+
+ activateManagedRepositoryFormValidation=function(){
+ var validator = $("#main-content" ).find("#managed-repository-edit-form").validate({
+ rules: {
+ daysOlder : {
+ digits: true,
+ min: 1
+ },
+ retentionCount : {
+ digits: true,
+ min: 1,
+ max: 100
+ },
+ cronExpression: {
+ required: true,
+ remote: {
+ url: "restServices/archivaServices/commonServices/validateCronExpression",
+ type: "get"
+ }
+ },
+ id: {
+ required: true,
+ remote: {
+ url: "restServices/archivaUiServices/dataValidatorService/managedRepositoryIdNotExists",
+ type: "get"
+ }
+ }
+ },
+ showErrors: function(validator, errorMap, errorList) {
+ customShowError("#main-content #managed-repository-edit-form",validator,errorMap,errorMap);
+ }
+ });
+ validator.settings.messages["cronExpression"]=$.i18n.prop("cronExpression.notvalid");
+ validator.settings.messages["id"]=$.i18n.prop("id.required.or.alreadyexists");
+ }
+
+ ManagedRepositoriesViewModel=function(){
+ this.managedRepositories=ko.observableArray([]);
+
+ this.gridViewModel = null;
+ var self = this;
+
+ editManagedRepository=function(managedRepository){
+ var mainContent = $("#main-content");
+ var viewModel = new ManagedRepositoryViewModel(managedRepository,true,self);
+ ko.applyBindings(viewModel,mainContent.find("#managed-repository-edit").get(0));
+ activateManagedRepositoryEditTab();
+ mainContent.find("#managed-repository-edit-li a").html($.i18n.prop('edit'));
+ activateManagedRepositoryFormValidation();
+ activatePopoverDoc();
+ }
+
+ this.editManagedRepositoryWithId=function(managedRepositoryId){
+ $.each(self.managedRepositories(), function(index, value) {
+ if(value.id()==managedRepositoryId){
+ editManagedRepository(value);
+ }
+ });
+ }
+
+ scanNow=function(managedRepository){
+ clearUserMessages();
+ openDialogConfirm(
+ function(){
+ $("#dialog-confirm-modal" ).find("#modal-login-footer").append(smallSpinnerImg());
+ var checked = $("#managed-repository-scan-now-all").get(0).checked;
+ var url = "restServices/archivaServices/repositoriesService/scanRepositoryNow?";
+ url += "repositoryId="+encodeURIComponent(managedRepository.id());
+ url += "&fullScan="+(checked==true?"true":"false");
+ $.ajax(url,
+ {
+ type: "GET",
+ beforeSend:function(){
+ displayInfoMessage($.i18n.prop("managedrepository.scan.started",managedRepository.id()));
+ closeDialogConfirm();
+ },
+ success: function(data) {
+ displaySuccessMessage($.i18n.prop("managedrepository.scanned",managedRepository.name()));
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete: function(){
+ removeSmallSpinnerImg();
+ closeDialogConfirm();
+ }
+ }
+ );
+ },
+ $.i18n.prop("ok"),
+ $.i18n.prop("cancel"),
+ $.i18n.prop("managedrepository.scan.now"),
+ $("#managed-repository-scan-now-modal-tmpl").tmpl(managedRepository));
+
+ }
+
+ removeManagedRepository=function(managedRepository){
+ clearUserMessages();
+ openDialogConfirm(
+ function(){
+ var url = "restServices/archivaServices/managedRepositoriesService/deleteManagedRepository?";
+ url += "repositoryId="+encodeURIComponent(managedRepository.id());
+ var checked = $("#managedrepository-deletecontent").get(0).checked;
+ url += "&deleteContent="+(checked==true?"true":"false");
+ var dialogText=$("#dialog-confirm-modal-body-text" );
+ dialogText.html(mediumSpinnerImg());
+ $.ajax(url,
+ {
+ type: "GET",
+ success: function(data) {
+ self.managedRepositories.remove(managedRepository);
+ displaySuccessMessage($.i18n.prop("managedrepository.deleted",managedRepository.name()));
+
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete: function(){
+ removeMediumSpinnerImg(dialogText);
+ closeDialogConfirm();
+ }
+ }
+ );
+
+ },
+ $.i18n.prop("ok"),
+ $.i18n.prop("cancel"),
+ $.i18n.prop("managedrepository.delete.confirm",managedRepository.name()),
+ $("#managed-repository-delete-warning-tmpl").tmpl(managedRepository));
+ }
+
+ updateManagedRepository=function(managedRepository){
+ var managedRepositoryViewModel = new ManagedRepositoryViewModel(managedRepository,true,this);
+ managedRepositoryViewModel.save();
+ }
+
+ this.bulkSave=function(){
+ $.log("bulkSave");
+ return getModifiedManagedRepositories().length>0;
+ }
+
+ getModifiedManagedRepositories=function(){
+ var prx = $.grep(self.managedRepositories(),
+ function (managedRepository,i) {
+ return managedRepository.modified();
+ });
+ return prx;
+ }
+ updateModifiedManagedRepositories=function(){
+ var repos = getModifiedManagedRepositories();
+
+ openDialogConfirm(function(){
+ for (i=0;i<repos.length;i++){
+ updateManagedRepository(repos[i]);
+ }
+ closeDialogConfirm();
+ },
+ $.i18n.prop('ok'),
+ $.i18n.prop('cancel'),
+ $.i18n.prop('managed.repository.bulk.save.confirm.title'),
+ $.i18n.prop('managed.repository.bulk.save.confirm',repos.length));
+ }
+
+ directoriesScan=function(managedRepository){
+ $.log("directoriesScan:"+managedRepository.id());
+ clearUserMessages();
+ var url = "restServices/archivaServices/repositoriesService/scanRepositoryDirectoriesNow/"+managedRepository.id();
+ $.ajax(url,
+ {
+ type: "GET",
+ dataType: 'json',
+ beforeSend:function(){
+ displayInfoMessage($.i18n.prop("managedrepository.scan.directories.started", managedRepository.id()));
+ },
+ success: function(data) {
+ $.log(" scanRepositoryDirectoriesNow finished ");
+ displaySuccessMessage( $.i18n.prop("managedrepository.scan.directories.finished", managedRepository.id()));
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete: function(){
+ removeSmallSpinnerImg();
+ }
+
+ }
+ );
+ }
+
+ showStats=function(managedRepository){
+ if ($(calculatePopoverId(managedRepository)).html()){
+ // we ask stats all the time ? if no uncomment return
+ //return;
+ $("#managedrepository-stats-"+escapeDot(managedRepository.id())).append(smallSpinnerImg());
+ }
+ var curRepo=managedRepository;
+ var url = "restServices/archivaServices/managedRepositoriesService/getManagedRepositoryStatistics/"+managedRepository.id();
+ url+="/"+encodeURIComponent(usedLang());
+ $.ajax(url,
+ {
+ type: "GET",
+ dataType: 'json',
+ success: function(data) {
+ if (data==null){
+ return;
+ }
+ var archivaRepositoryStatistics=mapArchivaRepositoryStatistics(data);
+ archivaRepositoryStatistics.managedRepository=curRepo;
+ var mainContent = $("#main-content");
+ mainContent.find("#managedrepository-stats-"+escapeDot(curRepo.id())).append($("#managed-repository-stats-tmpl").tmpl(archivaRepositoryStatistics));
+ mainContent.find("#managedrepository-stats-img-"+escapeDot(curRepo.id())).attr("data-content",$(calculatePopoverId(curRepo)).html());
+ mainContent.find("#managedrepository-stats-img-"+escapeDot(curRepo.id())).popover(
+ {
+ placement: "left",
+ html: true,
+ trigger:'manual'
+ }
+ );
+
+ mainContent.find("#managedrepository-stats-img-"+escapeDot(curRepo.id())).popover('show');
+ removeSmallSpinnerImg();
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete: function(){
+ }
+ }
+ );
+ }
+
+ calculatePopoverId=function(managedRepository){
+ return "#main-content #managedrepository-stats-"+escapeDot(managedRepository.id()) + " #managedrepository-stats-"+escapeDot(managedRepository.id())+"-popover";
+ }
+
+ hideStats=function(managedRepository){
+ $("#body_content" ).find(".popover" ).hide();
+ }
+
+ showPomSnippet=function(managedRepository){
+ var mainContent = $("#main-content");
+ mainContent.find("#managed-repositories-pom-snippet").html(mediumSpinnerImg());
+ mainContent.find('#managed-repositories-pom-snippet').show();
+ var url = "restServices/archivaServices/managedRepositoriesService/getPomSnippet/"+encodeURIComponent(managedRepository.id());
+ $.ajax(url,
+ {
+ type: "GET",
+ dataType: 'text',
+ success: function(data) {
+ $("#managed-repositories-pom-snippet").html($("#pom-snippet-tmpl").tmpl(data));
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete: function(){
+ }
+ }
+ );
+
+ }
+
+ mergeRepo=function(managedRepository){
+ var userMessages=$("#user-messages");
+ userMessages.html(mediumSpinnerImg());
+ // is there any artifacts to merge ?
+ var artifactsNumberUrl = "restServices/archivaServices/browseService/artifacts/"+encodeURIComponent(managedRepository.id());
+ $.ajax(artifactsNumberUrl,{
+ type: "GET",
+ dataType: 'json',
+ success: function(data){
+ var artifacts=mapArtifacts(data);
+ $.log("artifactsNumber for '" + managedRepository.id() + "': " + artifacts.length);
+
+ if (artifacts<1){
+ displayWarningMessage($.i18n.prop("managedrepository.merge.noartifacts", managedRepository.id()));
+ return;
+ }
+
+ $.log("merge repo open dialog");
+ var dialogMergeRepo=$("#dialog-modal-merge-repo");
+ if (window.modalMergeRepoDialog==null) {
+ window.modalMergeRepoDialog = dialogMergeRepo.modal();
+
+ }
+
+ loadManagedRepositories(function(data){
+
+ var managedRepositories = $.map(mapManagedRepositories(data), function(item) {
+ return item.id()==managedRepository.id()?null:item;
+ });
+ $("#dialog-modal-merge-repo-body-text").html($("#merge-repo-dialog-content" )
+ .tmpl({sourceRepoId:managedRepository.id(),repositories:managedRepositories}));
+ window.modalMergeRepoDialog.modal('show');
+ });
+
+ },
+ complete: function(){
+ removeMediumSpinnerImg(userMessages);
+ }
+ }
+ );
+
+ }
+
+
+ }
+
+
+ mergeRepositories=function(sourceRepository,targetRepository){
+ $.log("mergeRepositories:"+sourceRepository+":"+targetRepository);
+
+ var mergeRepoDialogBodyId="dialog-modal-merge-repo-body-text";
+ var mergeRepoDialogBody=$("#"+mergeRepoDialogBodyId);
+ mergeRepoDialogBody.html(mediumSpinnerImg());
+
+ // check conflicts
+ var url = "restServices/archivaServices/mergeRepositoriesService/mergeConflictedArtifacts/"+encodeURIComponent(sourceRepository);
+ url+="/"+encodeURIComponent(targetRepository);
+ $.ajax(url, {
+ type: "GET",
+ dataType: 'json',
+ success: function(data){
+ var artifacts=mapArtifacts(data);
+ if (artifacts && artifacts.length){
+ // we have conflicts ask to skip or not
+ $.log("conflicts:"+artifacts.length);
+ displayWarningMessage($.i18n.prop("managedrepository.merge.conflicts", artifacts.length),"dialog-modal-merge-repo-body-text");
+ $.tmpl($("#merge-repo-skip-conflicts").html(),
+ { artifacts:artifacts, sourceRepository: sourceRepository, targetRepository:targetRepository })
+ .appendTo( "#dialog-modal-merge-repo-body-text" );
+ $("#dialog-modal-merge-repo-header-title" ).html($.i18n.prop("managedrepository.merge.conflicts.header",sourceRepository,targetRepository));
+ } else {
+ doMerge(sourceRepository,targetRepository,false);
+ }
+ },
+ complete: function(){
+ $.log("complete removeMediumSpinnerImg");
+ removeMediumSpinnerImg("#dialog-modal-merge-repo-body-text");
+ }
+ });
+
+
+
+ }
+
+ doMerge=function(sourceRepository,targetRepository,skipConflicts){
+ $.log("doMerge:"+sourceRepository+" to " + targetRepository + ", skipConflicts: " + skipConflicts);
+ window.modalMergeRepoDialog.modal('hide');
+ var userMessages=$("#user-messages");
+ userMessages.html(mediumSpinnerImg());
+ var url = "restServices/archivaServices/mergeRepositoriesService/mergeRepositories/"+encodeURIComponent(sourceRepository);
+ url+="/"+encodeURIComponent(targetRepository);
+ url+="/"+skipConflicts;
+ $.ajax(url, {
+ type: "GET",
+ dataType: 'json',
+ success: function(data){
+ displaySuccessMessage($.i18n.prop("managedrepository.merge.success", sourceRepository,targetRepository));
+ },
+ complete: function(){
+ removeMediumSpinnerImg(userMessages);
+ }
+ });
+ }
+
+ activateManagedRepositoriesGridTab=function(){
+ var mainContent = $("#main-content");
+ mainContent.find("#managed-repository-edit-li").removeClass("active");
+ mainContent.find("#managed-repository-edit").removeClass("active");
+
+ mainContent.find("#managed-repositories-view-li").addClass("active");
+ mainContent.find("#managed-repositories-view").addClass("active");
+ mainContent.find("#managed-repository-edit-li a").html($.i18n.prop("add"));
+ }
+
+ activateManagedRepositoryEditTab=function(){
+ var mainContent = $("#main-content");
+ mainContent.find("#managed-repositories-view-li").removeClass("active");
+ mainContent.find("#managed-repositories-view").removeClass("active");
+
+ mainContent.find("#managed-repository-edit-li").addClass("active");
+ mainContent.find("#managed-repository-edit").addClass("active");
+ }
+
+
+ //---------------------------
+ // Remote repositories part
+ //---------------------------
+
+
+
+ RemoteRepository=function(id,name,layout,indexDirectory,url,userName,password,timeout,downloadRemoteIndex,remoteIndexUrl,
+ remoteDownloadNetworkProxyId,cronExpression,remoteDownloadTimeout,downloadRemoteIndexOnStartup,
+ description,extraParametersEntries,extraHeadersEntries){
+
+ var self=this;
+
+ //private String id;
+ this.id=ko.observable(id);
+ this.id.subscribe(function(newValue){self.modified(true)});
+
+ //private String name;
+ this.name=ko.observable(name);
+ this.name.subscribe(function(newValue){self.modified(true)});
+
+ //private String layout = "default";
+ this.layout=ko.observable(layout);
+ this.layout.subscribe(function(newValue){self.modified(true)});
+
+ //private String indexDirectory;
+ this.indexDirectory=ko.observable(indexDirectory);
+ this.indexDirectory.subscribe(function(newValue){self.modified(true)});
+
+ //private String url;
+ this.url=ko.observable(url);
+ this.url.subscribe(function(newValue){self.modified(true)});
+
+ //private String userName;
+ this.userName=ko.observable(userName);
+ this.userName.subscribe(function(newValue){self.modified(true)});
+
+ //private String password;
+ this.password=ko.observable(password);
+ this.password.subscribe(function(newValue){self.modified(true)});
+
+ //private int timeout = 60;
+ this.timeout=ko.observable(timeout);
+ this.timeout.subscribe(function(newValue){self.modified(true)});
+
+ //private boolean downloadRemoteIndex = false;
+ this.downloadRemoteIndex=ko.observable(downloadRemoteIndex?false:downloadRemoteIndex);
+ this.downloadRemoteIndex.subscribe(function(newValue){self.modified(true)});
+
+ //private String remoteIndexUrl = ".index";
+ this.remoteIndexUrl=ko.observable(remoteIndexUrl);
+ this.remoteIndexUrl.subscribe(function(newValue){self.modified(true)});
+
+ //private String remoteDownloadNetworkProxyId;
+ this.remoteDownloadNetworkProxyId=ko.observable(remoteDownloadNetworkProxyId);
+ this.remoteDownloadNetworkProxyId.subscribe(function(newValue){self.modified(true)});
+
+ //private String cronExpression = "0 0 08 ? * SUN";
+ this.cronExpression=ko.observable(cronExpression);
+ this.cronExpression.subscribe(function(newValue){self.modified(true)});
+
+ //private int remoteDownloadTimeout = 300;
+ this.remoteDownloadTimeout=ko.observable(remoteDownloadTimeout);
+ this.remoteDownloadTimeout.subscribe(function(newValue){self.modified(true)});
+
+ //private boolean downloadRemoteIndexOnStartup = false;
+ this.downloadRemoteIndexOnStartup=ko.observable(downloadRemoteIndexOnStartup?false:downloadRemoteIndexOnStartup);
+ this.downloadRemoteIndexOnStartup.subscribe(function(newValue){self.modified(true)});
+
+ this.description=ko.observable(description);
+ this.description.subscribe(function(newValue){self.modified(true)});
+
+ this.getTypeLabel=function(){
+ for(var i=0;i<window.managedRepositoryTypes.length;i++){
+ if (window.managedRepositoryTypes[i].type==self.layout()){
+ return window.managedRepositoryTypes[i].label;
+ }
+ }
+ return "no label";
+ }
+
+ this.extraParametersEntries=ko.observableArray(extraParametersEntries==null?new Array():extraParametersEntries);
+ this.extraParametersEntries.subscribe(function(newValue){
+ self.modified(true);
+ });
+
+ this.extraHeadersEntries=ko.observableArray(extraHeadersEntries==null?new Array():extraHeadersEntries);
+ this.extraHeadersEntries.subscribe(function(newValue){
+ self.modified(true);
+ });
+
+ this.modified=ko.observable(false);
+ }
+
+ mapRemoteRepository=function(data){
+ if (data==null){
+ return null;
+ }
+
+ var extraParametersEntries = data.extraParametersEntries == null ? []: $.each(data.extraParametersEntries,function(item){
+ return new Entry(item.key, item.value);
+ });
+ if (!$.isArray(extraParametersEntries)){
+ extraParametersEntries=[];
+ }
+
+ var extraHeadersEntries = data.extraHeadersEntries == null ? []: $.each(data.extraHeadersEntries,function(item){
+ return new Entry(item.key, item.value);
+ });
+ if (!$.isArray(extraHeadersEntries)){
+ extraHeadersEntries=[];
+ }
+
+ return new RemoteRepository(data.id,data.name,data.layout,data.indexDirectory,data.url,data.userName,data.password,
+ data.timeout,data.downloadRemoteIndex,data.remoteIndexUrl,data.remoteDownloadNetworkProxyId,
+ data.cronExpression,data.remoteDownloadTimeout,data.downloadRemoteIndexOnStartup,data.description,
+ extraParametersEntries,extraHeadersEntries);
+ }
+
+ mapRemoteRepositories=function(data){
+ var mappedRemoteRepositories = $.map(data, function(item) {
+ return mapRemoteRepository(item);
+ });
+ return mappedRemoteRepositories;
+ }
+
+ RemoteRepositoryViewModel=function(remoteRepository, update, remoteRepositoriesViewModel){
+ this.remoteRepository=remoteRepository;
+ this.remoteRepositoriesViewModel = remoteRepositoriesViewModel;
+ this.networkProxies=ko.observableArray([]);
+ this.update = update;
+
+ var self = this;
+
+ this.availableLayouts = window.managedRepositoryTypes;
+
+ this.save=function(){
+ var valid = $("#main-content" ).find("#remote-repository-edit-form").valid();
+ if (valid==false) {
+ return;
+ }
+ clearUserMessages();
+ var userMessages=$("#user-messages");
+ userMessages.html(mediumSpinnerImg());
+ $("#remote-repository-save-button" ).button('loading');
+ if (update){
+ $.ajax("restServices/archivaServices/remoteRepositoriesService/updateRemoteRepository",
+ {
+ type: "POST",
+ data: ko.toJSON(this.remoteRepository),
+ contentType: 'application/json',
+ dataType: 'json',
+ success: function(data) {
+ displaySuccessMessage($.i18n.prop('remoterepository.updated',self.remoteRepository.id()));
+ activateRemoteRepositoriesGridTab();
+ self.remoteRepository.modified(false);
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete: function(){
+ $("#remote-repository-save-button" ).button('reset');
+ removeMediumSpinnerImg(userMessages);
+ }
+ }
+ );
+ }else {
+ $.ajax("restServices/archivaServices/remoteRepositoriesService/addRemoteRepository",
+ {
+ type: "POST",
+ data: ko.toJSON(this.remoteRepository),
+ contentType: 'application/json',
+ dataType: 'json',
+ success: function(data) {
+ self.remoteRepository.modified(false);
+ self.remoteRepositoriesViewModel.remoteRepositories.push(self.remoteRepository);
+ displaySuccessMessage($.i18n.prop('remoterepository.added'));
+ activateRemoteRepositoriesGridTab();
+ removeMediumSpinnerImg(userMessages);
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ }
+ }
+ );
+ }
+ }
+
+ displayGrid=function(){
+ activateRemoteRepositoriesGridTab();
+ }
+
+ addExtraParameter=function(){
+
+ var mainContent=$("#main-content");
+ mainContent.find("#extra-parameters-error" ).empty();
+ var key=mainContent.find("#extraParameter-key").val();
+ if($.trim(key).length<1){
+ displayErrorMessage( $.i18n.prop("key.empty.error.message"),"extra-parameters-error");
+ return;
+ }
+ var value=mainContent.find("#extraParameter-value").val();
+ $.log("addExtraParameter="+key+":"+value);
+ var oldTab = self.remoteRepository.extraParametersEntries();
+ oldTab.push(new Entry(key,value));
+ self.remoteRepository.extraParametersEntries(oldTab);
+ mainContent.find("#extraParameter-key").val("");
+ mainContent.find("#extraParameter-value").val("");
+ self.remoteRepository.modified(true);
+ }
+
+ deleteExtraParameter=function(key){
+ for(var i=0;i<self.remoteRepository.extraParametersEntries().length;i++){
+ var entry=self.remoteRepository.extraParametersEntries()[i];
+ if (entry.key==key){
+ self.remoteRepository.extraParametersEntries.remove(entry);
+ self.remoteRepository.modified(true);
+ }
+ }
+ }
+
+ addExtraHeader=function(){
+
+ var mainContent=$("#main-content");
+ mainContent.find("#extra-headers-error" ).empty();
+ var key=mainContent.find("#extraHeader-key").val();
+ if( $.trim(key).length<1){
+ if($.trim(key).length<1){
+ displayErrorMessage( $.i18n.prop("key.empty.error.message"),"extra-headers-error");
+ return;
+ }
+ }
+ var value=mainContent.find("#extraHeader-value").val();
+ $.log("addExtraParameter="+key+":"+value);
+ var oldTab = self.remoteRepository.extraHeadersEntries();
+ oldTab.push(new Entry(key,value));
+ self.remoteRepository.extraHeadersEntries(oldTab);
+ mainContent.find("#extraHeader-key").val("");
+ mainContent.find("#extraHeader-value").val("");
+ self.remoteRepository.modified(true);
+ }
+
+ deleteExtraHeader=function(key){
+ for(var i=0;i<self.remoteRepository.extraHeadersEntries().length;i++){
+ var entry=self.remoteRepository.extraHeadersEntries()[i];
+ if (entry.key==key){
+ self.remoteRepository.extraHeadersEntries.remove(entry);
+ self.remoteRepository.modified(true);
+ }
+ }
+ }
+
+ }
+
+ RemoteRepositoriesViewModel=function(){
+ this.remoteRepositories=ko.observableArray([]);
+ this.applicationUrl=null;
+ this.gridViewModel = null;
+ var self = this;
+
+ editRemoteRepository=function(remoteRepository){
+ $.log("editRemoteRepository");
+ $.ajax("restServices/archivaServices/networkProxyService/getNetworkProxies", {
+ type: "GET",
+ dataType: 'json',
+ success: function(data) {
+ var viewModel = new RemoteRepositoryViewModel(remoteRepository,true,self);
+ viewModel.networkProxies(mapNetworkProxies(data));
+ var mainContent = $("#main-content");
+
+ ko.applyBindings(viewModel,mainContent.find("#remote-repository-edit").get(0));
+ activateRemoteRepositoryEditTab();
+ mainContent.find("#remote-repository-edit-li a").html($.i18n.prop('edit'));
+ activateRemoteRepositoryFormValidation(false);
+ activatePopoverDoc();
+ }
+ })
+
+ }
+
+ removeRemoteRepository=function(remoteRepository){
+ clearUserMessages();
+ openDialogConfirm(
+ function(){
+ var dialogText=$("#dialog-confirm-modal-body-text" );
+ dialogText.html(mediumSpinnerImg());
+ $.ajax("restServices/archivaServices/remoteRepositoriesService/deleteRemoteRepository/"+encodeURIComponent(remoteRepository.id()),
+ {
+ type: "GET",
+ success: function(data) {
+ self.remoteRepositories.remove(remoteRepository);
+ displaySuccessMessage($.i18n.prop('remoterepository.deleted',remoteRepository.id()));
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete:function(){
+ removeMediumSpinnerImg(dialogText);
+ closeDialogConfirm();
+ }
+ }
+ )}, $.i18n.prop('ok'),
+ $.i18n.prop('cancel'),
+ $.i18n.prop('remoterepository.delete.confirm',remoteRepository.id()),
+ $("#remote-repository-delete-modal-tmpl").tmpl(remoteRepository));
+
+ }
+
+ this.bulkSave=function(){
+ return getModifiedRemoteRepositories().length>0;
+ }
+
+ getModifiedRemoteRepositories=function(){
+ var prx = $.grep(self.remoteRepositories(),
+ function (remoteRepository,i) {
+ return remoteRepository.modified();
+ });
+ return prx;
+ }
+
+ updateModifiedRemoteRepositories=function(){
+ var modifiedRemoteRepositories = getModifiedRemoteRepositories();
+
+ openDialogConfirm(function(){
+ for(var i=0;i<modifiedRemoteRepositories.length;i++){
+ updateRemoteRepository(modifiedRemoteRepositories[i]);
+ }
+ closeDialogConfirm();
+ },
+ $.i18n.prop('ok'),
+ $.i18n.prop('cancel'),
+ $.i18n.prop('remoterepositories.bulk.save.confirm.title'),
+ $.i18n.prop('remoterepositories.bulk.save.confirm',modifiedRemoteRepositories.length));
+ }
+
+ updateRemoteRepository=function(remoteRepository){
+ var viewModel = new RemoteRepositoryViewModel(remoteRepository,true,self);
+ viewModel.save();
+ }
+
+ scheduleDownloadRemoteIndex=function(remoteRepository){
+ openDialogConfirm(
+ function(){
+
+ var url = "restServices/archivaServices/repositoriesService/scheduleDownloadRemoteIndex?";
+ url += "repositoryId="+encodeURIComponent(remoteRepository.id());
+
+ var now = $("#remoterepository-scan-now").get(0).checked;
+
+ var full = $("#remoterepository-scan-full").get(0).checked;
+
+ url += "&now="+(now==true?"true":"false");
+ url += "&fullDownload="+(full==true?"true":"false");
+ $.ajax(url,
+ {
+ type: "GET",
+ success: function(data) {
+ clearUserMessages();
+ displaySuccessMessage($.i18n.prop("remoterepository.download.remote.scheduled",remoteRepository.name()));
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete: function(){
+ closeDialogConfirm();
+ }
+ }
+ );
+
+ },
+ $.i18n.prop("ok"),
+ $.i18n.prop("cancel"),
+ $.i18n.prop("remoterepository.download.remote.confirm",remoteRepository.name()),
+ $("#remote-repository-scan-modal-tmpl").tmpl(remoteRepository));
+ }
+ }
+
+ /**
+ *
+ * @param validateId to validate if id already exists: not needed for update !
+ */
+ activateRemoteRepositoryFormValidation=function(validateId){
+ // FIXME find a way to activate cronExpression validation only if downloadRemote is activated !
+ var validator = null;
+ if (validateId){
+ validator = $("#main-content" ).find("#remote-repository-edit-form").validate({
+ rules: {
+ id: {
+ required: true,
+ remote: {
+ url: "restServices/archivaUiServices/dataValidatorService/remoteRepositoryIdNotExists",
+ type: "get"
+ }
+ }
+ },
+ showErrors: function(validator, errorMap, errorList) {
+ customShowError("#main-content #remote-repository-edit-form",validator,errorMap,errorMap);
+ }
+ });
+ } else {
+ validator = $("#main-content" ).find("#remote-repository-edit-form").validate({
+ rules: {
+ id: {
+ required: true
+ }
+ },
+ showErrors: function(validator, errorMap, errorList) {
+ customShowError("#main-content #remote-repository-edit-form",validator,errorMap,errorMap);
+ }
+ });
+ }
+ validator.settings.messages["cronExpression"]=$.i18n.prop("cronExpression.notvalid");
+ validator.settings.messages["id"]=$.i18n.prop("id.required.or.alreadyexists");
+ }
+
+ activateRemoteRepositoriesGridTab=function(){
+ var mainContent = $("#main-content");
+ mainContent.find("#remote-repository-edit-li").removeClass("active");
+ mainContent.find("#remote-repository-edit").removeClass("active");
+
+ mainContent.find("#remote-repositories-view-li").addClass("active");
+ mainContent.find("#remote-repositories-view").addClass("active");
+ mainContent.find("#remote-repository-edit-li a").html($.i18n.prop("add"));
+ }
+
+ activateRemoteRepositoryEditTab=function(){
+ var mainContent = $("#main-content");
+ mainContent.find("#remote-repositories-view-li").removeClass("active");
+ mainContent.find("#remote-repositories-view").removeClass("active");
+
+ mainContent.find("#remote-repository-edit-li").addClass("active");
+ mainContent.find("#remote-repository-edit").addClass("active");
+ }
+
+ //---------------------------
+ // Screen loading
+ //---------------------------
+
+ /**
+ *
+ * @param successFnManagedRepositories function called with param managedRepositoriesViewModel when managed repositories grid has been displayed
+ * @param successFnRemoteRepositories function called with param remoteRepositoriesViewModel when remote repositories grid has been displayed
+ */
+ displayRepositoriesGrid=function(successFnManagedRepositories,successFnRemoteRepositories){
+ screenChange();
+ var mainContent = $("#main-content");
+ mainContent.html(mediumSpinnerImg());
+ mainContent.html($("#repositoriesMain").tmpl());
+ mainContent.find("#repositories-tabs a:first").tab("show");
+
+ mainContent.find("#managed-repositories-content").append(mediumSpinnerImg());
+ mainContent.find("#remote-repositories-content").append(mediumSpinnerImg());
+
+ var managedRepositoriesViewModel = new ManagedRepositoriesViewModel();
+ var remoteRepositoriesViewModel = new RemoteRepositoriesViewModel();
+
+ $.ajax({
+ url: "restServices/archivaServices/archivaAdministrationService/applicationUrl",
+ type: "GET",
+ dataType: 'text',
+ success: function(applicationUrl){
+ $.log("applicationUrl:"+applicationUrl);
+ loadManagedRepositories(function(data) {
+
+
+ managedRepositoriesViewModel.managedRepositories(
+ mapManagedRepositories(data,applicationUrl?applicationUrl:window.location.toString().substringBeforeLast("/")));
+
+ managedRepositoriesViewModel.gridViewModel = new ko.simpleGrid.viewModel({
+ data: managedRepositoriesViewModel.managedRepositories,
+ columns: [
+ {
+ headerText: $.i18n.prop('identifier'),
+ rowText: "id"
+ },
+ {
+ headerText: $.i18n.prop('name'),
+ rowText: "name"
+ },
+ {
+ headerText: $.i18n.prop('type'),
+ rowText: "getTypeLabel",
+ // FIXME i18n
+ title: "Repository type (default is Maven 2)"
+ }
+ ],
+ pageSize: 5,
+ gridUpdateCallBack: function(){
+ // a bit ugly
+ //$("#main-content" ).find("#managed-repositories-table").find("[title]").tooltip({animation:"false"});
+ }
+ });
+ var mainContent = $("#main-content");
+ ko.applyBindings(managedRepositoriesViewModel,mainContent.find("#managed-repositories-view").get(0));
+ activatePopoverDoc();
+ mainContent.find("#managed-repositories-pills #managed-repositories-view-a").tab('show');
+ removeMediumSpinnerImg(mainContent.find("#managed-repositories-content"));
+ activateManagedRepositoriesGridTab();
+ if(successFnManagedRepositories){
+ successFnManagedRepositories(managedRepositoriesViewModel);
+ }
+ });
+
+ loadRemoteRepositories(function(data) {
+ remoteRepositoriesViewModel.remoteRepositories(mapRemoteRepositories(data));
+ remoteRepositoriesViewModel.gridViewModel = new ko.simpleGrid.viewModel({
+ data: remoteRepositoriesViewModel.remoteRepositories,
+ columns: [
+ {
+ headerText: $.i18n.prop('identifier'),
+ rowText: "id"
+ },
+ {
+ headerText: $.i18n.prop('name'),
+ rowText: "name"
+ },
+ {
+ headerText: $.i18n.prop('url'),
+ rowText: "url"
+ },
+ {
+ headerText: $.i18n.prop('type'),
+ rowText: "getTypeLabel",
+ // FIXME i18n
+ title: "Repository type (default is Maven 2)"
+ }
+ ],
+ pageSize: 5,
+ gridUpdateCallBack: function(){
+ //$("#main-content" ).find("#remote-repositories-table").find("[title]").tooltip();
+ }
+ });
+ var mainContent = $("#main-content");
+ ko.applyBindings(remoteRepositoriesViewModel,mainContent.find("#remote-repositories-view").get(0));
+ mainContent.find("#remote-repositories-pills #remote-repositories-view-a").tab('show')
+ removeMediumSpinnerImg(mainContent.find("#remote-repositories-content"));
+ activatePopoverDoc();
+ if(successFnRemoteRepositories){
+ successFnRemoteRepositories(managedRepositoriesViewModel);
+ }
+ });
+ }
+ }
+ );
+
+
+ mainContent.find("#managed-repositories-pills").on('show', function (e) {
+ var mainContent = $("#main-content");
+ if ($(e.target).attr("href")=="#managed-repository-edit") {
+ var managedRepo=new ManagedRepository();
+ managedRepo.cronExpression("0 0 * * * ?");
+ var viewModel = new ManagedRepositoryViewModel(managedRepo,false,managedRepositoriesViewModel);
+ ko.applyBindings(viewModel,mainContent.find("#managed-repository-edit").get(0));
+ activateManagedRepositoryFormValidation();
+ activatePopoverDoc();
+ }
+ if ($(e.target).attr("href")=="#managed-repositories-view") {
+ mainContent.find("#managed-repository-edit-li a").html($.i18n.prop("add"));
+ }
+
+ });
+
+ mainContent.find("#remote-repositories-pills").on('show', function (e) {
+ if ($(e.target).attr("href")=="#remote-repository-edit") {
+ $.ajax("restServices/archivaServices/networkProxyService/getNetworkProxies", {
+ type: "GET",
+ dataType: 'json',
+ success: function(data) {
+ var remoteRepo=new RemoteRepository();
+ remoteRepo.cronExpression("0 0 08 ? * SUN");
+ var viewModel = new RemoteRepositoryViewModel(remoteRepo,false,remoteRepositoriesViewModel);
+ viewModel.networkProxies(mapNetworkProxies(data));
+ ko.applyBindings(viewModel,mainContent.find("#remote-repository-edit").get(0));
+ activateRemoteRepositoryFormValidation(true);
+ activatePopoverDoc();
+ }
+ })
+ }
+ if ($(e.target).attr("href")=="#remote-repositories-view") {
+ $("#main-content" ).find("#remote-repository-edit-li" ).find("a").html($.i18n.prop("add"));
+ }
+
+ });
+
+ }
+
+ loadManagedRepositories=function(successCallBackFn,errorCallBackFn){
+ $.ajax("restServices/archivaServices/managedRepositoriesService/getManagedRepositories", {
+ type: "GET",
+ dataType: 'json',
+ success: successCallBackFn,
+ error: errorCallBackFn
+ });
+ }
+
+ loadRemoteRepositories=function(successCallBackFn,errorCallBackFn){
+ $.ajax("restServices/archivaServices/remoteRepositoriesService/getRemoteRepositories", {
+ type: "GET",
+ dataType: 'json',
+ success: successCallBackFn,
+ error: errorCallBackFn
+ });
+ }
+
+ findManagedRepository=function(id,managedRepositories){
+ var managedRepository=$.grep(managedRepositories,
+ function(repo,idx){
+ return repo.id()==id;
+ }
+ );
+ return ($.isArray(managedRepository) && managedRepository.length>0) ? managedRepository[0]:new ManagedRepository();
+ }
+
+});
\ No newline at end of file
Propchange: archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repositories.js
------------------------------------------------------------------------------
svn:eol-style = native
Added: archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repository-groups.js
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repository-groups.js?rev=1486339&view=auto
==============================================================================
--- archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repository-groups.js (added)
+++ archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repository-groups.js Sat May 25 15:43:04 2013
@@ -0,0 +1,420 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+define("archiva/admin/repository/maven2/repository-groups",["jquery","i18n","jquery.tmpl","bootstrap","jquery.validate","jquery.ui","knockout"
+ ,"knockout.simpleGrid","knockout.sortable","archiva/admin/repository/maven2/repositories"],
+function(jquery,i18n,jqueryTmpl,bootstrap,jqueryValidate,jqueryUi,ko) {
+
+ RepositoryGroup=function(id,repositories,mergedIndexPath){
+
+ var self=this;
+
+ //private String id;
+ this.id=ko.observable(id);
+ this.id.subscribe(function(newValue){self.modified(true)});
+
+ //private String mergedIndexPath = "/.indexer";
+ this.mergedIndexPath=ko.observable(mergedIndexPath?mergedIndexPath:".indexer");
+ this.mergedIndexPath.subscribe(function(newValue){self.modified(true)});
+
+ // private List<String> repositories;
+ this.repositories=ko.observableArray(repositories);
+ this.repositories.subscribe(function(newValue){self.modified(true)});
+
+ // to store managedRepositories description not sended to server
+ this.managedRepositories=ko.observableArray([]);
+ this.managedRepositories.subscribe(function(newValue){self.modified(true)});
+
+ this.modified=ko.observable(false);
+ }
+
+ RepositoryGroupViewModel=function(repositoryGroup,update,repositoryGroupsViewModel){
+ var self = this;
+ this.repositoryGroup=repositoryGroup;
+ this.update=update;
+ this.repositoryGroupsViewModel=repositoryGroupsViewModel;
+ this.availableRepositories=ko.observableArray([]);
+ this.applicationUrl=null;
+
+ for (var i=0;i<repositoryGroupsViewModel.managedRepositories().length;i++){
+ if ( $.inArray(repositoryGroupsViewModel.managedRepositories()[i].id(),this.repositoryGroup.repositories())<0){
+ this.availableRepositories.push(repositoryGroupsViewModel.managedRepositories()[i]);
+ }
+ }
+
+ repositoryMoved=function(arg){
+ $.log("repositoryMoved:"+arg.sourceIndex+" to " + arg.targetIndex);
+ var repositories=[];
+ for(var i=0;i<self.repositoryGroup.managedRepositories().length;i++){
+ repositories.push(self.repositoryGroup.managedRepositories()[i].id());
+ }
+ self.repositoryGroup.repositories(repositories);
+ self.repositoryGroup.modified(true);
+ var mainContent=$("#main-content");
+ mainContent.find("#repository-groups-edit-available-repositories").find(".icon-plus-sign" ).off("click");
+ mainContent.find("#repository-groups-edit-order-div").find(".icon-minus-sign" ).off("click");
+ self.renderSortableAvailables(self.repositoryGroupsViewModel);
+ self.renderSortableChoosed(self.repositoryGroupsViewModel);
+ }
+
+ this.saveRepositoryGroup=function(repositoryGroup){
+ if (self.update){
+ self.repositoryGroupsViewModel.saveRepositoryGroup(repositoryGroup);
+ } else {
+ self.repositoryGroupsViewModel.addRepositoryGroup(repositoryGroup);
+ }
+ }
+
+ this.removeRepository=function(id){
+ $.log("removeRepository:"+id);
+ }
+
+ this.removeAvailable=function(idVal){
+ for (var i=0;i<self.repositoryGroupsViewModel.managedRepositories().length;i++){
+ if(self.repositoryGroupsViewModel.managedRepositories()[i].id()==idVal){
+ self.availableRepositories.remove(repositoryGroupsViewModel.managedRepositories()[i]);
+ }
+ }
+
+ for(var i= 0;i<self.repositoryGroupsViewModel.managedRepositories().length;i++){
+ if(self.repositoryGroupsViewModel.managedRepositories()[i].id()==idVal){
+ $.log("find repo to add");
+ self.repositoryGroup.repositories.push(idVal);
+ self.repositoryGroup.managedRepositories.push(findManagedRepository(idVal,self.repositoryGroupsViewModel.managedRepositories()));
+ }
+ }
+ $("#main-content").find("#repository-groups-edit-order-div").find("#minus-"+idVal ).on("click",function(){
+ var idVal = $(this).attr("id");
+ idVal=idVal.substringAfterFirst("minus-");
+ self.removeChoosed(idVal);
+ });
+ }
+
+ this.renderSortableAvailables=function(repositoryGroupsViewModel){
+ $("#main-content").find("#repository-groups-edit-available-repositories").find(".icon-plus-sign" ).on("click",function(){
+ var idVal = $(this).attr("id");
+ idVal=idVal.substringAfterFirst("plus-");
+ self.removeAvailable(idVal);
+ });
+ }
+
+ this.removeChoosed=function(idVal){
+ for (var i=0;i<self.repositoryGroupsViewModel.managedRepositories().length;i++){
+ if(self.repositoryGroupsViewModel.managedRepositories()[i].id()==idVal){
+ self.availableRepositories.push(repositoryGroupsViewModel.managedRepositories()[i]);
+ }
+ }
+
+ for(var i= 0;i<self.repositoryGroup.repositories().length;i++){
+ if(self.repositoryGroup.repositories()[i]==idVal){
+ self.repositoryGroup.repositories.remove(self.repositoryGroup.repositories()[i]);
+ self.repositoryGroup.managedRepositories.remove(findManagedRepository(idVal,self.repositoryGroupsViewModel.managedRepositories()));
+ }
+ }
+ $("#main-content").find("#repository-groups-edit-available-repositories").find("#plus-"+idVal ).on("click",function(){
+ var idVal = $(this).attr("id");
+ idVal=idVal.substringAfterFirst("plus-");
+ self.removeAvailable(idVal);
+ });
+ }
+
+ this.renderSortableChoosed=function(repositoryGroupsViewModel){
+ $("#main-content").find("#repository-groups-edit-order-div").find(".icon-minus-sign" ).on("click",function(){
+ var idVal = $(this).attr("id");
+ idVal=idVal.substringAfterFirst("minus-");
+ self.removeChoosed(idVal);
+ });
+ }
+ }
+
+ RepositoryGroupsViewModel=function(){
+ var self=this;
+ this.repositoryGroups=ko.observableArray([]);
+ this.managedRepositories=ko.observableArray([]);
+ this.applicationUrl="";
+
+ this.removeFromList=function(managedRepository){
+ $.log("removeFromList");
+ }
+
+ this.findManagedRepository=function(id){
+ return findManagedRepository(id,self.managedRepositories());
+ }
+ this.deleteRepositoryGroup=function(repositoryGroup){
+ openDialogConfirm(
+ function(){self.removeRepositoryGroup(repositoryGroup);window.modalConfirmDialog.modal('hide')},
+ $.i18n.prop('ok'), $.i18n.prop('cancel'),
+ $.i18n.prop('repository.group.delete.confirm',repositoryGroup.id()),
+ $("#repository-group-delete-warning-tmpl").tmpl(self.repositoryGroup));
+ }
+ this.removeRepositoryGroup=function(repositoryGroup){
+ clearUserMessages();
+ $.ajax("restServices/archivaServices/repositoryGroupService/deleteRepositoryGroup/"+encodeURIComponent(repositoryGroup.id()),
+ {
+ type: "GET",
+ success: function(data) {
+ var message=$.i18n.prop('repository.group.deleted',repositoryGroup.id());
+ displaySuccessMessage(message);
+ self.repositoryGroups.remove(repositoryGroup);
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ }
+ }
+ );
+ }
+
+ this.editRepositoryGroup=function(repositoryGroup){
+
+ var mainContent=$("#main-content");
+ $.ajax({
+ url: "restServices/archivaServices/archivaAdministrationService/applicationUrl",
+ type: "GET",
+ dataType: 'text',
+ success: function(applicationUrl){
+ $.log("editRepositoryGroup:"+repositoryGroup.id()+",repositories:"+repositoryGroup.repositories().length+",managed:"+repositoryGroup.managedRepositories().length);
+ var repositoryGroupViewModel=new RepositoryGroupViewModel(repositoryGroup,true,self);
+ repositoryGroupViewModel.applicationUrl=applicationUrl;
+ activateRepositoryGroupEditTab();
+ ko.applyBindings(repositoryGroupViewModel,mainContent.find("#repository-groups-edit" ).get(0));
+ repositoryGroupViewModel.renderSortableChoosed(self);
+ repositoryGroupViewModel.renderSortableAvailables(self);
+ mainContent.find("#repository-groups-view-tabs-li-edit" ).find("a").html($.i18n.prop("edit"));
+ repositoryGroupValidator();
+ }
+ });
+ }
+
+ this.editRepositoryGroupWithId=function(repositoryGroupId){
+
+ $.each(self.repositoryGroups(), function(index, value) {
+ if(value.id()==repositoryGroupId){
+ self.editRepositoryGroup(value);
+ }
+ });
+ }
+
+ this.saveRepositoryGroup=function(repositoryGroup){
+ if(valid==false){
+ $.log("saveRepositoryGroup, valid:"+valid);
+ return;
+ }
+ clearUserMessages();
+ var userMessages=$("#user-messages");
+ userMessages.html(mediumSpinnerImg());
+ var valid = $("#main-content").find("#repository-group-edit-form" ).valid();
+
+
+ $("#repository-group-save" ).button('loading');
+ $.ajax("restServices/archivaServices/repositoryGroupService/updateRepositoryGroup",
+ {
+ type: "POST",
+ contentType: 'application/json',
+ data:ko.toJSON(repositoryGroup),
+ dataType: 'json',
+ success: function(data) {
+ $.log("update repositoryGroup id:"+repositoryGroup.id());
+ var message=$.i18n.prop('repository.group.updated',repositoryGroup.id());
+ displaySuccessMessage(message);
+ repositoryGroup.modified(false);
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ },
+ complete:function(data){
+ $("#repository-group-save" ).button('reset');
+ removeMediumSpinnerImg(userMessages);
+ }
+ }
+ );
+
+ };
+
+ this.addRepositoryGroup=function(repositoryGroup){
+ clearUserMessages();
+ $.ajax("restServices/archivaServices/repositoryGroupService/addRepositoryGroup",
+ {
+ type: "POST",
+ contentType: 'application/json',
+ data: ko.toJSON(repositoryGroup),
+ dataType: 'json',
+ success: function(data) {
+ $.log("update repositoryGroup id:"+repositoryGroup.id());
+ var message=$.i18n.prop('repository.group.added',repositoryGroup.id());
+ displaySuccessMessage(message);
+ repositoryGroup.modified(false);
+ self.repositoryGroups.push(repositoryGroup);
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ }
+ }
+ );
+
+ }
+
+ getManagedRepository=function(id){
+ $.log("getManagedRepository:"+id);
+ return findManagedRepository(self.managedRepositories());
+ }
+
+ }
+
+ displayRepositoryGroups=function(successFn){
+ screenChange();
+ var mainContent = $("#main-content");
+ mainContent.html(mediumSpinnerImg());
+ this.repositoryGroupsViewModel=new RepositoryGroupsViewModel();
+ var self=this;
+
+ loadManagedRepositories(function(data) {
+
+ $.ajax({
+ url: "restServices/archivaServices/archivaAdministrationService/applicationUrl",
+ type: "GET",
+ dataType: 'text',
+ success: function(applicationUrl){
+
+ self.repositoryGroupsViewModel.managedRepositories(
+ mapManagedRepositories(data,applicationUrl?applicationUrl:window.location.toString().substringBeforeLast("/")));
+ self.repositoryGroupsViewModel.applicationUrl=applicationUrl;
+ $.ajax("restServices/archivaServices/repositoryGroupService/getRepositoriesGroups", {
+ type: "GET",
+ dataType: 'json',
+ success: function(data) {
+ var mappedRepositoryGroups=mapRepositoryGroups(data);
+ for(var i=0;i<mappedRepositoryGroups.length;i++){
+ mappedRepositoryGroups[i]
+ .managedRepositories(self.mapManagedRepositoriesToRepositoryGroup(mappedRepositoryGroups[i]));
+ mappedRepositoryGroups[i].modified(false);
+ $.log("mappedRepositoryGroups.repositories().length:"+mappedRepositoryGroups[i].repositories().length);
+ }
+ mainContent.html($("#repositoryGroupsMain").tmpl());
+ self.repositoryGroupsViewModel.repositoryGroups(mappedRepositoryGroups);
+ $.log("displayRepositoryGroups#applyBindings before");
+ ko.applyBindings(self.repositoryGroupsViewModel,mainContent.find("#repository-groups-view" ).get(0));
+ $.log("displayRepositoryGroups#applyBindings after");
+
+ mainContent.find("#repository-groups-view-tabs").on('show', function (e) {
+ if ($(e.target).attr("href")=="#repository-groups-edit") {
+ var repositoryGroup = new RepositoryGroup();
+ var repositoryGroupViewModel=new RepositoryGroupViewModel(repositoryGroup,false,self.repositoryGroupsViewModel);
+
+ activateRepositoryGroupEditTab();
+ ko.applyBindings(repositoryGroupViewModel,mainContent.find("#repository-groups-edit" ).get(0));
+ repositoryGroupViewModel.renderSortableChoosed(self.repositoryGroupsViewModel);
+ repositoryGroupViewModel.renderSortableAvailables(self.repositoryGroupsViewModel);
+ }
+ if ($(e.target).attr("href")=="#repository-groups-view") {
+ mainContent.find("#repository-groups-view-tabs-li-edit a").html($.i18n.prop("add"));
+ clearUserMessages();
+ }
+
+ });
+
+ if(successFn){
+ successFn(self.repositoryGroupsViewModel);
+ }
+
+ }
+ }
+ );
+
+ }
+ });
+ });
+
+ this.mapManagedRepositoriesToRepositoryGroup=function(repositoryGroup){
+ $.log("mapManagedRepositoriesToRepositoryGroup");
+ var managedRepositories=new Array();
+ if (!repositoryGroup.repositories()) {
+ repositoryGroup.repositories(new Array());
+ return managedRepositories;
+ }
+ for(var i=0;i<repositoryGroup.repositories().length;i++){
+ managedRepositories.push(self.repositoryGroupsViewModel.findManagedRepository(repositoryGroup.repositories()[i]));
+ }
+ $.log("end mapManagedRepositoriesToRepositoryGroup");
+ return managedRepositories;
+ }
+
+ }
+
+
+
+ activateRepositoryGroupsGridTab=function(){
+ var mainContent = $("#main-content");
+ mainContent.find("#repository-groups-view-tabs-content div[class*='tab-pane']").removeClass("active");
+ mainContent.find("#repository-groups-view-tabs li").removeClass("active");
+
+ mainContent.find("#repository-groups-view").addClass("active");
+ mainContent.find("#repository-groups-view-tabs-li-grid").addClass("active");
+ mainContent.find("#repository-groups-view-tabs-li-edit a").html($.i18n.prop("add"));
+
+ }
+
+ activateRepositoryGroupEditTab=function(){
+ $.log("activateRepositoryGroupEditTab");
+ var mainContent = $("#main-content");
+
+ mainContent.find("#repository-groups-view-tabs-content div[class*='tab-pane']").removeClass("active");
+ mainContent.find("#repository-groups-view-tabs li").removeClass("active");
+
+ mainContent.find("#repository-groups-edit").addClass("active");
+ mainContent.find("#repository-groups-view-tabs-li-edit").addClass("active");
+
+
+ }
+
+ repositoryGroupValidator=function(){
+ $.log("validator");
+ var theForm=$("#main-content").find("#repository-group-edit-form");
+ var validator = theForm.validate({
+ rules: {
+ id: {
+ required: true
+ },
+ mergedIndexPath:{
+ required:true
+ }
+ },
+ showErrors: function(validator, errorMap, errorList) {
+ customShowError("#main-content #repository-group-edit-form",validator,errorMap,errorMap);
+ }
+ });
+ return validator;
+ }
+
+ mapRepositoryGroups=function(data){
+ if (data == null){
+ return new Array();
+ }
+ var mappedRepositoryGroups = $.map(data, function(item) {
+ return mapRepositoryGroup(item);
+ });
+ return mappedRepositoryGroups;
+ }
+
+ mapRepositoryGroup=function(data){
+ return new RepositoryGroup(data.id, mapStringArray(data.repositories),data.mergedIndexPath);
+ }
+
+});
Propchange: archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/admin/repository/maven2/repository-groups.js
------------------------------------------------------------------------------
svn:eol-style = native
Modified: archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/archiva.js
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/archiva.js?rev=1486339&r1=1486338&r2=1486339&view=diff
==============================================================================
--- archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/archiva.js (original)
+++ archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/archiva.js Sat May 25 15:43:04 2013
@@ -88,7 +88,7 @@ $.ajax({
"redback.user": "redback/user",
"redback.users": "redback/users",
"redback.templates": "redback/redback-tmpl",
- // "archiva.general-admin":"archiva/general-admin",
+ "archiva.cookie-information":"archiva/cookie-information",
"archiva.templates": "archiva/main-tmpl",
// "archiva.repositories": "archiva/repositories",
// "archiva.network-proxies": "archiva/network-proxies",
@@ -103,32 +103,10 @@ $.ajax({
});
- CookieInformation=function(path,domain,secure,timeout,rememberMeEnabled){
- //private String path;
- this.path=path;
-
- //private String domain;
- this.domain=domain;
-
- //private String secure;
- this.secure=secure;
-
- //private String timeout;
- this.timeout=timeout;
-
- //private boolean rememberMeEnabled;
- this.rememberMeEnabled=rememberMeEnabled;
- }
-
- mapCookieInformation=function(data){
- if(!data){
- return new CookieInformation();
- }
- return new CookieInformation(data.path,data.domain,data.secure,data.timeout,data.rememberMeEnabled);
- }
+
- requirejs(['jquery','jquery.tmpl','jquery.ui','i18n','sammy','startup','utils','domReady!','archiva.main'/*,'archiva.general-admin'*/], function () {
+ requirejs(['jquery','jquery.tmpl','jquery.ui','i18n','sammy','startup','utils','domReady!','archiva.main','archiva.cookie-information'], function () {
loadi18n(function () {
$.ajax({
url: "restServices/archivaUiServices/runtimeInfoService/archivaRuntimeInfo/"+usedLang(),
Added: archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/cookie-information.js
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/cookie-information.js?rev=1486339&view=auto
==============================================================================
--- archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/cookie-information.js (added)
+++ archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/cookie-information.js Sat May 25 15:43:04 2013
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2013 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+define("archiva.cookie-information",function() {
+CookieInformation=function(path,domain,secure,timeout,rememberMeEnabled){
+ //private String path;
+ this.path=path;
+
+ //private String domain;
+ this.domain=domain;
+
+ //private String secure;
+ this.secure=secure;
+
+ //private String timeout;
+ this.timeout=timeout;
+
+ //private boolean rememberMeEnabled;
+ this.rememberMeEnabled=rememberMeEnabled;
+ }
+
+ mapCookieInformation=function(data){
+ if(!data){
+ return new CookieInformation();
+ }
+ return new CookieInformation(data.path,data.domain,data.secure,data.timeout,data.rememberMeEnabled);
+ }
+
+});
\ No newline at end of file
Propchange: archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/cookie-information.js
------------------------------------------------------------------------------
svn:eol-style = native
Modified: archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/main.js
URL: http://svn.apache.org/viewvc/archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/main.js?rev=1486339&r1=1486338&r2=1486339&view=diff
==============================================================================
--- archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/main.js (original)
+++ archiva/branches/archiva-MRM-1756/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/main.js Sat May 25 15:43:04 2013
@@ -222,20 +222,28 @@ function(jquery,ui,sammy,tmpl,i18n,jquer
{ text : $.i18n.prop('menu.artifacts.upload') , id: "menu-find-upload-a", href: "#upload" , redback: "{permissions: ['archiva-upload-repository']}", func: function(){displayUploadArtifact(true)}}
]);
this.administrationMenuItems = ko.observableArray([
- {text: $.i18n.prop('menu.administration'), id: null} ]);
+ {text: $.i18n.prop('menu.administration'), id: null ,order : 1} ]);
var pluginsURL = "restServices/archivaServices/pluginsService/getAdminPlugins";
$.ajax(pluginsURL, {
type: "GET",
dataType: 'text',
+
success: function(data) {
- $.each(data.split("|"), function(key, value) {
+ $.each(data.split("|"), function(key, value) {
require([value], function() {
showMenu(self.administrationMenuItems);
+ // sort menu according to order field
+ //
+ self.administrationMenuItems.sort(function(left, right) {
+ return left.order == right.order ? 0 : (left.order < right.order ? -1 : 1)
+ })
});
});
+
}
+
});