mirror of https://github.com/apache/archiva.git
start refactoring to use only require js to ensure correct js loading order
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1305567 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
21d37b8176
commit
8c2d65b256
|
@ -10,9 +10,17 @@
|
||||||
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
|
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="js/lab.js"></script>
|
<script type="text/javascript" src="js/lab.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var require = {
|
||||||
|
config:{
|
||||||
|
urlArgs: "timeStampCache="+new Date().getTime()
|
||||||
|
},
|
||||||
|
deps: ["js/jquery-1.7.2.js","js/jquery.tmpl.js","js/archiva/utils.js","js/startup.js"]
|
||||||
|
};
|
||||||
|
</script>
|
||||||
<script type="text/javascript" src="js/require.1.0.7.js"></script>
|
<script type="text/javascript" src="js/require.1.0.7.js"></script>
|
||||||
<script type="text/javascript" src="js/jquery.i18n.properties-1.0.9.js"></script>
|
<script type="text/javascript" src="js/jquery.i18n.properties-1.0.9.js"></script>
|
||||||
<script type="text/javascript" src="js/archiva/startup.js"></script>
|
|
||||||
<title>Apache Archiva</title>
|
<title>Apache Archiva</title>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
@ -48,18 +56,22 @@
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
$(function() {
|
|
||||||
|
|
||||||
require.config({
|
require.config({
|
||||||
baseUrl: "js/",
|
baseUrl: "js/",
|
||||||
|
urlArgs: "timeStampCache="+new Date().getTime(),
|
||||||
"paths": {
|
"paths": {
|
||||||
"i18n":"jquery.i18n.properties-1.0.9",
|
"i18n":"jquery.i18n.properties-1.0.9",
|
||||||
"jquery": "jquery-1.7.2"
|
"jquery": "jquery-1.7.2"
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
require(['domReady'], function (domReady) {
|
||||||
|
domReady.withResources(function () {
|
||||||
|
loadJs();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
loadJs();
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -17,343 +17,368 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
define("utils",["jquery","i18n","js/jquery.tmpl.js"], function() {
|
||||||
* log message in the console
|
|
||||||
*/
|
|
||||||
$.log = (function(message) {
|
|
||||||
if ( !window.archivaJavascriptLog ){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (typeof window.console != 'undefined' && typeof window.console.log != 'undefined') {
|
|
||||||
console.log(message);
|
|
||||||
} else {
|
|
||||||
// do nothing no console
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* display a success message
|
* log message in the console
|
||||||
* @param text the success text
|
*/
|
||||||
* @param idToAppend the id to append the success box
|
$.log = (function(message) {
|
||||||
*/
|
if ( !window.archivaJavascriptLog ){
|
||||||
displaySuccessMessage=function(text,idToAppend){
|
|
||||||
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
|
||||||
$.tmpl($("#alert-message-success").html(), { "message" : text }).appendTo( textId );
|
|
||||||
$(textId).focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* display an error message
|
|
||||||
* @param text the success text
|
|
||||||
* @param idToAppend the id to append the success box
|
|
||||||
*/
|
|
||||||
displayErrorMessage=function(text,idToAppend){
|
|
||||||
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
|
||||||
$.tmpl($("#alert-message-error").html(), { "message" : text }).appendTo( textId );
|
|
||||||
$(textId).focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* display a warning message
|
|
||||||
* @param text the success text
|
|
||||||
* @param idToAppend the id to append the success box
|
|
||||||
*/
|
|
||||||
displayWarningMessage=function(text,idToAppend){
|
|
||||||
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
|
||||||
$.tmpl($("#alert-message-warning").html(), { "message" : text }).appendTo( textId );
|
|
||||||
$(textId).focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
displayInfoMessage=function(text,idToAppend){
|
|
||||||
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
|
||||||
$.tmpl($("#alert-message-info").html(), { "message" : text }).appendTo( textId );
|
|
||||||
$(textId).focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clear #main-content and call clearUserMessages
|
|
||||||
*/
|
|
||||||
screenChange=function(){
|
|
||||||
$("#main-content").html("");
|
|
||||||
$("#main-content").removeAttr("data-bind");
|
|
||||||
clearUserMessages();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clear content of id if none clear content of #user-messages
|
|
||||||
* @param idToAppend
|
|
||||||
*/
|
|
||||||
clearUserMessages=function(idToAppend){
|
|
||||||
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
|
||||||
$(textId).html('');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clear all input text and password found in the the selector
|
|
||||||
* @param selectorStr
|
|
||||||
*/
|
|
||||||
clearForm=function(selectorStr){
|
|
||||||
$(selectorStr).find("input[type='text']").each(function(ele){
|
|
||||||
$(this).val("");
|
|
||||||
});
|
|
||||||
$(selectorStr).find("input[type='password']").each(function(ele){
|
|
||||||
$(this).val("");
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* open a confirm dialog based on bootstrap modal
|
|
||||||
* @param okFn callback function to call on ok confirm
|
|
||||||
* @param okMessage
|
|
||||||
* @param cancelMessage
|
|
||||||
* @param title
|
|
||||||
*/
|
|
||||||
openDialogConfirm=function(okFn, okMessage, cancelMessage, title,bodyText){
|
|
||||||
if (window.modalConfirmDialog==null) {
|
|
||||||
window.modalConfirmDialog = $("#dialog-confirm-modal").modal();//{backdrop:'static',show:false}
|
|
||||||
window.modalConfirmDialog.bind('hidden', function () {
|
|
||||||
$("#dialog-confirm-modal-header-title").html("");
|
|
||||||
$("#dialog-confirm-modal-body-text").html("");
|
|
||||||
})
|
|
||||||
$("#dialog-confirm-modal-cancel").on("click", function(){
|
|
||||||
window.modalConfirmDialog.modal('hide');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
$("#dialog-confirm-modal-header-title").html(title);
|
|
||||||
$("#dialog-confirm-modal-body-text").html(bodyText);
|
|
||||||
if (okMessage){
|
|
||||||
$("#dialog-confirm-modal-ok").html(okMessage);
|
|
||||||
}
|
|
||||||
if (cancelMessage){
|
|
||||||
$("#dialog-confirm-modal-cancel").html(cancelMessage);
|
|
||||||
}
|
|
||||||
window.modalConfirmDialog.modal('show');
|
|
||||||
|
|
||||||
// unbind previous events !!
|
|
||||||
$("#dialog-confirm-modal-ok").off( );
|
|
||||||
$("#dialog-confirm-modal-ok").on("click", okFn);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* return a small spinner html img element
|
|
||||||
*/
|
|
||||||
smallSpinnerImg=function(){
|
|
||||||
return "<img id=\"small-spinner\" src=\"images/small-spinner.gif\"/>";
|
|
||||||
};
|
|
||||||
|
|
||||||
removeSmallSpinnerImg=function(){
|
|
||||||
$("#small-spinner").remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
mediumSpinnerImg=function(){
|
|
||||||
return "<img id=\"medium-spinner\" src=\"images/medium-spinner.gif\"/>";
|
|
||||||
};
|
|
||||||
|
|
||||||
removeMediumSpinnerImg=function(){
|
|
||||||
$("#medium-spinner").remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
removeMediumSpinnerImg=function(selector){
|
|
||||||
$(selector+" #medium-spinner").remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
closeDialogConfirm=function(){
|
|
||||||
window.modalConfirmDialog.modal('hide');
|
|
||||||
}
|
|
||||||
|
|
||||||
closeDialogConfirmui=function(){
|
|
||||||
$("#dialog-confirm" ).dialog("close");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* open a confirm dialog with jqueryui
|
|
||||||
* @param okFn callback function to call on ok confirm
|
|
||||||
* @param okMessage
|
|
||||||
* @param cancelMessage
|
|
||||||
* @param title
|
|
||||||
*/
|
|
||||||
openDialogConfirmui=function(okFn, okMessage, cancelMessage, title){
|
|
||||||
$("#dialog-confirm" ).dialog({
|
|
||||||
resizable: false,
|
|
||||||
title: title,
|
|
||||||
modal: true,
|
|
||||||
show: 'slide',
|
|
||||||
buttons: [{
|
|
||||||
text: okMessage,
|
|
||||||
click: okFn},
|
|
||||||
{
|
|
||||||
text: cancelMessage,
|
|
||||||
click:function() {
|
|
||||||
$(this).dialog( "close" );
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
mapStringArray=function(data){
|
|
||||||
if (data) {
|
|
||||||
if ($.isArray(data)){
|
|
||||||
return $.map(data,function(item){
|
|
||||||
return item;
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
return new Array(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* display redback error from redback json error response
|
|
||||||
* {"redbackRestError":{"errorMessages":{"args":1,"errorKey":"user.password.violation.numeric"}}}
|
|
||||||
* @param obj
|
|
||||||
* @param idToAppend
|
|
||||||
*/
|
|
||||||
displayRedbackError=function(obj,idToAppend) {
|
|
||||||
if ($.isArray(obj.errorMessages)) {
|
|
||||||
$.log("displayRedbackError with array");
|
|
||||||
for(var i=0; i<obj.errorMessages.length; i++ ) {
|
|
||||||
if(obj.errorMessages[i].errorKey) {
|
|
||||||
$.log("displayRedbackError with array loop");
|
|
||||||
displayErrorMessage($.i18n.prop( obj.errorMessages[i].errorKey, obj.errorMessages[i].args ),idToAppend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$.log("displayRedbackError no array");
|
|
||||||
displayErrorMessage($.i18n.prop( obj.errorMessages.errorKey, obj.errorMessages.args ),idToAppend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* generic function to display error return by rest service
|
|
||||||
* if fieldName is here the function will try to find a field with this name and add a span on it
|
|
||||||
* if not error is displayed in #user-messages div
|
|
||||||
*/
|
|
||||||
displayRestError=function(data,idToAppend){
|
|
||||||
|
|
||||||
if (data.redbackRestError){
|
|
||||||
displayRedbackError(archivaRestError,idToAppend)
|
|
||||||
}
|
|
||||||
// if we have the fieldName display error on it
|
|
||||||
if (data && data.fieldName){
|
|
||||||
var mainContent=$("#main-content");
|
|
||||||
|
|
||||||
if (mainContent.find("#"+data.fieldName)){
|
|
||||||
var message=null;
|
|
||||||
if (data.errorKey) {
|
|
||||||
message=$.i18n.prop('data.errorKey');
|
|
||||||
} else {
|
|
||||||
message=data.errorMessage;
|
|
||||||
}
|
|
||||||
mainContent.find("div.clearfix" ).removeClass( "error" );
|
|
||||||
mainContent.find("span.help-inline" ).remove();
|
|
||||||
mainContent.find("#"+data.fieldName).parents( "div.clearfix" ).addClass( "error" );
|
|
||||||
mainContent.find("#"+data.fieldName).parent().append( "<span class=\"help-inline\">" + message + "</span>" );
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// we don't have any id with this fieldName so continue
|
if (typeof window.console != 'undefined' && typeof window.console.log != 'undefined') {
|
||||||
}
|
console.log(message);
|
||||||
|
|
||||||
if (data.errorKey && data.errorKey.length>0){
|
|
||||||
displayErrorMessage($.i18n.prop( data.errorKey ),idToAppend);
|
|
||||||
} else {
|
} else {
|
||||||
$.log("data.errorMessage:"+data.errorMessage);
|
// do nothing no console
|
||||||
displayErrorMessage(data.errorMessage,idToAppend);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* used by validation error to customize error display in the ui
|
|
||||||
* @param selector
|
|
||||||
* @param validator
|
|
||||||
* @param errorMap
|
|
||||||
* @param errorList
|
|
||||||
*/
|
|
||||||
customShowError=function(selector, validator, errorMap, errorList) {
|
|
||||||
$(selector).find("div.control-group" ).removeClass( "error" );
|
|
||||||
$(selector).find("span.help-inline").remove();
|
|
||||||
for ( var i = 0; errorList[i]; i++ ) {
|
|
||||||
var error = errorList[i];
|
|
||||||
var field = $(selector).find("#"+error.element.id);
|
|
||||||
field.parents( "div.control-group" ).addClass( "error" );
|
|
||||||
field.parent().append( "<span class=\"help-inline\">" + error.message + "</span>" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
timestampNoCache=function(){
|
|
||||||
if (!window.archivaDevMode){
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return "&_="+jQuery.now();
|
|
||||||
}
|
|
||||||
|
|
||||||
appendTemplateUrl=function(){
|
|
||||||
return "?"+appendArchivaVersion()+timestampNoCache();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* mapping for a java Map entry
|
|
||||||
* @param key
|
|
||||||
* @param value
|
|
||||||
*/
|
|
||||||
Entry=function(key,value){
|
|
||||||
var self=this;
|
|
||||||
this.key=ko.observable(key);
|
|
||||||
this.value=ko.observable(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* map {"strings":["snapshots","internal"]} to an array
|
|
||||||
* @param data
|
|
||||||
*/
|
|
||||||
mapStringList=function(data){
|
|
||||||
if (data && data.strings){
|
|
||||||
return $.isArray(data.strings) ?
|
|
||||||
$.map(data.strings,function(item){return item}): [data.strings];
|
|
||||||
}
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* return an array with removing duplicate strings
|
|
||||||
* @param strArray an array of string
|
|
||||||
* @param sorted to sort or not
|
|
||||||
*/
|
|
||||||
unifyArray=function(strArray,sorted){
|
|
||||||
var res = [];
|
|
||||||
$(strArray).each(function(idx,str){
|
|
||||||
if ( $.inArray(str,res)<0){
|
|
||||||
res.push(str);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return sorted?res.sort():res;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------
|
/**
|
||||||
// utils javascript string extensions
|
* return value of a param in the url
|
||||||
//------------------------------------
|
* @param name
|
||||||
|
*/
|
||||||
|
$.urlParam = function(name){
|
||||||
|
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
|
||||||
|
if (results) {
|
||||||
|
return results[1] || 0;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
String.prototype.endsWith = function(str) {
|
usedLang=function(){
|
||||||
return (this.match(str+"$")==str)
|
var browserLang = $.i18n.browserLang();
|
||||||
}
|
var requestLang = $.urlParam('request_lang');
|
||||||
|
if (requestLang) {
|
||||||
String.prototype.startsWith = function(str) {
|
browserLang=requestLang;
|
||||||
return (this.match("^"+str)==str)
|
|
||||||
}
|
|
||||||
|
|
||||||
String.prototype.substringBeforeLast = function(str) {
|
|
||||||
return this.substring(0,this.lastIndexOf(str));
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------
|
|
||||||
// extends jquery tmpl to support var def
|
|
||||||
//-----------------------------------------
|
|
||||||
|
|
||||||
$.extend($.tmpl.tag, {
|
|
||||||
"var": {
|
|
||||||
open: "var $1;"
|
|
||||||
}
|
}
|
||||||
|
return browserLang;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* display a success message
|
||||||
|
* @param text the success text
|
||||||
|
* @param idToAppend the id to append the success box
|
||||||
|
*/
|
||||||
|
displaySuccessMessage=function(text,idToAppend){
|
||||||
|
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
||||||
|
$.tmpl($("#alert-message-success").html(), { "message" : text }).appendTo( textId );
|
||||||
|
$(textId).focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* display an error message
|
||||||
|
* @param text the success text
|
||||||
|
* @param idToAppend the id to append the success box
|
||||||
|
*/
|
||||||
|
displayErrorMessage=function(text,idToAppend){
|
||||||
|
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
||||||
|
$.tmpl($("#alert-message-error").html(), { "message" : text }).appendTo( textId );
|
||||||
|
$(textId).focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* display a warning message
|
||||||
|
* @param text the success text
|
||||||
|
* @param idToAppend the id to append the success box
|
||||||
|
*/
|
||||||
|
displayWarningMessage=function(text,idToAppend){
|
||||||
|
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
||||||
|
$.tmpl($("#alert-message-warning").html(), { "message" : text }).appendTo( textId );
|
||||||
|
$(textId).focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
displayInfoMessage=function(text,idToAppend){
|
||||||
|
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
||||||
|
$.tmpl($("#alert-message-info").html(), { "message" : text }).appendTo( textId );
|
||||||
|
$(textId).focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clear #main-content and call clearUserMessages
|
||||||
|
*/
|
||||||
|
screenChange=function(){
|
||||||
|
$("#main-content").html("");
|
||||||
|
$("#main-content").removeAttr("data-bind");
|
||||||
|
clearUserMessages();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clear content of id if none clear content of #user-messages
|
||||||
|
* @param idToAppend
|
||||||
|
*/
|
||||||
|
clearUserMessages=function(idToAppend){
|
||||||
|
var textId = idToAppend ? $("#"+idToAppend) : $("#user-messages");
|
||||||
|
$(textId).html('');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clear all input text and password found in the the selector
|
||||||
|
* @param selectorStr
|
||||||
|
*/
|
||||||
|
clearForm=function(selectorStr){
|
||||||
|
$(selectorStr).find("input[type='text']").each(function(ele){
|
||||||
|
$(this).val("");
|
||||||
|
});
|
||||||
|
$(selectorStr).find("input[type='password']").each(function(ele){
|
||||||
|
$(this).val("");
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* open a confirm dialog based on bootstrap modal
|
||||||
|
* @param okFn callback function to call on ok confirm
|
||||||
|
* @param okMessage
|
||||||
|
* @param cancelMessage
|
||||||
|
* @param title
|
||||||
|
*/
|
||||||
|
openDialogConfirm=function(okFn, okMessage, cancelMessage, title,bodyText){
|
||||||
|
if (window.modalConfirmDialog==null) {
|
||||||
|
window.modalConfirmDialog = $("#dialog-confirm-modal").modal();//{backdrop:'static',show:false}
|
||||||
|
window.modalConfirmDialog.bind('hidden', function () {
|
||||||
|
$("#dialog-confirm-modal-header-title").html("");
|
||||||
|
$("#dialog-confirm-modal-body-text").html("");
|
||||||
|
})
|
||||||
|
$("#dialog-confirm-modal-cancel").on("click", function(){
|
||||||
|
window.modalConfirmDialog.modal('hide');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$("#dialog-confirm-modal-header-title").html(title);
|
||||||
|
$("#dialog-confirm-modal-body-text").html(bodyText);
|
||||||
|
if (okMessage){
|
||||||
|
$("#dialog-confirm-modal-ok").html(okMessage);
|
||||||
|
}
|
||||||
|
if (cancelMessage){
|
||||||
|
$("#dialog-confirm-modal-cancel").html(cancelMessage);
|
||||||
|
}
|
||||||
|
window.modalConfirmDialog.modal('show');
|
||||||
|
|
||||||
|
// unbind previous events !!
|
||||||
|
$("#dialog-confirm-modal-ok").off( );
|
||||||
|
$("#dialog-confirm-modal-ok").on("click", okFn);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return a small spinner html img element
|
||||||
|
*/
|
||||||
|
smallSpinnerImg=function(){
|
||||||
|
return "<img id=\"small-spinner\" src=\"images/small-spinner.gif\"/>";
|
||||||
|
};
|
||||||
|
|
||||||
|
removeSmallSpinnerImg=function(){
|
||||||
|
$("#small-spinner").remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
mediumSpinnerImg=function(){
|
||||||
|
return "<img id=\"medium-spinner\" src=\"images/medium-spinner.gif\"/>";
|
||||||
|
};
|
||||||
|
|
||||||
|
removeMediumSpinnerImg=function(){
|
||||||
|
$("#medium-spinner").remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
removeMediumSpinnerImg=function(selector){
|
||||||
|
$(selector+" #medium-spinner").remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
closeDialogConfirm=function(){
|
||||||
|
window.modalConfirmDialog.modal('hide');
|
||||||
|
}
|
||||||
|
|
||||||
|
closeDialogConfirmui=function(){
|
||||||
|
$("#dialog-confirm" ).dialog("close");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* open a confirm dialog with jqueryui
|
||||||
|
* @param okFn callback function to call on ok confirm
|
||||||
|
* @param okMessage
|
||||||
|
* @param cancelMessage
|
||||||
|
* @param title
|
||||||
|
*/
|
||||||
|
openDialogConfirmui=function(okFn, okMessage, cancelMessage, title){
|
||||||
|
$("#dialog-confirm" ).dialog({
|
||||||
|
resizable: false,
|
||||||
|
title: title,
|
||||||
|
modal: true,
|
||||||
|
show: 'slide',
|
||||||
|
buttons: [{
|
||||||
|
text: okMessage,
|
||||||
|
click: okFn},
|
||||||
|
{
|
||||||
|
text: cancelMessage,
|
||||||
|
click:function() {
|
||||||
|
$(this).dialog( "close" );
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
mapStringArray=function(data){
|
||||||
|
if (data) {
|
||||||
|
if ($.isArray(data)){
|
||||||
|
return $.map(data,function(item){
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return new Array(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* display redback error from redback json error response
|
||||||
|
* {"redbackRestError":{"errorMessages":{"args":1,"errorKey":"user.password.violation.numeric"}}}
|
||||||
|
* @param obj
|
||||||
|
* @param idToAppend
|
||||||
|
*/
|
||||||
|
displayRedbackError=function(obj,idToAppend) {
|
||||||
|
if ($.isArray(obj.errorMessages)) {
|
||||||
|
$.log("displayRedbackError with array");
|
||||||
|
for(var i=0; i<obj.errorMessages.length; i++ ) {
|
||||||
|
if(obj.errorMessages[i].errorKey) {
|
||||||
|
$.log("displayRedbackError with array loop");
|
||||||
|
displayErrorMessage($.i18n.prop( obj.errorMessages[i].errorKey, obj.errorMessages[i].args ),idToAppend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$.log("displayRedbackError no array");
|
||||||
|
displayErrorMessage($.i18n.prop( obj.errorMessages.errorKey, obj.errorMessages.args ),idToAppend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* generic function to display error return by rest service
|
||||||
|
* if fieldName is here the function will try to find a field with this name and add a span on it
|
||||||
|
* if not error is displayed in #user-messages div
|
||||||
|
*/
|
||||||
|
displayRestError=function(data,idToAppend){
|
||||||
|
|
||||||
|
if (data.redbackRestError){
|
||||||
|
displayRedbackError(archivaRestError,idToAppend)
|
||||||
|
}
|
||||||
|
// if we have the fieldName display error on it
|
||||||
|
if (data && data.fieldName){
|
||||||
|
var mainContent=$("#main-content");
|
||||||
|
|
||||||
|
if (mainContent.find("#"+data.fieldName)){
|
||||||
|
var message=null;
|
||||||
|
if (data.errorKey) {
|
||||||
|
message=$.i18n.prop('data.errorKey');
|
||||||
|
} else {
|
||||||
|
message=data.errorMessage;
|
||||||
|
}
|
||||||
|
mainContent.find("div.clearfix" ).removeClass( "error" );
|
||||||
|
mainContent.find("span.help-inline" ).remove();
|
||||||
|
mainContent.find("#"+data.fieldName).parents( "div.clearfix" ).addClass( "error" );
|
||||||
|
mainContent.find("#"+data.fieldName).parent().append( "<span class=\"help-inline\">" + message + "</span>" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// we don't have any id with this fieldName so continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.errorKey && data.errorKey.length>0){
|
||||||
|
displayErrorMessage($.i18n.prop( data.errorKey ),idToAppend);
|
||||||
|
} else {
|
||||||
|
$.log("data.errorMessage:"+data.errorMessage);
|
||||||
|
displayErrorMessage(data.errorMessage,idToAppend);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* used by validation error to customize error display in the ui
|
||||||
|
* @param selector
|
||||||
|
* @param validator
|
||||||
|
* @param errorMap
|
||||||
|
* @param errorList
|
||||||
|
*/
|
||||||
|
customShowError=function(selector, validator, errorMap, errorList) {
|
||||||
|
$(selector).find("div.control-group" ).removeClass( "error" );
|
||||||
|
$(selector).find("span.help-inline").remove();
|
||||||
|
for ( var i = 0; errorList[i]; i++ ) {
|
||||||
|
var error = errorList[i];
|
||||||
|
var field = $(selector).find("#"+error.element.id);
|
||||||
|
field.parents( "div.control-group" ).addClass( "error" );
|
||||||
|
field.parent().append( "<span class=\"help-inline\">" + error.message + "</span>" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
timestampNoCache=function(){
|
||||||
|
if (!window.archivaDevMode){
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return "&_="+jQuery.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
appendTemplateUrl=function(){
|
||||||
|
return "?"+appendArchivaVersion()+timestampNoCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mapping for a java Map entry
|
||||||
|
* @param key
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
Entry=function(key,value){
|
||||||
|
var self=this;
|
||||||
|
this.key=ko.observable(key);
|
||||||
|
this.value=ko.observable(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* map {"strings":["snapshots","internal"]} to an array
|
||||||
|
* @param data
|
||||||
|
*/
|
||||||
|
mapStringList=function(data){
|
||||||
|
if (data && data.strings){
|
||||||
|
return $.isArray(data.strings) ?
|
||||||
|
$.map(data.strings,function(item){return item}): [data.strings];
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return an array with removing duplicate strings
|
||||||
|
* @param strArray an array of string
|
||||||
|
* @param sorted to sort or not
|
||||||
|
*/
|
||||||
|
unifyArray=function(strArray,sorted){
|
||||||
|
var res = [];
|
||||||
|
$(strArray).each(function(idx,str){
|
||||||
|
if ( $.inArray(str,res)<0){
|
||||||
|
res.push(str);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return sorted?res.sort():res;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------
|
||||||
|
// utils javascript string extensions
|
||||||
|
//------------------------------------
|
||||||
|
|
||||||
|
String.prototype.endsWith = function(str) {
|
||||||
|
return (this.match(str+"$")==str)
|
||||||
|
}
|
||||||
|
|
||||||
|
String.prototype.startsWith = function(str) {
|
||||||
|
return (this.match("^"+str)==str)
|
||||||
|
}
|
||||||
|
|
||||||
|
String.prototype.substringBeforeLast = function(str) {
|
||||||
|
return this.substring(0,this.lastIndexOf(str));
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------
|
||||||
|
// extends jquery tmpl to support var def
|
||||||
|
//-----------------------------------------
|
||||||
|
|
||||||
|
$.extend($.tmpl.tag, {
|
||||||
|
"var": {
|
||||||
|
open: "var $1;"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
|
@ -0,0 +1,170 @@
|
||||||
|
/**
|
||||||
|
* @license RequireJS domReady 1.0.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.
|
||||||
|
* Available via the MIT or new BSD license.
|
||||||
|
* see: http://github.com/jrburke/requirejs for details
|
||||||
|
*/
|
||||||
|
/*jslint strict: false, plusplus: false */
|
||||||
|
/*global require: false, define: false, requirejs: false,
|
||||||
|
window: false, clearInterval: false, document: false,
|
||||||
|
self: false, setInterval: false */
|
||||||
|
|
||||||
|
|
||||||
|
define(function () {
|
||||||
|
var isBrowser = typeof window !== "undefined" && window.document,
|
||||||
|
isPageLoaded = !isBrowser,
|
||||||
|
doc = isBrowser ? document : null,
|
||||||
|
readyCalls = [],
|
||||||
|
readyLoaderCalls = [],
|
||||||
|
//Bind to a specific implementation, but if not there, try a
|
||||||
|
//a generic one under the "require" name.
|
||||||
|
req = requirejs || require || {},
|
||||||
|
oldResourcesReady = req.resourcesReady,
|
||||||
|
scrollIntervalId;
|
||||||
|
|
||||||
|
function runCallbacks(callbacks) {
|
||||||
|
for (var i = 0, callback; (callback = callbacks[i]); i++) {
|
||||||
|
callback(doc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function callReady() {
|
||||||
|
var callbacks = readyCalls,
|
||||||
|
loaderCallbacks = readyLoaderCalls;
|
||||||
|
|
||||||
|
if (isPageLoaded) {
|
||||||
|
//Call the DOM ready callbacks
|
||||||
|
if (callbacks.length) {
|
||||||
|
readyCalls = [];
|
||||||
|
runCallbacks(callbacks);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Now handle DOM ready + loader ready callbacks.
|
||||||
|
if (req.resourcesDone && loaderCallbacks.length) {
|
||||||
|
readyLoaderCalls = [];
|
||||||
|
runCallbacks(loaderCallbacks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a method to require to get callbacks if there are loader resources still
|
||||||
|
* being loaded. If so, then hold off calling "withResources" callbacks.
|
||||||
|
*
|
||||||
|
* @param {Boolean} isReady: pass true if all resources have been loaded.
|
||||||
|
*/
|
||||||
|
if ('resourcesReady' in req) {
|
||||||
|
req.resourcesReady = function (isReady) {
|
||||||
|
//Call the old function if it is around.
|
||||||
|
if (oldResourcesReady) {
|
||||||
|
oldResourcesReady(isReady);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isReady) {
|
||||||
|
callReady();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the page as loaded.
|
||||||
|
*/
|
||||||
|
function pageLoaded() {
|
||||||
|
if (!isPageLoaded) {
|
||||||
|
isPageLoaded = true;
|
||||||
|
if (scrollIntervalId) {
|
||||||
|
clearInterval(scrollIntervalId);
|
||||||
|
}
|
||||||
|
|
||||||
|
callReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isBrowser) {
|
||||||
|
if (document.addEventListener) {
|
||||||
|
//Standards. Hooray! Assumption here that if standards based,
|
||||||
|
//it knows about DOMContentLoaded.
|
||||||
|
document.addEventListener("DOMContentLoaded", pageLoaded, false);
|
||||||
|
window.addEventListener("load", pageLoaded, false);
|
||||||
|
} else if (window.attachEvent) {
|
||||||
|
window.attachEvent("onload", pageLoaded);
|
||||||
|
|
||||||
|
//DOMContentLoaded approximation, as found by Diego Perini:
|
||||||
|
//http://javascript.nwbox.com/IEContentLoaded/
|
||||||
|
if (self === self.top) {
|
||||||
|
scrollIntervalId = setInterval(function () {
|
||||||
|
try {
|
||||||
|
//From this ticket:
|
||||||
|
//http://bugs.dojotoolkit.org/ticket/11106,
|
||||||
|
//In IE HTML Application (HTA), such as in a selenium test,
|
||||||
|
//javascript in the iframe can't see anything outside
|
||||||
|
//of it, so self===self.top is true, but the iframe is
|
||||||
|
//not the top window and doScroll will be available
|
||||||
|
//before document.body is set. Test document.body
|
||||||
|
//before trying the doScroll trick.
|
||||||
|
if (document.body) {
|
||||||
|
document.documentElement.doScroll("left");
|
||||||
|
pageLoaded();
|
||||||
|
}
|
||||||
|
} catch (e) {}
|
||||||
|
}, 30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check if document already complete, and if so, just trigger page load
|
||||||
|
//listeners.
|
||||||
|
if (document.readyState === "complete") {
|
||||||
|
pageLoaded();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** START OF PUBLIC API **/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a callback for DOM ready. If DOM is already ready, the
|
||||||
|
* callback is called immediately.
|
||||||
|
* @param {Function} callback
|
||||||
|
*/
|
||||||
|
function domReady(callback) {
|
||||||
|
if (isPageLoaded) {
|
||||||
|
callback(doc);
|
||||||
|
} else {
|
||||||
|
readyCalls.push(callback);
|
||||||
|
}
|
||||||
|
return domReady;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback that waits for DOM ready as well as any outstanding
|
||||||
|
* loader resources. Useful when there are implicit dependencies.
|
||||||
|
* This method should be avoided, and always use explicit
|
||||||
|
* dependency resolution, with just regular DOM ready callbacks.
|
||||||
|
* The callback passed to this method will be called immediately
|
||||||
|
* if the DOM and loader are already ready.
|
||||||
|
* @param {Function} callback
|
||||||
|
*/
|
||||||
|
domReady.withResources = function (callback) {
|
||||||
|
if (isPageLoaded && req.resourcesDone) {
|
||||||
|
callback(doc);
|
||||||
|
} else {
|
||||||
|
readyLoaderCalls.push(callback);
|
||||||
|
}
|
||||||
|
return domReady;
|
||||||
|
};
|
||||||
|
|
||||||
|
domReady.version = '1.0.0';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loader Plugin API method
|
||||||
|
*/
|
||||||
|
domReady.load = function (name, req, onLoad, config) {
|
||||||
|
if (config.isBuild) {
|
||||||
|
onLoad(null);
|
||||||
|
} else {
|
||||||
|
domReady(onLoad);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** END OF PUBLIC API **/
|
||||||
|
|
||||||
|
return domReady;
|
||||||
|
});
|
File diff suppressed because it is too large
Load Diff
|
@ -17,41 +17,25 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$(function() {
|
require(["jquery","i18n","js/archiva/utils.js"],
|
||||||
|
function() {
|
||||||
|
|
||||||
/**
|
|
||||||
* return value of a param in the url
|
|
||||||
* @param name
|
|
||||||
*/
|
|
||||||
$.urlParam = function(name){
|
|
||||||
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
|
|
||||||
if (results) {
|
|
||||||
return results[1] || 0;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
usedLang=function(){
|
|
||||||
var browserLang = $.i18n.browserLang();
|
|
||||||
var requestLang = $.urlParam('request_lang');
|
|
||||||
if (requestLang) {
|
|
||||||
browserLang=requestLang;
|
|
||||||
}
|
|
||||||
return browserLang;
|
|
||||||
}
|
|
||||||
|
|
||||||
appendArchivaVersion=function(){
|
appendArchivaVersion=function(){
|
||||||
return "_archivaVersion="+window.archivaRuntimeInfo.version;
|
return "_archivaVersion="+window.archivaRuntimeInfo.version;
|
||||||
}
|
}
|
||||||
|
|
||||||
buildLoadJsUrl=function(srcScript){
|
buildLoadJsUrl=function(srcScript){
|
||||||
return srcScript+"?"+appendArchivaVersion();
|
return srcScript+"?"+appendArchivaVersion()+"&_"+jQuery.now();
|
||||||
}
|
}
|
||||||
|
|
||||||
$.ajaxSetup({
|
$.ajaxSetup({
|
||||||
dataType: 'json'
|
dataType: 'json'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
loadJs=function(){
|
loadJs=function(){
|
||||||
|
|
||||||
$.ajax(
|
$.ajax(
|
||||||
|
@ -62,9 +46,20 @@ $(function() {
|
||||||
window.archivaDevMode=data.devMode;
|
window.archivaDevMode=data.devMode;
|
||||||
window.archivaJavascriptLog=data.javascriptLog;
|
window.archivaJavascriptLog=data.javascriptLog;
|
||||||
window.archivaRuntimeInfo=data;
|
window.archivaRuntimeInfo=data;
|
||||||
|
|
||||||
require.config({
|
require.config({
|
||||||
baseUrl: "js/"
|
baseUrl: "js/",
|
||||||
});
|
"paths": {
|
||||||
|
"i18n":"jquery.i18n.properties-1.0.9",
|
||||||
|
"jquery": "jquery-1.7.2",
|
||||||
|
"redback": buildLoadJsUrl("redback/redback.js"),
|
||||||
|
"utils": buildLoadJsUrl("archiva/utils.js"),
|
||||||
|
"i18nLoad": buildLoadJsUrl("archiva/i18nload.js"),
|
||||||
|
"jquerytmpl": buildLoadJsUrl("jquery.tmpl.js"),
|
||||||
|
"jquery_ui": "jquery-ui-1.8.16.custom.min"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// CacheBust is for dev purpose use false in prod env !
|
// CacheBust is for dev purpose use false in prod env !
|
||||||
var options = {
|
var options = {
|
||||||
AlwaysPreserveOrder:true,
|
AlwaysPreserveOrder:true,
|
||||||
|
@ -79,7 +74,7 @@ $(function() {
|
||||||
.script(buildLoadJsUrl("archiva/i18nload.js")).wait()
|
.script(buildLoadJsUrl("archiva/i18nload.js")).wait()
|
||||||
.script("jquery.cookie.1.0.0.js").wait()
|
.script("jquery.cookie.1.0.0.js").wait()
|
||||||
.script("knockout-2.0.0.debug.js").wait()
|
.script("knockout-2.0.0.debug.js").wait()
|
||||||
.script("jquery-ui-1.8.16.custom.min.js").wait()
|
//.script("jquery-ui-1.8.16.custom.min.js").wait()
|
||||||
.script("jquery.validate-1.9.0.js").wait()
|
.script("jquery.validate-1.9.0.js").wait()
|
||||||
.script("jquery.json-2.3.min.js").wait()
|
.script("jquery.json-2.3.min.js").wait()
|
||||||
.script(buildLoadJsUrl("archiva/main-tmpl.js")).wait()
|
.script(buildLoadJsUrl("archiva/main-tmpl.js")).wait()
|
||||||
|
@ -95,9 +90,13 @@ $(function() {
|
||||||
.script("bootstrap.2.0.2.js" )
|
.script("bootstrap.2.0.2.js" )
|
||||||
.script(buildLoadJsUrl("knockout.simpleGrid.js"))
|
.script(buildLoadJsUrl("knockout.simpleGrid.js"))
|
||||||
.script(buildLoadJsUrl("knockout-sortable.js"))
|
.script(buildLoadJsUrl("knockout-sortable.js"))
|
||||||
|
//.script("jquery.iframe-transport-1.4.js").wait()
|
||||||
|
//.script("jquery.fileupload-5.10.0.js").wait()
|
||||||
|
//.script("jquery.fileupload-ip-1.0.6.js").wait()
|
||||||
|
//.script("jquery.fileupload-ui-6.6.3.js" ).wait()
|
||||||
.script(buildLoadJsUrl("redback/user.js")).wait()
|
.script(buildLoadJsUrl("redback/user.js")).wait()
|
||||||
.script(buildLoadJsUrl("redback/users.js")).wait()
|
.script(buildLoadJsUrl("redback/users.js")).wait()
|
||||||
.script(buildLoadJsUrl("redback/redback.js")).wait()
|
//.script(buildLoadJsUrl("redback/redback.js")).wait()
|
||||||
.script(buildLoadJsUrl("redback/register.js")).wait()
|
.script(buildLoadJsUrl("redback/register.js")).wait()
|
||||||
.script(buildLoadJsUrl("redback/permission.js")).wait()
|
.script(buildLoadJsUrl("redback/permission.js")).wait()
|
||||||
.script(buildLoadJsUrl("redback/resource.js")).wait()
|
.script(buildLoadJsUrl("redback/resource.js")).wait()
|
||||||
|
@ -107,4 +106,7 @@ $(function() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
Loading…
Reference in New Issue