2015-08-10 22:46:01 +02:00
var repoindex = ( function ( repoindex ) {
var RepoEntry = { } ;
RepoEntry . prototype = new repoindex . Entry ( ) ;
RepoEntry . prototype . constructor = RepoEntry ;
2015-09-12 20:37:04 +02:00
RepoEntry = function ( repoName , repoInfo , enabled ) {
2015-09-04 14:37:01 +02:00
if ( enabled === undefined ) {
enabled = ! repoInfo . requestRequired ;
}
2015-09-12 20:37:04 +02:00
repoindex . Entry . prototype . constructor . call ( this , repoName , repoInfo , enabled ) ;
2015-08-10 22:46:01 +02:00
this . info . currentServer = 0 ;
this . rowElement . onclick = function ( ) {
repoindex . pageManager . repoManager . showRepoInfoForIndex ( this . entry . info . index ) ;
} ;
this . initTableRow = function ( ) {
this . rowElement . addCell ( this . info . name ) ;
this . rowElement . addCell ( this . info . desc ) ;
//this.rowElement.addCell(this.info.servers && this.info.currentServer < this.info.servers.length ? this.info.servers[this.info.currentServer] : "none");
} ;
this . initTableRow ( ) ;
// create link
this . createLink = function ( ) {
this . link = document . createElement ( "a" ) ;
this . link . href = "#" ;
this . link . className = enabled ? "btn btn-primary" : "btn btn-default" ;
this . link . setAttribute ( "role" , "button" ) ;
this . link . repo = this ;
this . link . onclick = function ( ) {
if ( repoindex . pageManager . repoManager . buttonContainerExclusiveButton . checked ) {
2015-09-12 20:37:04 +02:00
repoindex . pageManager . repoManager . upgradeEnabledAll ( false ) ;
2015-08-10 22:46:01 +02:00
}
this . repo . toggleEnabled ( ) ;
return false ;
} ;
this . link . appendChild ( document . createTextNode ( repoInfo . name ) ) ;
this . link . title = repoInfo . desc ;
// use Bootstrap tooltip
this . link . setAttribute ( "data-placement" , "bottom" ) ;
$ ( this . link ) . tooltip ( ) ;
2015-09-04 14:37:01 +02:00
if ( ! repoInfo . requestRequired ) {
// create badge with package count
var span = document . createElement ( "span" ) ;
span . className = "badge" ;
span . appendChild ( document . createTextNode ( repoInfo . packages . length ) ) ;
this . link . appendChild ( document . createTextNode ( " " ) ) ;
this . link . appendChild ( span ) ;
}
2015-08-10 22:46:01 +02:00
this . link . add = function ( ) {
repoindex . pageManager . repoManager . buttonContainer . appendChild ( this ) ;
} ;
this . link . remove = function ( ) {
this . parent . removeChild ( this ) ;
} ;
} ;
this . createLink ( ) ;
this . link . add ( ) ;
// provide a function to toggle enabled/disabled
2015-09-12 20:37:04 +02:00
this . upgradeEnabled = function ( enabled ) {
2015-08-10 22:46:01 +02:00
if ( this . enabled !== enabled ) {
this . link . className = ( this . enabled = enabled ) ? "btn btn-primary" : "btn btn-default" ;
this . statusChanged ( this ) ;
}
} ;
this . toggleEnabled = function ( ) {
2015-09-12 20:37:04 +02:00
this . upgradeEnabled ( ! this . enabled ) ;
2015-08-10 22:46:01 +02:00
} ;
} ;
repoindex . RepoEntryManager = { } ;
repoindex . RepoEntryManager . prototype = new repoindex . EntryManager ( ) ;
repoindex . RepoEntryManager . prototype . constructor = repoindex . RepoEntryManager ;
repoindex . RepoEntryManager = function ( pagination ) {
repoindex . EntryManager . prototype . constructor . call ( this , RepoEntry , document . getElementById ( "repos" ) , pagination ) ;
this . entryName = "repository" ;
this . entryNamePlural = "repositories" ;
this . buttonRow = document . getElementById ( "row_repos_buttons" ) ;
this . buttonContainer = document . getElementById ( "repos_buttons" ) ;
this . buttonContainerOptionsDropdown = document . getElementById ( "repos_buttons_options_dropdown" ) ;
this . buttonContainerExclusiveButton = document . getElementById ( "repos_buttons_exclusive" ) ;
this . applyRepoStatusChange = function ( ) {
// this is the RepoEntry object in this function!
var pageMgr = repoindex . pageManager ;
var repoEntries = pageMgr . repoManager . entries ;
var repoFilter = [ ] ;
for ( var i = 0 , end = repoEntries . length ; i < end ; ++ i ) {
if ( repoEntries [ i ] . enabled ) {
repoFilter . push ( repoEntries [ i ] . info . name ) ;
}
}
pageMgr . packageManager . filterRepos = pageMgr . groupManager . filterRepos = repoFilter ;
pageMgr . packageManager . invalidate ( ) ;
pageMgr . groupManager . invalidate ( ) ;
} ;
// provide a function to add repo entries
this . addEntry = function ( repoInfo ) {
2015-09-04 14:37:01 +02:00
var entry = new RepoEntry ( repoInfo ) ;
2015-08-10 22:46:01 +02:00
entry . statusChanged = this . applyRepoStatusChange ;
entry . pageManager = this ;
entry . repoEntryManager = this ;
entry . info . index = this . entries . length ;
this . entries . push ( entry ) ;
2015-09-04 14:37:01 +02:00
return entry ;
2015-08-10 22:46:01 +02:00
} ;
this . baseRemoveEntries = this . removeEntries ;
this . removeEntries = function ( ) {
for ( var i = 0 ; i < this . entries . length ; ++ i ) {
this . entries [ i ] . link . remove ( ) ;
}
this . baseRemoveEntries ( ) ;
} ;
2015-09-12 20:37:04 +02:00
this . upgradeEnabledAll = function ( enabled ) {
2015-08-10 22:46:01 +02:00
for ( var i = 0 ; i < this . entries . length ; ++ i ) {
2015-09-12 20:37:04 +02:00
this . entries [ i ] . upgradeEnabled ( enabled ) ;
2015-08-10 22:46:01 +02:00
}
} ;
// handle a page selection
this . pagination . pageSelected = function ( pageElement ) {
var mgr = this . entryManager ;
// remove elements from previously selected page
mgr . entryContainer . wipeChildren ( ) ;
// if there is no page because there are no package entries, pageElement is null
if ( pageElement ) {
// show elements of selected page
pageElement . forRange ( function ( i ) {
var entry = mgr . filteredEntries [ i ] ;
entry . add ( mgr . entryContainer ) ;
} , mgr . filteredEntries . length ) ;
}
} ;
this . infoBox = document . getElementById ( "repos_info" ) ;
this . showRepoInfo = function ( repo ) {
var determineEntry = function ( ) {
var res = repoindex . pageManager . repoManager . entries . filter ( function ( entry ) {
return entry . info . name === repo ;
} ) ;
// entry exists?
if ( res . length > 0 ) {
// yes -> full package info available?
repoindex . pageManager . repoManager . showRepoInfoForIndex ( res [ 0 ] . info . index ) ;
} else {
// no -> show error
repoindex . pageManager . repoManager . showRepoNotFound ( repo ) ;
}
} ;
// basic repo info available?
2015-09-12 20:37:04 +02:00
if ( repoindex . client . hasBasicRepoInfo ) {
2015-08-10 22:46:01 +02:00
// yes -> can determine entry instantly
determineEntry ( ) ;
} else {
// no -> request info, use callback to determine entry when info becomes available
2015-09-12 20:37:04 +02:00
repoindex . client . requestBasicRepoInfo ( determineEntry ) ;
2015-08-10 22:46:01 +02:00
}
} ;
this . showRepoInfoForIndex = function ( entryIndex ) {
var entry = this . entryByIndex ( entryIndex ) ;
if ( entry ) {
var i = entry . info ;
repoindex . setText ( "repo_name" , i . name ) ;
repoindex . setText ( "repo_desc" , i . desc ) ;
2015-09-04 14:37:01 +02:00
repoindex . setText ( "repo_pkgcount" , i . requestRequired ? "unknown" : i . packages . length ) ;
2015-08-10 22:46:01 +02:00
repoindex . setText ( "repo_usage" , repoindex . makeArray ( i . usage , ", " ) ) ;
repoindex . setText ( "repo_siglevel" , repoindex . makeArray ( i . sigLevel , ", " ) ) ;
2015-09-04 14:37:01 +02:00
repoindex . setText ( "repo_source_only" , repoindex . makeBool ( i . srcOnly ) ) ;
2015-08-19 02:13:28 +02:00
repoindex . setText ( "repo_upgrade_sources" , repoindex . makeArray ( i . upgradeSources , ", " ) ) ;
2015-09-12 20:37:04 +02:00
var invokeUpgradeLookupParams = { repo : i . name , invoke : "upgradelookup" } ;
repoindex . setDownloadButton ( "repo_checkforupgrades" , "check for upgrades" , repoindex . makeHash ( repoindex . Pages . Repositories , invokeUpgradeLookupParams , true ) , function ( ) {
repoindex . pageManager . repoManager . showAvailableUpgrades ( i . name ) ;
repoindex . pageManager . denoteHash ( repoindex . Pages . Repositories , invokeUpgradeLookupParams ) ;
2015-08-10 22:46:01 +02:00
} , "refresh" ) ;
2015-09-12 20:37:04 +02:00
// set currentInfo (the pageManager needs this value to upgrade the hash)
2015-08-10 22:46:01 +02:00
this . currentInfo = i ;
// ensures, that the "Package Info" box (with the properties just set) is shown
repoindex . pageManager . showRepoInfo ( ) ;
}
} ;
this . showRepoNotFound = function ( repo ) {
repoindex . pageManager . msgboxCritical (
"Repository not found" ,
"The repository <i>" + repoindex . escapeHtml ( repo ) + "</i> can not be found." ,
true ) ;
} ;
2015-09-12 20:37:04 +02:00
this . showAvailableUpgrades = function ( repo ) {
var requestUpgrades = function ( ) {
var showUpgrades = function ( availableUpgrades ) {
2015-08-10 22:46:01 +02:00
// check for errors
2015-09-12 20:37:04 +02:00
if ( Array . isArray ( availableUpgrades . errors ) ) {
for ( var i = 0 ; i < availableUpgrades . errors . length ; ++ i ) {
repoindex . pageManager . addError ( "Error: " + availableUpgrades . errors [ i ] ) ;
2015-08-10 22:46:01 +02:00
}
} else {
2015-09-12 20:37:04 +02:00
// create package entries for the upgrades
var upgradeEntries = [ ] ;
var upgrades = [
2015-08-10 22:46:01 +02:00
{
name : "software upgrade" ,
namePlural : "software upgrades" ,
style : "background-color: " + repoindex . softwareUpgradeBackgroundColor ,
color : repoindex . softwareUpgradeBackgroundColor ,
2015-09-12 20:37:04 +02:00
entries : Array . isArray ( availableUpgrades . softwareUpgrades ) ? availableUpgrades . softwareUpgrades : [ ] ,
count : Array . isArray ( availableUpgrades . softwareUpgrades ) ? availableUpgrades . softwareUpgrades . length : 0
2015-08-10 22:46:01 +02:00
} , {
name : "package-only upgrade" ,
namePlural : "package-only upgrades" ,
style : "background-color: " + repoindex . packageUpgradeBackgroundColor ,
color : repoindex . packageUpgradeBackgroundColor ,
2015-09-12 20:37:04 +02:00
entries : Array . isArray ( availableUpgrades . packageOnlyUpgrades ) ? availableUpgrades . packageOnlyUpgrades : [ ] ,
count : Array . isArray ( availableUpgrades . packageOnlyUpgrades ) ? availableUpgrades . packageOnlyUpgrades . length : 0
2015-08-10 22:46:01 +02:00
} , {
name : "downgrade" ,
namePlural : "downgrades" ,
style : "background-color: " + repoindex . downgradesBackgroundColor ,
color : repoindex . downgradesBackgroundColor ,
2015-09-12 20:37:04 +02:00
entries : Array . isArray ( availableUpgrades . downgrades ) ? availableUpgrades . downgrades : [ ] ,
count : Array . isArray ( availableUpgrades . downgrades ) ? availableUpgrades . downgrades . length : 0
2015-08-10 22:46:01 +02:00
} , {
name : "orphaned package" ,
namePlural : "orphaned packages" ,
style : "background-color: " + repoindex . orphanedPackageBackgroundColor ,
color : repoindex . orphanedPackageBackgroundColor ,
2015-09-12 20:37:04 +02:00
entries : Array . isArray ( availableUpgrades . orphanedPackages ) ? availableUpgrades . orphanedPackages : [ ] ,
count : Array . isArray ( availableUpgrades . orphanedPackages ) ? availableUpgrades . orphanedPackages . length : 0
2015-08-10 22:46:01 +02:00
}
] ;
var pkgMgr = repoindex . pageManager . packageManager ;
2015-09-04 14:37:01 +02:00
var repoMgr = repoindex . pageManager . repoManager ;
2015-09-12 20:37:04 +02:00
for ( var i1 = 0 ; i1 < upgrades . length ; ++ i1 ) {
// iterate through all kinds of "upgrades" declared above
for ( var i2 = 0 ; i2 < upgrades [ i1 ] . entries . length ; ++ i2 ) {
// iterate through all entries which have been assigned to the current upgrade type
var newEntry = pkgMgr . createCustomEntry ( upgrades [ i1 ] . color ) ;
newEntry . info . index = upgradeEntries . length ;
if ( upgrades [ i1 ] . entries [ i2 ] . pkg ) {
newEntry . applyBasicInfo ( upgrades [ i1 ] . entries [ i2 ] . pkg , true ) ;
if ( upgrades [ i1 ] . entries [ i2 ] . curVer ) {
// add current version to upgrade version
newEntry . info . ver = upgrades [ i1 ] . entries [ i2 ] . curVer + " → " + ( newEntry . info . ver ? newEntry . info . ver : "?" ) ;
2015-08-19 02:13:28 +02:00
}
2015-09-04 14:37:01 +02:00
// find associated repo entry
if ( ( newEntry . repoEntry = repoMgr . entryByName ( newEntry . info . repo ) ) ) {
2015-09-12 20:37:04 +02:00
newEntry . repoEntry . upgradeEnabled ( true ) ; // ensure repo is enabled
2015-09-04 14:37:01 +02:00
}
2015-09-12 20:37:04 +02:00
newEntry . upgradeTableRow ( ) ;
2015-08-19 02:13:28 +02:00
} else {
2015-09-12 20:37:04 +02:00
newEntry . applyBasicInfo ( upgrades [ i1 ] . entries [ i2 ] ) ;
2015-08-19 02:13:28 +02:00
}
2015-09-12 20:37:04 +02:00
upgradeEntries . push ( newEntry ) ;
2015-08-10 22:46:01 +02:00
}
}
2015-09-12 20:37:04 +02:00
// show warnings
if ( Array . isArray ( availableUpgrades . warnings ) ) {
for ( var i = 0 ; i < availableUpgrades . warnings . length ; ++ i ) {
repoindex . pageManager . addError ( "Warning: " + availableUpgrades . warnings [ i ] ) ;
2015-08-10 22:46:01 +02:00
}
}
2015-09-12 20:37:04 +02:00
// show upgrades via package manager
2015-08-19 02:13:28 +02:00
pkgMgr . filterName = undefined ;
2015-09-12 20:37:04 +02:00
pkgMgr . customSelection = upgradeEntries ;
2015-08-10 22:46:01 +02:00
pkgMgr . customSelectionName = "upgrade" ;
pkgMgr . customSelectionNamePlural = "upgrades" ;
2015-09-12 20:37:04 +02:00
var quandityInfo = repoindex . makeQuandityInfo ( upgrades ) ;
2015-08-10 22:46:01 +02:00
if ( quandityInfo ) {
2015-09-12 20:37:04 +02:00
pkgMgr . customSelectionInfoText = "Upgrades for the repository <i>"
2015-08-19 02:13:28 +02:00
+ repoindex . escapeHtml ( repo )
+ "</i>: " + quandityInfo
+ repoindex . removeFilterButtonHtml ;
2015-08-10 22:46:01 +02:00
}
pkgMgr . filterDescr = "for the repository"
pkgMgr . invalidate ( ) ;
repoindex . pageManager . setPage ( repoindex . Pages . Packages ) ;
}
} ;
2015-09-12 20:37:04 +02:00
repoindex . client . checkForUpgrades ( repo , null , showUpgrades ) ;
2015-08-10 22:46:01 +02:00
} ;
// basic repo info available?
2015-09-12 20:37:04 +02:00
if ( repoindex . client . hasBasicRepoInfo ) {
// yes -> request upgrades instantly
requestUpgrades ( ) ;
2015-08-10 22:46:01 +02:00
} else {
2015-09-12 20:37:04 +02:00
// no -> request info, use callback to go on requesting upgrades when repo info becomes available
repoindex . client . requestBasicRepoInfo ( requestUpgrades ) ;
2015-08-10 22:46:01 +02:00
}
} ;
} ;
return repoindex ;
} ) ( repoindex || { } ) ;