Mercurial > hg > vamp-website
diff forum/Themes/Vamp/scripts/admin.js @ 76:e3e11437ecea website
Add forum code
author | Chris Cannam |
---|---|
date | Sun, 07 Jul 2013 11:25:48 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/forum/Themes/Vamp/scripts/admin.js Sun Jul 07 11:25:48 2013 +0200 @@ -0,0 +1,330 @@ +/* + smf_AdminIndex(oOptions) + { + public init() + public loadAdminIndex() + public setAnnouncements() + public showCurrentVersion() + public checkUpdateAvailable() + } + + smf_ViewVersions(oOptions) + { + public init() + public loadViewVersions + public swapOption(oSendingElement, sName) + public compareVersions(sCurrent, sTarget) + public determineVersions() + } +*/ + + + +// Handle the JavaScript surrounding the admin and moderation center. +function smf_AdminIndex(oOptions) +{ + this.opt = oOptions; + this.init(); +} + +smf_AdminIndex.prototype.init = function () +{ + window.adminIndexInstanceRef = this; + var fHandlePageLoaded = function () { + window.adminIndexInstanceRef.loadAdminIndex(); + } + addLoadEvent(fHandlePageLoaded); +} + +smf_AdminIndex.prototype.loadAdminIndex = function () +{ + // Load the text box containing the latest news items. + if (this.opt.bLoadAnnouncements) + this.setAnnouncements(); + + // Load the current SMF and your SMF version numbers. + if (this.opt.bLoadVersions) + this.showCurrentVersion(); + + // Load the text box that sais there's a new version available. + if (this.opt.bLoadUpdateNotification) + this.checkUpdateAvailable(); +} + + +smf_AdminIndex.prototype.setAnnouncements = function () +{ + if (!('smfAnnouncements' in window) || !('length' in window.smfAnnouncements)) + return; + + var sMessages = ''; + for (var i = 0; i < window.smfAnnouncements.length; i++) + sMessages += this.opt.sAnnouncementMessageTemplate.replace('%href%', window.smfAnnouncements[i].href).replace('%subject%', window.smfAnnouncements[i].subject).replace('%time%', window.smfAnnouncements[i].time).replace('%message%', window.smfAnnouncements[i].message); + + setInnerHTML(document.getElementById(this.opt.sAnnouncementContainerId), this.opt.sAnnouncementTemplate.replace('%content%', sMessages)); +} + +smf_AdminIndex.prototype.showCurrentVersion = function () +{ + if (!('smfVersion' in window)) + return; + + var oSmfVersionContainer = document.getElementById(this.opt.sSmfVersionContainerId); + var oYourVersionContainer = document.getElementById(this.opt.sYourVersionContainerId); + + setInnerHTML(oSmfVersionContainer, window.smfVersion); + + var sCurrentVersion = getInnerHTML(oYourVersionContainer); + if (sCurrentVersion != window.smfVersion) + setInnerHTML(oYourVersionContainer, this.opt.sVersionOutdatedTemplate.replace('%currentVersion%', sCurrentVersion)); +} + +smf_AdminIndex.prototype.checkUpdateAvailable = function () +{ + if (!('smfUpdatePackage' in window)) + return; + + var oContainer = document.getElementById(this.opt.sUpdateNotificationContainerId); + + // Are we setting a custom title and message? + var sTitle = 'smfUpdateTitle' in window ? window.smfUpdateTitle : this.opt.sUpdateNotificationDefaultTitle; + var sMessage = 'smfUpdateNotice' in window ? window.smfUpdateNotice : this.opt.sUpdateNotificationDefaultMessage; + + setInnerHTML(oContainer, this.opt.sUpdateNotificationTemplate.replace('%title%', sTitle).replace('%message%', sMessage)); + + // Parse in the package download URL if it exists in the string. + document.getElementById('update-link').href = this.opt.sUpdateNotificationLink.replace('%package%', window.smfUpdatePackage); + + // If we decide to override life into "red" mode, do it. + if ('smfUpdateCritical' in window) + { + document.getElementById('update_table').style.backgroundColor = '#aa2222'; + document.getElementById('update_title').style.backgroundColor = '#dd2222'; + document.getElementById('update_title').style.color = 'white'; + document.getElementById('update_message').style.backgroundColor = '#eebbbb'; + document.getElementById('update_message').style.color = 'black'; + } +} + + + +function smf_ViewVersions (oOptions) +{ + this.opt = oOptions; + this.oSwaps = {}; + this.init(); +} + +smf_ViewVersions.prototype.init = function () +{ + // Load this on loading of the page. + window.viewVersionsInstanceRef = this; + var fHandlePageLoaded = function () { + window.viewVersionsInstanceRef.loadViewVersions(); + } + addLoadEvent(fHandlePageLoaded); +} + +smf_ViewVersions.prototype.loadViewVersions = function () +{ + this.determineVersions(); +} + +smf_ViewVersions.prototype.swapOption = function (oSendingElement, sName) +{ + // If it is undefined, or currently off, turn it on - otherwise off. + this.oSwaps[sName] = !(sName in this.oSwaps) || !this.oSwaps[sName]; + document.getElementById(sName).style.display = this.oSwaps[sName] ? '' : 'none'; + + // Unselect the link and return false. + oSendingElement.blur(); + return false; +} + +smf_ViewVersions.prototype.compareVersions = function (sCurrent, sTarget) +{ + var aVersions = aParts = new Array(); + var aCompare = new Array(sCurrent, sTarget); + + for (var i = 0; i < 2; i++) + { + // Clean the version and extract the version parts. + var sClean = aCompare[i].toLowerCase().replace(/ /g, '').replace(/2.0rc1-1/, '2.0rc1.1'); + aParts = sClean.match(/(\d+)(?:\.(\d+|))?(?:\.)?(\d+|)(?:(alpha|beta|rc)(\d+|)(?:\.)?(\d+|))?(?:(dev))?(\d+|)/); + + // No matches? + if (aParts == null) + return false; + + // Build an array of parts. + aVersions[i] = [ + aParts[1] > 0 ? parseInt(aParts[1]) : 0, + aParts[2] > 0 ? parseInt(aParts[2]) : 0, + aParts[3] > 0 ? parseInt(aParts[3]) : 0, + typeof(aParts[4]) == 'undefined' ? 'stable' : aParts[4], + aParts[5] > 0 ? parseInt(aParts[5]) : 0, + aParts[6] > 0 ? parseInt(aParts[6]) : 0, + typeof(aParts[7]) != 'undefined', + ]; + } + + // Loop through each category. + for (i = 0; i < 7; i++) + { + // Is there something for us to calculate? + if (aVersions[0][i] != aVersions[1][i]) + { + // Dev builds are a problematic exception. + // (stable) dev < (stable) but (unstable) dev = (unstable) + if (i == 3) + return aVersions[0][i] < aVersions[1][i] ? !aVersions[1][6] : aVersions[0][6]; + else if (i == 6) + return aVersions[0][6] ? aVersions[1][3] == 'stable' : false; + // Otherwise a simple comparison. + else + return aVersions[0][i] < aVersions[1][i]; + } + } + + // They are the same! + return false; +} + +smf_ViewVersions.prototype.determineVersions = function () +{ + var oHighYour = { + Sources: '??', + Default: '??', + Languages: '??', + Templates: '??' + }; + var oHighCurrent = { + Sources: '??', + Default: '??', + Languages: '??', + Templates: '??' + }; + var oLowVersion = { + Sources: false, + Default: false, + Languages: false, + Templates: false + }; + + var sSections = [ + 'Sources', + 'Default', + 'Languages', + 'Templates' + ]; + + for (var i = 0, n = sSections.length; i < n; i++) + { + // Collapse all sections. + var oSection = document.getElementById(sSections[i]); + if (typeof(oSection) == 'object' && oSection != null) + oSection.style.display = 'none'; + + // Make all section links clickable. + var oSectionLink = document.getElementById(sSections[i] + '-link'); + if (typeof(oSectionLink) == 'object' && oSectionLink != null) + { + oSectionLink.instanceRef = this; + oSectionLink.sSection = sSections[i]; + oSectionLink.onclick = function () { + this.instanceRef.swapOption(this, this.sSection); + return false; + }; + } + } + + if (!('smfVersions' in window)) + window.smfVersions = {}; + + for (var sFilename in window.smfVersions) + { + if (!document.getElementById('current' + sFilename)) + continue; + + var sYourVersion = getInnerHTML(document.getElementById('your' + sFilename)); + + var sCurVersionType; + for (var sVersionType in oLowVersion) + if (sFilename.substr(0, sVersionType.length) == sVersionType) + { + sCurVersionType = sVersionType; + break; + } + + if (typeof(sCurVersionType) != 'undefined') + { + if ((this.compareVersions(oHighYour[sCurVersionType], sYourVersion) || oHighYour[sCurVersionType] == '??') && !oLowVersion[sCurVersionType]) + oHighYour[sCurVersionType] = sYourVersion; + if (this.compareVersions(oHighCurrent[sCurVersionType], smfVersions[sFilename]) || oHighCurrent[sCurVersionType] == '??') + oHighCurrent[sCurVersionType] = smfVersions[sFilename]; + + if (this.compareVersions(sYourVersion, smfVersions[sFilename])) + { + oLowVersion[sCurVersionType] = sYourVersion; + document.getElementById('your' + sFilename).style.color = 'red'; + } + } + else if (this.compareVersions(sYourVersion, smfVersions[sFilename])) + oLowVersion[sCurVersionType] = sYourVersion; + + setInnerHTML(document.getElementById('current' + sFilename), smfVersions[sFilename]); + setInnerHTML(document.getElementById('your' + sFilename), sYourVersion); + } + + if (!('smfLanguageVersions' in window)) + window.smfLanguageVersions = {}; + + for (sFilename in window.smfLanguageVersions) + { + for (var i = 0; i < this.opt.aKnownLanguages.length; i++) + { + if (!document.getElementById('current' + sFilename + this.opt.aKnownLanguages[i])) + continue; + + setInnerHTML(document.getElementById('current' + sFilename + this.opt.aKnownLanguages[i]), smfLanguageVersions[sFilename]); + + sYourVersion = getInnerHTML(document.getElementById('your' + sFilename + this.opt.aKnownLanguages[i])); + setInnerHTML(document.getElementById('your' + sFilename + this.opt.aKnownLanguages[i]), sYourVersion); + + if ((this.compareVersions(oHighYour.Languages, sYourVersion) || oHighYour.Languages == '??') && !oLowVersion.Languages) + oHighYour.Languages = sYourVersion; + if (this.compareVersions(oHighCurrent.Languages, smfLanguageVersions[sFilename]) || oHighCurrent.Languages == '??') + oHighCurrent.Languages = smfLanguageVersions[sFilename]; + + if (this.compareVersions(sYourVersion, smfLanguageVersions[sFilename])) + { + oLowVersion.Languages = sYourVersion; + document.getElementById('your' + sFilename + this.opt.aKnownLanguages[i]).style.color = 'red'; + } + } + } + + setInnerHTML(document.getElementById('yourSources'), oLowVersion.Sources ? oLowVersion.Sources : oHighYour.Sources); + setInnerHTML(document.getElementById('currentSources'), oHighCurrent.Sources); + if (oLowVersion.Sources) + document.getElementById('yourSources').style.color = 'red'; + + setInnerHTML(document.getElementById('yourDefault'), oLowVersion.Default ? oLowVersion.Default : oHighYour.Default); + setInnerHTML(document.getElementById('currentDefault'), oHighCurrent.Default); + if (oLowVersion.Default) + document.getElementById('yourDefault').style.color = 'red'; + + if (document.getElementById('Templates')) + { + setInnerHTML(document.getElementById('yourTemplates'), oLowVersion.Templates ? oLowVersion.Templates : oHighYour.Templates); + setInnerHTML(document.getElementById('currentTemplates'), oHighCurrent.Templates); + + if (oLowVersion.Templates) + document.getElementById('yourTemplates').style.color = 'red'; + } + + setInnerHTML(document.getElementById('yourLanguages'), oLowVersion.Languages ? oLowVersion.Languages : oHighYour.Languages); + setInnerHTML(document.getElementById('currentLanguages'), oHighCurrent.Languages); + if (oLowVersion.Languages) + document.getElementById('yourLanguages').style.color = 'red'; +} \ No newline at end of file