From f4ad2e08408ca2e526d5d8aa1efe166dfe96ebab Mon Sep 17 00:00:00 2001 From: "kenneth@hexad.dk" Date: Thu, 31 May 2012 15:23:16 +0000 Subject: [PATCH] Added new web-stuff git-svn-id: https://duplicati.googlecode.com/svn/trunk@1322 59da171f-624f-0410-aa54-27559c288bec --- Duplicati/Server/webroot/app.js | 65 +++++ .../Server/webroot/backup-app/ListUtility.js | 84 +++++++ .../Server/webroot/backup-app/Service.js | 228 ++++++++++++++++++ .../Server/webroot/backup-app/Utility.js | 147 +++++++++++ .../backup-app/controller/Schedules.js | 36 +++ .../controller/StatuswindowFooter.js | 16 ++ .../controller/StatuswindowHeader.js | 60 +++++ .../webroot/backup-app/model/Schedule.js | 4 + .../webroot/backup-app/store/Schedules.js | 95 ++++++++ .../webroot/backup-app/view/AboutWindow.js | 32 +++ .../backup-app/view/StatuswindowFooter.js | 37 +++ .../backup-app/view/StatuswindowHeader.js | 101 ++++++++ .../webroot/backup-app/view/schedule/List.js | 95 ++++++++ Duplicati/Server/webroot/icons/add-backup.png | Bin 0 -> 3496 bytes Duplicati/Server/webroot/icons/hourglass.png | Bin 0 -> 46838 bytes Duplicati/Server/webroot/icons/hourglass2.png | Bin 0 -> 41967 bytes Duplicati/Server/webroot/icons/main-logo.png | Bin 0 -> 1795 bytes .../Server/webroot/icons/schedule-active.png | Bin 0 -> 717 bytes .../webroot/icons/schedule-in-queue.png | Bin 0 -> 943 bytes .../Server/webroot/icons/schedule-waiting.png | Bin 0 -> 882 bytes .../Server/webroot/icons/status-pause.png | Bin 0 -> 3500 bytes .../Server/webroot/icons/status-play.png | Bin 0 -> 3453 bytes .../Server/webroot/scripts/customized.js | 1 + Duplicati/Server/webroot/status-window.html | 21 ++ .../Server/webroot/stylesheets/common.css | 1 + .../Server/webroot/stylesheets/customized.css | 1 + .../webroot/stylesheets/status-window.css | 193 +++++++++++++++ 27 files changed, 1217 insertions(+) create mode 100644 Duplicati/Server/webroot/app.js create mode 100644 Duplicati/Server/webroot/backup-app/ListUtility.js create mode 100644 Duplicati/Server/webroot/backup-app/Service.js create mode 100644 Duplicati/Server/webroot/backup-app/Utility.js create mode 100644 Duplicati/Server/webroot/backup-app/controller/Schedules.js create mode 100644 Duplicati/Server/webroot/backup-app/controller/StatuswindowFooter.js create mode 100644 Duplicati/Server/webroot/backup-app/controller/StatuswindowHeader.js create mode 100644 Duplicati/Server/webroot/backup-app/model/Schedule.js create mode 100644 Duplicati/Server/webroot/backup-app/store/Schedules.js create mode 100644 Duplicati/Server/webroot/backup-app/view/AboutWindow.js create mode 100644 Duplicati/Server/webroot/backup-app/view/StatuswindowFooter.js create mode 100644 Duplicati/Server/webroot/backup-app/view/StatuswindowHeader.js create mode 100644 Duplicati/Server/webroot/backup-app/view/schedule/List.js create mode 100644 Duplicati/Server/webroot/icons/add-backup.png create mode 100644 Duplicati/Server/webroot/icons/hourglass.png create mode 100644 Duplicati/Server/webroot/icons/hourglass2.png create mode 100644 Duplicati/Server/webroot/icons/main-logo.png create mode 100644 Duplicati/Server/webroot/icons/schedule-active.png create mode 100644 Duplicati/Server/webroot/icons/schedule-in-queue.png create mode 100644 Duplicati/Server/webroot/icons/schedule-waiting.png create mode 100644 Duplicati/Server/webroot/icons/status-pause.png create mode 100644 Duplicati/Server/webroot/icons/status-play.png create mode 100644 Duplicati/Server/webroot/scripts/customized.js create mode 100644 Duplicati/Server/webroot/status-window.html create mode 100644 Duplicati/Server/webroot/stylesheets/common.css create mode 100644 Duplicati/Server/webroot/stylesheets/customized.css create mode 100644 Duplicati/Server/webroot/stylesheets/status-window.css diff --git a/Duplicati/Server/webroot/app.js b/Duplicati/Server/webroot/app.js new file mode 100644 index 000000000..f8bdff582 --- /dev/null +++ b/Duplicati/Server/webroot/app.js @@ -0,0 +1,65 @@ +Ext.application({ + requires: [ + 'Ext.container.Viewport', + 'Ext.layout.container.Border', + 'BackupApp.Service', + 'BackupApp.Utility', + 'BackupApp.ListUtility', + 'BackupApp.view.AboutWindow' + ], + + name: 'BackupApp', + appFolder: 'backup-app', + + controllers: [ + 'Schedules', + 'StatuswindowHeader', + 'StatuswindowFooter' + ], + + //This object encapsulates all access to the web service + service: null, + + launch: function() { + + Ext.log = function(msg) { + console.log(msg); + } + + //Pretend the app fires events too + this.addEvents('current-state-updated', 'count-down-pause-timer'); + + //Make a service object + this.service = new BackupApp.Service(); + //Make the service globally accesible + BackupApp.service = this.service; + BackupApp.instance = this; + BackupApp.utility = this.utility; + + //Pretend the app can fire the update event, this helps with initialization in controllers + this.service.on('current-state-updated', function(e) { + BackupApp.instance.fireEvent('current-state-updated', e) + }); + + this.service.on('count-down-pause-timer', function(e) { + BackupApp.instance.fireEvent('count-down-pause-timer', e) + }); + + //Fetch the current status + this.service.updateCurrentState(); + + Ext.create('Ext.container.Viewport', { + layout: 'border', + items: [{ + region: 'center', + xtype: 'schedulelist' + },{ + region: 'north', + xtype: 'statuswindowheader' + },{ + region: 'south', + xtype: 'statuswindowfooter' + }] + }); + } +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/ListUtility.js b/Duplicati/Server/webroot/backup-app/ListUtility.js new file mode 100644 index 000000000..afa88d26f --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/ListUtility.js @@ -0,0 +1,84 @@ +Ext.define('BackupApp.ListUtility', { + statics: { + + currentScheduleId: null, + + showContextMenu: function(id, el) { + var lst = Ext.getCmp('status-window-schedule-list'); + var mnu = lst.elementContextMenu; + this.currentScheduleId = id; + var elx = Ext.get(el); + mnu.showBy(elx, 'tr-br?'); + }, + + formatSizeString: function(size) { return BackupApp.Utility.formatSizeString(size); }, + timeAgo: function(date) { return BackupApp.Utility.timeAgo(date); }, + + formatBackupScheduleDetails: function(values) + { + var metadata = ''; + + if (values.MetadataLookup != null) + { + var metadataItems = []; + var mt = values.MetadataLookup; + if (mt['source-file-size'] != null) + metadataItems.push('Source files: ' + this.formatSizeString(mt['source-file-size']) + ''); + + if (mt['total-backup-size'] != null && parseInt(mt['total-backup-size']) > 0) + metadataItems.push('Backup size: ' + this.formatSizeString(mt['total-backup-size']) + ''); + + if (mt['assigned-quota-space'] != null || mt['free-quota-space'] != null) + { + var spaceLeft = null; + if (mt['assigned-quota-space'] != null && mt['free-quota-space'] != null && mt['total-backup-size'] != null) + spaceLeft = Math.min(parseInt(mt['assigned-quota-space']) - parseInt(mt['total-backup-size']), parseInt(mt['free-quota-space'])); + else if (mt['assigned-quota-space'] != null && mt['total-backup-size'] != null) + spaceLeft = parseInt(mt['assigned-quota-space']) - parseInt(mt['total-backup-size']); + else if (mt['free-quota-space'] != null) + spaceLeft = parseInt(mt['free-quota-space']); + + var extracls = ''; + if (mt['total-backup-size'] != null) + { + //We mark it as low if there is less than 10% free + if (spaceLeft < (parseInt(mt['total-backup-size']) * 0.1)) + extracls = 'class="low-storage-space"'; + } + + if (spaceLeft != null) + metadataItems.push('Free space: ' + this.formatSizeString(spaceLeft) + ''); + } + + if (mt['changed-file-count'] != null) + { + var changedFiles = parseInt(mt['changed-file-count']); + var str = changedFiles + ' ' + changedFiles == 1 ? "change" : "changes"; + + if (mt['last-backup-date'] != null) + str += ' since ' + this.timeAgo(new Date(mt['last-backup-date'])); + + metadataItems.push('' + str + ''); + } else if (mt['last-backup-date'] != null || mt['last-backup-completed-time'] != null) { + if (mt['last-backup-completed-time'] != null) + metadataItems.push('Last backup: ' + this.timeAgo(new Date(mt['last-backup-completed-time'])) + ''); + else + metadataItems.push('Last backup: ' + this.timeAgo(new Date(mt['last-backup-date'])) + ''); + } + + for(var ix = 0; ix < metadataItems.length; ix++) + { + /*if (ix != 0) + metadata += ", "; */ + + metadata += metadataItems[ix]; + } + } + + if (metadata == '') + metadata = 'No backup information was found, run a backup to obtain data' + + return metadata; + } + } +}) \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/Service.js b/Duplicati/Server/webroot/backup-app/Service.js new file mode 100644 index 000000000..20654d266 --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/Service.js @@ -0,0 +1,228 @@ +Ext.define('BackupApp.Service', { + mixins: { + observable: 'Ext.util.Observable' + }, + + controlUrl: '/control.cgi', + pauseCountDownTimer: null, + updateRequestParams: { + action: 'get-current-state', + longpoll: true, + lasteventid: '-1', + duration: '5m', + }, + updateRequestRunning: false, + + //Bugfix for extjs + hasListeners: {}, + + //Cache for server responses + serverdata: { + 'current-state': null, + 'installed-backends': null, + 'installed-compression-modules': null, + 'installed-encryption-modules': null, + 'installed-generic-modules': null + }, + + constructor: function(config) { + this.addEvents('current-state-updated', 'count-down-pause-timer'); + }, + + updateCurrentState: function(force) { + if (this.updateRequestRunning && !force) + return; + + var params = force ? { action: 'get-current-state' } : this.updateRequestParams; + var timeout = force ? 5000 : (1000 * ((60 * 5) + 5)); + + if (!force) + this.updateRequestRunning = true; + + Ext.Ajax.request({ + url: this.controlUrl, + params: params, + timeout: timeout, + scope: this, + success: function(response) { + var res = eval('(' + response.responseText + ')'); + if (res != null) + { + Ext.log('Got update: ' + res.LastEventID + ', last: ' + this.updateRequestParams.lasteventid); + var realUpdate = this.updateRequestParams.lasteventid != res.LastEventID; + this.serverdata['current-state'] = res; + this.updateRequestParams.lasteventid = res.LastEventID; + + //Register next request + if (!force) + { + this.updateRequestRunning = false; + this.updateCurrentState(); + } + + if (realUpdate) + this.fireEvent('current-state-updated', this.serverdata['current-state']); + if (this.getExpectedPauseEnd() != null) + this.startPauseCountDownTimer(); + } + }, + failure: function(response, opts) { + //TODO: Grey out or similar + + + //Register next request + if (!force) + { + Ext.log('Failure in longpoll: ' + response.status + ', timeout: ' + response.timedout); + this.updateRequestRunning = false; + this.updateCurrentState(); + } + } + }); + }, + + startPauseCountDownTimer: function() { + if (this.pauseCountDownTimer == null) + this.pauseCountDownTimer = window.setTimeout('BackupApp.service.onPauseCountDownTimer()', 500); + }, + + onPauseCountDownTimer: function() { + this.pauseCountDownTimer = null; + var pauseEnd = this.getExpectedPauseEnd(); + if (pauseEnd == null) { + this.fireEvent('count-down-pause-timer', 0); + } else { + this.fireEvent('count-down-pause-timer', parseInt((pauseEnd.getTime() - new Date().getTime()) / 1000)); + this.startPauseCountDownTimer(); + } + }, + + getExpectedPauseEnd: function() { + var pauseEnd = this.serverdata['current-state'].EstimatedPauseEnd; + if (pauseEnd != null) { + pauseEnd = BackupApp.Utility.parseJsonDate(pauseEnd); + if (pauseEnd != null && pauseEnd.getTime() > new Date().getTime()) + return pauseEnd; + } + return null; + }, + + getSchedulePosition: function(id) { + var state = this.serverdata['current-state']; + if (state == null) + return -1; + + if (id == state.ActiveScheduleId) + return 0; + else if (state.SchedulerQueueIds != null) + for(var i = 0; i < state.SchedulerQueueIds.length; i++) + if (state.SchedulerQueueIds[i] == id) + return i+1; + + return -1; + }, + + pause: function(duration) { + var self = this; + Ext.Ajax.request({ + url: this.controlUrl, + params: { + action: 'send-command', + command: 'pause', + duration: duration + }, + success: function(response) { } + }); + }, + + resume: function() { + var self = this; + Ext.Ajax.request({ + url: this.controlUrl, + params: { + action: 'send-command', + command: 'resume' + }, + success: function(response) { } + }); + }, + + isPaused: function() { + var state = this.serverdata['current-state']; + if (state != null) + return state.ProgramState != 'Running'; + + return true; + }, + + togglePause: function() { + if (this.isPaused()) + this.resume(); + else + this.pause(); + }, + + getInstalledCompressionModules: function(callback) { + if (this.serverdata['installed-compression-modules'] == null) { + var self = this; + Ext.Ajax.request({ + url: this.controlUrl, + params: { action: 'list-installed-compression-modules' }, + success: function(response) { + self.serverdata['installed-compression-modules'] = eval('(' + response.responseText + ')'); + callback(self.serverdata['installed-compression-modules']); + } + }); + } else { + callback(this.serverdata['installed-compression-modules']); + } + }, + + getInstalledGenericModules: function(callback) { + if (this.serverdata['installed-generic-modules'] == null) { + Ext.Ajax.request({ + url: this.controlUrl, + params: { action: 'list-installed-generic-modules' }, + success: function(response) { + self.serverdata['installed-generic-modules'] = eval('(' + response.responseText + ')'); + callback(self.serverdata['installed-generic-modules']); + } + }); + } else { + callback(this.serverdata['installed-generic-modules']); + } + }, + + getInstalledEncryptionModules: function(callback) { + if (this.serverdata['installed-encryption-modules'] == null) { + Ext.Ajax.request({ + url: this.controlUrl, + params: { action: 'list-installed-encryption-modules' }, + success: function(response) { + self.serverdata['installed-encryption-modules'] = eval('(' + response.responseText + ')'); + callback(self.serverdata['installed-encryption-modules']); + } + }); + } else { + callback(this.serverdata['installed-encryption-modules']); + } + }, + + runBackup: function(id, full) { + var self = this; + + Ext.Ajax.request({ + url: this.controlUrl, + params: { + action: 'send-command', + command: 'run-backup', + id: id, + full: full + }, + success: function(response) { + } + }); + + } + +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/Utility.js b/Duplicati/Server/webroot/backup-app/Utility.js new file mode 100644 index 000000000..c9bc01479 --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/Utility.js @@ -0,0 +1,147 @@ +Ext.define('BackupApp.Utility', { + statics: { + + strings: { + terabyteShort: 'TB', + gigabyteShort: 'GB', + megabyteShort: 'MB', + kilobyteShort: 'KB', + bytesShort: 'bytes', + + prefixAgo: null, + prefixFromNow: "in", + suffixAgo: "ago", + suffixFromNow: null, + seconds: "less than a minute", + minute: "about a minute", + minutes: "%d minutes", + hour: "about an hour", + hours: "about %d hours", + day: "a day", + days: "%d days", + month: "about a month", + months: "%d months", + year: "about a year", + years: "%d years", + wordSeparator: " " + }, + + timeAgoTimer: window.setInterval('BackupApp.Utility.updateTimeAgoFields()', 1000 * 150), + + //Simplified version of jquery.timeago + timeAgo: function(date) { + var distanceMillis = (new Date().getTime() - date.getTime()); + var strings = this.strings; + + var prefix = strings.prefixAgo; + var suffix = strings.suffixAgo; + if (distanceMillis < 0) { + prefix = strings.prefixFromNow; + suffix = strings.suffixFromNow; + } + + var seconds = Math.abs(distanceMillis) / 1000; + var minutes = seconds / 60; + var hours = minutes / 60; + var days = hours / 24; + var years = days / 365; + + var words = seconds < 45 && strings.seconds.replace(/%d/i, Math.round(seconds)) || + seconds < 90 && strings.minute || + minutes < 45 && strings.minutes.replace(/%d/i, Math.round(minutes)) || + minutes < 90 && strings.hour || + hours < 24 && strings.hours.replace(/%d/i, Math.round(hours)) || + hours < 42 && strings.day || + days < 30 && strings.days.replace(/%d/i, Math.round(days)) || + days < 45 && strings.month || + days < 365 && strings.months.replace(/%d/i, Math.round(days / 30)) || + years < 1.5 && strings.year || + strings.years.replace(/%d/i, Math.round(years)); + + var separator = strings.wordSeparator === undefined ? " " : strings.wordSeparator; + return Ext.String.trim([prefix, words, suffix].join(separator)); + }, + + updateTimeAgoFields: function() { + var parent = Ext.get(document); + var els = parent.query('.marker-time-ago'); + for(var i = 0; i < els.length; i++) { + var time = this.parseJsonDate(els[i].title); + if (els[i].nextSibling.nodeType == 3) + els[i].nextSibling.nodeValue = this.timeAgo(time); + else if (els[i].nextSibling.innerText != null) + els[i].nextSibling.innerText = this.timeAgo(time); + } + }, + + + parseJsonDate: function(str) { + if (str == null) + return null; + + if (Ext.String.trim(str).length == 0) + return null; + + if (str.indexOf("\/") == 0) + { + var strtmp = str.replace(/\/Date\((-?\d+(((\+|\-)\d+)|Z|z)?)\)\//gi, "new Date($1)"); + return eval(strtmp); + } + else + { + return new Date(str); + } + }, + + formatSecondsAsTime: function(seconds) { + seconds = parseInt(seconds); + var hours = parseInt(Math.floor(seconds / (60 * 60))); + seconds = seconds - (hours * 60 * 60); + var minutes = parseInt(Math.floor(seconds / 60)); + seconds = seconds - (minutes * 60); + var res = ''; + if (hours > 0) { + res += hours + ':'; + if (minutes < 10) + res += '0'; + } + + res += minutes + ':' ; + if (seconds < 10) + res += '0'; + res += seconds; + + return res; + }, + + formatSizeString: function(size) { + size = parseInt(size); + if (isNaN(size)) + return size; + + var strings = this.strings; + + if (size >= 1024 * 1024 * 1024 * 1024) + return (size / (1024 * 1024 * 1024 * 1024.0)).toFixed(2) + ' ' + strings.terabyteShort; + else if (size >= 1024 * 1024 * 1024) + return (size / (1024 * 1024 * 1024.0)).toFixed(2) + ' ' + strings.gigabyteShort; + else if (size >= 1024 * 1024) + return (size / (1024 * 1024.0)).toFixed(2) + ' ' + strings.megabyteShort; + else if (size >= 1024) + return (size / (1024.0)).toFixed(2) + ' ' + strings.kilobyteShort; + else + return size + ' ' + strings.bytesShort; + }, + + estimatedFreeSpace: function(assignedQuota, freeQuota, backupSize) { + if (assignedQuota != null && freeQuota != null && backupSize != null) + return Math.min(parseInt(assignedQuota) - parseInt(backupSize), parseInt(freeQuota)); + else if (assignedQuota != null && backupSize != null) + return parseInt(assignedQuota) - parseInt(backupSize); + else if (freeQuota != null) + return parseInt(freeQuota); + else + return null; + } + } +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/controller/Schedules.js b/Duplicati/Server/webroot/backup-app/controller/Schedules.js new file mode 100644 index 000000000..853a4172d --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/controller/Schedules.js @@ -0,0 +1,36 @@ +Ext.define('BackupApp.controller.Schedules', { + extend: 'Ext.app.Controller', + stores: [ 'Schedules' ], + views: [ 'schedule.List' ], + + refs: [{ + selector: 'viewport > panel', + ref: 'basicPanel' + }], + + lastEventID: -1, + + init: function() { + this.control({ + 'viewport > panel': { + render: this.onPanelRendered + } + }); + + this.application.on({ + 'current-state-updated': function(data) { + + //Update the data store if there is new metadata + if (data.LastEventID != this.lastEventID) + this.getSchedulesStore().load(); + + this.lastEventID = data.LastEventID; + }, + scope: this + }); + }, + + onPanelRendered: function() { + //console.log('The panel was rendered'); + } +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/controller/StatuswindowFooter.js b/Duplicati/Server/webroot/backup-app/controller/StatuswindowFooter.js new file mode 100644 index 000000000..84e580a0f --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/controller/StatuswindowFooter.js @@ -0,0 +1,16 @@ +Ext.define('BackupApp.controller.StatuswindowFooter', { + extend: 'Ext.app.Controller', + views: [ 'StatuswindowFooter' ], + + init: function() { + this.control({ + 'viewport > panel': { + render: this.onPanelRendered + } + }); + }, + + onPanelRendered: function() { + //console.log('The footer panel was rendered'); + } +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/controller/StatuswindowHeader.js b/Duplicati/Server/webroot/backup-app/controller/StatuswindowHeader.js new file mode 100644 index 000000000..048d10d1a --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/controller/StatuswindowHeader.js @@ -0,0 +1,60 @@ +Ext.define('BackupApp.controller.StatuswindowHeader', { + extend: 'Ext.app.Controller', + views: [ 'StatuswindowHeader' ], + + refs: [{ + selector: '#status-window-header-pause-button', + ref: 'pauseButton' + }, { + selector: '#status-window-header-pause-menu', + ref: 'pauseMenu', + }], + + init: function() { + this.application.on({ + 'current-state-updated': function() { + var btn = this.getPauseButton(); + var mnu = this.getPauseMenu(); + var srv = this.application.service; + var util = BackupApp.Utility; + + if (srv.isPaused()) { + if (srv.getExpectedPauseEnd() != null) + btn.setText('Resume (' + util.formatSecondsAsTime((srv.getExpectedPauseEnd().getTime() - new Date().getTime()) / 1000) + ')'); + else + btn.setText('Resume'); + btn.setIconCls('backups-paused'); + mnu.setText('Resume Duplicati'); + } else { + btn.setText('Pause'); + btn.setIconCls('backups-running'); + mnu.setText('Pause Duplicati'); + } + }, + scope: this + }); + + this.application.on({ + 'count-down-pause-timer': function(data) { + var btn = this.getPauseButton(); + var srv = this.application.service; + var util = BackupApp.Utility; + if (data <= 0) + btn.setText('Pause'); + else + btn.setText('Resume (' + util.formatSecondsAsTime(data) + ')'); + }, + scope: this + }); + + this.control({ + 'viewport > panel': { + render: this.onPanelRendered + } + }); + }, + + onPanelRendered: function() { + //console.log('The header panel was rendered'); + } +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/model/Schedule.js b/Duplicati/Server/webroot/backup-app/model/Schedule.js new file mode 100644 index 000000000..19e63bebf --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/model/Schedule.js @@ -0,0 +1,4 @@ +Ext.define('BackupApp.model.Schedule', { + extend: 'Ext.data.Model', + fields: ['ID', 'Name', 'Path', 'MetadataLookup', 'NextScheduledTime', 'When', 'ExistsInDb', 'AllowedWeekdays', 'Repeat', 'Weekdays'] +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/store/Schedules.js b/Duplicati/Server/webroot/backup-app/store/Schedules.js new file mode 100644 index 000000000..307f1a3cb --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/store/Schedules.js @@ -0,0 +1,95 @@ +Ext.define('BackupApp.store.Schedules', { + extend: 'Ext.data.Store', + model: 'BackupApp.model.Schedule', + autoLoad: true, + + /* Sort order, + * first by queue position + * second by next schedule time, + * third by last backup time + * */ + sorters: [{ + sorterFn: function(a, b) { + var schedulePosA = BackupApp.service.getSchedulePosition(a.get("ID")); + var schedulePosB = BackupApp.service.getSchedulePosition(b.get("ID")); + + if(schedulePosA >= 0 && schedulePosB >= 0) + { + if (schedulePosA == schedulePosB) + return 0; + else + return schedulePosA < schedulePosB ? -1 : 1; + } + else if (schedulePosA >= 0) + return -1; + else if (schedulePosB >= 0) + return 1; + else + return 0; + } + }, { + sorterFn: function(a, b) { + var nextTimeA = BackupApp.Utility.parseJsonDate(a.get('NextScheduledTime')); + var nextTimeB = BackupApp.Utility.parseJsonDate(b.get('NextScheduledTime')); + var now = new Date().getTime(); + + //Scheduled time in past, but not in queue, so it will not run + if (nextTimeA != null && nextTimeA < now) + nextTimeA = null; + if (nextTimeB != null && nextTimeB < now) + nextTimeB = null; + + if (nextTimeA != null && nextTimeB != null) + { + nextTimeA = nextTimeA.getTime(); + nextTimeB = nextTimeB.getTime(); + if (nextTimeA == nextTimeB) + return 0; + else + return nextTimeA < nextTimeB ? -1 : 1; + } + else if (nextTimeA != null) + return -1; + else if (nextTimeB != null) + return 1; + else + return 0; + } + }, { + sorterFn: function(a, b) { + var lastTimeA = BackupApp.Utility.parseJsonDate(a.data.MetadataLookup['last-backup-completed-time']); + var lastTimeB = BackupApp.Utility.parseJsonDate(b.data.MetadataLookup['last-backup-completed-time']); + if (lastTimeA == null) + lastTimeA = BackupApp.Utility.parseJsonDate(a.data.MetadataLookup['last-backup-date']); + if (lastTimeB == null) + lastTimeB = BackupApp.Utility.parseJsonDate(b.data.MetadataLookup['last-backup-date']); + + if ((lastTimeA != null && lastTimeB != null)) + { + lastTimeA = lastTimeA.getTime(); + lastTimeB = lastTimeB.getTime(); + + if (lastTimeA == lastTimeB) + return 0; + else + return lastTimeA > lastTimeB ? -1 : 1; + } + else if (lastTimeA != null) + return -1; + else if (lastTimeB != null) + return 1; + else + return 0; + } + }, { + property: 'Name', + }], + + proxy: { + type: 'ajax', + url: 'control.cgi?action=list-schedules', + reader: { + type: 'json' + } + } +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/view/AboutWindow.js b/Duplicati/Server/webroot/backup-app/view/AboutWindow.js new file mode 100644 index 000000000..ac9d12383 --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/view/AboutWindow.js @@ -0,0 +1,32 @@ +Ext.define('BackupApp.view.AboutWindow', { + statics: { + dialogWindow: null, + show: function() { + if (this.dialogWindow == null) + this.dialogWindow = Ext.create('Ext.window.Window', { + title: 'About Duplicati', + height: 200, + width: 400, + modal: true, + resizable: false, + buttonAlign: 'center', + closeAction: 'hide', + layout: 'auto', + items: [{ + xtype: 'label', + text: 'Duplicati 2.0' + }], + buttons: [{ + xtype: 'button', + text: 'OK', + handler: function() { + BackupApp.view.AboutWindow.dialogWindow.hide(); + } + }] + }); + + this.dialogWindow.show(); + } + } +}); + diff --git a/Duplicati/Server/webroot/backup-app/view/StatuswindowFooter.js b/Duplicati/Server/webroot/backup-app/view/StatuswindowFooter.js new file mode 100644 index 000000000..4e5f58454 --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/view/StatuswindowFooter.js @@ -0,0 +1,37 @@ +Ext.define('BackupApp.view.StatuswindowFooter' ,{ + extend: 'Ext.panel.Panel', + alias : 'widget.statuswindowfooter', + + title : 'Status line', + header: false, + border: 0, + layout: 'column', + cls: 'footer-panel', + + items: [{ + xtype: 'label', + html: 'A new version is available', + handler: function() { window.open('https://www.facebook.com/pages/Duplicati/105118456272281') }, + columnWidth: 1, + margin: 10 + },{ + xtype: 'button', + text: 'Facebook', + handler: function() { window.open('https://www.facebook.com/pages/Duplicati/105118456272281') }, + margin: 10 + },{ + xtype: 'button', + text: 'Google+', + handler: function() { window.open('https://plus.google.com/105271984558189185842/posts') }, + margin: 10 + },{ + xtype: 'button', + text: 'Donate!', + handler: function() { window.open('https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=paypal%40hexad%2edk&item_name=Duplicati%20Donation&no_shipping=2&no_note=1&tax=0¤cy_code=EUR&bn=PP%2dDonationsBF&charset=UTF%2d8') }, + margin: 10 + }], + + initComponent: function() { + this.callParent(arguments); + } +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/view/StatuswindowHeader.js b/Duplicati/Server/webroot/backup-app/view/StatuswindowHeader.js new file mode 100644 index 000000000..43c500982 --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/view/StatuswindowHeader.js @@ -0,0 +1,101 @@ +Ext.define('BackupApp.view.StatuswindowHeader' ,{ + extend: 'Ext.panel.Panel', + alias : 'widget.statuswindowheader', + + title : 'Main App controls', + header: false, + border: 0, + layout: 'column', + cls: 'header-panel', + + items: [{ + xtype: 'splitbutton', + cls: 'main-button', + text: 'Duplicati', + id: 'status-window-header-main-button', + margin: 10, + + handler: function() { this.showMenu(); }, + menu: [{ + id: 'status-window-header-pause-menu', + text: 'Pause Duplicati', + handler: function() { BackupApp.service.togglePause(); } + },{ + text: 'Pause for x minutes', + menu: [{ + text: 'Pause for 5 minutes', + handler: function() { BackupApp.service.pause('5m'); } + },{ + text: 'Pause for 15 minutes', + handler: function() { BackupApp.service.pause('15m'); } + },{ + text: 'Pause for 30 minutes', + handler: function() { BackupApp.service.pause('30m'); } + },{ + text: 'Pause for 60 minutes', + handler: function() { BackupApp.service.pause('60m'); } + }] + },{ + text: '*** Throttle ...' + },{ + xtype: 'menuseparator' + },{ + text: '*** Run backups', + menu: [{ + text: 'All backups' + },{ + text: 'Label: Work' + },{ + text: 'Label: Home' + },{ + text: 'Label: Amazon S3' + }] + },{ + xtype: 'menuseparator' + },{ + text: '*** Settings' + },{ + text: 'About', + handler: function() { BackupApp.view.AboutWindow.show(); } + }] + },{ + xtype: 'label', + html: ' ', + columnWidth: 1 + },{ + xtype: 'panel', + layout: 'vbox', + align: 'center', + margin: 5, + border: 0, + items: [{ + xtype: 'label', + cls: 'throttle-label', + text: '*** Throttle upload' + },{ + xtype: 'slider', + width: 200, + value: 80, + minValue: 0, + maxValue: 100 + }] + },{ + xtype: 'button', + cls: 'add-new-backup-button', + text: '*** Add new backup', + margin: 10 + },{ + xtype: 'button', + id: 'status-window-header-pause-button', + cls: 'pause-backup-button', + iconCls: 'backups-paused', + text: 'Pause', + margin: 10, + handler: function() { BackupApp.service.togglePause(); } + }], + + initComponent: function() { + + this.callParent(arguments); + } +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/backup-app/view/schedule/List.js b/Duplicati/Server/webroot/backup-app/view/schedule/List.js new file mode 100644 index 000000000..c7983b8d9 --- /dev/null +++ b/Duplicati/Server/webroot/backup-app/view/schedule/List.js @@ -0,0 +1,95 @@ +Ext.define('BackupApp.view.schedule.List' ,{ + extend: 'Ext.grid.Panel', + alias : 'widget.schedulelist', + + title : 'All Schedules', + header: false, + border: 0, + id: 'status-window-schedule-list', + + hideHeaders: true, + selType: 'rowmodel', + + store: 'Schedules', + + elementTemplateStr: + '{Name}
' + + '' + + '' + + /* The template for this became un-readable, so now it is a function */ + '{[BackupApp.ListUtility.formatBackupScheduleDetails(values)]}' + + '' + + '' + + '
' + + '
Labels: {Path}' + + '
' + + '
' + + '
', + + + elementTemplate: null, + + elementContextMenu: Ext.create('Ext.menu.Menu', { + floating: true, + items: [{ + text: '*** Show files' + },{ + text: 'Run now', + handler: function() { + Ext.log('Running backup ' + BackupApp.ListUtility.currentScheduleId); + BackupApp.service.runBackup(BackupApp.ListUtility.currentScheduleId, false); + } + },{ + text: 'Run a full backup now', + handler: function() { + Ext.log('Running full backup ' + BackupApp.ListUtility.currentScheduleId); + BackupApp.service.runBackup(BackupApp.ListUtility.currentScheduleId, true); + } + },{ + text: '*** Cancel' + },{ + xtype: 'menuseparator' + },{ + text: '*** Edit settings' + },{ + text: '*** Delete backup' + },{ + xtype: 'menuseparator' + },{ + text: '*** Create a copy' + }] + }), + + columns: + [ + {header: 'ScheduleTime', dataIndex: 'NextScheduledTime', flex: 0.8, align: 'center', renderer: + function(value, metaData, record) { + var schedulePos = BackupApp.service.getSchedulePosition(record.get("ID")); + if (schedulePos == 0) { + return '
In progress
Cancel
'; + } else if (schedulePos > 0) { + return '
No. ' + schedulePos + ' in queue
'; + } else if (value != null) { + var scdate = BackupApp.Utility.parseJsonDate(value); + if (scdate > new Date().getTime()) + return '
' + BackupApp.Utility.timeAgo(scdate) + '
'; + } + + return ''; + } + }, + {header: 'Name', dataIndex: 'Name', flex: 1, align: 'center', renderer: + function(value, metaData, record) { + return this.elementTemplate.apply(record.data); + } + }, + {header: 'Path', dataIndex: 'ID', flex: 0.8, align: 'left', renderer: + function(value) { return value; } + } + ], + + initComponent: function() { + this.elementTemplate = new Ext.XTemplate(this.elementTemplateStr, {formatSizeString: function(v) { return BackupApp.Utility.formatSizeString(v); } }); + this.callParent(arguments); + } +}); \ No newline at end of file diff --git a/Duplicati/Server/webroot/icons/add-backup.png b/Duplicati/Server/webroot/icons/add-backup.png new file mode 100644 index 0000000000000000000000000000000000000000..0940ab07d5dafacd47b4425419b205c3c84f7118 GIT binary patch literal 3496 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 literal 0 HcmV?d00001 diff --git a/Duplicati/Server/webroot/icons/hourglass.png b/Duplicati/Server/webroot/icons/hourglass.png new file mode 100644 index 0000000000000000000000000000000000000000..5b36882bdae3c87063531b6c3bce82e14e10b762 GIT binary patch literal 46838 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

?6SH)Z4&uNaxq{+rRW8K{Lq;5}-5nGT9VF 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 literal 0 HcmV?d00001 diff --git a/Duplicati/Server/webroot/icons/hourglass2.png b/Duplicati/Server/webroot/icons/hourglass2.png new file mode 100644 index 0000000000000000000000000000000000000000..f6964802dcfa4e009c783ad278c7326727baea53 GIT binary patch literal 41967 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i9Bd2>40S$%rVI=WoCO|{#S9GG!XV7ZFl&wk z0|S?Trn7TEKt_H^esM;Afr6*AvqC{pep+TuDg#5st+~PJA;B-jY`@?8;^f`YFvUAR zNR&e%$f>(QWTKjuBBy{?hvLGUqJakmU0qqEPb}zQ?(1vl5e?Mg>EgP<{zP$6U-ROQ zu2a7sRxi%Jw&(k^v;VeUw|lQz`~GlIyvbvLx3(rf_nY4%M1;3f6T0AWQd-kD9X5C zB7=f(YKIF$hBd>Q^I=`C3=swlB5B@7EE#U-G8lMT#JFBV&*2Bohp{DjnN#sh3w(sdU6`)JjJy| z%o3RrXF2E{s+=il)M�PV*|l=S%D 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 Y?O*1pn0z*8U|?YIboFyt=akR{090=8YybcN literal 0 HcmV?d00001 diff --git a/Duplicati/Server/webroot/icons/main-logo.png b/Duplicati/Server/webroot/icons/main-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1e291e564d8d845cc6538b68071cbbe04ef4ac99 GIT binary patch literal 1795 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANNf2AR&z0iMpz3IRp=X_+~x z3=9>w*7oi7IvgP3aGtlxbzvCKqXz}*fdM|z>_;{KF63z1YNc{>mPv@F@1e6_m-9b- zaqZyIyXpl+B?2Pz510qcv9fSE@j#&|-Rl0s$B&s0Z<5}+EU+nYN$B#>$$hU+zEtNr zv&muV-Mk5EWxMzC3mgqR!EYBY$Z%e|Z1J@x`Da)I!<FdgVhgFh?llRqz z`-}_>tRbE*jv*0;w@%N_32_xUUT<9f{@u5Omo8oMimnXXut)R8B9o9_wNvbl%xZ2u z`Yz0FK0Qe)R|E`&d{l&-d|Xty)LfdJdS)arJ>8|}YwztfuDh|V zWOwu~5zCWL-rchZxLvozpm5gBCChr$ zbxUjR{5g1J;+bP!t(iHuocESn?>msXq(G^KS)jpf@r6@NiYHG;`Z&Jh=JB3CM?}C- zg86H&wMBe*<6((uTSB*SO?s)BTJ-Swj#$g>tVRk9r?Vcvc@}M|Ka<}bPksF z$JPdF`Fxx*H>D!&=$`3&Jz5s5tK;_iX?T|BnSF`M%d^UM`r`UAOP-xk^-6ztc(PsZ zzj;$Ho$QZUAD8MGHdNj>(AdU#99Pmc5PDJ$h|J+H`jLK{y%q~ z?~E37QdrvTb3SIurX)6}g2i70^ex=|r<|Kz%W>Gl(@Ir+^1kJ^J7#(;>HRlF$}MWW zoV&=zBX4)*3$!Y{c(R!P`s1%voGm(Y-kE&*^f_{WQk;_*&%;9n&-nI=eYtywZ~Mla zm#bT3^qBrJaLf9CMy9axm`J4ihZeA<*++`QB*5-TQU-mP{zW zR>yrvN{C@*%U_p2<~Jjy9kkDG7M)%2BKrO&F8SmjFP61OZJ8FZ9$Y8A!-rY-u8vMo zp*9~Y)7jnH^WW$Nd}nH4sDB>H!`XKF$jpSM>>cSR+|5=>7|cB!DCOd!dQ9W#1jZBp zc3LVjgsXXFZ)lpsd34fR(>ZnpDlhLCG;o{D-N#+>Gb_1Gzks#j%NwRM0UU}V(%0X< z$~#i!*YT)(Rhy&mlxtE;510JX6WSJ)9IMds6e?@uR_INmfRSGvQ90^N!?~+*Q6~O7ee3OI3c}$|FKWz;RRbPdwt{Un?kr6r+2Isj>=zczn4;3sqwl(CkTApIHOXZd?Wu}||A8@o{nzSggSW{0+;o6J3 z|GQovzj(R(1N*BPHi^tTmBm%^PD;(Ldsq|8>U3hqv{fm;?1F-iseITfXTm$*;`cRssYIXh0F@W}ttPnoxN`z312Z(jaS z;`)mt1{W?@g@;aGuu)j6)UtR+LOt^erfzA?bR5!qkr* zMY%h3*?)dM@>t`k`~joZ%V!R~-8FwrkI|iVHB-1QzO?p^b~im(pzPHu=#+H3E=?p? z*}Ax{D7W(dgVifzeS=TeEiuV=E}q}*_5H<77tQWTlGUF6x_dTvd&XNu-|i0#{wjGkvP67#J8BJYD@< J);T3K0RVh)KS2Nh literal 0 HcmV?d00001 diff --git a/Duplicati/Server/webroot/icons/schedule-active.png b/Duplicati/Server/webroot/icons/schedule-active.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c8ec683edd6a974eacc253332f903d643dbe41 GIT binary patch literal 717 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7SkfJR9T^zbpD<_bdda}R zAX(xXQ4*Y=R#Ki=l*-_klAn~S;F+74o*I;zm{M7IGS!BGfhpe8#WBR<^wP<``9gsr zZNHiSu>RqT*i~|P-7LLb#)Zj;jva9g4p%k3>YB`zs1xWj`x={;VD_qQDI&HJA_p7${xxUnKnr^#`u=hVonPXeAj zG(SB54hU6JR9_Nq>Zx+LMJTz6x_D`A=idd$x~nXru^v3+q79a<=xti zH~JWPee8a*x2E!NOZ?3zr^njct1RwcKP=hJj?~+yaX=QH#A3&O|)9rS)fK#-l)vKZbloqMZ^a zPpPiidEGLl^I)NgAJ2vw-eV3-=VcH4=$ZfL^rlN2y7Y9`@43QzCVrpVi(NMw+m^i8 zoAls_OfBoVIonU1UD91zu;We@x7v1lXHhTH7vCEjesXtCv9|l%d4OZtXIWB8w z%QGvT=4X2C>$;w8I;ZjSZkro1a)q}xeyyJ97G8NzcH6ot^O*rE%&cJw#s}vKSMqIR z4xCZ0V;KDHd;R)PFOqltR?44QyU*7)GG?Ky|J*xGb05jwj`_0Xtoz+%lm6HF{Qo?s ao>8_!H2ln=d8!Ny3=E#GelF{r5}E+)nL_RW literal 0 HcmV?d00001 diff --git a/Duplicati/Server/webroot/icons/schedule-in-queue.png b/Duplicati/Server/webroot/icons/schedule-in-queue.png new file mode 100644 index 0000000000000000000000000000000000000000..fb4ebc850a94b2c8c59502f38230ac54f164dc7c GIT binary patch literal 943 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 literal 0 HcmV?d00001 diff --git a/Duplicati/Server/webroot/icons/status-play.png b/Duplicati/Server/webroot/icons/status-play.png new file mode 100644 index 0000000000000000000000000000000000000000..6941af7fac9a87c8d55a30afa9d5874190b361eb GIT binary patch literal 3453 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 + + + +Status Window + + + + + + + + + + + + + + + + diff --git a/Duplicati/Server/webroot/stylesheets/common.css b/Duplicati/Server/webroot/stylesheets/common.css new file mode 100644 index 000000000..47aa86d62 --- /dev/null +++ b/Duplicati/Server/webroot/stylesheets/common.css @@ -0,0 +1 @@ +/* Placeholder for customization */ \ No newline at end of file diff --git a/Duplicati/Server/webroot/stylesheets/customized.css b/Duplicati/Server/webroot/stylesheets/customized.css new file mode 100644 index 000000000..47aa86d62 --- /dev/null +++ b/Duplicati/Server/webroot/stylesheets/customized.css @@ -0,0 +1 @@ +/* Placeholder for customization */ \ No newline at end of file diff --git a/Duplicati/Server/webroot/stylesheets/status-window.css b/Duplicati/Server/webroot/stylesheets/status-window.css new file mode 100644 index 000000000..771f7de01 --- /dev/null +++ b/Duplicati/Server/webroot/stylesheets/status-window.css @@ -0,0 +1,193 @@ +.footer-panel .x-panel-body +{ + background-color: #ccffcc; +} + +.header-panel .x-panel-body +{ + background-color: #ccffcc; +} + +.main-button .x-btn-split, .add-new-backup-button .x-btn-center, .pause-backup-button .x-btn-center +{ + height: 40px; +} + +.main-button .x-btn-inner, .add-new-backup-button .x-btn-inner, .pause-backup-button .x-btn-inner +{ + font-size: 2em; + height: 20px; + padding-left: 36px; +} + +.main-button .x-btn-icon, .add-new-backup-button .x-btn-icon, .pause-backup-button .x-btn-icon +{ + width: 32px; + height: 32px; + top: 4px; +} + +.main-button .x-btn-icon +{ + background-image: url(../icons/main-logo.png); +} + +.add-new-backup-button .x-btn-icon +{ + background-image: url(../icons/add-backup.png); +} + +.pause-backup-button .backups-paused +{ + background-image: url(../icons/status-play.png); +} + +.pause-backup-button .backups-running +{ + background-image: url(../icons/status-pause.png); +} + +.throttle-label +{ + font-size: 2em; + padding-left: 20px; +} + +.low-storage-space +{ + color: red; +} + +.important-information +{ + font-weight: bold; +} + +.info-icon +{ + padding: 8px; + margin-right: 4px; + margin-top: 40px; + background-repeat: no-repeat; + background-position-y: 4px; + display: inline; + float: right; +} + +.schedule-activity-text +{ + margin-top: 40px; + margin-right: 20px; + display: inline; + float: right; +} + +.schedule-waiting +{ + background: url(../icons/schedule-waiting.png) + +} + +.schedule-active +{ + background: url(../icons/schedule-active.png) + +} + +.schedule-in-queue +{ + background: url(../icons/schedule-in-queue.png) + +} + +.backup-schedule-tags +{ + padding-top: 2px; +} + +.marker-time-ago +{ + display: none; +} + +.backup-schedule-detail-source-size, +.backup-schedule-detail-backup-size, +.backup-schedule-detail-free-size, +.backup-schedule-detail-change-count, +.backup-schedule-detail-last-backup, +.backup-schedule-tags +{ + display: block; + padding-left: 15px; + padding-right: 15px; + text-align: left; +} + +.backup-schedule-details-inner +{ + padding-left: 15px; + padding-right: 15px; + text-align: left; +} + +.backup-schedule-name +{ + display: block; + border: 1px lightgrey solid; + margin-left: 20px; + margin-right: 20px; + padding-top: 8px; + padding-bottom: 8px; + margin-top: 10px; + background-color: #aaeeaa; + + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + -khtml-border-radius: 6px; + border-radius: 6px; +} + +.backup-schedule-drop-arrow +{ + background-image: url(../extjs-4.1.0/resources/themes/images/default/button/arrow.gif); + background-repeat: no-repeat; + width: 16px; + height: 10px; + background-position-x: 6px; + display: inline-block; +} + +.backup-schedule-name-inner +{ + display: block; + font-weight: bold; + font-size: 1.5em; + overflow: hidden; + white-space: wrap; + margin-left: 8px; + margin-right: 8px; + padding-top: 2px; + padding-bottom: 4px; + cursor: pointer; +} + +.backup-schedule-details +{ + display: block; + border: 1px lightgrey solid; + padding-top: 10px; + padding-bottom: 8px; + padding-left: 4px; + padding-right: 4px; + overflow: auto; + white-space: normal; + margin-bottom: 10px; + background-color: #ccffcc; + margin-top: -2px; + font-size: 1.2em; + + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + -khtml-border-radius: 6px; + border-radius: 6px; +} \ No newline at end of file