Removed greeno theme

This commit is contained in:
Kenneth Skovhede
2016-12-16 17:35:05 +01:00
parent 6161096c76
commit 264a9801f0
84 changed files with 4 additions and 16759 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 927 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 587 B

-713
View File
@@ -1,713 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=9" />
<title>Backup</title>
<link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="stylesheets/green-theme/jquery-ui-1.10.3.min.css" />
<link rel="stylesheet" type="text/css" href="stylesheets/common.css" />
<link rel="stylesheet" type="text/css" href="stylesheets/jstree/style.css" />
<link rel="stylesheet" type="text/css" href="stylesheets/main.css" />
<link rel="stylesheet" type="text/css" href="stylesheets/editdialog.css" />
<link rel="stylesheet" type="text/css" href="stylesheets/restoredialog.css" />
<link rel="stylesheet" type="text/css" href="stylesheets/logwindow.css" />
<link rel="stylesheet" type="text/css" href="../oem/greeno/stylesheets/oem.css" />
<link rel="stylesheet" type="text/css" href="../customized/customized.css" />
<!--[if lt IE 9]>
<script type="text/javascript" src="scripts/jquery-1.11.0.min.js"></script>
<![endif]-->
<script type="text/javascript" src="scripts/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="scripts/jquery-ui-1.10.3.min.js"></script>
<script type="text/javascript" src="scripts/jquery.tmpl.min.js"></script>
<script type="text/javascript" src="scripts/jquery.watermark.min.js"></script>
<script type="text/javascript" src="scripts/jstree.min.js"></script>
<script type="text/javascript" src="scripts/json2.js"></script>
<script type="text/javascript" src="scripts/oldbrowsersupport.js"></script>
<script type="text/javascript" src="scripts/config.js"></script>
<script type="text/javascript" src="scripts/app.js"></script>
<script type="text/javascript" src="scripts/editdialog.js"></script>
<script type="text/javascript" src="scripts/edituri.js"></script>
<script type="text/javascript" src="scripts/restoredialog.js"></script>
<script type="text/javascript" src="scripts/folderbrowser.js"></script>
<script type="text/javascript" src="scripts/logwindow.js"></script>
<script type="text/javascript" src="scripts/plugins.js"></script>
<script type="text/javascript" src="scripts/hideShowPassword.min.js"></script>
<script type="text/javascript" src="scripts/jquery.timeago.js"></script>
<script type="text/javascript" src="scripts/jquery.noty.packaged.min.js"></script>
<script type="text/javascript" src="scripts/zxcvbn.js"></script>
<script type="text/javascript" src="scripts/cryptojs.js"></script>
<script type="text/javascript" src="../oem/greeno/scripts/oem.js"></script>
<script type="text/javascript" src="../customized/customized.js"></script>
<script id="backup-item-template" type="text/x-jquery-tmpl">
<div id="backup-${Backup.ID}" class="main-backup-entry">
<div id="backup-control-${Backup.ID}" class="main-backup-control">
</div>
<div class="caption-text">${Backup.Name}</div>
<ul class="hint-text last-run-time" style="display: none" >
<li class="hint-text-caption">Last successful run:</li>
<li class="backup-last-run" alt="${Backup.Metadata.LastBackupStarted}">${$.timeago($.parseDate(Backup.Metadata.LastBackupStarted))}</li>
</ul>
<ul class="hint-text next-run-time" style="display: none">
<li class="hint-text-caption">Next run:</li>
<li class="backup-next-run"></li>
</ul>
<ul class="hint-text last-run-source-size">
<li class="hint-text-caption">Source:</li>
<li class="source-size">${Backup.Metadata.SourceSizeString || 'No data'}</li>
</ul>
<ul class="hint-text last-run-target-size">
<li class="hint-text-caption">Backup:</li>
<li class="target-size">${Backup.Metadata.TargetSizeString || 'No data'}</li>
</ul>
</div>
</script>
<script id="backup-option-template" type="text/x-jquery-tmpl">
<div class="backup-option ${Deprecated}">
<div>
<a id="${Name}" class="action-link backup-option-name backup-option-link">${Name}</a> : <div class="backup-option-short">${ShortDescription}</div>
</div>
<div class="backup-option-summary">
<div class="backup-option-type">Type: ${Type}</div>,
<div class="backup-option-default">Default value: ${DefaultValue}</div>
</div>
<div class="backup-option-long">${LongDescription}</div>
</div>
</script>
<script id="log-data-template" type="text/x-jquery-tmpl">
<div class="log-entry">
<div class="log-backupid">${BackupID}</div>
<div class="log-timestamp" title="${Timestamp*1000}">${Timestamp*1000}</div>
<div class="log-message">${Message}</div>
<div class="log-exception">${Exception}</div>
</div>
</script>
<script id="live-log-data-template" type="text/x-jquery-tmpl">
<div class="log-entry">
<div class="log-id">${BackupID}</div>
<div class="log-timestamp" title="${When}">${When}</div>
<div class="log-message">${Message}</div>
<div class="log-exception">${Exception}</div>
</div>
</script>
<script id="log-backup-general-template" type="text/x-jquery-tmpl">
<div class="log-entry">
<div class="log-operationid">${BackupID}</div>
<div class="log-timestamp" title="${Timestamp*1000}">${Timestamp*1000}</div>
<div class="log-type">${Type}</div>
<div class="log-message">${Message}</div>
<div class="log-exception">${Exception}</div>
</div>
</script>
<script id="log-backup-remote-template" type="text/x-jquery-tmpl">
<div class="log-entry">
<div class="log-operationid">${OperationID}</div>
<div class="log-timestamp" title="${Timestamp*1000}">${Timestamp*1000}</div>
<div class="log-type">${Operation}</div>
<div class="log-path">${Path}</div>
<div class="log-data">${Data}</div>
</div>
</script>
<script id="about-dialog-template" type="text/x-jquery-tmpl">
<li class="about-library-entry">
<div class="about-library-name"><a href="${link}" target="blank">${name}</a></div>
<div class="about-library-description">${description}.</div>
<div class="about-library-license"> <a href="${licenselink}">${license} licensed.</a></div>
<div class="about-library-notes"></div>
</li>
</script>
</head>
<body>
<header>
<div id="click-intercept"></div>
<div id="main-topbar">
<div class="content-wrap padded">
<div id="main-appname">Duplicati</div>
<ul class="main-shortcuts">
<li id="main-donate" class="main-icon-donate" style="display: none"></li>
<li id="main-control" class="main-icon-pause"></li>
<li id="main-settings" class="main-icon-settings"></li>
</ul>
<ul id="main-control-menu" class="menu">
<li id="main-control-menu-settings"><a>Settings...</a></li>
<li>-</li>
<li><a>Pause</a>
<ul id="main-control-menu-pause-submenu" class="menu">
<li id="main-control-menu-pause-submenu-5m"><a>5 minutes</a></li>
<li id="main-control-menu-pause-submenu-10m"><a>10 minutes</a></li>
<li id="main-control-menu-pause-submenu-15m"><a>15 minutes</a></li>
<li id="main-control-menu-pause-submenu-30m"><a>30 minutes</a></li>
<li id="main-control-menu-pause-submenu-1h"><a>1 hour</a></li>
</ul>
</li>
<li id="main-control-menu-throttle"><a>Throttle ...</a></li>
<li>-</li>
<li id="main-control-menu-import"><a>Import backup job...</a></li>
<li id="main-control-menu-restore-direct"><a>Restore from target ...</a></li>
<li>-</li>
<li id="main-control-menu-updates"><a>Check for updates</a></li>
<li id="main-control-menu-check-updates"><a>Check for updates</a></li>
<li id="main-control-menu-log"><a>Show log ...</a></li>
<li id="main-control-menu-options"><a>Options ...</a></li>
<li id="main-control-menu-about"><a>About ...</a></li>
</ul>
</div>
</div>
<div class="main-status-area-outer">
<div class="content-wrap padded">
<div id="main-status-area">
<div id="main-status-area-text">
My Important Backup
</div>
<div id="main-status-area-cancel-button"></div>
<div id="main-status-area-progress-outer">
<div id="main-status-area-progress-bar" class="">
</div>
<div id="main-status-area-progress-text">
Processing 123456 files ...
</div>
</div>
</div>
</div>
</div>
</header>
<section>
<ul id="backup-context-menu" class="context-popup-menu menu" style="display: none">
<li><u><b>Operations</b></u></li>
<li id="backup-details-run"><a>Run backup now!</a></li>
<li id="backup-details-restore"><a>Restore files ...</a></li>
<li>-</li>
<li><u><b>Configuration</b></u></li>
<li id="backup-details-edit"><a>Edit ...</a></li>
<!-- <li id="backup-details-copy"><a>Copy</a></li> -->
<li id="backup-details-export"><a>Export ...</a></li>
<li id="backup-details-delete"><a>Delete</a></li>
<li>-</li>
<li><u><b>Advanced</b></u></li>
<li id="backup-details-delete-local"><a>Delete local database</a></li>
<!-- <li id="backup-details-delete-remote"><a>Delete remote data</a></li> -->
<li id="backup-details-repair"><a>Repair local database</a></li>
<li id="backup-details-verify"><a>Verify backup files</a></li>
<li>-</li>
<li><u><b>Reporting</b></u></li>
<li id="backup-details-show-log"><a>Show log ...</a></li>
<li id="backup-details-send-report"><a>Create bug report ...</a></li>
</ul>
<div id="main-list">
<div id="main-list-container" class="content-wrap padded">
<div id="main-newbackup" class="main-backup-action-buttons">
<div class="main-backup-control main-icon-plus"></div>
<div class="caption-text">Add new backup</div>
</div>
<div id="main-restorebackup" class="main-backup-action-buttons">
<div class="main-backup-control main-icon-restore"></div>
<div class="caption-text">Restore from target</div>
</div>
</div>
</div>
<div id="loading-dialog" class="modal-dialog" title="Loading...">
<div id="main-list-loader-icon" class="large-loader-icon"></div>
</div>
<div id="connection-lost-dialog" class="modal-dialog" title="Server connection lost">
<div id="connection-lost-dialog-text"></div>
<div id="connection-lost-dialog-error"></div>
</div>
<div id="edit-dialog" class="modal-dialog tabs edit-dialog" title="Edit backup">
<ul>
<li><a href="#edit-tab-general">General</a></li>
<li><a href="#edit-tab-sourcedata">Source Data</a></li>
<li><a href="#edit-tab-schedule">Schedule</a></li>
<li><a href="#edit-tab-options">Options</a></li>
</ul>
<form id="edit-dialog-form">
<div id="edit-tab-general">
<div class="input-block">
<div class="edit-dialog-label" title="Choose a descriptive name for your backup job">Name</div>
<input type="text" name="backup-name" id="backup-name" class="ui-corner-all" />
</div>
<!--
<div class="input-block">
<div class="edit-dialog-label">Backup labels</div>
<input type="text" name="backup-labels" id="backup-labels" class="ui-corner-all" />
</div>
-->
<div class="input-block">
<div class="edit-dialog-label action-link" id="backup-uri-label" title="The destination where the backup data is stored is supplied in the form of a URI. Click the link here to edit the individual parts of the connection URI.">Backup to…</div>
<div class="field-group">
<textarea type="text" name="backup-uri" id="backup-uri" value="" class="ui-corner-all" rows="3"></textarea>
</div>
</div>
<div id="encryption-area">
<div class="input-block">
<div class="edit-dialog-label" title="It is recommended to encrypt all backups stored on remote servers">Encryption</div>
<div class="field-group">
<select type="text" name="encryption-method" id="encryption-method" class="ui-corner-all">
<option>AES 256 bit</option>
<option>GNU Privacy Guard</option>
</select>
</div>
</div>
<div id="encryption-password-area">
<div class="input-block">
<div class="edit-dialog-label">Passphrase</div>
<div class="field-group">
<input type="password" name="encryption-password" id="encryption-password" value="" class="ui-corner-all" />
</div>
</div>
<div class="input-block">
<div class="edit-dialog-label" id="repeat-password-label">Repeat passphrase</div>
<div class="field-group">
<input type="password" name="repeat-password" id="repeat-password" value="" class="ui-corner-all" />
<ul class="inline-links">
<li><div id="toggle-show-password" class="action-link">Show</div></li>
<li><div id="generate-password" class="action-link">Generate</div></li>
<li><div id="backup-password-strength" class="" title="Time it takes to break this password">Strength: unknown</div></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div id="edit-tab-sourcedata">
<!-- <div class="input-wrapper">
<div class="edit-dialog-label" title="Choose if the backup configuration should be stored">Store configuration</div>
<select id="store-task-config" name="store-task-config">
<option value="false">Don't store setup</option>
<option value="true">Store this backup job setup</option>
<option value="all">Store all backup job setups</option>
</select>
</div>
<div class="clearfix"></div> -->
<div id="source-folder-paths" class="empty">
<div id="source-folder-droptarget"></div>
<div id="source-folder-paths-hint" class="hint-text">Click the &quot;Add&quot; button to add folders</div>
</div>
<div class="clearfix"></div>
<input id="source-folder-list" name="source-folder-list" type="hidden" />
<div id="source-folder-entry">
<input id="source-folder-path-text" type="text" />
<div id="source-folder-path-add" class="button">Browse</div>
</div>
<div id="source-folder-filter-area">
<div id="source-folder-filter-label" title="Enter filters, one per line. Lines starting with a plus are inclusions, lines starting with a minus are exclusions. Regular expression are entered inside hard brackets."><a href="https://github.com/duplicati/duplicati/wiki/How-do-filters-work%3F" target="_blank">Source data filters<div class="ui-icon ui-icon-info ui-icon-inline"></div></a></div>
<textarea type="text" name="source-filters" id="source-filters" value="" class="ui-corner-all pre-style-text" rows="3"></textarea>
</div>
</div>
<div id="edit-tab-schedule">
<input id="use-scheduled-run" type="checkbox" />
<div>Run regularly at the specified times</div>
<div id="use-scheduled-run-details">
<div class="hint-line-last">If a date was missed, the job will run as soon as possible.</div>
<div class="clearfix"></div>
<div class="edit-dialog-label" title="The next time the backup is started">Next time</div>
<div class="input-wrapper">
<input type="time" id="next-run-time" name="next-run-time"/>
<input type="date" id="next-run-date" name="next-run-date" />
</div>
<div class="clearfix"></div>
<div class="edit-dialog-label" title="How often the backup is repeated">Run again every</div>
<div class="input-wrapper">
<input type="number" id="repeat-run-number" name="repeat-run-number"/>
<select id="repeat-run-multiplier" name="repeat-run-multiplier">
<option value="h">hours</option>
<option value="D">days</option>
<option value="W">weeks</option>
<option value="M">months</option>
<option value="Y">years</option>
<option value="">custom</option>
</select>
</div>
<div class="clearfix"></div>
<div class="edit-dialog-label">Allowed days</div>
<div class="input-wrapper">
<input type="checkbox" class="simple-checkbox" id="allow-day-mon" name="allow-day-mon" />
<div class="days-label">Mon</div>
<input type="checkbox" class="simple-checkbox" id="allow-day-tue" name="allow-day-tue" />
<div class="days-label">Tue</div>
<input type="checkbox" class="simple-checkbox" id="allow-day-wed" name="allow-day-wed" />
<div class="days-label">Wed</div>
<input type="checkbox" class="simple-checkbox" id="allow-day-thu" name="allow-day-thu" />
<div class="days-label">Thu</div>
<input type="checkbox" class="simple-checkbox" id="allow-day-fri" name="allow-day-fri" />
<div class="days-label">Fri</div>
<input type="checkbox" class="simple-checkbox" id="allow-day-sat" name="allow-day-sat" />
<div class="days-label">Sat</div>
<input type="checkbox" class="simple-checkbox" id="allow-day-sun" name="allow-day-sun" />
<div class="days-label">Sun</div>
</div>
</div>
</div>
<div id="edit-tab-options">
<div class="input-block">
<div class="edit-dialog-label" title="Duplicati splits backups into smaller files. A smaller size (e.g. 10MB) is recommended for slow and unstable connections. A larger size (e.g. 200MB) is recommended in LAN environments.">Max backup file size<div class="ui-icon ui-icon-info ui-icon-inline"></div></div>
<div class="input-wrapper">
<input type="number" id="dblock-size-number" name="dblock-size-number" />
<select id="dblock-size-multiplier" name="dblock-size-multiplier">
<option value="kb">KByte</option>
<option value="mb">MByte</option>
<option value="gb">GByte</option>
<option value="tb">TByte</option>
</select>
</div>
</div>
<div class="clearfix"></div>
<div class="input-block">
<div class="edit-dialog-label" title="Define how many backups you want to keep stored. Old backups are removed if Duplicati can free a significant amount of space. This is done during compacting.">Keep backups<div class="ui-icon ui-icon-info ui-icon-inline"></div></div>
<div class="input-wrapper">
<select id="keep-time-type" name="keep-time-type">
<option value="">forever</option>
<option value="keep-time">for a specific time</option>
<option value="keep-versions">a specific number</option>
</select>
<input type="number" id="keep-time-number" name="keep-time-number" />
<select id="keep-time-multiplier" name="keep-time-multiplier">
<option value="D">Days</option>
<option value="W">Weeks</option>
<option value="M">Months</option>
<option value="Y">Years</option>
</select>
</div>
</div>
<div class="clearfix"></div>
<div class="edit-dialog-label" id="backup-options-link" title="Advanced options can be specified command-line style. One option per line like --option=value. Click here to see a list of options"><a class="action-link">Options<div class="ui-icon ui-icon-info ui-icon-inline"></div></a></div>
<textarea id="backup-options" rows="4" class="pre-style-text" name="backup-options"></textarea>
</div>
</form>
</div>
<div id="connection-uri-dialog" class="modal-dialog edit-dialog" style="display: none" title="Connection URI">
<form id="edit-uri-form">
<div class="edit-dialog-label">Target Type</div>
<div class="field-group">
<select id="backend-type" name="backend-type"></select>
<input type="checkbox" id="server-use-ssl" name="server-use-ssl" value="use-ssl"/><div class="checkbox-label" id="server-use-ssl-label" >Use SSL</div>
</div>
<div class="clearfix"></div>
<div class="edit-dialog-label" id="server-name-and-port-label">Server &amp; Port</div>
<div class="field-group" id="server-name-and-port">
<input type="text" name="server-name" id="server-name" value="" class="text ui-widget-content ui-corner-all" />
<input type="text" name="server-port" id="server-port" value="" class="text ui-widget-content ui-corner-all" />
</div>
<div class="clearfix"></div>
<div class="edit-dialog-label" id="server-path-label">Path on server</div>
<input type="text" name="server-path" id="server-path" class="text ui-widget-content ui-corner-all" />
<div class="clearfix"></div>
<div id="server-username-and-password">
<div id="server-username-label" class="edit-dialog-label">Username</div>
<input type="text" name="server-username" id="server-username" class="text ui-widget-content ui-corner-all" />
<div class="clearfix"></div>
<div id="server-password-label" class="edit-dialog-label">Password</div>
<input type="password" name="server-password" id="server-password" class="text ui-widget-content ui-corner-all" />
</div>
<div class="clearfix"></div>
<div class="edit-dialog-label" id="server-options-label" title="Advanced options can be specified command-line style. One option per line like --option=value. Click here to see a list of options"><a class="action-link">Options<div class="ui-icon ui-icon-info"></div></a></div>
<textarea id="server-options" class="pre-style-text" name="server-options"></textarea>
<div id="edit-dialog-extensions"></div>
</form>
</div>
<div id="restore-dialog" class="modal-dialog restore-dialog" title="Restore files &amp; folders">
<form id="restore-form">
<div id="restore-files-page">
<div id="restore-search-section">
<input type="search" id="restore-search" /><div id="restore-search-loader" class="small-loader-icon"></div>
<select id="restore-version">
<option value="0">Latest</option>
</select>
</div>
<div id="restore-files-tree"></div>
</div>
<div id="restore-path-page">
<div id="restore-hint-target" class="hint-text">Where do you want to restore the files to?</div>
<div><input id="restore-overwrite-target-original" type="radio" name="restore-target" value="original" />Original location</div>
<div><input id="restore-overwrite-target-other" type="radio" name="restore-target" value="other" />Pick a new location</div>
<div id="restore-target-path-area">
<input type="text" id="restore-target-path" /><input type="button" id="restore-target-path-browse" class="browse-button" value="..." />
</div>
<div class="clearfix"></div>
<div id="restore-hint-overwrite" class="hint-text">How do you want to handle existing files?</div>
<div><input id="restore-overwrite-overwrite" type="radio" name="restore-overwrite" value="overwrite" />Overwrite</div>
<div><input id="restore-overwrite-keep" type="radio" name="restore-overwrite" value="keep" />Save different versions with timestamp in file name</div>
<div class="clearfix"></div>
<div id="restore-hint-metadata" class="hint-text">Permissions</div>
<div><input id="restore-metadata-permissions" type="checkbox" name="restore-metadata" value="permissions" />Restore read/write permissions</div>
</div>
<div id="restore-complete-page">
<div class="hint-text">Your files and folders have been restored successfully.</div>
<div id="restore-hint-donate" class="hint-text">Did we help save your files? If so, please consider supporting Duplicati with a donation. We suggest 10€ for private use and 100€ for commercial use.</div>
<div id="restore-hint-paypal" class="hint-text"><a href="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&currency_code=EUR&bn=PP%2dDonationsBF&charset=UTF%2d8&lc=US" target="blank">VISA, Mastercard, ... via Paypal</div>
<div id="restore-hint-bitcoin" class="hint-text"><a href="bitcoin:1L74qa1n5SFKwwyHhECTHBJgcf6WT2rJKf" target="blank">Bitcoin: 1L74qa1n5SFKwwyHhECTHBJgcf6WT2rJKf</a></div>
</div>
</form>
</div>
<div id="backup-options-dialog" class="modal-dialog" title="Available options"></div>
<div id="folder-browse-dialog" class="modal-dialog" title="Choose folder"></div>
<div id="log-dialog" class="modal-dialog" title="Log data">
<ul>
<li><a href="#log-tab-stored">Stored</a></li>
<li><a href="#log-tab-live">Live</a></li>
</ul>
<div id="log-tab-stored">
</div>
<div id="log-tab-live">
<div>Select a log level and see the live message while a backup is running.</div>
<select id="log-tab-live-level"></select>
</div>
</div>
<div id="backup-log-dialog" class="modal-dialog" title="Log data">
<ul>
<li><a href="#backup-log-tab-general">General</a></li>
<li><a href="#backup-log-tab-remote">Remote</a></li>
</ul>
<div id="backup-log-tab-general">
</div>
<div id="backup-log-tab-remote">
</div>
</div>
<div id="about-dialog" class="modal-dialog" title="About">
<ul>
<li><a href="#about-dialog-tab-general">General</a></li>
<li><a href="#about-dialog-tab-changelog">Changelog</a></li>
<li><a href="#about-dialog-tab-libraries">Libraries</a></li>
</ul>
<div id="about-dialog-tab-general">
Duplicati was primarily developed by <a href="mailto:kenneth@duplicati.com">Kenneth Skovhede</a> and <a href="mailto:rene@duplicati.com">Rene Stach</a>. Duplicati can be downloaded from <a href="http://www.duplicati.com" target="blank">duplicati.com</a>. Duplicati is licensed under the <a href="https://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public License</a>.
<div id="about-dialog-current">You are currently running Duplicati <p id="about-dialog-current-version">unknown</p></div>
<div id="about-dialog-tab-general-acknowledgements">
Loading ...
</div>
</div>
<div id="about-dialog-tab-changelog">
Loading ...
</div>
<div id="about-dialog-tab-libraries">
Duplicati is using the following third party libraries:
<ul id="about-dialog-tab-thirdparty-list">
<li>Loading ...</li>
</ul>
</div>
</div>
<div id="export-dialog" class="modal-dialog" title="Export ...">
<form>
<input type="radio" name="export-type" id="export-type-commandline" value="commandline" /><div class="export-dialog-label">As Command-line</div><br/>
<input type="radio" name="export-type" id="export-type-file" value="file" /><div class="export-dialog-label">To File</div><br/>
<input type="checkbox" name="use-encryption" id="export-use-encryption" /><div class="export-dialog-label">Encrypt with</div>
<input type="password" name="encryption-password" id="export-encryption-password">
</form>
</div>
<div id="import-dialog" class="modal-dialog" title="Import ...">
<form id="import-dialog-form" enctype="multipart/form-data" method="POST">
<div class="import-dialog-label">Configuration file:&nbsp;</div>
<input type="file" name="config" id="import-dialog-file"></br></br>
<div class="import-dialog-label">Passphrase (if encrypted):</div>
<input type="password" name="passphrase" id="import-encryption-password">
<input type="hidden" name="action" value="import-backup">
<input type="hidden" name="callback" id="import-dialog-callback" value="">
</form>
</div>
<div id="global-advanced-options-dialog" class="modal-dialog" title="Available options"></div>
<div id="options-dialog" class="modal-dialog" title="Options">
<div>
<div class="options-header options-header-first">Access to user interface</div>
<div>
<div class="options-items">
<input type="checkbox" id="webservice-password-enabled"/>
<div id="webservice-password-label">Password</div>
<input type="password" id="webservice-password" name="webservice-password"/>
</div>
</div>
<div class="clearfix"></div>
<div class="options-items">
<input type="checkbox" id="webservice-remote-access-enabled"/>
<div>Allow remote access (requires restart)</div>
</div>
</div>
<div>
<div class="options-header" title="To grant all processes and the network some time to recover after a startup or hibernation, you can delay backup jobs a little">Pause after startup or hibernation<div class="ui-icon ui-icon-info ui-icon-inline"></div></div>
<div class="options-items">
<div class="edit-dialog-label">Pause</div>
<select id="global-delay-startup-value">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="30">30</option>
<option value="45">45</option>
</select>
<select id="global-delay-startup-multiplier">
<option value="s">Seconds</option>
<option value="m">Minutes</option>
<option value="h">Hours</option>
</select>
</div>
<div class="clearfix"></div>
<div class="options-header">Advanced options</div>
<div class="options-items">
<div class="edit-dialog-label" id="global-options-link" title="Advanced options can be specified command-line style. One option per line like --option=value. Click here to see a list of options"><a class="action-link">Options<div class="ui-icon ui-icon-info ui-icon-inline"></div></a></div>
<textarea id="global-advanced-options" rows="4" class="pre-style-text" name="global-advanced-options"></textarea>
</div>
</div>
</div>
<div id="restore-direct-options-dialog" class="modal-dialog" title="Available options"></div>
<div id="restore-direct-dialog" class="modal-dialog tabs edit-dialog" title="Restore files">
<form id="restore-direct-dialog-form">
<div class="input-block">
<div class="edit-dialog-label action-link" id="restore-direct-uri-label" title="The destination where the backup data is stored is supplied in the form of a URI. Click the link here to edit the individual parts of the connection URI.">Restore from…</div>
<div class="field-group">
<textarea type="text" name="restore-direct-uri" id="restore-direct-uri" value="" class="ui-corner-all" rows="3"></textarea>
</div>
</div>
<div class="input-block">
<div class="edit-dialog-label">Passphrase</div>
<div class="field-group">
<input type="password" name="restore-direct-encryption-password" id="restore-direct-encryption-password" value="" class="ui-corner-all" />
</div>
</div>
<div class="options-items">
<div class="edit-dialog-label" id="restore-direct-options-link" title="Advanced options can be specified command-line style. One option per line like --option=value. Click here to see a list of options"><a class="action-link">Advanced Options<div class="ui-icon ui-icon-info ui-icon-inline"></div></a></div>
<textarea id="restore-direct-advanced-options" rows="4" class="pre-style-text" name="restore-direct-advanced-options"></textarea>
</div>
</form>
</div>
</section>
<footer>
<div class="box-duplicati-copy">
&copy; 2015 | <a class="link_extern" href="http://www.duplicati.com/" target="_blank">Duplicati</a>
</div>
<div class="box-duplicati-copy">
<a class="link_extern" href="../theme.html" target="_self">Change theme</a>
</div>
<div class="box-visit-us">
<div>
Visit <a class="link_extern" href="https://github.com/duplicati/duplicati" target="_blank">GitHub</a> for reporting bugs or feature request!
</div>
<div>
Visit us on <a class="link_extern" href="http://www.facebook.com/pages/Duplicati/105118456272281" target="_blank">Facebook</a> or on <a class="link_extern" href="https://plus.google.com/105271984558189185842" target="_blank">Google+</a>!
</div>
<div>
We accept donations via <a class="link_extern" href="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&currency_code=EUR&bn=PP%2dDonationsBF&charset=UTF%2d8&lc=US" target="_blank">PayPal</a> and <a class="link_extern" href="bitcoin:1HnWb5wLhwa9UREZCxKyNfzkKiR3b6RCPX?amount=0.1&message=Duplicati">Bitcoin</a>.
</div>
</div>
</footer>
</body>
</html>
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
@@ -1,10 +0,0 @@
/*
* The basic client config
*/
APP_CONFIG = {
server_url: '/control.cgi',
login_url: '/login.html',
branded_name: 'Duplicati',
branded_subtitle: ''
};
@@ -1,27 +0,0 @@
/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
Combined: sha256 + core + enc-base64
*/
var CryptoJS=CryptoJS||function(h,r){var k={},l=k.lib={},n=function(){},f=l.Base={extend:function(a){n.prototype=this;var b=new n;a&&b.mixIn(a);b.hasOwnProperty("init")||(b.init=function(){b.$super.init.apply(this,arguments)});b.init.prototype=b;b.$super=this;return b},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},
j=l.WordArray=f.extend({init:function(a,b){a=this.words=a||[];this.sigBytes=b!=r?b:4*a.length},toString:function(a){return(a||s).stringify(this)},concat:function(a){var b=this.words,d=a.words,c=this.sigBytes;a=a.sigBytes;this.clamp();if(c%4)for(var e=0;e<a;e++)b[c+e>>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((c+e)%4);else if(65535<d.length)for(e=0;e<a;e+=4)b[c+e>>>2]=d[e>>>2];else b.push.apply(b,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,b=this.sigBytes;a[b>>>2]&=4294967295<<
32-8*(b%4);a.length=h.ceil(b/4)},clone:function(){var a=f.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var b=[],d=0;d<a;d+=4)b.push(4294967296*h.random()|0);return new j.init(b,a)}}),m=k.enc={},s=m.Hex={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++){var e=b[c>>>2]>>>24-8*(c%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c+=2)d[c>>>3]|=parseInt(a.substr(c,
2),16)<<24-4*(c%8);return new j.init(d,b/2)}},p=m.Latin1={stringify:function(a){var b=a.words;a=a.sigBytes;for(var d=[],c=0;c<a;c++)d.push(String.fromCharCode(b[c>>>2]>>>24-8*(c%4)&255));return d.join("")},parse:function(a){for(var b=a.length,d=[],c=0;c<b;c++)d[c>>>2]|=(a.charCodeAt(c)&255)<<24-8*(c%4);return new j.init(d,b)}},t=m.Utf8={stringify:function(a){try{return decodeURIComponent(escape(p.stringify(a)))}catch(b){throw Error("Malformed UTF-8 data");}},parse:function(a){return p.parse(unescape(encodeURIComponent(a)))}},
q=l.BufferedBlockAlgorithm=f.extend({reset:function(){this._data=new j.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=t.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var b=this._data,d=b.words,c=b.sigBytes,e=this.blockSize,f=c/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;c=h.min(4*a,c);if(a){for(var g=0;g<a;g+=e)this._doProcessBlock(d,g);g=d.splice(0,a);b.sigBytes-=c}return new j.init(g,c)},clone:function(){var a=f.clone.call(this);
a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:f.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,d){return(new a.init(d)).finalize(b)}},_createHmacHelper:function(a){return function(b,d){return(new u.HMAC.init(a,
d)).finalize(b)}}});var u=k.algo={};return k}(Math);
var CryptoJS=CryptoJS||function(h,s){var f={},t=f.lib={},g=function(){},j=t.Base={extend:function(a){g.prototype=this;var c=new g;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},
q=t.WordArray=j.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||u).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e<a;e++)c[b+e>>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535<d.length)for(e=0;e<a;e+=4)c[b+e>>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<
32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=j.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d<a;d+=4)c.push(4294967296*h.random()|0);return new q.init(c,a)}}),v=f.enc={},u=v.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b<a;b++){var e=c[b>>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b<c;b+=2)d[b>>>3]|=parseInt(a.substr(b,
2),16)<<24-4*(b%8);return new q.init(d,c/2)}},k=v.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b<a;b++)d.push(String.fromCharCode(c[b>>>2]>>>24-8*(b%4)&255));return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b<c;b++)d[b>>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},l=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(k.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return k.parse(unescape(encodeURIComponent(a)))}},
x=t.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=l.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var m=0;m<a;m+=e)this._doProcessBlock(d,m);m=d.splice(0,a);c.sigBytes-=b}return new q.init(m,b)},clone:function(){var a=j.clone.call(this);
a._data=this._data.clone();return a},_minBufferSize:0});t.Hasher=x.extend({cfg:j.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){x.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(c,d){return(new a.init(d)).finalize(c)}},_createHmacHelper:function(a){return function(c,d){return(new w.HMAC.init(a,
d)).finalize(c)}}});var w=f.algo={};return f}(Math);
(function(h){for(var s=CryptoJS,f=s.lib,t=f.WordArray,g=f.Hasher,f=s.algo,j=[],q=[],v=function(a){return 4294967296*(a-(a|0))|0},u=2,k=0;64>k;){var l;a:{l=u;for(var x=h.sqrt(l),w=2;w<=x;w++)if(!(l%w)){l=!1;break a}l=!0}l&&(8>k&&(j[k]=v(h.pow(u,0.5))),q[k]=v(h.pow(u,1/3)),k++);u++}var a=[],f=f.SHA256=g.extend({_doReset:function(){this._hash=new t.init(j.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],m=b[2],h=b[3],p=b[4],j=b[5],k=b[6],l=b[7],n=0;64>n;n++){if(16>n)a[n]=
c[d+n]|0;else{var r=a[n-15],g=a[n-2];a[n]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+a[n-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+a[n-16]}r=l+((p<<26|p>>>6)^(p<<21|p>>>11)^(p<<7|p>>>25))+(p&j^~p&k)+q[n]+a[n];g=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k;k=j;j=p;p=h+r|0;h=m;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[4]+p|0;b[5]=b[5]+j|0;b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;
d[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f);s.HmacSHA256=g._createHmacHelper(f)})(Math);
(function(){var h=CryptoJS,j=h.lib.WordArray;h.enc.Base64={stringify:function(b){var e=b.words,f=b.sigBytes,c=this._map;b.clamp();b=[];for(var a=0;a<f;a+=3)for(var d=(e[a>>>2]>>>24-8*(a%4)&255)<<16|(e[a+1>>>2]>>>24-8*((a+1)%4)&255)<<8|e[a+2>>>2]>>>24-8*((a+2)%4)&255,g=0;4>g&&a+0.75*g<f;g++)b.push(c.charAt(d>>>6*(3-g)&63));if(e=c.charAt(64))for(;b.length%4;)b.push(e);return b.join("")},parse:function(b){var e=b.length,f=this._map,c=f.charAt(64);c&&(c=b.indexOf(c),-1!=c&&(e=c));for(var c=[],a=0,d=0;d<
e;d++)if(d%4){var g=f.indexOf(b.charAt(d-1))<<2*(d%4),h=f.indexOf(b.charAt(d))>>>6-2*(d%4);c[a>>>2]|=(g|h)<<24-8*(a%4);a++}return j.create(c,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
File diff suppressed because it is too large Load Diff
@@ -1,636 +0,0 @@
/*
* Edituri app code
*/
BACKEND_STATE = null;
EDIT_URI = null;
$(document).ready(function() {
EDIT_URI = {
URL_REGEXP_FIELDS: ['source_uri', 'backend-type', '--auth-username', '--auth-password', 'server-name', 'server-port', 'server-path', 'querystring'],
URL_REGEXP: /([^:]+)\:\/\/(?:(?:([^\:]+)(?:\:?:([^@]*))?\@))?(?:([^\/\?\:]*)(?:\:(\d+))?)(?:\/([^\?]*))?(?:\?(.+))?/,
QUERY_REGEXP: /(?:^|&)([^&=]*)=?([^&]*)/g,
createFieldset: function(config) {
var outer = $('<div></div>');
var label = config.label ? $('<div></div>').addClass('edit-dialog-label ' + (config.labelclass || '')).html(config.label) : null;
var field;
if (config.type == 'link') {
field = config.field === false ? null :
$('<a />').text(config.title)
.attr('id', (config.name || ''))
.addClass('action-link ' + (config.fieldclass || ''))
.attr('href', config.href || '#')
.attr('target', config.target || '_blank');
} else {
field = config.field === false ? null :
$('<input type="' + (config.type || 'text') + '" name="' + (config.name || '') + '" />')
.attr('id', (config.name || ''))
.addClass('text ui-widget-content ui-corner-all ' + (config.fieldclass || ''));
if (field && config.value !== undefined)
config.attr('value', config.value);
}
var checklabel = config.checklabel ? $('<div></div>').addClass('checkbox-label ' + (config.labelclass || '')).html(config.checklabel) : null;
outer.append(label, field, checklabel);
var r = {
outer: outer,
label: label,
field: field,
checklabel: checklabel
};
if (config.title)
for(var k in r)
if (r[k])
r[k].attr('title', config.title);
if (config.watermark && field != null)
field.watermark(config.watermark);
BACKEND_STATE.fieldset_cleanup.push(outer);
if (config.after)
outer.insertAfter(config.after);
else if (config.before)
outer.insertBefore(config.before);
else if (config.append)
config.append(outer);
else
$('#edit-dialog-extensions').append(outer);
return r;
},
validate_input: function(values, validateOptions) {
if (!BACKEND_STATE.current_state.hideserverandport) {
if (values['server-name'] == '')
return EDIT_URI.validation_error($('server-name'), 'You must fill in the server name');
} else {
values['server-name'] = '';
}
if (!BACKEND_STATE.current_state.optionalauth) {
if (values['--auth-username'] == '')
return EDIT_URI.validation_error($('server-username'), 'You must fill in a username');
if (!BACKEND_STATE.current_state.optionalpassword)
if (values['--auth-password'] == '')
return EDIT_URI.validation_error($('server-password'), 'You must fill in a password');
}
if (validateOptions) {
var validOptions = BACKEND_STATE.module_lookup[values['backend-type']].Options.concat(BACKEND_STATE.extra_options);
var validOptionsDict = {};
var names = [];
for (var n in validOptions) {
validOptionsDict[validOptions[n].Name] = validOptions[n];
names.push(n.Name);
if (n.Aliases != null)
for (var i in n.Aliases) {
validOptionsDict[i] = n;
names.push(i);
}
}
for(var k in values) {
if (k.length > 2 && k.substr(0, 2) == '--') {
var opt = validOptionsDict[k.substr(2)];
if (!opt) {
return EDIT_URI.validation_error($('#server-options'), 'Invalid option: ' + k.substr(2));
}
if (opt.Deprecated) {
alert('Warning', 'The option ' + opt.Name + ' is deprecated :' + opt.DeprecationMessage);
}
var val = values[k];
if (opt.Typename == 'Boolean') {
if (!APP_UTIL.isValidBoolOption(val))
return EDIT_URI.validation_error($('#server-options'), 'Invalid value for ' + k.substr(2) + ': ' + val + ' is not a valid boolean value');
} else if (opt.Typename == 'Password') {
} else if (opt.Typename == 'Integer') {
if ((parseInt(val) + '') != val) {
return EDIT_URI.validation_error($('#server-options'), 'Invalid value for ' + k.substr(2) + ': ' + val + ' is not an integer');
}
} else if (opt.Typename == 'Size') {
//TODO
} else if (opt.Typename == 'Timespan') {
//TODO
}
}
}
}
return true;
},
validation_error: function(el, message) {
alert(message);
window.setTimeout( function() { el.focus(); }, 500);
return false;
},
parse_extra_options: function(el, dict) {
return APP_UTIL.parseOptionStrings(el.val(), dict, function(d, k, v) {
if (d['--' + k] !== undefined)
return EDIT_URI.validation_error(el, 'Duplicate option ' + k);
return true;
}) != null;
},
build_uri: function(cfg) {
var url = cfg['backend-type'];
if (APP_UTIL.parseBoolOption(cfg['--use-ssl'], false))
url += 's';
url += '://';
url += cfg['server-name'];
if (cfg['server-port'])
url += ':' + cfg['server-port'];
if (cfg['server-path'] != '')
{
if(url[url.length - 1] != '/')
url += '/';
url += cfg['server-path'];
}
var opts = [];
if (cfg['--auth-username'] && cfg['--auth-username'] != '')
opts.push('auth-username=' + encodeURIComponent(cfg['--auth-username']));
if (cfg['--auth-password'] && cfg['--auth-password'] != '')
opts.push('auth-password=' + encodeURIComponent(cfg['--auth-password']));
for(var k in cfg)
if (k.substr(0, 2) == '--' && k != '--auth-password' && k != '--auth-username' && k != '--use-ssl' && cfg[k] !== false && cfg[k] != '')
opts.push(encodeURIComponent(k.substr(2)) + '=' + encodeURIComponent(cfg[k]));
if (opts.length > 0) {
url += '?';
url += opts.join('&');
}
return url;
},
decode_uri: function(uri) {
var i = EDIT_URI.URL_REGEXP_FIELDS.length + 1;
var res = {};
var m = EDIT_URI.URL_REGEXP.exec(uri);
// Invalid URI
if (!m)
return res;
while (i--) {
res[EDIT_URI.URL_REGEXP_FIELDS[i]] = m[i] || "";
}
res.querystring.replace(EDIT_URI.QUERY_REGEXP, function(str, key, val) {
if (key)
res['--' + key] = decodeURIComponent(val);
});
var scheme = res['backend-type'];
if (scheme && scheme[scheme.length - 1] == 's' && !APP_DATA.plugins.backend[scheme] && APP_DATA.plugins.backend[scheme.substr(0, scheme.length-1)]) {
res['backend-type'] = scheme.substr(0, scheme.length-1);
res['--use-ssl'] = true;
}
return res;
},
find_scheme: function(uri) {
if (!uri || uri.length == 0)
return null;
uri = uri.trim().toLowerCase();
var ix = uri.indexOf('://');
if (ix <= 0) {
if (BACKEND_STATE.module_lookup['file'])
return 'file';
return BACKEND_STATE.modules[0];
}
return (EDIT_URI.decode_uri(uri)['backend-type'] || '').toLowerCase()
},
read_form: function(form) {
var map = EDIT_URI.fill_dict_map;
var values = APP_UTIL.read_form(form, map);
if (BACKEND_STATE.current_state.fill_dict_map)
values = APP_UTIL.read_form(form, BACKEND_STATE.current_state.fill_dict_map, values);
return values;
},
fill_form_map: {
'--auth-username': 'server-username',
'--auth-password': 'server-password',
'--use-ssl': 'server-use-ssl',
'backend-type': function() {},
},
fill_dict_map: {
'server-username': '--auth-username',
'server-password': '--auth-password',
'server-use-ssl': '--use-ssl'
},
fill_form: function(form, values) {
var found = {};
var map = EDIT_URI.fill_form_map;
APP_UTIL.fill_form($('#edit-uri-form'), values, map);
if (BACKEND_STATE.current_state.fill_form_map) {
map = $.extend(true, {}, map);
for(var k in map)
map[k] = false;
$.extend(true, map, BACKEND_STATE.current_state.fill_form_map);
APP_UTIL.fill_form($('#edit-uri-form'), values, map);
}
var opttext = '';
for(var k in values) {
if (map[k] === undefined && k.indexOf('--') == 0) {
opttext += k + '=' + decodeURIComponent(values[k] || '') + '\n';
}
}
form.find('#server-options').val(opttext);
}
};
var resetform = function() {
$('#server-name').watermark('example.com');
$('#server-port').watermark('8801');
$('#server-path').watermark('mybackup');
$('#server-username').watermark('Username for authentication');
$('#server-password').watermark('Password for authentication');
$('#server-options').watermark('Enter connection options here');
$('#server-username-label').text('Username');
$('#server-password-label').text('Password');
if (BACKEND_STATE != null) {
if (BACKEND_STATE.fieldset_cleanup != null)
for(var i in BACKEND_STATE.fieldset_cleanup)
BACKEND_STATE.fieldset_cleanup[i].remove();
if (BACKEND_STATE && BACKEND_STATE.current_state && BACKEND_STATE.current_state.cleanup )
BACKEND_STATE.current_state.cleanup($('#connection-uri-dialog'), $('#edit-dialog-extensions'));
BACKEND_STATE.current_state = null;
BACKEND_STATE.fieldset_cleanup = [];
}
$('#edit-dialog-extensions').empty();
};
var uriel = null;
$('#connection-uri-dialog').on( "dialogclose", function( event, ui ) {
uriel = null;
resetform();
});
$('#connection-uri-dialog').on( "setup-dialog", function( event, el ) {
uriel = $(el);
BACKEND_STATE = {};
$('#edit-uri-form').each(function(i, e) { e.reset(); });
APP_DATA.getServerConfig(function(serverdata) {
var drop = $('#backend-type');
drop.empty();
BACKEND_STATE.modules = serverdata['BackendModules'];
BACKEND_STATE.module_lookup = {};
BACKEND_STATE.extra_options = [];
for(var i in serverdata['ConnectionModules'])
BACKEND_STATE.extra_options = BACKEND_STATE.extra_options.concat(serverdata['ConnectionModules'][i].Options);
var group_basic = $('<optgroup label="Standard protocols"></optgroup>');
var group_local = $('<optgroup label="Local storage"></optgroup>');
var group_prop = $('<optgroup label="Proprietary"></optgroup>');
var group_others = $('<optgroup label="Others"></optgroup>');
for (var i = 0; i < BACKEND_STATE.modules.length; i++) {
BACKEND_STATE.module_lookup[BACKEND_STATE.modules[i].Key] = BACKEND_STATE.modules[i];
}
var used = {};
for(var i in {'ftp':0, 'ssh':0, 'webdav':0, 'aftp':0}) {
if (BACKEND_STATE.module_lookup[i]) {
used[i] = true;
group_basic.append($("<option></option>").attr("value", i).text(BACKEND_STATE.module_lookup[i].DisplayName));
}
}
if (BACKEND_STATE.module_lookup['s3']) {
used['s3'] = true;
group_basic.append($("<option></option>").attr("value", 's3').text('S3 compatible'));
}
if (BACKEND_STATE.module_lookup['openstack']) {
used['openstack'] = true;
group_basic.append($("<option></option>").attr("value", 'openstack').text('OpenStack Object Storage/ Swift'));
}
for(var i in {'file':0}) {
if (BACKEND_STATE.module_lookup[i]) {
used[i] = true;
group_local.append($("<option></option>").attr("value", i).text(BACKEND_STATE.module_lookup[i].DisplayName));
}
}
for (var i in { 's3': 0, 'azure': 0, 'googledrive': 0, 'onedrive': 0, 'cloudfiles': 0, 'gcs': 0, 'openstack': 0, 'hubic': 0, 'amzcd': 0, 'b2': 0, 'mega': 0, 'od4b': 0, 'mssp': 0 }) {
if (BACKEND_STATE.module_lookup[i]) {
used[i] = true;
group_prop.append($("<option></option>").attr("value", i).text(BACKEND_STATE.module_lookup[i].DisplayName));
}
}
for (var i = 0; i < BACKEND_STATE.modules.length; i++) {
var k = BACKEND_STATE.modules[i].Key;
if (!used[k]) {
group_others.append($("<option></option>").attr("value", k).text(BACKEND_STATE.module_lookup[k].DisplayName));
}
}
if (group_basic.children().length > 0)
drop.append(group_basic);
if (group_local.children().length > 0)
drop.append(group_local);
if (group_prop.children().length > 0)
drop.append(group_prop);
if (group_others.children().length > 0)
drop.append(group_others);
BACKEND_STATE.orig_uri = uriel.val();
BACKEND_STATE.orig_cfg = EDIT_URI.decode_uri(BACKEND_STATE.orig_uri);
var scheme = BACKEND_STATE.orig_cfg['backend-type'];
if (scheme == null && (BACKEND_STATE.orig_uri.indexOf('://') < 0 || BACKEND_STATE.orig_uri.indexOf('file://') == 0))
scheme = 'file';
if (scheme && APP_DATA.plugins.backend[scheme] && APP_DATA.plugins.backend[scheme].decode_uri) {
BACKEND_STATE.orig_cfg = APP_DATA.plugins.backend[scheme].decode_uri(BACKEND_STATE.orig_uri);
}
BACKEND_STATE.first_setup = true;
if (scheme && BACKEND_STATE.module_lookup[scheme])
drop.val(scheme);
drop.change();
},
function() {
alert('Failed to get server setup...')
});
});
$('#server-use-ssl').change(function() {
if (BACKEND_STATE.current_state.defaultportssl) {
if ($('#server-use-ssl').is(':checked')) {
$('#server-port').watermark(BACKEND_STATE.current_state.defaultportssl + '');
} else {
$('#server-port').watermark(BACKEND_STATE.current_state.defaultport + '');
}
}
});
$('#backend-type').change(function() {
var k = $('#backend-type').val();
var m = null;
var hasssl = false;
var cfg = APP_DATA.plugins.backend[k] || {};
// Auto-detect for SSL
if (cfg.hasssl === undefined) {
var m = BACKEND_STATE.module_lookup[k];
if (m && m.Options)
for(var i in m.Options)
if (m.Options[i].Name == 'use-ssl')
cfg.hasssl = true;
}
resetform();
// Simple config changes through properties
$('#server-use-ssl').toggle(cfg.hasssl == true);
$('#server-use-ssl-label').toggle(cfg.hasssl == true);
$('#server-name-and-port-label').toggle(cfg.hideserverandport != true);
$('#server-name-and-port').toggle(cfg.hideserverandport != true);
$('#server-port').toggle(cfg.hideport != true);
$('#server-username-and-password').toggle(cfg.hideusernameandpassword != true);
if (cfg.usernamelabel)
$('#server-username-label').text(cfg.usernamelabel + '');
if (cfg.passwordlabel)
$('#server-password-label').text(cfg.passwordlabel + '');
if (cfg.serverandportlabel)
$('#server-name-and-port-label').text(cfg.serverandportlabel + '');
if (cfg.serverpathlabel)
$('#server-path').text(cfg.serverpathlabel + '');
if (cfg.usernamewatermark)
$('#server-username-label').watermark(cfg.usernamewatermark + '');
if (cfg.passwordwatermark)
$('#server-password-label').watermark(cfg.passwordwatermark + '');
if (cfg.defaultport)
$('#server-port').watermark(cfg.defaultport + '');
BACKEND_STATE.current_state = cfg;
// Specialized setup
if (cfg.setup != null)
cfg.setup($('#connection-uri-dialog'), $('#edit-dialog-extensions'));
if (!cfg.hasssl)
$('#server-use-ssl').attr('checked', false);
$('#server-use-ssl').change();
if (BACKEND_STATE.first_setup) {
if (cfg.hideserverandport) {
var hostname = BACKEND_STATE.orig_cfg['server-name'];
if (hostname != '' && hostname != null) {
if (hostname[hostname.length - 1] != '/' && BACKEND_STATE.orig_cfg['server-path'] != '')
hostname += '/';
BACKEND_STATE.orig_cfg['server-name'] = '';
BACKEND_STATE.orig_cfg['server-path'] = hostname + BACKEND_STATE.orig_cfg['server-path'];
}
}
BACKEND_STATE.first_setup = false;
if (cfg.fill_form)
cfg.fill_form($('#edit-uri-form'), BACKEND_STATE.orig_cfg);
else
EDIT_URI.fill_form($('#edit-uri-form'), BACKEND_STATE.orig_cfg);
}
});
var validate_and_return_uri = function() {
var values = EDIT_URI.read_form($('#edit-uri-form'));
if (!EDIT_URI.parse_extra_options($('#server-options'), values))
return null;
if (!BACKEND_STATE.current_state.hasssl && values['--use-ssl'] !== undefined)
delete values['--use-ssl'];
if (BACKEND_STATE.current_state.validate)
{
if (!BACKEND_STATE.current_state.validate($('#connection-uri-dialog'), values))
return null;
} else {
if (!EDIT_URI.validate_input(values, true))
return null;
}
var uri = null;
if (BACKEND_STATE.current_state.build_uri) {
uri = BACKEND_STATE.current_state.build_uri($('#connection-uri-dialog'), values);
} else {
uri = EDIT_URI.build_uri(values);
}
return uri;
};
$('#connection-uri-dialog').dialog({
modal: true,
minWidth: 320,
width: $('body').width > 600 ? 320 : 600,
autoOpen: false,
closeOnEscape: true,
buttons: [
{text: 'Cancel', click: function() { $( this ).dialog( "close" ); } },
{text: 'Test connection', click: function() {
var selfbtn = $(this).parent().find('.ui-dialog-buttonpane').find('.ui-button').first().next();
var hasTriedCreate = false;
var hasTriedCert = false;
var testConnection = null;
var handleError = function(data, success, message) {
selfbtn.button('option', 'disabled', false);
selfbtn.button('option', 'label', 'Test connection');
if (!hasTriedCreate && message == 'missing-folder')
{
if (confirm('The folder ' + $('#server-path').val() + ' does not exist\nCreate it now?')) {
createFolder();
}
}
else if (!hasTriedCert && message.indexOf('incorrect-cert:') == 0)
{
var hash = message.substr('incorrect-cert:'.length);
if (confirm('The server certificate could not be validated.\nDo you want to approve the SSL certificate with the hash: ' + hash + '?' )) {
hasTriedCert = true;
$('#server-options').val($('#server-options').val() + '--accept-specified-ssl-hash=' + hash);
testConnection();
}
}
else
alert('Failed to connect: ' + message);
}
testConnection = function() {
selfbtn.button('option', 'disabled', true);
selfbtn.button('option', 'label', 'Testing ...');
APP_DATA.callServer({action: 'test-backend', url: uri}, function(data) {
selfbtn.button('option', 'disabled', false);
selfbtn.button('option', 'label', 'Test connection');
alert('Connection worked!');
}, handleError);
};
var createFolder = function() {
hasTriedCreate = true;
selfbtn.button('option', 'disabled', true);
selfbtn.button('option', 'label', 'Creating folder ...');
APP_DATA.callServer(
{action: 'create-remote-folder', url: uri},
testConnection,
handleError
);
};
var uri = validate_and_return_uri();
if (uri != null) {
testConnection();
}
} },
{text: 'Create URI', click: function() {
var uri = validate_and_return_uri();
if (uri != null) {
uriel.val(uri);
$( this ).dialog( "close" );
}
} }
]
});
$('#server-options-label').click(function() {
$('#backup-options-dialog').dialog('open');
var k = $('#backend-type').val();
var m = BACKEND_STATE.module_lookup[k];
if (m && m.Options) {
$('#backup-options-dialog').trigger('configure', { Options: m.Options.concat(BACKEND_STATE.extra_options), callback: function(id) {
$('#backup-options-dialog').dialog('close');
var txt = $('#server-options').val().trim();
if (txt.length > 0)
txt += '\n';
var defaultvalue = '';
for(var o in m.Options)
if (m.Options[o].Name == id) {
defaultvalue = m.Options[o].DefaultValue;
break;
}
txt += '--' + id + '=' + defaultvalue;
$('#server-options').val('').val(txt);
$('#server-options').focus();
}});
}
});
});
@@ -1,139 +0,0 @@
$(document).ready(function() {
$.browseForFolder = function(config) {
var self = {};
var select_node = function(node) {
if (node != null && node.original != null && node.original.filepath != null) {
var path = node.original.filepath;
if (self.resolvePath && node.original.resolvedpath)
path = node.original.resolvedpath;
config.callback(path, node.text);
self.rootel.dialog('close');
}
}
self.rootel = $('<div class="modal-dialog folder-browser-dialog"></div>')
self.treeel = $('<div></div>');
self.rootel.append(self.treeel);
self.rootel.attr('title', config.title);
self.resolvePath = config.resolvePath;
self.multiSelect = config.multiSelect;
self.loadData = function(path, callback) {
$.ajax({
'url': APP_CONFIG.server_url,
'data': {
'action': 'get-folder-contents',
'onlyfolders': true,
'path': path
},
headers: {'X-XSRF-Token': APP_DATA.xsrf_token},
'dataType': 'json'
}).done(function(data, status, xhr) {
for(var i = 0; i < data.length; i++) {
var o = data[i];
o.children = !o.leaf;
o.filepath = o.id;
//o.icon = o.iconCls;
delete o.id;
delete o.iconCls;
delete o.leaf;
}
if (path == "/") {
var usernode = {
text: 'User data',
leaf: false,
state: {opened: true},
children: []
};
var systemnode = {
text: 'Computer',
leaf: false,
state: {opened: true},
children: []
};
var roots = [
usernode,
systemnode
];
for(var i = 0; i < data.length; i++) {
if (data[i].filepath.indexOf('%') == 0)
usernode.children.push(data[i]);
else
systemnode.children.push(data[i]);
}
data = roots;
}
callback(data)
}).fail(function() {
callback(null);
});
};
self.treeel.jstree({
'core': {
'data': function(node, callback){
if (node.id === '#') {
self.loadData('/', callback);
} else {
self.loadData(node.original.filepath, callback);
}
},
'multiple' : self.multiSelect
},
'dnd': { copy: false },
'checkbox' : { visible: self.multiSelect, three_state: self.multiSelect },
'plugins': ["checkbox"]
});
self.rootel.dialog({
minWidth: 320,
width: $('body').width > 600 ? 320 : 600,
minHeight: 480,
height: 500,
modal: true,
autoOpen: true,
closeOnEscape: true,
buttons: [
{ text: 'Close', disabled: false, click: function(event, ui) {
self.rootel.dialog('close');
}},
{ text: 'OK', disabled: true, click: function(event, ui) {
select_node(self.selected_node);
}}
]
});
self.dlg_buttons = self.rootel.parent().find('.ui-dialog-buttonpane').find('.ui-button');
self.rootel.on('dialogclose', function() {
self.rootel.remove();
});
self.treeel.bind("dblclick.jstree", function (event) {
var node = self.treeel.jstree().get_node($(event.target).closest("li"));
select_node(node);
});
self.treeel.bind('select_node.jstree', function (event, data) {
if (data.node.original.filepath)
self.selected_node = data.node;
else
self.selected_node = null;
self.dlg_buttons.last().button('option', 'disabled', self.selected_node == null);
});
};
});
@@ -1 +0,0 @@
!function(factory,global){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else{factory(global.jQuery||global.Zepto)}}(function($,undef){var dataKey="plugin_hideShowPassword",defaults={show:"infer",innerToggle:false,hideToggleUntil:false,touchSupport:false,toggleEvent:"click",toggleTouchEvent:"touchstart mousedown",wrapperClass:"hideShowPassword-wrapper",wrapperWidth:true,toggleClass:"hideShowPassword-toggle",states:{shown:{inputClass:"hideShowPassword-shown",eventName:"passwordShown",toggleClass:"hideShowPassword-toggle-hide",toggleText:"Hide",attr:{type:"text",autocapitalize:"off",autocomplete:"off",autocorrect:"off",spellcheck:"false"}},hidden:{inputClass:"hideShowPassword-hidden",eventName:"passwordHidden",toggleClass:"hideShowPassword-toggle-show",toggleText:"Show",attr:{type:"password"}}},widthMethod:$.fn.outerWidth===undef?"width":"outerWidth",heightMethod:$.fn.outerHeight===undef?"height":"outerHeight"};function HideShowPassword(element,options){this.element=$(element);this.init(options)}HideShowPassword.prototype={init:function(options){this.update(options,defaults,this.element.prop("type")==="password");if(this.options.innerToggle){this.initInnerToggle(this.element,this.options)}},update:function(options,base,toggleFallback){base=base||this.options;toggleFallback=toggleFallback||!this.options.show;if(typeof options!=="object"){options={show:options}}this.options=$.extend(true,{},base,options);if(this.options.show==="toggle"){this.options.show=toggleFallback}if(this.options.show==="infer"){this.options.show=this.element.prop("type")!=="password"}this.ifCurrentOrNot($.proxy(function(state){$.each(state.attr,$.proxy(function(key,value){this.element.prop(key,value)},this));this.element.addClass(state.inputClass).trigger(state.eventName)},this),$.proxy(function(state){this.element.removeClass(state.inputClass)},this))},toggle:function(){this.update("toggle")},currentStateKey:function(){return this.options.show?"shown":"hidden"},ifCurrentOrNot:function(ifCurrent,ifNot){var currentKey=this.currentStateKey();$.each(this.options.states,function(thisKey,state){(currentKey===thisKey?ifCurrent:ifNot)(state)})},initInnerToggle:function(el,options){var attachment=el.css("direction")==="rtl"?"left":"right",elWidth=el[options.widthMethod](),wrapperCSS={position:"relative",display:el.css("display"),verticalAlign:el.css("verticalAlign"),marginTop:el.css("marginTop"),marginRight:el.css("marginRight"),marginBottom:el.css("marginBottom"),marginLeft:el.css("marginLeft")},toggleCSS={position:"absolute",top:"50%",mozUserSelect:"none",webkitUserSelect:"none",msUserSelect:"none",userSelect:"none"},elCSS={marginTop:0,marginRight:0,marginBottom:0,marginLeft:0},eventName="",wrapper,toggle;el.wrap($("<div />").addClass(options.wrapperClass).css(wrapperCSS));wrapper=el.parent();if(options.wrapperWidth===true&&wrapper[options.widthMethod]()!==elWidth){wrapper.css("width",elWidth)}else if(options.wrapperWidth!==false&&options.wrapperWidth!==null){wrapper.css("width",options.wrapperWidth)}toggle=$("<div />").addClass(options.toggleClass);this.updateInnerToggle(toggle,this.currentStateKey(),options.states);toggleCSS[attachment]=0;toggle.css(toggleCSS);toggle.appendTo(wrapper);toggle.css("marginTop",toggle[options.heightMethod]()/-2);elCSS["padding"+attachment.replace(/./,function(m){return m[0].toUpperCase()})]=toggle[options.widthMethod]();el.css(elCSS);if(options.touchSupport){toggle.css("pointerEvents","none");el.on(options.toggleTouchEvent,$.proxy(function(event){var toggleX=toggle.offset().left,eventX,lesser,greater;if(toggleX){eventX=event.pageX||event.originalEvent.pageX;if(attachment==="left"){toggleX+=toggle[options.widthMethod]();lesser=eventX;greater=toggleX}else{lesser=toggleX;greater=eventX}if(greater>=lesser){event.preventDefault();this.toggle()}}},this))}else{toggle.on(options.toggleEvent,$.proxy(function(){this.toggle()},this))}$.each(options.states,function(key,state){eventName+=state.eventName+" "});el.on(eventName,$.proxy(function(){this.updateInnerToggle(toggle,this.currentStateKey(),options.states)},this));if(options.hideToggleUntil){toggle.hide();el.one(options.hideToggleUntil,function(){toggle.show()})}},updateInnerToggle:function(el,currentKey,states){this.ifCurrentOrNot(function(state){el.addClass(state.toggleClass).text(state.toggleText)},function(state){el.removeClass(state.toggleClass)})}};$.fn.hideShowPassword=function(options){return this.each(function(){var $this=$(this),data=$this.data(dataKey);if(data){data.update(options)}else{$this.data(dataKey,new HideShowPassword(this,options))}})};$.each({show:true,hide:false,toggle:"toggle"},function(verb,showVal){$.fn[verb+"Password"]=function(options){return this.hideShowPassword($.extend({},options,{show:showVal}))}})},this);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,214 +0,0 @@
/**
* Timeago is a jQuery plugin that makes it easy to support automatically
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
*
* @name timeago
* @version 1.4.0
* @requires jQuery v1.2.3+
* @author Ryan McGeary
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
*
* For usage and examples, visit:
* http://timeago.yarp.com/
*
* Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
*/
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['jquery'], factory);
} else {
// Browser globals
factory(jQuery);
}
}(function ($) {
$.timeago = function(timestamp) {
if (timestamp instanceof Date) {
return inWords(timestamp);
} else if (typeof timestamp === "string") {
return inWords($.timeago.parse(timestamp));
} else if (typeof timestamp === "number") {
return inWords(new Date(timestamp));
} else {
return inWords($.timeago.datetime(timestamp));
}
};
var $t = $.timeago;
$.extend($.timeago, {
settings: {
refreshMillis: 60000,
allowPast: true,
allowFuture: false,
localeTitle: false,
cutoff: 0,
strings: {
prefixAgo: null,
prefixFromNow: null,
suffixAgo: "ago",
suffixFromNow: "from now",
inPast: 'any moment now',
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: " ",
numbers: []
}
},
inWords: function(distanceMillis) {
if(!this.settings.allowPast && ! this.settings.allowFuture) {
throw 'timeago allowPast and allowFuture settings can not both be set to false.';
}
var $l = this.settings.strings;
var prefix = $l.prefixAgo;
var suffix = $l.suffixAgo;
if (this.settings.allowFuture) {
if (distanceMillis < 0) {
prefix = $l.prefixFromNow;
suffix = $l.suffixFromNow;
}
}
if(!this.settings.allowPast && distanceMillis >= 0) {
return this.settings.strings.inPast;
}
var seconds = Math.abs(distanceMillis) / 1000;
var minutes = seconds / 60;
var hours = minutes / 60;
var days = hours / 24;
var years = days / 365;
function substitute(stringOrFunction, number) {
var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
var value = ($l.numbers && $l.numbers[number]) || number;
return string.replace(/%d/i, value);
}
var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
seconds < 90 && substitute($l.minute, 1) ||
minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
minutes < 90 && substitute($l.hour, 1) ||
hours < 24 && substitute($l.hours, Math.round(hours)) ||
hours < 42 && substitute($l.day, 1) ||
days < 30 && substitute($l.days, Math.round(days)) ||
days < 45 && substitute($l.month, 1) ||
days < 365 && substitute($l.months, Math.round(days / 30)) ||
years < 1.5 && substitute($l.year, 1) ||
substitute($l.years, Math.round(years));
var separator = $l.wordSeparator || "";
if ($l.wordSeparator === undefined) { separator = " "; }
return $.trim([prefix, words, suffix].join(separator));
},
parse: function(iso8601) {
var s = $.trim(iso8601);
s = s.replace(/\.\d+/,""); // remove milliseconds
s = s.replace(/-/,"/").replace(/-/,"/");
s = s.replace(/T/," ").replace(/Z/," UTC");
s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
return new Date(s);
},
datetime: function(elem) {
var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
return $t.parse(iso8601);
},
isTime: function(elem) {
// jQuery's `is()` doesn't play well with HTML5 in IE
return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
}
});
// functions that can be called via $(el).timeago('action')
// init is default when no action is given
// functions are called with context of a single element
var functions = {
init: function(){
var refresh_el = $.proxy(refresh, this);
refresh_el();
var $s = $t.settings;
if ($s.refreshMillis > 0) {
this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
}
},
update: function(time){
var parsedTime = $t.parse(time);
$(this).data('timeago', { datetime: parsedTime });
if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString());
refresh.apply(this);
},
updateFromDOM: function(){
$(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
refresh.apply(this);
},
dispose: function () {
if (this._timeagoInterval) {
window.clearInterval(this._timeagoInterval);
this._timeagoInterval = null;
}
}
};
$.fn.timeago = function(action, options) {
var fn = action ? functions[action] : functions.init;
if(!fn){
throw new Error("Unknown function name '"+ action +"' for timeago");
}
// each over objects here and call the requested function
this.each(function(){
fn.call(this, options);
});
return this;
};
function refresh() {
var data = prepareData(this);
var $s = $t.settings;
if (!isNaN(data.datetime)) {
if ( $s.cutoff == 0 || distance(data.datetime) < $s.cutoff) {
$(this).text(inWords(data.datetime));
}
}
return this;
}
function prepareData(element) {
element = $(element);
if (!element.data("timeago")) {
element.data("timeago", { datetime: $t.datetime(element) });
var text = $.trim(element.text());
if ($t.settings.localeTitle) {
element.attr("title", element.data('timeago').datetime.toLocaleString());
} else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
element.attr("title", text);
}
}
return element.data("timeago");
}
function inWords(date) {
return $t.inWords(distance(date));
}
function distance(date) {
return (new Date().getTime() - date.getTime());
}
// fix for IE6 suckage
document.createElement("abbr");
document.createElement("time");
}));
File diff suppressed because one or more lines are too long
@@ -1,8 +0,0 @@
/*
Watermark v3.1.4 (August 13, 2012) plugin for jQuery
http://jquery-watermark.googlecode.com/
Copyright (c) 2009-2012 Todd Northrop
http://www.speednet.biz/
Dual licensed under the MIT or GPL Version 2 licenses.
*/
(function(n,t,i){var g="TEXTAREA",d="function",nt="password",c="maxLength",v="type",r="",u=!0,rt="placeholder",h=!1,tt="watermark",s=tt,o="watermarkClass",w="watermarkFocus",a="watermarkSubmit",b="watermarkMaxLength",e="watermarkPassword",f="watermarkText",l=/\r/g,ft=/^(button|checkbox|hidden|image|radio|range|reset|submit)$/i,it="input:data("+s+"),textarea:data("+s+")",p=":watermarkable",k=["Page_ClientValidate"],y=h,ut=rt in document.createElement("input");n.watermark=n.watermark||{version:"3.1.4",runOnce:u,options:{className:tt,useNative:u,hideBeforeUnload:u},hide:function(t){n(t).filter(it).each(function(){n.watermark._hide(n(this))})},_hide:function(n,i){var a=n[0],w=(a.value||r).replace(l,r),h=n.data(f)||r,p=n.data(b)||0,y=n.data(o),s,u;h.length&&w==h&&(a.value=r,n.data(e)&&(n.attr(v)||r)==="text"&&(s=n.data(e)||[],u=n.parent()||[],s.length&&u.length&&(u[0].removeChild(n[0]),u[0].appendChild(s[0]),n=s)),p&&(n.attr(c,p),n.removeData(b)),i&&(n.attr("autocomplete","off"),t.setTimeout(function(){n.select()},1))),y&&n.removeClass(y)},show:function(t){n(t).filter(it).each(function(){n.watermark._show(n(this))})},_show:function(t){var p=t[0],g=(p.value||r).replace(l,r),i=t.data(f)||r,k=t.attr(v)||r,d=t.data(o),h,s,a;g.length!=0&&g!=i||t.data(w)?n.watermark._hide(t):(y=u,t.data(e)&&k===nt&&(h=t.data(e)||[],s=t.parent()||[],h.length&&s.length&&(s[0].removeChild(t[0]),s[0].appendChild(h[0]),t=h,t.attr(c,i.length),p=t[0])),(k==="text"||k==="search")&&(a=t.attr(c)||0,a>0&&i.length>a&&(t.data(b,a),t.attr(c,i.length))),d&&t.addClass(d),p.value=i)},hideAll:function(){y&&(n.watermark.hide(p),y=h)},showAll:function(){n.watermark.show(p)}},n.fn.watermark=n.fn.watermark||function(i,y){var tt="string";if(!this.length)return this;var k=h,b=typeof i==tt;return b&&(i=i.replace(l,r)),typeof y=="object"?(k=typeof y.className==tt,y=n.extend({},n.watermark.options,y)):typeof y==tt?(k=u,y=n.extend({},n.watermark.options,{className:y})):y=n.watermark.options,typeof y.useNative!=d&&(y.useNative=y.useNative?function(){return u}:function(){return h}),this.each(function(){var et="dragleave",ot="dragenter",ft=this,h=n(ft),st,d,tt,it;if(h.is(p)){if(h.data(s))(b||k)&&(n.watermark._hide(h),b&&h.data(f,i),k&&h.data(o,y.className));else{if(ut&&y.useNative.call(ft,h)&&(h.attr("tagName")||r)!==g){b&&h.attr(rt,i);return}h.data(f,b?i:r),h.data(o,y.className),h.data(s,1),(h.attr(v)||r)===nt?(st=h.wrap("<span>").parent(),d=n(st.html().replace(/type=["']?password["']?/i,'type="text"')),d.data(f,h.data(f)),d.data(o,h.data(o)),d.data(s,1),d.attr(c,i.length),d.focus(function(){n.watermark._hide(d,u)}).bind(ot,function(){n.watermark._hide(d)}).bind("dragend",function(){t.setTimeout(function(){d.blur()},1)}),h.blur(function(){n.watermark._show(h)}).bind(et,function(){n.watermark._show(h)}),d.data(e,h),h.data(e,d)):h.focus(function(){h.data(w,1),n.watermark._hide(h,u)}).blur(function(){h.data(w,0),n.watermark._show(h)}).bind(ot,function(){n.watermark._hide(h)}).bind(et,function(){n.watermark._show(h)}).bind("dragend",function(){t.setTimeout(function(){n.watermark._show(h)},1)}).bind("drop",function(n){var i=h[0],t=n.originalEvent.dataTransfer.getData("Text");(i.value||r).replace(l,r).replace(t,r)===h.data(f)&&(i.value=t),h.focus()}),ft.form&&(tt=ft.form,it=n(tt),it.data(a)||(it.submit(n.watermark.hideAll),tt.submit?(it.data(a,tt.submit),tt.submit=function(t,i){return function(){var r=i.data(a);n.watermark.hideAll(),r.apply?r.apply(t,Array.prototype.slice.call(arguments)):r()}}(tt,it)):(it.data(a,1),tt.submit=function(t){return function(){n.watermark.hideAll(),delete t.submit,t.submit()}}(tt))))}n.watermark._show(h)}})},n.watermark.runOnce&&(n.watermark.runOnce=h,n.extend(n.expr[":"],{data:n.expr.createPseudo?n.expr.createPseudo(function(t){return function(i){return!!n.data(i,t)}}):function(t,i,r){return!!n.data(t,r[3])},watermarkable:function(n){var t,i=n.nodeName;return i===g?u:i!=="INPUT"?h:(t=n.getAttribute(v),!t||!ft.test(t))}}),function(t){n.fn.val=function(){var u=this,e=Array.prototype.slice.call(arguments),o;return u.length?e.length?(t.apply(u,e),n.watermark.show(u),u):u.data(s)?(o=(u[0].value||r).replace(l,r),o===(u.data(f)||r)?r:o):t.apply(u):e.length?u:i}}(n.fn.val),k.length&&n(function(){for(var u,r,i=k.length-1;i>=0;i--)u=k[i],r=t[u],typeof r==d&&(t[u]=function(t){return function(){return n.watermark.hideAll(),t.apply(null,Array.prototype.slice.call(arguments))}}(r))}),n(t).bind("beforeunload",function(){n.watermark.options.hideBeforeUnload&&n.watermark.hideAll()}))})(jQuery,window);
@@ -1,489 +0,0 @@
/*
json2.js
2014-02-04
Public Domain.
NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
See http://www.JSON.org/js.html
This code should be minified before deployment.
See http://javascript.crockford.com/jsmin.html
USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
NOT CONTROL.
This file creates a global JSON object containing two methods: stringify
and parse.
JSON.stringify(value, replacer, space)
value any JavaScript value, usually an object or array.
replacer an optional parameter that determines how object
values are stringified for objects. It can be a
function or an array of strings.
space an optional parameter that specifies the indentation
of nested structures. If it is omitted, the text will
be packed without extra whitespace. If it is a number,
it will specify the number of spaces to indent at each
level. If it is a string (such as '\t' or '&nbsp;'),
it contains the characters used to indent at each level.
This method produces a JSON text from a JavaScript value.
When an object value is found, if the object contains a toJSON
method, its toJSON method will be called and the result will be
stringified. A toJSON method does not serialize: it returns the
value represented by the name/value pair that should be serialized,
or undefined if nothing should be serialized. The toJSON method
will be passed the key associated with the value, and this will be
bound to the value
For example, this would serialize Dates as ISO strings.
Date.prototype.toJSON = function (key) {
function f(n) {
// Format integers to have at least two digits.
return n < 10 ? '0' + n : n;
}
return this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z';
};
You can provide an optional replacer method. It will be passed the
key and value of each member, with this bound to the containing
object. The value that is returned from your method will be
serialized. If your method returns undefined, then the member will
be excluded from the serialization.
If the replacer parameter is an array of strings, then it will be
used to select the members to be serialized. It filters the results
such that only members with keys listed in the replacer array are
stringified.
Values that do not have JSON representations, such as undefined or
functions, will not be serialized. Such values in objects will be
dropped; in arrays they will be replaced with null. You can use
a replacer function to replace those with JSON values.
JSON.stringify(undefined) returns undefined.
The optional space parameter produces a stringification of the
value that is filled with line breaks and indentation to make it
easier to read.
If the space parameter is a non-empty string, then that string will
be used for indentation. If the space parameter is a number, then
the indentation will be that many spaces.
Example:
text = JSON.stringify(['e', {pluribus: 'unum'}]);
// text is '["e",{"pluribus":"unum"}]'
text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
// text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
text = JSON.stringify([new Date()], function (key, value) {
return this[key] instanceof Date ?
'Date(' + this[key] + ')' : value;
});
// text is '["Date(---current time---)"]'
JSON.parse(text, reviver)
This method parses a JSON text to produce an object or array.
It can throw a SyntaxError exception.
The optional reviver parameter is a function that can filter and
transform the results. It receives each of the keys and values,
and its return value is used instead of the original value.
If it returns what it received, then the structure is not modified.
If it returns undefined then the member is deleted.
Example:
// Parse the text. Values that look like ISO date strings will
// be converted to Date objects.
myData = JSON.parse(text, function (key, value) {
var a;
if (typeof value === 'string') {
a =
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+a[5], +a[6]));
}
}
return value;
});
myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
var d;
if (typeof value === 'string' &&
value.slice(0, 5) === 'Date(' &&
value.slice(-1) === ')') {
d = new Date(value.slice(5, -1));
if (d) {
return d;
}
}
return value;
});
This is a reference implementation. You are free to copy, modify, or
redistribute.
*/
/*jslint evil: true, regexp: true */
/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
lastIndex, length, parse, prototype, push, replace, slice, stringify,
test, toJSON, toString, valueOf
*/
// Create a JSON object only if one does not already exist. We create the
// methods in a closure to avoid creating global variables.
if (typeof JSON !== 'object') {
JSON = {};
}
(function () {
'use strict';
function f(n) {
// Format integers to have at least two digits.
return n < 10 ? '0' + n : n;
}
if (typeof Date.prototype.toJSON !== 'function') {
Date.prototype.toJSON = function () {
return isFinite(this.valueOf())
? this.getUTCFullYear() + '-' +
f(this.getUTCMonth() + 1) + '-' +
f(this.getUTCDate()) + 'T' +
f(this.getUTCHours()) + ':' +
f(this.getUTCMinutes()) + ':' +
f(this.getUTCSeconds()) + 'Z'
: null;
};
String.prototype.toJSON =
Number.prototype.toJSON =
Boolean.prototype.toJSON = function () {
return this.valueOf();
};
}
var cx,
escapable,
gap,
indent,
meta,
rep;
function quote(string) {
// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can safely slap some quotes around it.
// Otherwise we must also replace the offending characters with safe escape
// sequences.
escapable.lastIndex = 0;
return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
var c = meta[a];
return typeof c === 'string'
? c
: '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
}) + '"' : '"' + string + '"';
}
function str(key, holder) {
// Produce a string from holder[key].
var i, // The loop counter.
k, // The member key.
v, // The member value.
length,
mind = gap,
partial,
value = holder[key];
// If the value has a toJSON method, call it to obtain a replacement value.
if (value && typeof value === 'object' &&
typeof value.toJSON === 'function') {
value = value.toJSON(key);
}
// If we were called with a replacer function, then call the replacer to
// obtain a replacement value.
if (typeof rep === 'function') {
value = rep.call(holder, key, value);
}
// What happens next depends on the value's type.
switch (typeof value) {
case 'string':
return quote(value);
case 'number':
// JSON numbers must be finite. Encode non-finite numbers as null.
return isFinite(value) ? String(value) : 'null';
case 'boolean':
case 'null':
// If the value is a boolean or null, convert it to a string. Note:
// typeof null does not produce 'null'. The case is included here in
// the remote chance that this gets fixed someday.
return String(value);
// If the type is 'object', we might be dealing with an object or an array or
// null.
case 'object':
// Due to a specification blunder in ECMAScript, typeof null is 'object',
// so watch out for that case.
if (!value) {
return 'null';
}
// Make an array to hold the partial results of stringifying this object value.
gap += indent;
partial = [];
// Is the value an array?
if (Object.prototype.toString.apply(value) === '[object Array]') {
// The value is an array. Stringify every element. Use null as a placeholder
// for non-JSON values.
length = value.length;
for (i = 0; i < length; i += 1) {
partial[i] = str(i, value) || 'null';
}
// Join all of the elements together, separated with commas, and wrap them in
// brackets.
v = partial.length === 0
? '[]'
: gap
? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
: '[' + partial.join(',') + ']';
gap = mind;
return v;
}
// If the replacer is an array, use it to select the members to be stringified.
if (rep && typeof rep === 'object') {
length = rep.length;
for (i = 0; i < length; i += 1) {
if (typeof rep[i] === 'string') {
k = rep[i];
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
} else {
// Otherwise, iterate through all of the keys in the object.
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = str(k, value);
if (v) {
partial.push(quote(k) + (gap ? ': ' : ':') + v);
}
}
}
}
// Join all of the member texts together, separated with commas,
// and wrap them in braces.
v = partial.length === 0
? '{}'
: gap
? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
: '{' + partial.join(',') + '}';
gap = mind;
return v;
}
}
// If the JSON object does not yet have a stringify method, give it one.
if (typeof JSON.stringify !== 'function') {
escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
meta = { // table of character substitutions
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
};
JSON.stringify = function (value, replacer, space) {
// The stringify method takes a value and an optional replacer, and an optional
// space parameter, and returns a JSON text. The replacer can be a function
// that can replace values, or an array of strings that will select the keys.
// A default replacer method can be provided. Use of the space parameter can
// produce text that is more easily readable.
var i;
gap = '';
indent = '';
// If the space parameter is a number, make an indent string containing that
// many spaces.
if (typeof space === 'number') {
for (i = 0; i < space; i += 1) {
indent += ' ';
}
// If the space parameter is a string, it will be used as the indent string.
} else if (typeof space === 'string') {
indent = space;
}
// If there is a replacer, it must be a function or an array.
// Otherwise, throw an error.
rep = replacer;
if (replacer && typeof replacer !== 'function' &&
(typeof replacer !== 'object' ||
typeof replacer.length !== 'number')) {
throw new Error('JSON.stringify');
}
// Make a fake root object containing our value under the key of ''.
// Return the result of stringifying the value.
return str('', {'': value});
};
}
// If the JSON object does not yet have a parse method, give it one.
if (typeof JSON.parse !== 'function') {
cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
JSON.parse = function (text, reviver) {
// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.
var j;
function walk(holder, key) {
// The walk method is used to recursively walk the resulting structure so
// that modifications can be made.
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
} else {
delete value[k];
}
}
}
}
return reviver.call(holder, key, value);
}
// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles many characters
// incorrectly, either silently deleting them, or treating them as line endings.
text = String(text);
cx.lastIndex = 0;
if (cx.test(text)) {
text = text.replace(cx, function (a) {
return '\\u' +
('0000' + a.charCodeAt(0).toString(16)).slice(-4);
});
}
// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.
// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
if (/^[\],:{}\s]*$/
.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j = eval('(' + text + ')');
// In the optional fourth stage, we recursively walk the new structure, passing
// each name/value pair to a reviver function for possible transformation.
return typeof reviver === 'function'
? walk({'': j}, '')
: j;
}
// If the text is not JSON parseable, then a SyntaxError is thrown.
throw new SyntaxError('JSON.parse');
};
}
}());
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -1,237 +0,0 @@
$(document).ready(function() {
var appdatacallback = function(data, tag) {
var td = $.tmpl($('#log-data-template'), data);
td.appendTo(tag);
td.find('.log-exception').each(function(i, e) {
$(e).html(nl2br($(e).html()));
});
td.find('.log-exception').click(function(e) {
e.bubbles = false;
return false;
});
td.find('.log-timestamp').each(function(i, e) {
$(e).text((new Date(parseInt($(e).attr('title')))).toLocaleString());
});
td.click(function(e) {
$(this).toggleClass('expanded');
});
};
var livedatacallback = function(data, tag) {
var scrolledToEnd = tag.parent().scrollTop() > tag.height() - (tag.parent().height()*2);
var td = $.tmpl($('#live-log-data-template'), data)
td.appendTo(tag);
td.find('.log-exception').each(function(i, e) {
$(e).html(nl2br($(e).html()));
});
td.find('.log-exception').click(function(e) {
e.bubbles = false;
return false;
});
td.find('.log-timestamp').each(function(i, e) {
$(e).text(new Date($(e).attr('title')).toLocaleString());
});
td.click(function(e) {
$(this).toggleClass('expanded');
});
if (data != null && data.length > 0 && scrolledToEnd)
tag.parent().scrollTop(tag.height());
};
var generaldatacallback = function(data, tag) {
var td = $.tmpl($('#log-backup-general-template'), data)
td.appendTo(tag);
td.find('.log-exception').each(function(i, e) {
$(e).html(nl2br($(e).html()));
});
td.find('.log-message').each(function(i, e) {
$(e).html(nl2br($(e).html()));
});
td.find('.log-exception').click(function(e) {
return e.bubbles = false;
});
td.find('.log-message').click(function(e) {
return e.bubbles = false;
});
td.find('.log-timestamp').each(function(i, e) {
$(e).text((new Date(parseInt($(e).attr('title')))).toLocaleString());
});
td.click(function(e) {
$(this).toggleClass('expanded');
});
};
var remotedatacallback = function(data, tag) {
var td = $.tmpl($('#log-backup-remote-template'), data);
td.appendTo(tag);
td.find('.log-data').each(function(i, e) {
$(e).html(nl2br($(e).html()));
});
td.find('.log-data').click(function(e) {
return e.bubbles = false;
});
td.find('.log-timestamp').each(function(i, e) {
$(e).text((new Date(parseInt($(e).attr('title')))).toLocaleString());
});
td.click(function(e) {
$(e.target).closest('.log-entry').toggleClass('expanded');
});
};
var refreshRunning = false;
var refreshId = 0;
var refreshLiveData = function() {
if (refreshRunning)
return;
var v = $('#log-tab-live-level').val();
if (v == '' || v == 'disabled')
return;
if (!$('#log-dialog').dialog('isOpen'))
return;
refreshRunning = true;
APP_DATA.callServer({'action': 'poll-log-messages', 'level': v, 'id': refreshId},
function(data) {
for(var n in data)
refreshId = Math.max(refreshId, data[n].ID);
refreshRunning = false;
livedatacallback(data, $('#log-tab-live'));
setTimeout(refreshLiveData, 3000);
},
function() {
refreshRunning = false;
setTimeout(refreshLiveData, 1000);
});
};
$.showAppLog = function() {
var dlg_buttons = $('#log-dialog').parent().find('.ui-dialog-buttonpane').find('.ui-button');
$('#log-dialog').dialog('open');
var data = $('#log-tab-stored').data('log');
if (!data) {
data = {
first: null,
last: null
};
$('#log-tab-stored').data('log', data);
}
if (data.first == null) {
$('#log-tab-stored').empty();
APP_DATA.callServer({'action': 'read-log', 'pagesize': 100}, function(data) {
appdatacallback(data, $('#log-tab-stored'));
});
};
var loglevel = $('#log-tab-live-level');
loglevel.empty();
$('#log-tab-live').find('.log-entry').remove();
loglevel.change(function() {
refreshId = 0;
var v = $('#log-tab-live-level').val();
if (v == '' || v == 'disabled')
return;
$('#log-tab-live').find('.log-entry').remove();
refreshLiveData();
});
APP_DATA.getServerConfig(function(server_config) {
loglevel.append($('<option></option>')
.attr('value', 'disabled')
.text('Disabled'));
for(var n in server_config.LogLevels)
loglevel.append($('<option></option>')
.attr('value',server_config.LogLevels[n])
.text(server_config.LogLevels[n]));
}, function() { alert('Failed to read server data'); });
};
$.showBackupLog = function(id) {
$('#backup-log-tab-general').empty();
$('#backup-log-tab-remote').empty();
$('<div id="restore-search-loader" class="small-loader-icon">').appendTo($('#backup-log-tab-general'));
$('<div id="restore-search-loader" class="small-loader-icon">').appendTo($('#backup-log-tab-remote'));
var loglevel = $('#backup-log-live-level');
loglevel.empty();
loglevel.change(refreshLiveData);
$('#backup-log-dialog').dialog('open');
APP_DATA.callServer({'action': 'read-log', 'pagesize': 100, 'id': id, 'remotelog': false}, function(generaldata) {
APP_DATA.callServer({'action': 'read-log', 'pagesize': 100, 'id': id, 'remotelog': true}, function(remotedata) {
$('#backup-log-tab-general').empty();
$('#backup-log-tab-remote').empty();
generaldatacallback(generaldata, $('#backup-log-tab-general'));
remotedatacallback(remotedata, $('#backup-log-tab-remote'));
}, function() { alert('Failed to read log data'); });
}, function() { alert('Failed to read log data'); });
};
$('#log-dialog').tabs({ active: 0 });
$('#log-dialog').dialog({
minWidth: 320,
width: $('body').width > 600 ? 320 : 600,
minHeight: 480,
height: 500,
modal: true,
autoOpen: false,
closeOnEscape: true,
buttons: [
{ text: 'Close', disabled: false, click: function(event, ui) {
$(this).dialog('close');
}}
]
});
$('#backup-log-dialog').tabs({ active: 0 });
$('#backup-log-dialog').dialog({
minWidth: 320,
width: $('body').width > 600 ? 320 : 600,
minHeight: 480,
height: 500,
modal: true,
autoOpen: false,
closeOnEscape: true,
buttons: [
{ text: 'Close', disabled: false, click: function(event, ui) {
$(this).dialog('close');
}}
]
});
});
@@ -1,52 +0,0 @@
if ( !Date.prototype.toISOString ) {
( function() {
function pad(number) {
if ( number < 10 ) {
return '0' + number;
}
return number;
}
Date.prototype.toISOString = function() {
return this.getUTCFullYear() +
'-' + pad( this.getUTCMonth() + 1 ) +
'-' + pad( this.getUTCDate() ) +
'T' + pad( this.getUTCHours() ) +
':' + pad( this.getUTCMinutes() ) +
':' + pad( this.getUTCSeconds() ) +
'.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice( 2, 5 ) +
'Z';
};
}() );
}
function nl2br (str, is_xhtml) {
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>';
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
}
function preg_quote( str ) {
// http://kevin.vanzonneveld.net
// + original by: booeyOH
// + improved by: Ates Goral (http://magnetiq.com)
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Onno Marsman
// * example 1: preg_quote("$40");
// * returns 1: '\$40'
// * example 2: preg_quote("*RRRING* Hello?");
// * returns 2: '\*RRRING\* Hello\?'
// * example 3: preg_quote("\\.+*?[^]$(){}=!<>|:");
// * returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:'
return (str+'').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
}
function replace_all_insensitive(str, pattern, replacement) {
return str.replace( new RegExp( "(" + preg_quote(pattern) + ")" , 'gi' ), replacement );
};
function replace_all(str, pattern, replacement) {
return str.replace( new RegExp( "(" + preg_quote(pattern) + ")" , 'g' ), replacement );
}
@@ -1,837 +0,0 @@
$(document).ready(function() {
APP_DATA.plugins.backend['file'] = {
hasssl: false,
hideserverandport: true,
optionalauth: true,
btnel: null,
fill_form_map: {
'server-path': function(dict, key, el, cfgel) {
var p = [];
if (dict['server-name'] && dict['server-name'] != '')
p.push(dict['server-name']);
if (dict['server-path'] && dict['server-path'] != '')
p.push(dict['server-path']);
var sep = '/';
if (this.serverconfig)
sep = this.serverconfig.DirectorySeparator;
p = p.join(sep);
if (p.indexOf('file://') == 0)
p = p.substr('file://'.length);
$('#server-path').val(p);
}
},
fill_dict_map: {
'server-path': function(dict, key, el, cfgel) {
var p = $(el).val();
if (p.indexOf('file://') == 0)
p = p.substr('file://'.length);
dict['server-path'] = p;
dict['server-name'] = '';
}
},
decode_uri: function(url) {
var dict = EDIT_URI.decode_uri(url);
if (dict == null || dict['backend-type'] == null) {
dict = dict || {};
var p = url;
if (p.indexOf('file://') == 0)
p = p.substr('file://'.length);
if (p.indexOf('?') > 0) {
var q = p.substr(p.indexOf('?') + 1);
p = p.substr(0, p.length - q.length - 1);
q.replace(EDIT_URI.QUERY_REGEXP, function(str, key, val) {
if (key)
dict['--' + key] = decodeURIComponent(val);
});
}
$.extend(true, dict, {
'source_uri': url,
'backend-type': 'file',
'server-path': p
});
}
return dict;
},
setup: function(dlg, div) {
$('#server-path').addClass('server-path-file');
$('#server-path').watermark('mybackup');
this.btnel = $('<input type="button" value="..." class="browse-button" />').css('width', 'auto');
this.btnel.insertAfter($('#server-path'));
this.btnel.click(function() {
$.browseForFolder({
title: 'Select target folder',
multiSelect: false,
resolvePath: true,
callback: function(path, display) {
$('#server-path').val(path);
}
});
});
if (this.serverconfig == null) {
APP_DATA.getServerConfig(function(data) {
this.serverconfig = data;
});
}
},
cleanup: function(dlg, div) {
$('#server-path').removeClass('server-path-file');
if (this.btnel != null) {
this.btnel.remove();
this.btnel = null;
}
}
}
APP_DATA.plugins.backend['webdav'] = {
defaultport: 80,
defaultportssl: 443
}
APP_DATA.plugins.backend['cloudfiles'] = {
defaultport: 80,
defaultportssl: 443
}
APP_DATA.plugins.backend['ftp'] = {
defaultport: 21,
defaultportssl: 443,
optionalpassword: true
}
APP_DATA.plugins.backend['aftp'] = {
defaultport: 21,
defaultportssl: 443,
optionalpassword: true
}
APP_DATA.plugins.backend['ssh'] = {
defaultport: 22,
optionalauth: true,
hasssl: false
}
APP_DATA.plugins.backend['onedrive'] = {
PLUGIN_LOGIN_LINK: 'https://duplicati-oauth-handler.appspot.com/',
hideserverandport: true,
hideusernameandpassword: true,
optionalauth: true,
hasssl: false,
fetchtoken: null,
passwordlabel: 'AuthID',
fill_form_map: {
'--authid': 'authid'
},
fill_dict_map: {
'authid': '--authid'
},
validate: function(form, values) {
delete values['auth-username'];
delete values['auth-password'];
delete values['--auth-username'];
delete values['--auth-password'];
if (values['--authid'] == '')
return EDIT_URI.validation_error($('#server-password'), 'You must fill in an AuthID');
return EDIT_URI.validate_input(values, true);
},
setup: function(dlg, div) {
var authid = EDIT_URI.createFieldset({label: 'AuthID', name: 'authid', after: $('#server-path'), watermark: 'Enter the AuthID value'});
authid.label.addClass('action-link');
var self = this;
authid.label.click(function() {
self.fetchtoken = Math.random().toString(36).substr(2) + Math.random().toString(36).substr(2);
var ft = self.fetchtoken;
var countDown = 100;
var url = self.PLUGIN_LOGIN_LINK + '?token=' + self.fetchtoken;
var real_link = $('<a />').text(authid.label.text())
.addClass('edit-dialog-label')
.addClass('action-link')
.attr('href', url)
.attr('target', '_blank');
authid.label.attr('href', url).addClass('action-link');
real_link.insertAfter(authid.label);
setTimeout(function() { authid.label.hide(); }, 500);
var w = 400;
var h = 550;
var left = (screen.width/2)-(w/2);
var top = (screen.height/2)-(h/2);
var wnd = window.open(url, '_blank', 'height=' + h +',width=' + w + ',menubar=0,status=0,titlebar=0,toolbar=0,left=' + left + ',top=' + top)
var recheck = function() {
countDown--;
if (countDown > 0 && ft == self.fetchtoken) {
$.ajax({
url: self.PLUGIN_LOGIN_LINK + 'fetch',
dataType: 'jsonp',
data: {'token': ft}
})
.done(function(data) {
if (data.authid) {
authid.field.val(data.authid);
wnd.close();
} else {
setTimeout(recheck, 3000);
}
})
.fail(function() {
setTimeout(recheck, 3000);
});
} else {
if (wnd != null)
wnd.close();
}
};
setTimeout(recheck, 6000);
return false;
});
},
cleanup: function(dlg, div) {
this.fetchtoken = null;
}
}
APP_DATA.plugins.backend['googledrive'] = APP_DATA.plugins.backend['onedrive'];
APP_DATA.plugins.backend['hubic'] = APP_DATA.plugins.backend['onedrive'];
APP_DATA.plugins.backend['amzcd'] = APP_DATA.plugins.backend['onedrive'];
APP_DATA.plugins.backend['box'] = APP_DATA.plugins.backend['onedrive'];
APP_DATA.plugins.backend['s3'] = {
PLUGIN_S3_LINK: 'https://portal.aws.amazon.com/gp/aws/developer/registration/index.html',
hasssl: true,
hideserverandport: true,
usernamelabel: 'AWS Access ID',
passwordlabel: 'AWS Secret Key',
usernamewatermark: 'AWS Access ID',
passwordwatermark: 'AWS Secret Key',
serverdrop_field: null,
regiondrop_field: null,
storageclassdrop_field: null,
bucket_field: null,
known_hosts: null,
known_regions: null,
known_storage_classes: null,
setup_hosts_after_config: function() {
if (this.known_hosts != null && this.serverdrop_field != null)
{
var servers = [];
for (var k in this.known_hosts)
servers.push({label: k + ' (' + this.known_hosts[k] + ')', value: this.known_hosts[k]});
this.serverdrop_field.autocomplete({
minLength: 0,
source: servers,
});
var self = this;
this.serverdrop_field.click(function() {
self.serverdrop_field.autocomplete('search', '');
});
}
},
setup_regions_after_config: function() {
if (this.known_regions != null && this.regiondrop_field != null) {
var buckets = [];
for (var k in this.known_regions)
buckets.push({label: k + ' (' + this.known_regions[k] + ')', value: this.known_regions[k]});
this.regiondrop_field.autocomplete({
minLength: 0,
source: buckets,
});
var self = this;
this.regiondrop_field.click(function() {
self.regiondrop_field.autocomplete('search', '');
});
}
},
setup_storage_classes_after_config: function() {
if (this.known_storage_classes != null && this.storageclassdrop_field != null) {
var buckets = [];
for (var k in this.known_storage_classes)
buckets.push({label: k + ' (' + this.known_storage_classes[k] + ')', value: this.known_storage_classes[k]});
this.storageclassdrop_field.autocomplete({
minLength: 0,
source: buckets,
});
var self = this;
this.storageclassdrop_field.click(function() {
self.storageclassdrop_field.autocomplete('search', '');
});
}
},
setup: function(dlg, div) {
var self = this;
$('#server-path-label').hide();
$('#server-path').hide();
var serverdrop = EDIT_URI.createFieldset({label: 'S3 servername', name: 's3-server', after: $('#server-path'), watermark: 'Click for a list of providers'});
var bucketfield = EDIT_URI.createFieldset({label: 'S3 Bucket name', name: 's3-bucket', after: $('#server-username-and-password'), title: 'Use / to access subfolders in the bucket', watermark: 'Enter bucket name'});
var regiondrop = EDIT_URI.createFieldset({label: 'Bucket create region', name: 's3-region', before: $('#server-options-label'), watermark: 'Click for a list of regions', title: 'Note that region is only used when creating buckets'});
var storageclassdrop = EDIT_URI.createFieldset({label: 'Storage class', name: 's3-storage-class', after: regiondrop.outer, watermark: 'Click for a list of storage classes'});
var signuplink = EDIT_URI.createFieldset({'label': '&nbsp;', href: this.PLUGIN_S3_LINK, type: 'link', before: bucketfield.outer, 'title': 'Click here for the sign up page'});
signuplink.outer.css('margin-bottom', '10px');
this.serverdrop_field = serverdrop.field;
this.regiondrop_field = regiondrop.field;
this.bucket_field = bucketfield.field;
this.storageclassdrop_field = storageclassdrop.field;
if (self.known_hosts == null) {
APP_DATA.callServer({action: 'send-command', command: 's3-getconfig', 's3-config': 'Providers'}, function(data) {
self.known_hosts = data.Result;
self.setup_hosts_after_config();
},
function(data, success, message) {
alert('Failed to get S3 config: ' + message);
});
} else {
this.setup_hosts_after_config();
}
if (self.known_regions == null) {
APP_DATA.callServer({action: 'send-command', command: 's3-getconfig', 's3-config': 'Regions'}, function(data) {
self.known_regions = data.Result;
self.setup_regions_after_config();
},
function(data, success, message) {
alert('Failed to get S3 config: ' + message);
});
} else {
this.setup_regions_after_config();
}
if (self.known_storage_classes == null) {
APP_DATA.callServer({action: 'send-command', command: 's3-getconfig', 's3-config': 'StorageClasses'}, function(data) {
self.known_storage_classes = data.Result;
self.setup_storage_classes_after_config();
},
function(data, success, message) {
alert('Failed to get S3 config: ' + message);
});
} else {
this.setup_storage_classes_after_config();
}
},
cleanup: function(dlg, div) {
$('#server-path-label').show();
$('#server-path').show();
this.serverdrop_field = null;
this.regiondrop_field = null;
this.storageclassdrop_field = null;
this.bucket_field = null;
},
fill_form: function(el, cfg) {
// Upgrade from checkbox to string
if (APP_UTIL.parseBoolOption(cfg['--s3-use-rrs']) && !cfg['--s3-location-constraint']) {
delete cfg['--s3-use-rrs'];
cfg['--s3-location-constraint'] = 'REDUCED_REDUNDANCY';
}
EDIT_URI.fill_form(el, cfg);
},
validate: function(dlg, values) {
if (!EDIT_URI.validate_input(values, true))
return;
if (values['--s3-server-name'] == '')
return EDIT_URI.validation_error(this.serverdrop_field, 'You must fill in or select the S3 server to use');
if (values['server-path'] == '')
return EDIT_URI.validation_error(this.bucket_field, 'You must enter a S3 bucket name');
if (values['server-path'].toLowerCase() != values['server-path']) {
if (!confirm('The bucket name must be all lower case, convert automatically?')) {
this.bucket_field.focus();
return false;
}
values['server-path'] = values['server-path'].toLowerCase();
this.bucket_field.val(values['server-path']);
}
if (values['server-path'].indexOf(values['--auth-username'].toLowerCase()) != 0) {
if (confirm('The bucket name should start with your username, append automatically?')) {
values['server-path'] = values['--auth-username'].toLowerCase() + '-' + values['server-path'];
this.bucket_field.val(values['server-path']);
}
}
return true;
},
fill_form_map: {
'server-path': 's3-bucket',
'--s3-server-name': 's3-server',
'--s3-storage-class': 's3-storage-class',
'--s3-location-constraint': 's3-region'
},
fill_dict_map: {
's3-bucket': 'server-path',
's3-server': '--s3-server-name',
's3-storage-class': '--s3-storage-class',
's3-region': '--s3-location-constraint'
}
}
APP_DATA.plugins.backend['azure'] = {
PLUGIN_AZURE_LINK: 'https://account.windowsazure.com/Home/Index',
hasssl: false,
hideserverandport: true,
usernamelabel: 'Account Name',
passwordlabel: 'Access Key',
usernamewatermark: 'Account Name',
passwordwatermark: 'Access Key',
container_field: null,
setup: function (dlg, div) {
$('#server-path-label').hide();
$('#server-path').hide();
$('#server-username').attr('placeholder', this.usernamewatermark);
$('#server-password').attr('placeholder', this.passwordwatermark);
var containerfield = EDIT_URI.createFieldset({ label: 'Container Name', name: 'azure-container', after: $('#server-username-and-password'), title: 'Container name', watermark: 'Enter container name' });
this.container_field = containerfield.field;
var signuplink = EDIT_URI.createFieldset({ 'label': '&nbsp;', href: this.PLUGIN_AZURE_LINK, type: 'link', before: $('#server-options-label'), 'title': 'Click here to sign in or register' });
signuplink.outer.css('margin-bottom', '10px');
},
cleanup: function (dlg, div) {
$('#server-path-label').show();
$('#server-path').show();
this.container_field = null;
},
validate: function (dlg, values) {
if (!EDIT_URI.validate_input(values, true))
return false;
if (values['azure-container'] == '')
return EDIT_URI.validation_error(this.container_field, 'You must enter an Azure container name');
values['server-name'] = values["azure-container"].toLowerCase();
this.container_field.val(values['server-name']);
return true;
},
fill_form_map: {
'server-name': 'azure-container'
},
fill_dict_map: {
'azure-container': 'server-name'
}
}
var tmp_gcs = $.extend(true, {
locationdrop_field: null,
known_locations: null,
storage_class_field: null,
known_storage_classes: null,
setup_locations_after_config: function() {
if (this.known_locations != null && this.locationdrop_field != null)
{
var servers = [];
for (var k in this.known_locations)
servers.push({label: k + ' (' + this.known_locations[k] + ')', value: this.known_locations[k]});
this.locationdrop_field.autocomplete({
minLength: 0,
source: servers,
});
var self = this;
this.locationdrop_field.click(function() {
self.locationdrop_field.autocomplete('search', '');
});
}
},
setup_storage_classes_after_config: function() {
if (this.known_storage_classes != null && this.storage_class_field != null)
{
var servers = [];
for (var k in this.known_storage_classes)
servers.push({label: k + ' (' + this.known_storage_classes[k] + ')', value: this.known_storage_classes[k]});
this.storage_class_field.autocomplete({
minLength: 0,
source: servers,
});
var self = this;
this.storage_class_field.click(function() {
self.storage_class_field.autocomplete('search', '');
});
}
},
setup_gcs: function()
{
var locationdrop = EDIT_URI.createFieldset({label: 'Bucket create location', name: 'gcs-location', before: $('#server-options-label'), watermark: 'Click for a list of locations', title: 'Note that location is only used when creating buckets'});
var storageclassdrop = EDIT_URI.createFieldset({label: 'Bucket storage class', name: 'gcs-storage-class', before: $('#server-options-label'), watermark: 'Click for a list of storage classes', title: 'Note that storage class is only used when creating buckets'});
var projectidfield = EDIT_URI.createFieldset({label: 'GCS Project ID', name: 'gcs-project', before: $('#server-options-label'), title: 'Supply the project ID', watermark: 'Enter project ID'});
this.locationdrop_field = locationdrop.field;
this.storage_class_field = storageclassdrop.field;
this.projectid_field = projectidfield.field;
this.prevsettings = {
placeholder: $('#server-path').attr('placeholder'),
text: $('#server-path-label').text()
};
$('#server-path').attr('placeholder', 'bucket/folder/subfolder');
$('#server-path-label').text('Bucket name');
var self = this;
if (self.known_locations == null) {
APP_DATA.callServer({action: 'send-command', command: 'gcs-getconfig', 'gcs-config': 'Locations'}, function(data) {
self.known_locations = data.Result;
self.setup_locations_after_config();
},
function(data, success, message) {
alert('Failed to get GCS config: ' + message);
});
} else {
this.setup_locations_after_config();
}
if (self.known_storage_classes == null) {
APP_DATA.callServer({action: 'send-command', command: 'gcs-getconfig', 'gcs-config': 'StorageClasses'}, function(data) {
self.known_storage_classes = data.Result;
self.setup_storage_classes_after_config();
},
function(data, success, message) {
alert('Failed to get GCS config: ' + message);
});
} else {
this.setup_storage_classes_after_config();
}
},
cleanup_gcs: function() {
this.locationdrop_field = null;
this.regiondrop_field = null;
this.projectid_field = null;
if (this.prevsettings != null) {
$('#server-path').attr('placeholder', this.prevsettings.placeholder);
$('#server-path-label').text(this.prevsettings.text);
this.prevsettings = null;
}
},
fill_form_map: {
'--gcs-location': 'gcs-location',
'--gcs-storage-class': 'gcs-storage-class',
'--gcs-project': 'gcs-project'
},
fill_dict_map: {
'gcs-location': '--gcs-location',
'gcs-storage-class': '--gcs-storage-class',
'gcs-project': '--gcs-project'
}
}, APP_DATA.plugins.backend['onedrive']);
tmp_gcs.setup_auth = tmp_gcs.setup;
tmp_gcs.cleanup_auth = tmp_gcs.cleanup;
tmp_gcs.setup = function() {
this.setup_auth();
this.setup_gcs();
};
tmp_gcs.cleanup = function() {
this.cleanup_auth();
this.cleanup_gcs();
};
APP_DATA.plugins.backend['gcs'] = tmp_gcs;
delete tmp_gcs;
APP_DATA.plugins.backend['openstack'] = {
hasssl: false,
hideserverandport: true,
serverdrop_field: null,
known_hosts: null,
optionalauth: true,
setup_hosts_after_config: function() {
if (this.known_hosts != null && this.serverdrop_field != null)
{
var servers = [];
for (var k in this.known_hosts)
servers.push({label: k + ' (' + this.known_hosts[k] + ')', value: this.known_hosts[k]});
this.serverdrop_field.autocomplete({
minLength: 0,
source: servers,
});
var self = this;
this.serverdrop_field.click(function() {
self.serverdrop_field.autocomplete('search', '');
});
}
},
setup: function(dlg, div) {
var self = this;
var projectidfield = EDIT_URI.createFieldset({label: 'Tenant Name', name: 'openstack-tenant-name', before: $('#server-options-label'), title: 'Enter the Tenant Name if you are not using API Key', watermark: 'Optional Tenant Name'});
var projectidfield = EDIT_URI.createFieldset({label: 'API Key', name: 'openstack-apikey', before: $('#server-options-label'), title: 'If you supply the API key, the Password, Tenant Name fields are not required', watermark: 'Optional API Key'});
var projectidfield = EDIT_URI.createFieldset({label: 'Container region', name: 'openstack-region', before: $('#server-options-label'), title: 'If your provider supports regions, you can supply the region value here.', watermark: 'Optional region'});
var serverdrop = EDIT_URI.createFieldset({label: 'OpenStack Authuri', name: 'openstack-authuri', after: $('#server-path'), watermark: 'Click for a list of providers'});
this.serverdrop_field = serverdrop.field;
this.prevsettings = {
placeholder: $('#server-path').attr('placeholder'),
text: $('#server-path-label').text()
};
$('#server-path').attr('placeholder', 'bucket/folder/subfolder');
$('#server-path-label').text('Bucket name');
if (self.known_hosts == null) {
APP_DATA.callServer({action: 'send-command', command: 'openstack-getconfig', 'openstack-config': 'Providers'}, function(data) {
self.known_hosts = data.Result;
self.setup_hosts_after_config();
},
function(data, success, message) {
alert('Failed to get OpenStack config: ' + message);
});
} else {
this.setup_hosts_after_config();
}
},
cleanup: function(dlg, div) {
this.serverdrop_field = null;
if (this.prevsettings != null) {
$('#server-path').attr('placeholder', this.prevsettings.placeholder);
$('#server-path-label').text(this.prevsettings.text);
this.prevsettings = null;
}
},
validate: function(dlg, values) {
if (!EDIT_URI.validate_input(values, true))
return;
if (values['--openstack-authuri'] == '')
return EDIT_URI.validation_error(this.serverdrop_field, 'You must fill in or select the Authentication URI');
if (values['server-path'] == '')
return EDIT_URI.validation_error($('#server-path'), 'You must enter a path');
if (values['server-username'] == '')
return EDIT_URI.validation_error($('#server-username'), 'You must enter a username');
if (values['--openstack-apikey'] == '')
{
if (values['server-password'] == '')
return EDIT_URI.validation_error($('#server-username'), 'You must enter a password or API key');
if (values['openstack-tenantname'] == '')
return EDIT_URI.validation_error($('#server-username'), 'You must enter a Tenant Name if you do not supply the API key');
}
else
{
if (values['server-password'] != '')
return EDIT_URI.validation_error($('#server-username'), 'You should not enter a password if you are using API key authentication');
}
return true;
},
fill_form_map: {
'--openstack-authuri': 'openstack-authuri',
'--openstack-tenant-name': 'openstack-tenant-name',
'--openstack-apikey': 'openstack-apikey',
'--openstack-region': 'openstack-region'
},
fill_dict_map: {
'openstack-authuri': '--openstack-authuri',
'openstack-tenant-name': '--openstack-tenant-name',
'openstack-apikey': '--openstack-apikey',
'openstack-region': '--openstack-region'
}
}
APP_DATA.plugins.backend['b2'] = {
PLUGIN_B2_LINK: 'https://www.backblaze.com/b2/cloud-storage.html',
hasssl: false,
hideserverandport: true,
usernamelabel: 'B2 Account ID',
passwordlabel: 'B2 Application Key',
usernamewatermark: 'B2 Cloud Storage Account ID',
passwordwatermark: 'B2 Cloud Storage Application Key',
setup: function(dlg, div) {
var self = this;
$('#server-path-label').hide();
$('#server-path').hide();
var bucketfield = EDIT_URI.createFieldset({label: 'B2 Bucket name', name: 'b2-bucket', after: $('#server-username-and-password'), title: 'Use / to access subfolders in the bucket', watermark: 'Enter bucket name'});
var signuplink = EDIT_URI.createFieldset({'label': '&nbsp;', href: this.PLUGIN_B2_LINK, type: 'link', before: bucketfield.outer, 'title': 'Click here for the sign up page'});
signuplink.outer.css('margin-bottom', '10px');
this.bucket_field = bucketfield.field;
},
cleanup: function(dlg, div) {
$('#server-path-label').show();
$('#server-path').show();
this.bucket_field = null;
},
validate: function(dlg, values) {
if (!EDIT_URI.validate_input(values, true))
return;
if (values['server-path'] == '')
return EDIT_URI.validation_error(this.bucket_field, 'You must enter a B2 bucket name');
return true;
},
fill_form_map: {
'server-path': 'b2-bucket'
},
fill_dict_map: {
'b2-bucket': 'server-path'
}
}
APP_DATA.plugins.backend['mega'] = {
PLUGIN_MEGA_LINK: 'https://mega.co.nz',
hasssl: false,
hideserverandport: true,
usernamelabel: 'Username',
passwordlabel: 'Password',
usernamewatermark: 'Username',
passwordwatermark: 'Password',
path_field: null,
setup: function (dlg, div) {
$('#server-path-label').hide();
$('#server-path').hide();
$('#server-username').attr('placeholder', this.usernamewatermark);
$('#server-password').attr('placeholder', this.passwordwatermark);
var pathfield = EDIT_URI.createFieldset({ label: 'Path', name: 'mega-path', after: $('#server-username-and-password'), title: 'Path', watermark: 'Enter path' });
this.path_field = pathfield.field;
var signuplink = EDIT_URI.createFieldset({ 'label': '&nbsp;', href: this.PLUGIN_MEGA_LINK, type: 'link', before: $('#server-options-label'), 'title': 'Click here to sign in or register' });
signuplink.outer.css('margin-bottom', '10px');
},
cleanup: function (dlg, div) {
$('#server-path-label').show();
$('#server-path').show();
this.path_field = null;
},
validate: function (dlg, values) {
if (!EDIT_URI.validate_input(values, true))
return false;
values['server-path'] = values["mega-path"].toLowerCase();
this.path_field.val(values['server-path']);
return true;
},
fill_form_map: {
'server-path': function(dict, key, el, cfgel) {
var p = [];
if (dict['server-name'] && dict['server-name'] != '')
p.push(dict['server-name']);
if (dict['server-path'] && dict['server-path'] != '')
p.push(dict['server-path']);
p = p.join('/');
$('#mega-path').val(p);
}
},
fill_dict_map: {
'mega-path': function(dict, key, el, cfgel) {
var p = $(el).val();
dict['server-path'] = p;
dict['server-name'] = '';
}
}
}
});
@@ -1,972 +0,0 @@
$(document).ready(function() {
var curpage = 0;
var backupId = 0;
var dirSep = '/';
var pathSep = ':';
var trees = {};
var searchdata = {};
var nodedata = {};
var manualIncludes = {};
var searchTrees = {};
var commonPrefix = [];
var dbversions = {};
var isDirectRestore = false;
var includeMap = null;
var performRestore = function(tasks) {
var dlg = $('<div></div>').attr('title', 'Restoring files ...');
var cancelling = false;
var currentProgressTask = null;
var remainingTasks = tasks.length;
dlg.dialog({
autoOpen: true,
modal: true,
closeOnEscape: false,
buttons: [
{ text: 'Cancel', click: function(event, ui) {
if (confirm('Stop the restore?')) {
cancelling = true;
if (currentProgressTask != null)
APP_DATA.stopTask(currentProgressTask.taskId, true);
updatePageNav();
dlg.dialog('close');
dlg.remove();
}
}}
]
});
dlg.parent().find('.ui-dialog-titlebar-close').remove().first().remove();
var pg = $('<div></div>');
pg.progressbar({ value: false });
var pgtxt = $('<div></div>');
pgtxt.text('Sending jobs to server ...');
dlg.append(pg);
dlg.append(pgtxt);
var onAllRestoresCompleted = function() {
$(document).off('server-progress-updated', serverProgressUpdateMethod);
$(document).off('server-state-updated', serverStateUpdateMethod);
curpage = Math.min(2, curpage+1);
updatePageNav();
dlg.dialog('close');
dlg.remove();
};
var serverProgressUpdateMethod = function(e, data) {
if (currentProgressTask == null)
pgtxt.text('Waiting for restore to begin ...');
else {
if (tasks.length == 1)
pgtxt.text('Restoring files ...');
else
pgtxt.text('Restoring files (' + (tasks.length - remainingTasks) + ' of ' + tasks.length + ')');
}
};
var serverStateUpdateMethod = function(e, data) {
var activeTaskId = -1;
var queuedTasks = [];
if (cancelling)
return;
if (data.ActiveTask != null)
activeTaskId = data.ActiveTask.Item1;
if (data.SchedulerQueueIds != null)
for(var n in data.SchedulerQueueIds)
queuedTasks.push(data.SchedulerQueueIds[n].Item1);
var remaining = 0;
for(var n in tasks) {
if (tasks[n].taskId == activeTaskId) {
currentProgressTask = tasks[n];
remaining++;
continue;
}
for(var i in queuedTasks)
if (queuedTasks[i] == tasks[n].taskId) {
remaining++;
continue;
}
}
if (remaining == 0)
onAllRestoresCompleted();
};
var curTask = 0;
var registerTasks = function() {
if (curTask == tasks.length) {
pgtxt.text('Waiting for restore to begin ...');
$(document).on('server-progress-updated', serverProgressUpdateMethod);
$(document).on('server-state-updated', serverStateUpdateMethod);
return;
}
var task = tasks[curTask];
curTask++;
APP_DATA.callServer(task, function(data) {
task['taskId'] = data.TaskID;
registerTasks();
},
function(d, s, m) {
alert('Error: ' + m);
dlg.dialog('close');
dlg.remove();
});
}
registerTasks();
};
$('#restore-dialog').dialog({
minWidth: 320,
width: $('body').width > 600 ? 320 : 600,
minHeight: 480,
height: 500,
modal: true,
autoOpen: false,
closeOnEscape: true,
buttons: [
{ text: '< Previous', disabled: true, click: function(event, ui) {
curpage = Math.max(0, curpage-1);
updatePageNav();
}},
{ text: 'Next >', click: function(event, ui) {
if (curpage == 2) {
$('#restore-dialog').dialog('close');
} else if (curpage == 1) {
var restorePath = null;
var overwrite = $('#restore-overwrite-overwrite').is(':checked');
var restore_permissions = $('#restore-metadata-permissions').is(':checked');
var skip_metadata = $('#restore-metadata-none').is(':checked');
if ($('#restore-overwrite-target-other').is(':checked'))
restorePath = $('#restore-target-path').val();
var tasks = [];
for(var n in includeMap) {
var t = {
'action': 'restore-files',
time: $('#restore-version').val(),
'HTTP_METHOD': 'POST',
id: backupId,
'restore-path': restorePath,
'overwrite': overwrite,
'permissions': restore_permissions,
'skip-metadata': skip_metadata,
paths: []
};
for(var p in includeMap[n]) {
if (p.lastIndexOf(dirSep) == p.length -1)
t.paths.push(p + '*');
else
t.paths.push(p);
}
if (t.paths.length > 0)
{
t.paths = t.paths.join(pathSep);
tasks.push(t);
}
}
if (isDirectRestore) {
var backupid = null;
var dlg = APP_UTIL.create_modal_task_wait('Creating database', 'Building local database ... ', function(cancelled, taskid) {
if (!cancelled)
performRestore(tasks);
});
APP_DATA.callServer({ action: 'copy-backup-to-temp', 'id': backupId }, function(data) {
var bkid = data.ID;
for(var n in tasks)
tasks[n].id = bkid;
APP_DATA.callServer({ action: 'send-command', command: 'run-repair', 'id': bkid, 'time': $('#restore-version').val(), 'paths': tasks[0].paths, 'HTTP_METHOD': 'POST' }, function(data) {
dlg.register_updates(data.ID);
}, function(a,b,msg) {
alert('Failed to connect: ' + msg);
dlg.dialog('close');
dlg.remove();
});
}, function(a,b,msg) {
alert('Failed to connect: ' + msg);
dlg.dialog('close');
dlg.remove();
});
} else {
performRestore(tasks);
}
} else {
var els = 0;
includeMap = buildIncludeMap();
for(var t in includeMap)
for(var i in includeMap[t])
els++;
if (els == 0) {
alert('You must select at least one path to restore');
return;
}
curpage = Math.min(2, curpage+1);
updatePageNav();
}
}}
]
});
var dlg_buttons = $('#restore-dialog').parent().find('.ui-dialog-buttonpane').find('.ui-button');
var updatePageNav = function() {
if (curpage == 0) {
$('#restore-files-page').show();
$('#restore-path-page').hide();
$('#restore-complete-page').hide();
dlg_buttons.first().show();
dlg_buttons.last().button('option', 'label', 'Next >');
} else if (curpage == 1) {
$('#restore-files-page').hide();
$('#restore-path-page').show();
$('#restore-complete-page').hide();
dlg_buttons.first().show();
dlg_buttons.last().button('option', 'label', 'Restore');
} else {
$('#restore-files-page').hide();
$('#restore-path-page').hide();
$('#restore-complete-page').show();
dlg_buttons.first().hide();
dlg_buttons.last().button('option', 'label', 'OK');
}
dlg_buttons.first().button('option', 'disabled', curpage == 0);
};
$('#restore-search').watermark('Search for files & folders');
$('#restore-files-page').show();
$('#restore-path-page').hide();
$('#restore-complete-page').hide();
var colorize = function(tree, term, entry) {
var tr = tree.jstree();
$(entry || tree).find('a.jstree-anchor').each(function(i, e) {
var s = $(e);
var node = tr.get_node(s);
if (node.text) {
s.children('.search-match').remove();
var o = s.children();
s.html(replace_all_insensitive(node.text, term, '<div class="search-match">$1</div>'));
s.prepend(o);
}
});
};
var buildSearchNodes = function(time, data, search) {
var rootpath = commonPrefix[time];
if (rootpath != '' && rootpath[rootpath.length - 1] != dirSep)
rootpath += dirSep;
var rootnode = createNodeFromData(commonPrefix[time], commonPrefix[time], time, true);
rootnode.state = rootnode.state || {};
rootnode.state.opened = true;
for(var i = 0; i < data.Files.length; i++) {
var n = rootnode;
var p = rootpath;
var sp = data.Files[i].Path;
if (search && sp.toLowerCase().indexOf(search.toLowerCase()) < 0)
continue;
var isDir = sp.substr(sp.length - 1) == dirSep;
if (isDir)
sp = sp.substr(0, sp.length - 1);
var items = sp.substr(rootpath.length).split(dirSep);
for(var j = 0; j < items.length; j++) {
p += items[j] + (!isDir && j == items.length - 1 ? '' : dirSep);
var e = null;
for(var x in n.children)
if (n.children[x].filepath == p) {
e = n.children[x];
break;
}
if (e == null) {
e = createNodeFromData(p, commonPrefix[time], time, false);
if (j != items.length - 1) {
e.state = e.state || {};
e.state.opened = true;
}
if (n.children === false || n.children === true)
n.children = [];
n.children.push(e);
}
n = e;
}
}
return [rootnode];
}
var inSearch = false;
var doSearch = function(time, search) {
if (inSearch)
return;
$('#restore-search-loader').show();
inSearch = true;
var stree = searchTrees[time];
var tree = trees[time];
var buildSearchTree = function(nodes) {
var streeel = $('<div></div>');
searchTrees[time] = streeel;
$('#restore-files-tree').append(streeel);
var te = streeel.jstree({
'plugins' : [ 'checkbox' ],
'core': { 'data' : nodes }
});
colorize(streeel, search);
streeel.show();
};
if (searchdata[time]) {
var t = searchdata[time];
for(var p in t) {
if (search.indexOf(p) == 0) {
colorize(tree, search);
if (t[p].Files.length == 0) {
alert('No results matched the query');
tree.show();
} else if (stree) {
colorize(stree, search);
tree.hide();
stree.show();
} else {
buildSearchTree(buildSearchNodes(time, t[p], search));
tree.hide();
}
$('#restore-search-loader').hide();
inSearch = false;
return;
}
}
}
if (tree) {
colorize(tree, search);
tree.hide();
}
if (stree)
colorize(stree, search);
if (stree) {
stree.remove();
delete searchTrees[time];
}
$.ajax({
'url': APP_CONFIG.server_url,
headers: {'X-XSRF-Token': APP_DATA.xsrf_token},
'data': {
'action': 'search-backup-files',
'id': backupId,
'time': time,
'prefix-only': 'false',
'filter': '*' + search + '*'
},
'dataType': 'json'
})
.done(function(data, status, xhr) {
if (!searchdata[time])
searchdata[time] = {};
if (!manualIncludes[time])
manualIncludes[time] = [];
searchdata[time][search] = data;
$('#restore-search-loader').hide();
inSearch = false;
if (data.Files.length == 0) {
alert('No results matched the query');
tree.show();
return;
}
buildSearchTree(buildSearchNodes(time, data));
})
.fail(function() {
$('#restore-search-loader').hide();
inSearch = false;
alert('Search failed ...');
tree.show();
});
};
var createNodeFromData = function(path, prefix, time, rootnode) {
var disp = path.substr(prefix.length);
var isFolder = disp.lastIndexOf(dirSep) == disp.length - 1;
var icon = null;
var state = null;
if (isFolder)
disp = disp.substr(0, disp.length - 1);
else
icon = 'icon-file icon-file-' + disp.substr(disp.lastIndexOf('.')+1);
if (rootnode) {
disp = APP_DATA.getBackupName(backupId) || disp;
//state = {opened: true};
}
return {
text: disp,
filepath: path,
time: time,
children: isFolder,
state: state,
icon: icon
};
};
var loadNodes = function(node, callback, time) {
$.ajax({
'url': APP_CONFIG.server_url,
'data': {
'action': 'search-backup-files',
'id': backupId,
'time': time,
'prefix-only': node.id === '#',
'folder-contents': node.id !== '#',
'filter': node.id === '#' ? '*' : node.original.filepath,
'Prefix': node.id === '#' ? '' : node.original.filepath
},
headers: {'X-XSRF-Token': APP_DATA.xsrf_token},
'dataType': 'json'
})
.done(function(data, status, xhr) {
var nodes = [];
data.Files = data.Files || [];
for(var i = 0; i < data.Files.length; i++)
nodes.push(createNodeFromData(data.Files[i].Path, data.Prefix, time, node.id === '#'));
callback(nodes, data);
if (node.id === '#')
commonPrefix[time] = data.Files[0].Path;
});
};
var setupTree = function(time) {
var treeel = trees[time];
if (!trees[time]) {
var treeel = $('<div></div>');
trees[time] = treeel;
$('#restore-files-tree').append(treeel);
treeel.jstree({
'core': {
'data': function(node, callback) {
if (nodedata[node.id]) {
callback(nodedata[node.id]);
colorize(treeel, $('#restore-search').val());
} else {
loadNodes(node, function(nodes, data) {
callback(nodes);
if (data.Prefix == '')
treeel.jstree("open_node", treeel.find('li').first());
colorize(treeel, $('#restore-search').val());
},
time);
}
}
},
'plugins' : [ 'checkbox' ]
});
}
for(var t in trees)
if (t != time)
trees[t].hide();
else {
trees[t].show();
}
};
var buildIncludeMap = function() {
var time = $('#restore-version').val();
var m = {};
//strees = strees || trees;
var strees = [ trees[time] ];
var partialfolders = false;
if (searchTrees[time] && searchTrees[time].is(':visible')) {
partialfolders = true;
strees = [ searchTrees[time] ];
}
for(var t in strees) {
m[t] = {};
var tr = strees[t].jstree();
var roots = strees[t].children('ul').children('li');
var follow = [];
roots.each(function(i,e) {
follow.push(tr.get_node(e));
});
while(follow.length > 0) {
var n = follow.pop();
if (n.state.selected && n.original.filepath) {
// If we have partial folder matches,
// we only include the leaves
if (partialfolders) {
if (!n.children || n.children.length == 0) {
m[t][n.original.filepath] = 1;
} else {
// Non-leaf node, recurse it
for(var c in n.children)
follow.push(tr.get_node(n.children[c]));
}
} else {
m[t][n.original.filepath] = 1;
}
} else {
//TODO: This traverses the entire tree,
// we could choose only those with indeterminate,
// but that state only exists in the DOM which is
// removed when collapsed
for(var c in n.children)
follow.push(tr.get_node(n.children[c]));
}
}
}
return m;
};
$('#restore-dialog').on('setup-dialog', function(e, data) {
backupId = data.id;
isDirectRestore = data.isDirectRestore;
trees = { };
searchdata = { };
dbversions = { };
$('#restore-files-tree').empty();
$('#restore-search-loader').hide();
$('#restore-form').each(function(i, e) { e.reset(); });
$('#restore-overwrite-overwrite').each(function(i, e) { e.checked = true; });
$('#restore-overwrite-target-original').each(function(i, e) { e.checked = true; });
$('#restore-metadata-timestamps').each(function(i, e) { e.checked = true; });
curpage = 0;
updatePageNav();
APP_DATA.getServerConfig(function(serverdata) {
// TODO: Should be the backup data versions, not the host OS
dirSep = serverdata.DirectorySeparator;
pathSep = serverdata.PathSeparator;
APP_DATA.callServer({ 'action': 'list-backup-sets', id: backupId, 'from-remote-only': isDirectRestore }, function(data, success, message) {
$('#restore-version').empty();
if (data == null || data.length == 0) {
alert('Failed to get list of backup times');
$('#restore-dialog').dialog('close');
}
for(var n in data)
dbversions[data[n].Time] = isDirectRestore ? n : true;
dbversions[data[0].Time] = true;
var latest_group = $('<optgroup></optgroup>').attr('label', 'Newest - ' + $.timeago(data[0].Time));
latest_group.append($("<option></option>").attr("value", data[0].Time).text($.toDisplayDateAndTime($.parseDate(data[0].Time))));
$('#restore-version').append(latest_group);
var dateStamp = function(a) { return a.getFullYear() * 10000 + a.getMonth() * 100 + a.getDate(); }
var now = new Date();
var today = dateStamp(now);
var yesterday = dateStamp(new Date(new Date().setDate(now.getDate() - 1)));
var week = dateStamp(new Date(new Date().setDate(now.getDate() - 7)));
var thismonth = dateStamp(new Date(new Date().setMonth(now.getMonth() - 1)));
var lastmonth = dateStamp(new Date(new Date().setMonth(now.getMonth() - 2)));
var dateBuckets = [
{text:'Today', stamp: today, items: []},
{text: 'Yesterday', stamp: yesterday, items: []},
{text: 'This week', stamp: week, items: []},
{text: 'This month', stamp: thismonth, items: []},
{text: 'Last month', stamp: lastmonth, items: []}
];
var yearBuckets = { };
for(var i in data) {
if (i == '0')
continue;
var dt = $.parseDate(data[i].Time);
var stamp = dateStamp(dt);
var inserted = false;
for(var t in dateBuckets) {
if (stamp >= dateBuckets[t].stamp) {
dateBuckets[t].items.push(data[i])
inserted = true;
break;
}
}
if (!inserted) {
var y = dt.getFullYear() + '';
if (yearBuckets[y] == null) {
yearBuckets[y] = {text: y, stamp: dateStamp(new Date(dt.getFullYear(), 0, 1)), items: []};
dateBuckets.push(yearBuckets[y]);
}
yearBuckets[y].items.push(data[i]);
}
}
for(var n in dateBuckets) {
var e = dateBuckets[n];
if (e.items.length == 0)
continue;
var group = $('<optgroup></optgroup>').attr('label', e.text);
for(var d in e.items)
group.append($("<option></option>").attr("value", e.items[d].Time).text($.toDisplayDateAndTime($.parseDate(e.items[d].Time))));
$('#restore-version').append(group);
}
$('#restore-version').trigger('change');
}, function(data, success, message) {
alert('Failed to get list of backup times:\n' + message);
$('#restore-dialog').dialog('close');
});
}, function() {
alert('Failed to get server config');
$('#restore-dialog').dialog('close');
});
});
var doQuickSearch = function(search) {
var search = $('#restore-search').val();
var time = $('#restore-version').val();
if (searchdata[time]) {
for(var k in searchdata[time]) {
if (search.indexOf(k) == 0) {
colorize(trees[time], search);
return true;
}
}
}
return false;
};
$('#restore-search').keypress(function(e) {
var time = $('#restore-version').val();
if (e.which == 13 && $('#restore-search').val().trim() != '')
doSearch(time, $('#restore-search').val());
else if ($('#restore-search').val().trim() != '') {
colorize(trees[time], $('#restore-search').val());
if (searchTrees[time])
colorize(searchTrees[time], $('#restore-search').val());
}
});
$('#restore-search').keyup(function(e) {
var time = $('#restore-version').val();
colorize(trees[time], $('#restore-search').val());
if (searchTrees[time])
colorize(searchTrees[time], $('#restore-search').val());
});
$('#restore-search').change(function(e) {
var time = $('#restore-version').val();
colorize(trees[time], $('#restore-search').val());
if (searchTrees[time])
colorize(searchTrees[time], $('#restore-search').val());
});
$('#restore-search').on('search', function(e) {
var time = $('#restore-version').val();
if ($('#restore-search').val() == '') {
trees[time].show();
if (searchTrees[time]) {
searchTrees[time].remove();
delete searchTrees[time];
}
colorize(trees[time], $('#restore-search').val());
} else
doSearch(time, $('#restore-search').val());
});
$('#restore-version').change(function() {
$('#restore-search').val('');
var selectedversion = $('#restore-version').val();
if (dbversions[selectedversion] !== true) {
// Need to patch the db with data
var dlg = APP_UTIL.create_modal_task_wait('Updating database', 'Updating local database ... ', function(cancelled, taskid) {
if (!cancelled) {
dbversions[selectedversion] = true;
setupTree(selectedversion);
}
});
APP_DATA.callServer({ action: 'send-command', command: 'run-repair-update', 'only-paths': true, 'id': backupId, 'time': selectedversion }, function(data) {
dlg.register_updates(data.ID);
}, function(a,b,msg) {
alert('Failed to connect: ' + msg);
dlg.dialog('close');
dlg.remove();
});
} else {
setupTree(selectedversion);
}
});
$('#restore-target-path').keypress(function() { $('#restore-overwrite-target-other').each(function(i,e) { e.checked = true; }); });
$('#restore-target-path').change(function() { $('#restore-overwrite-target-other').each(function(i,e) { e.checked = true; }); });
$('#restore-overwrite-target-other').click(function() { $('#restore-target-path-browse').trigger('click'); } );
$('#restore-target-path-browse').click(function(e) {
$.browseForFolder({
title: 'Select restore folder',
resolvePath: true,
multiSelect: false,
callback: function(path, display) {
$('#restore-target-path').val(path);
$('#restore-overwrite-target-other').each(function(i, e) { e.checked = true; });
}
});
});
$('#restore-direct-uri').watermark('webdavs://user:pass@example.com:995/backup?option=true');
$('#restore-direct-encryption-password').watermark('Enter backup passphrase, if any');
$('#restore-direct-advanced-options').watermark('Enter one option per line in command-line format, eg. --prefix=backup');
$('#restore-direct-uri-label').click(function() {
$('#connection-uri-dialog').dialog('open');
$('#connection-uri-dialog').trigger('setup-dialog', $('#restore-direct-uri'));
});
$('#restore-direct-dialog').dialog({
minWidth: 320,
width: $('body').width > 600 ? 320 : 600,
minHeight: 480,
height: 500,
modal: true,
autoOpen: false,
closeOnEscape: true,
buttons: [
{ text: 'Cancel', click: function(event, ui) {
$(this).dialog('close');
}},
{ text: 'Connect', click: function(event, ui) {
var uri = $('#restore-direct-uri').val();
var passphrase = $('#restore-direct-encryption-password').val();
if (uri == null || uri.trim().length == 1) {
alert('You must supply a connection URI');
return;
}
var options = {};
if (passphrase != null && passphrase.trim().length > 0)
options['--passphrase'] = passphrase;
else
options['--no-encryption'] = 'true';
if (!EDIT_URI.parse_extra_options($('#restore-direct-advanced-options'), options))
return;
var settings = [];
for(var k in options)
settings.push({'Name': k, 'Value': options[k]});
var item = {
'Schedule': null,
'Backup': {
'TargetURL': uri,
'Settings': settings
}
};
var self = this;
var backupid = null;
var dlg = APP_UTIL.create_modal_task_wait('Creating database', 'Building local database ... ', function(cancelled, taskid) {
if (!cancelled) {
APP_DATA.restoreBackup(backupid, true);
$(self).dialog('close');
}
});
APP_DATA.testConnection(uri, function() {
APP_DATA.addBackup(item, function(data) {
backupid = data.ID;
APP_DATA.callServer({ action: 'send-command', command: 'run-repair', 'only-paths': true, 'id': backupid, 'version': 0 }, function(data) {
dlg.register_updates(data.ID);
}, function(a,b,msg) {
alert('Failed to connect: ' + msg);
dlg.dialog('close');
dlg.remove();
});
}, function(a,b,msg) {
alert('Failed to create a backup set: ' + msg);
dlg.dialog('close');
dlg.remove();
}, {'temporary': true});
}, function(a,b,msg) {
alert('Failed to connect: ' + msg);
dlg.dialog('close');
dlg.remove();
});
}}
]
});
$('#restore-direct-options-dialog').dialog({
minWidth: 320,
width: $('body').width > 600 ? 320 : 600,
minHeight: 480,
height: 500,
modal: true,
autoOpen: false,
closeOnEscape: true,
buttons: [
{ text: 'Close', disabled: false, click: function(event, ui) {
$(this).dialog('close');
}}
]
});
$('#restore-direct-options-link').click(function() {
APP_DATA.getServerConfig(function(data) {
$('#restore-direct-options-dialog').dialog('open');
var baseOpts = data.Options;
for(var n in data.BackendModules)
baseOpts = baseOpts.concat(data.BackendModules[n].Options);
for(var n in data.CompressionModules)
baseOpts = baseOpts.concat(data.CompressionModules[n].Options);
for(var n in data.EncryptionModules)
baseOpts = baseOpts.concat(data.EncryptionModules[n].Options);
for(var n in data.GenericModules)
baseOpts = baseOpts.concat(data.GenericModules[n].Options);
$('#restore-direct-options-dialog').trigger('configure', { Options: baseOpts, callback: function(id) {
$('#restore-direct-options-dialog').dialog('close');
var txt = $('#restore-direct-advanced-options').val().trim();
if (txt.length > 0)
txt += '\n';
var defaultvalue = '';
for(var o in data.Options)
if (data.Options[o].Name == id) {
defaultvalue = data.Options[o].DefaultValue;
break;
}
txt += '--' + id + '=' + defaultvalue;
$('#restore-direct-advanced-options').val('').val(txt);
$('#restore-direct-advanced-options').focus();
}});
}, function() {
});
});
$('#restore-direct-options-dialog').on('configure', function(e, data) {
$('#restore-direct-options-dialog').empty();
var s = data.Options.sort(function(a, b){
if (a == null)
return -1;
if (b == null)
return 1;
if (a == null && b == null)
return 0;
if(a.Name < b.Name) return -1;
if(a.Name > b.Name) return 1;
return 0;
});
//Fill with jQuery template
$.tmpl($('#backup-option-template'), s).prependTo($('#restore-direct-options-dialog'));
$('#restore-direct-options-dialog').find('.backup-option-link').click(function(e) {
data.callback(e.target.id);
});
$('#restore-direct-options-dialog').find('.backup-option-long').each(function(i, e) {
$(e).html(nl2br($(e).html()));
});
});
});
File diff suppressed because one or more lines are too long
@@ -1,148 +0,0 @@
/*
* Common style config
*/
body {
background-color: #f0f0f0;
border: 0px none;
margin: 0px;
padding: 0px;
font-family: 'Source Sans Pro', sans-serif;
min-width: 320px;
font-size: 75%;
}
textarea.pre-style-text, .pre-style-text {
white-space: pre;
overflow: auto;
word-wrap: normal;
font-family: "Courier New", Courier, monospace;
}
.content-wrap {
margin: 0 auto;
box-sizing: border-box;
max-width: 1100px
}
.content-wrap.padded {
padding-left: 20px;
padding-right: 20px;
}
.ui-widget {
font-family: 'Source Sans Pro', sans-serif;
}
.action-link, .action-links li {
text-decoration: underline;
color: #56acbb;
font-size: 12pt;
cursor: pointer;
}
.hint-text {
color: #9b9b9b;
font-size: 12pt;
}
.hint-text-caption {
font-weight: bold;
color: #9b9b9b;
font-size: 12pt;
}
.caption-text {
color: #68845f;
font-weight: bold;
font-size: 18pt;
}
.progressbar-background {
background-color: #b1bead;
}
.menu {
background-color: rgba(255, 255, 255, 0.9);
position: absolute;
display: none;
list-style: none;
border: 1px solid #9b9b9b;
margin: 0px;
padding: 0px;
border-radius: 3px;
white-space: nowrap;
z-index: 10000;
}
.menu li {
cursor: pointer;
}
.large-loader-icon {
width: 66px;
height: 66px;
margin: auto;
background: url('../images/ajax-loader-66.gif') center center no-repeat;
}
.medium-loader-icon {
width: 32px;
height: 32px;
background: url("../images/ajax-loader-32.gif") center center no-repeat;
}
.small-loader-icon {
width: 16px;
height: 16px;
background: url("../images/ajax-loader-16.gif") center center no-repeat;
}
.button-area {
float: right;
padding-bottom: 10px;
padding-top: 10px;
}
.clearfix {
clear: both;
}
.password-strength-0 {
color: #ff0000
}
.password-strength-1 {
color: #ff7700
}
.password-strength-2 {
color: #aaaa00
}
.password-strength-3 {
color: #007700
}
.password-strength-4 {
color: #427e27;
}
.password-strength-unknown {
color: #999999
}
.password-mismatch {
color: #ff0000;
}
a.jstree-anchor > i.icon-file.jstree-icon {
background-image: url('/images/generic-file.png');
background-position: 0px 0px;
}
a.jstree-anchor > i.icon-clock.jstree-icon {
background-image: url('/images/clock.png');
background-position: 0px 0px;
}
a.jstree-anchor > i.icon-file.jstree-icon.icon-file-log { background-image: url('/control.cgi?action=get-system-icon&ext=log'); }
@@ -1,302 +0,0 @@
/*
* CSS config for the edit dialog
*/
.edit-dialog label:before {
clear: both;
}
.edit-dialog {
float: left;
}
.edit-dialog label {
min-width: 250px;
display: inline-block;
}
.edit-dialog-label {
min-width: 200px;
line-height: 26px;
clear: both;
float: left;
}
.edit-dialog input, .edit-dialog textarea, .edit-dialog select {
background: none;
border-color: #c0c0c0;
}
.edit-dialog input, .edit-dialog select {
width: 330px;
}
.edit-dialog textarea {
max-width: 330px;
width: 330px;
}
.input-block {
clear: both;
margin-top: 10px;
overflow: hidden;
position: relative;
}
.edit-tab-general > .input-block:first-child {
margin-top: 0;
}
.field-group {
display: inline-block;
}
.button-area {
clear: both;
position: absolute;
bottom: 0px;
right: 0px;
float: right;
}
.inline-links {
margin: 0;
padding: 0;
}
.inline-links > li {
border-left: 1px solid #7d7d7d;
display: inline-block;
margin: 0;
padding: 0 10px;
}
.inline-links > li:first-child {
border-left: none;
padding-left: 5px;
}
.field-group .inline-links {
margin-top: 5px;
}
#encryption-area {
clear: both;
}
#backend-type {
width: 140px;
}
#server-port {
width: 80px;
}
#server-name {
width: 165px;
}
#server-use-ssl {
width: auto;
margin-left: 10px;
}
.checkbox-label {
display: inline-block;
margin-top: 2px;
}
#source-folder-paths {
margin-top: 10px;
position: relative;
padding: 10px;
background-color: lightgray;
margin-bottom: 10px;
border-radius: 3px;
overflow: hidden;
}
#source-folder-paths.empty {
padding: 20px;
}
#source-folder-paths > div.source-folder {
padding: 5px 25px 5px 5px;
background-color: white;
border-radius: 3px;
display: inline-block;
margin: 8px;
position: relative;
float: left;
}
#source-folder-paths > div.source-folder .focused, #source-folder-paths > div.source-folder:hover {
/*background-color: grey;
color: black;*/
}
#source-folder-paths > div.source-folder.path-valid {
}
#source-folder-paths > div.source-folder.path-invalid {
background-color: #ffcccc;
}
.source-folder-close-icon {
width: 16px;
height: 16px;
background-position: -80px -128px;
background-image: url(green-theme/images/ui-icons_365724_256x240.png);
background-repeat: no-repeat;
position: absolute;
top: 5px;
right: 5px;
cursor: pointer;
}
.source-folder-close-icon:hover {
background-color: red;
}
#source-folder-browser {
clear: both;
/*height: 160px;*/
overflow: auto;
}
#source-folder-path-text {
/*max-width: 205px;*/
width: 70%;
margin-top: 6px;
}
#source-folder-path-add {
margin-right: 0px;
float: right;
}
#source-folder-droptarget {
width: 100%;
height: 100%;
position: absolute;
display: block;
top: 0;
left: 0;
}
#use-scheduled-run {
float: left;
width: auto;
margin-right: 10px;
}
#next-run-time, #next-run-date, #repeat-run-number, #repeat-run-multiplier {
width: 165px;
}
#dblock-size-number, #dblock-size-multiplier, #keep-time-type, #keep-time-number, #keep-time-multiplier {
width: 120px;
}
#dblock-size-multiplier {
width: 145px;
}
#keep-time-multiplier {
width: 80px;
}
#dblock-size-number {
width: 178px;
}
#keep-time-type {
width: 180px;
}
#keep-time-number {
width: 60px;
}
#dblock-size-number {
width: 178px;
}
input.simple-checkbox {
width: auto;
float: none;
}
.days-label {
display: inline-block;
}
.input-wrapper {
float: left;
}
.hint-line-last {
margin-bottom: 20px;
}
#edit-tab-schedule > div.clearfix, #edit-tab-options > div.clearfix {
height: 10px;
}
#edit-dialog {
width: 100%;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
}
.ui-tabs-nav {
border-top-right-radius: 0px;
border-top-left-radius: 0px;
}
.edit-dialog-hint-text {
width: 100%;
}
#source-folder-paths.file-drag-target {
background-color: #00ff00;
}
#backup-options-link div.ui-icon-info, #server-options-label div.ui-icon-info {
display: inline-block;
}
#server-options {
max-width: none;
width: 100%;
}
.backup-option-name {
font-weight: bold;
color: darkgreen;
}
.backup-option-short, .backup-option-type, .backup-option-default {
display: inline;
}
.backup-option-summary, .backup-option-long {
margin-left: 5px;
}
.backup-option-long {
margin-top: 5px;
margin-bottom: 10px;
}
input.server-path-file {
width: 275px;
}
input.browse-button {
padding-top: 0px;
padding-bottom: 0px;
width: auto;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

@@ -1,916 +0,0 @@
/* jsTree default theme */
.jstree-node,
.jstree-children,
.jstree-container-ul {
display: block;
margin: 0;
padding: 0;
list-style-type: none;
list-style-image: none;
}
.jstree-node {
white-space: nowrap;
}
.jstree-anchor {
display: inline-block;
color: black;
white-space: nowrap;
padding: 0 4px 0 1px;
margin: 0;
vertical-align: top;
}
.jstree-anchor:focus {
outline: 0;
}
.jstree-anchor,
.jstree-anchor:link,
.jstree-anchor:visited,
.jstree-anchor:hover,
.jstree-anchor:active {
text-decoration: none;
color: inherit;
}
.jstree-icon {
display: inline-block;
text-decoration: none;
margin: 0;
padding: 0;
vertical-align: top;
text-align: center;
}
.jstree-icon:empty {
display: inline-block;
text-decoration: none;
margin: 0;
padding: 0;
vertical-align: top;
text-align: center;
}
.jstree-ocl {
cursor: pointer;
}
.jstree .jstree-open > .jstree-children {
display: block;
}
.jstree .jstree-closed > .jstree-children,
.jstree .jstree-leaf > .jstree-children {
display: none;
}
.jstree-anchor > .jstree-themeicon {
margin-right: 2px;
}
.jstree-no-icons .jstree-themeicon,
.jstree-anchor > .jstree-themeicon-hidden {
display: none;
}
.jstree-rtl .jstree-anchor {
padding: 0 1px 0 4px;
}
.jstree-rtl .jstree-anchor > .jstree-themeicon {
margin-left: 2px;
margin-right: 0;
}
.jstree-rtl .jstree-node {
margin-left: 0;
}
.jstree-rtl .jstree-container-ul > .jstree-node {
margin-right: 0;
}
.jstree-wholerow-ul {
position: relative;
display: inline-block;
min-width: 100%;
}
.jstree-wholerow-ul .jstree-anchor,
.jstree-wholerow-ul .jstree-icon {
position: relative;
}
.jstree-wholerow-ul .jstree-wholerow {
width: 100%;
cursor: pointer;
position: absolute;
left: 0;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.vakata-context {
display: none;
}
.vakata-context,
.vakata-context ul {
margin: 0;
padding: 2px;
position: absolute;
background: #f5f5f5;
border: 1px solid #979797;
-moz-box-shadow: 5px 5px 4px -4px #666666;
-webkit-box-shadow: 2px 2px 2px #999999;
box-shadow: 2px 2px 2px #999999;
}
.vakata-context ul {
list-style: none;
left: 100%;
margin-top: -2.7em;
margin-left: -4px;
}
.vakata-context .vakata-context-right ul {
left: auto;
right: 100%;
margin-left: auto;
margin-right: -4px;
}
.vakata-context li {
list-style: none;
display: inline;
}
.vakata-context li > a {
display: block;
padding: 0 2em 0 2em;
text-decoration: none;
width: auto;
color: black;
white-space: nowrap;
line-height: 2.4em;
-moz-text-shadow: 1px 1px 0 white;
-webkit-text-shadow: 1px 1px 0 white;
text-shadow: 1px 1px 0 white;
-moz-border-radius: 1px;
-webkit-border-radius: 1px;
border-radius: 1px;
}
.vakata-context li > a:hover {
position: relative;
background-color: #e8eff7;
-moz-box-shadow: 0 0 2px #0a6aa1;
-webkit-box-shadow: 0 0 2px #0a6aa1;
box-shadow: 0 0 2px #0a6aa1;
}
.vakata-context li > a.vakata-context-parent {
background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
background-position: right center;
background-repeat: no-repeat;
}
.vakata-context li > a:focus {
outline: 0;
}
.vakata-context .vakata-context-hover > a {
position: relative;
background-color: #e8eff7;
-moz-box-shadow: 0 0 2px #0a6aa1;
-webkit-box-shadow: 0 0 2px #0a6aa1;
box-shadow: 0 0 2px #0a6aa1;
}
.vakata-context .vakata-context-separator a,
.vakata-context .vakata-context-separator a:hover {
background: white;
border: 0;
border-top: 1px solid #e2e3e3;
height: 1px;
min-height: 1px;
max-height: 1px;
padding: 0;
margin: 0 0 0 2.4em;
border-left: 1px solid #e0e0e0;
-moz-text-shadow: 0 0 0 transparent;
-webkit-text-shadow: 0 0 0 transparent;
text-shadow: 0 0 0 transparent;
-moz-box-shadow: 0 0 0 transparent;
-webkit-box-shadow: 0 0 0 transparent;
box-shadow: 0 0 0 transparent;
-moz-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
}
.vakata-context .vakata-contextmenu-disabled a,
.vakata-context .vakata-contextmenu-disabled a:hover {
color: silver;
background-color: transparent;
border: 0;
box-shadow: 0 0 0;
}
.vakata-context li > a > i {
text-decoration: none;
display: inline-block;
width: 2.4em;
height: 2.4em;
background: transparent;
margin: 0 0 0 -2em;
vertical-align: top;
text-align: center;
line-height: 2.4em;
}
.vakata-context li > a > i:empty {
width: 2.4em;
line-height: 2.4em;
}
.vakata-context li > a .vakata-contextmenu-sep {
display: inline-block;
width: 1px;
height: 2.4em;
background: white;
margin: 0 0.5em 0 0;
border-left: 1px solid #e2e3e3;
}
.vakata-context .vakata-contextmenu-shortcut {
font-size: 0.8em;
color: silver;
opacity: 0.5;
display: none;
}
.vakata-context-rtl ul {
left: auto;
right: 100%;
margin-left: auto;
margin-right: -4px;
}
.vakata-context-rtl li > a.vakata-context-parent {
background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
background-position: left center;
background-repeat: no-repeat;
}
.vakata-context-rtl .vakata-context-separator > a {
margin: 0 2.4em 0 0;
border-left: 0;
border-right: 1px solid #e2e3e3;
}
.vakata-context-rtl .vakata-context-left ul {
right: auto;
left: 100%;
margin-left: -4px;
margin-right: auto;
}
.vakata-context-rtl li > a > i {
margin: 0 -2em 0 0;
}
.vakata-context-rtl li > a .vakata-contextmenu-sep {
margin: 0 0 0 0.5em;
border-left-color: white;
background: #e2e3e3;
}
#jstree-marker {
position: absolute;
top: 0;
left: 0;
margin: 0;
padding: 0;
border-right: 0;
border-top: 5px solid transparent;
border-bottom: 5px solid transparent;
border-left: 5px solid;
width: 0;
height: 0;
font-size: 0;
line-height: 0;
}
#jstree-dnd {
line-height: 16px;
margin: 0;
padding: 4px;
}
#jstree-dnd .jstree-icon,
#jstree-dnd .jstree-copy {
display: inline-block;
text-decoration: none;
margin: 0 2px 0 0;
padding: 0;
width: 16px;
height: 16px;
}
#jstree-dnd .jstree-ok {
background: green;
}
#jstree-dnd .jstree-er {
background: red;
}
#jstree-dnd .jstree-copy {
margin: 0 2px 0 2px;
}
.jstree-default .jstree-node,
.jstree-default .jstree-icon {
background-repeat: no-repeat;
background-color: transparent;
}
.jstree-default .jstree-anchor,
.jstree-default .jstree-wholerow {
transition: background-color 0.15s, box-shadow 0.15s;
}
.jstree-default .jstree-hovered {
background: #e7f4f9;
border-radius: 2px;
box-shadow: inset 0 0 1px #ccc;
}
.jstree-default .jstree-clicked {
background: #beebff;
border-radius: 2px;
box-shadow: inset 0 0 1px #999;
}
.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon {
display: none;
}
.jstree-default .jstree-disabled {
background: transparent;
color: #666;
}
.jstree-default .jstree-disabled.jstree-hovered {
background: transparent;
box-shadow: none;
}
.jstree-default .jstree-disabled.jstree-clicked {
background: #efefef;
}
.jstree-default .jstree-disabled > .jstree-icon {
opacity: 0.8;
filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
/* Firefox 10+ */
filter: gray;
/* IE6-9 */
-webkit-filter: grayscale(100%);
/* Chrome 19+ & Safari 6+ */
}
.jstree-default .jstree-search {
font-style: italic;
color: #8b0000;
font-weight: bold;
}
.jstree-default .jstree-no-checkboxes .jstree-checkbox {
display: none !important;
}
.jstree-default.jstree-checkbox-no-clicked .jstree-clicked {
background: transparent;
box-shadow: none;
}
.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
background: #e7f4f9;
}
.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
background: transparent;
}
.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
background: #e7f4f9;
}
#jstree-dnd.jstree-default .jstree-ok,
#jstree-dnd.jstree-default .jstree-er {
background-image: url("32px.png");
background-repeat: no-repeat;
background-color: transparent;
}
#jstree-dnd.jstree-default i {
background: transparent;
width: 16px;
height: 16px;
}
#jstree-dnd.jstree-default .jstree-ok {
background-position: -9px -71px;
}
#jstree-dnd.jstree-default .jstree-er {
background-position: -39px -71px;
}
.jstree-default > .jstree-striped {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
}
.jstree-default > .jstree-wholerow-ul .jstree-hovered,
.jstree-default > .jstree-wholerow-ul .jstree-clicked {
background: transparent;
box-shadow: none;
border-radius: 0;
}
.jstree-default .jstree-wholerow {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.jstree-default .jstree-wholerow-hovered {
background: #e7f4f9;
}
.jstree-default .jstree-wholerow-clicked {
background: #beebff;
background: -moz-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #beebff), color-stop(100%, #a8e4ff));
background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
background: -o-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
background: -ms-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%);
/*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );*/
}
.jstree-default .jstree-node {
min-height: 24px;
line-height: 24px;
margin-left: 24px;
min-width: 24px;
}
.jstree-default .jstree-anchor {
line-height: 24px;
height: 24px;
}
.jstree-default .jstree-icon {
width: 24px;
height: 24px;
line-height: 24px;
}
.jstree-default .jstree-icon:empty {
width: 24px;
height: 24px;
line-height: 24px;
}
.jstree-default.jstree-rtl .jstree-node {
margin-right: 24px;
}
.jstree-default .jstree-wholerow {
height: 24px;
}
.jstree-default .jstree-node,
.jstree-default .jstree-icon {
background-image: url("32px.png");
}
.jstree-default .jstree-node {
background-position: -292px -4px;
background-repeat: repeat-y;
}
.jstree-default .jstree-last {
background: transparent;
}
.jstree-default .jstree-open > .jstree-ocl {
background-position: -132px -4px;
}
.jstree-default .jstree-closed > .jstree-ocl {
background-position: -100px -4px;
}
.jstree-default .jstree-leaf > .jstree-ocl {
background-position: -68px -4px;
}
.jstree-default .jstree-anchor > .jstree-themeicon {
background-position: -260px -4px;
}
.jstree-default > .jstree-no-dots .jstree-node,
.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl {
background: transparent;
}
.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl {
background-position: -36px -4px;
}
.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl {
background-position: -4px -4px;
}
.jstree-default .jstree-disabled {
background: transparent;
}
.jstree-default .jstree-disabled.jstree-hovered {
background: transparent;
}
.jstree-default .jstree-disabled.jstree-clicked {
background: #efefef;
}
.jstree-default .jstree-checkbox {
background-position: -164px -4px;
}
.jstree-default .jstree-checkbox:hover {
background-position: -164px -36px;
}
.jstree-default .jstree-clicked > .jstree-checkbox {
background-position: -228px -4px;
}
.jstree-default .jstree-clicked > .jstree-checkbox:hover {
background-position: -228px -36px;
}
.jstree-default .jstree-anchor > .jstree-undetermined {
background-position: -196px -4px;
}
.jstree-default .jstree-anchor > .jstree-undetermined:hover {
background-position: -196px -36px;
}
.jstree-default > .jstree-striped {
background-size: auto 48px;
}
.jstree-default.jstree-rtl .jstree-node {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
background-position: 100% 1px;
background-repeat: repeat-y;
}
.jstree-default.jstree-rtl .jstree-last {
background: transparent;
}
.jstree-default.jstree-rtl .jstree-open > .jstree-ocl {
background-position: -132px -36px;
}
.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl {
background-position: -100px -36px;
}
.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl {
background-position: -68px -36px;
}
.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node,
.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
background: transparent;
}
.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
background-position: -36px -36px;
}
.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
background-position: -4px -36px;
}
.jstree-default .jstree-themeicon-custom {
background-color: transparent;
background-image: none;
}
.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl {
background: url("throbber.gif") center center no-repeat;
}
.jstree-default.jstree-rtl .jstree-node {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
}
.jstree-default.jstree-rtl .jstree-last {
background: transparent;
}
.jstree-default-small .jstree-node {
min-height: 18px;
line-height: 18px;
margin-left: 18px;
min-width: 18px;
}
.jstree-default-small .jstree-anchor {
line-height: 18px;
height: 18px;
}
.jstree-default-small .jstree-icon {
width: 18px;
height: 18px;
line-height: 18px;
}
.jstree-default-small .jstree-icon:empty {
width: 18px;
height: 18px;
line-height: 18px;
}
.jstree-default-small.jstree-rtl .jstree-node {
margin-right: 18px;
}
.jstree-default-small .jstree-wholerow {
height: 18px;
}
.jstree-default-small .jstree-node,
.jstree-default-small .jstree-icon {
background-image: url("32px.png");
}
.jstree-default-small .jstree-node {
background-position: -295px -7px;
background-repeat: repeat-y;
}
.jstree-default-small .jstree-last {
background: transparent;
}
.jstree-default-small .jstree-open > .jstree-ocl {
background-position: -135px -7px;
}
.jstree-default-small .jstree-closed > .jstree-ocl {
background-position: -103px -7px;
}
.jstree-default-small .jstree-leaf > .jstree-ocl {
background-position: -71px -7px;
}
.jstree-default-small .jstree-anchor > .jstree-themeicon {
background-position: -263px -7px;
}
.jstree-default-small > .jstree-no-dots .jstree-node,
.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
background: transparent;
}
.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl {
background-position: -39px -7px;
}
.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
background-position: -7px -7px;
}
.jstree-default-small .jstree-disabled {
background: transparent;
}
.jstree-default-small .jstree-disabled.jstree-hovered {
background: transparent;
}
.jstree-default-small .jstree-disabled.jstree-clicked {
background: #efefef;
}
.jstree-default-small .jstree-checkbox {
background-position: -167px -7px;
}
.jstree-default-small .jstree-checkbox:hover {
background-position: -167px -39px;
}
.jstree-default-small .jstree-clicked > .jstree-checkbox {
background-position: -231px -7px;
}
.jstree-default-small .jstree-clicked > .jstree-checkbox:hover {
background-position: -231px -39px;
}
.jstree-default-small .jstree-anchor > .jstree-undetermined {
background-position: -199px -7px;
}
.jstree-default-small .jstree-anchor > .jstree-undetermined:hover {
background-position: -199px -39px;
}
.jstree-default-small > .jstree-striped {
background-size: auto 36px;
}
.jstree-default-small.jstree-rtl .jstree-node {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
background-position: 100% 1px;
background-repeat: repeat-y;
}
.jstree-default-small.jstree-rtl .jstree-last {
background: transparent;
}
.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl {
background-position: -135px -39px;
}
.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl {
background-position: -103px -39px;
}
.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl {
background-position: -71px -39px;
}
.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node,
.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
background: transparent;
}
.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
background-position: -39px -39px;
}
.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
background-position: -7px -39px;
}
.jstree-default-small .jstree-themeicon-custom {
background-color: transparent;
background-image: none;
}
.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
background: url("throbber.gif") center center no-repeat;
}
.jstree-default-small.jstree-rtl .jstree-node {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
}
.jstree-default-small.jstree-rtl .jstree-last {
background: transparent;
}
.jstree-default-large .jstree-node {
min-height: 32px;
line-height: 32px;
margin-left: 32px;
min-width: 32px;
}
.jstree-default-large .jstree-anchor {
line-height: 32px;
height: 32px;
}
.jstree-default-large .jstree-icon {
width: 32px;
height: 32px;
line-height: 32px;
}
.jstree-default-large .jstree-icon:empty {
width: 32px;
height: 32px;
line-height: 32px;
}
.jstree-default-large.jstree-rtl .jstree-node {
margin-right: 32px;
}
.jstree-default-large .jstree-wholerow {
height: 32px;
}
.jstree-default-large .jstree-node,
.jstree-default-large .jstree-icon {
background-image: url("32px.png");
}
.jstree-default-large .jstree-node {
background-position: -288px 0px;
background-repeat: repeat-y;
}
.jstree-default-large .jstree-last {
background: transparent;
}
.jstree-default-large .jstree-open > .jstree-ocl {
background-position: -128px 0px;
}
.jstree-default-large .jstree-closed > .jstree-ocl {
background-position: -96px 0px;
}
.jstree-default-large .jstree-leaf > .jstree-ocl {
background-position: -64px 0px;
}
.jstree-default-large .jstree-anchor > .jstree-themeicon {
background-position: -256px 0px;
}
.jstree-default-large > .jstree-no-dots .jstree-node,
.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
background: transparent;
}
.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl {
background-position: -32px 0px;
}
.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
background-position: 0px 0px;
}
.jstree-default-large .jstree-disabled {
background: transparent;
}
.jstree-default-large .jstree-disabled.jstree-hovered {
background: transparent;
}
.jstree-default-large .jstree-disabled.jstree-clicked {
background: #efefef;
}
.jstree-default-large .jstree-checkbox {
background-position: -160px 0px;
}
.jstree-default-large .jstree-checkbox:hover {
background-position: -160px -32px;
}
.jstree-default-large .jstree-clicked > .jstree-checkbox {
background-position: -224px 0px;
}
.jstree-default-large .jstree-clicked > .jstree-checkbox:hover {
background-position: -224px -32px;
}
.jstree-default-large .jstree-anchor > .jstree-undetermined {
background-position: -192px 0px;
}
.jstree-default-large .jstree-anchor > .jstree-undetermined:hover {
background-position: -192px -32px;
}
.jstree-default-large > .jstree-striped {
background-size: auto 64px;
}
.jstree-default-large.jstree-rtl .jstree-node {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
background-position: 100% 1px;
background-repeat: repeat-y;
}
.jstree-default-large.jstree-rtl .jstree-last {
background: transparent;
}
.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl {
background-position: -128px -32px;
}
.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl {
background-position: -96px -32px;
}
.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl {
background-position: -64px -32px;
}
.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node,
.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
background: transparent;
}
.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
background-position: -32px -32px;
}
.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
background-position: 0px -32px;
}
.jstree-default-large .jstree-themeicon-custom {
background-color: transparent;
background-image: none;
}
.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
background: url("throbber.gif") center center no-repeat;
}
.jstree-default-large.jstree-rtl .jstree-node {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
}
.jstree-default-large.jstree-rtl .jstree-last {
background: transparent;
}
@media (max-width: 768px) {
.jstree-default-responsive {
/*
.jstree-open > .jstree-ocl,
.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
*/
}
.jstree-default-responsive .jstree-icon {
background-image: url("40px.png");
}
.jstree-default-responsive .jstree-node,
.jstree-default-responsive .jstree-leaf > .jstree-ocl {
background: transparent;
}
.jstree-default-responsive .jstree-node {
min-height: 40px;
line-height: 40px;
margin-left: 40px;
min-width: 40px;
white-space: nowrap;
}
.jstree-default-responsive .jstree-anchor {
line-height: 40px;
height: 40px;
}
.jstree-default-responsive .jstree-icon,
.jstree-default-responsive .jstree-icon:empty {
width: 40px;
height: 40px;
line-height: 40px;
}
.jstree-default-responsive > .jstree-container-ul > .jstree-node {
margin-left: 0;
}
.jstree-default-responsive.jstree-rtl .jstree-node {
margin-left: 0;
margin-right: 40px;
}
.jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
margin-right: 0;
}
.jstree-default-responsive .jstree-ocl,
.jstree-default-responsive .jstree-themeicon,
.jstree-default-responsive .jstree-checkbox {
background-size: 120px 200px;
}
.jstree-default-responsive .jstree-leaf > .jstree-ocl {
background: transparent;
}
.jstree-default-responsive .jstree-open > .jstree-ocl {
background-position: 0 0px !important;
}
.jstree-default-responsive .jstree-closed > .jstree-ocl {
background-position: 0 -40px !important;
}
.jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
background-position: -40px 0px !important;
}
.jstree-default-responsive .jstree-anchor > .jstree-themeicon {
background-position: -40px -40px;
}
.jstree-default-responsive .jstree-checkbox,
.jstree-default-responsive .jstree-checkbox:hover {
background-position: -40px -80px;
}
.jstree-default-responsive .jstree-clicked > .jstree-checkbox,
.jstree-default-responsive .jstree-clicked > .jstree-checkbox:hover {
background-position: 0 -80px;
}
.jstree-default-responsive .jstree-anchor > .jstree-undetermined,
.jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover {
background-position: 0 -120px;
}
.jstree-default-responsive .jstree-anchor {
font-weight: bold;
font-size: 1.1em;
text-shadow: 1px 1px white;
}
.jstree-default-responsive > .jstree-striped {
background: transparent;
}
.jstree-default-responsive .jstree-wholerow {
border-top: 1px solid rgba(255, 255, 255, 0.7);
border-bottom: 1px solid rgba(64, 64, 64, 0.2);
background: #ebebeb;
height: 40px;
}
.jstree-default-responsive .jstree-wholerow-hovered {
background: #e7f4f9;
}
.jstree-default-responsive .jstree-wholerow-clicked {
background: #beebff;
}
.jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {
box-shadow: inset 0 -6px 3px -5px #666666;
}
.jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {
box-shadow: inset 0 6px 3px -5px #666666;
border-top: 0;
}
.jstree-default-responsive .jstree-children .jstree-open + .jstree-open {
box-shadow: none;
}
.jstree-default-responsive .jstree-node,
.jstree-default-responsive .jstree-icon,
.jstree-default-responsive .jstree-node > .jstree-ocl,
.jstree-default-responsive .jstree-themeicon,
.jstree-default-responsive .jstree-checkbox {
background-image: url("40px.png");
background-size: 120px 200px;
}
.jstree-default-responsive .jstree-node {
background-position: -80px 0;
background-repeat: repeat-y;
}
.jstree-default-responsive .jstree-last {
background: transparent;
}
.jstree-default-responsive .jstree-leaf > .jstree-ocl {
background-position: -40px -120px;
}
.jstree-default-responsive .jstree-last > .jstree-ocl {
background-position: -40px -160px;
}
.jstree-default-responsive .jstree-themeicon-custom {
background-color: transparent;
background-image: none;
}
}
.jstree-default > .jstree-container-ul > .jstree-node {
margin-left: 0;
margin-right: 0;
}
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1,51 +0,0 @@
/*
* CSS config for the log window
*/
#log-dialog .log-backupid, #log-dialog .log-exception,
#backup-log-tab-general .log-backupid, #backup-log-tab-general .log-exception, #backup-log-tab-general .log-message,
#backup-log-tab-remote .log-operationid, #backup-log-tab-remote .log-data
{
display: none;
}
#log-dialog .log-message, #log-dialog .log-timestamp,
#backup-log-tab-general .log-timestamp, #backup-log-tab-general .log-type,
#backup-log-tab-remote .log-timestamp, #backup-log-tab-remote .log-type, #backup-log-tab-remote .log-path
{
display: inline-block;
cursor: pointer;
}
#log-dialog .expanded div.log-exception,
#backup-log-tab-general .expanded div.log-exception, #backup-log-tab-general .expanded div.log-message,
#backup-log-tab-remote .expanded div.log-data
{
display: block;
background-color: #ffffff;
padding-left: 5px;
padding-right: 5px;
}
#log-tab-live .log-entry .log-message
{
display: inline;
}
#log-tab-live .log-entry
{
height: 1.2em;
overflow: hidden;
}
#log-tab-live .log-entry.expanded
{
height: auto;
}
@@ -1,514 +0,0 @@
/*
* CSS config for the main window
*/
#main-topbar {
position: absolute;
left: 0px;
right: 0px;
height: 46px;
background-color: #3a5e30;
color: #9dab98;
vertical-align: middle;
}
#main-list {
padding-top: 82px;
overflow: auto;
padding-bottom: 60px;
}
#main-list-container {
background-color: #f3f3f3;
overflow: hidden;
/*min-height: calc(100vh - 82px);*/
}
#main-appname {
display: inline-block;
font-family: "Arial Black", "GillSans", Helvetica, Arial, sans-serif;
font-size: 24px;
font-weight: bold;
line-height: 46px;
text-transform: uppercase;
}
#main-appname.has-subtitle {
padding-top: 5px;
font-size: 16pt;
}
#main-appname-subtitle {
font-size: 7em;
font-weight: normal;
font-style: italic;
}
#main-newbackup, #main-restorebackup {
color: white;
cursor: pointer;
border-radius: 3px;
display: inline-block;
font-size: 12pt;
clear: both;
float: left;
margin-top: 40px;
margin-bottom: 0px;
}
#main-control-menu {
margin-right: 10px;
}
.main-shortcuts {
float: right;
padding-top: 8px;
padding-right: 8px;
margin: 0px;
padding-left: 0px;
list-style: none;
}
.main-shortcuts li {
padding-left: 8px;
padding-right: 4px;
cursor: pointer;
background-color: #3a5e30;
display: inline-block;
}
.main-backup-entry, #main-newbackup, #main-restorebackup {
margin-top: 20px;
clear: both;
display: inline-block;
height: 150px;
width: 350px;
vertical-align: top;
}
#main-restorebackup, #main-newbackup {
margin-top: 0px;
width: 1000px;
height: auto;
}
.main-backup-entry .action-links {
display: block;
margin-top: 10px;
padding-left: 0px;
}
.main-backup-entry ul.hint-text, #main-newbackup > ul.hint-text, #main-restorebackup > ul.hint-text {
list-style: none;
padding: 0px;
margin: 0px;
}
.main-backup-entry ul.hint-text > li, #main-newbackup > ul.hint-text > li, #main-restorebackup > ul.hint-text > li {
display: inline-block;
}
.main-backup-entry .action-links li {
display: inline;
border-right: 1px solid #56acbb;
padding-left: 5px;
padding-right: 5px;
}
.main-backup-entry .action-links .last {
border-right: 0px none;
padding-right: 0px;
}
.main-backup-entry .action-links .first {
padding-left: 0px;
}
.main-backup-entry .hint-text-caption {
padding-right: 5px;
}
.main-backup-entry .caption-text, #main-newbackup .caption-text, #main-restorebackup .caption-text {
margin-bottom: 10px;
}
.main-backup-entry > .last-run-time.last-run-failed {
color: red;
}
div.main-icon-plus {
width: 24px;
height: 24px;
display: block;
background-repeat: no-repeat;
background-image: url('../images/plus.png');
}
div.main-icon-restore {
width: 24px;
height: 24px;
display: block;
background-repeat: no-repeat;
background-image: url('../images/restore.png');
}
.main-icon-clock {
width: 23px;
height: 23px;
background-repeat: no-repeat;
background-image: url('../images/clock.png');
}
.main-icon-donate {
width: 28px;
height: 28px;
background-repeat: no-repeat;
background-image: url('../images/donate.png');
}
.main-icon-hourglass {
width: 18px;
height: 24px;
background-repeat: no-repeat;
background-image: url('../images/hourglass.png');
}
.main-icon-pause {
width: 24px;
height: 24px;
background-repeat: no-repeat;
background-image: url('../images/pause.png');
}
.main-icon-run {
width: 24px;
height: 24px;
background-repeat: no-repeat;
background-image: url('../images/play.png');
}
.main-icon-settings {
width: 24px;
height: 24px;
background-repeat: no-repeat;
background-image: url('../images/menu-grey.png');
}
.main-icon-small-close {
width: 19px;
height: 19px;
background-repeat: no-repeat;
background-image: url('../images/small-close');
}
#main-newbackup .main-icon-plus, #main-restorebackup .main-icon-restore {
display: inline-block;
}
.main-backup-control {
display: block;
width: 24px;
height: 24px;
margin-left: 0px;
margin-top: 4px;
position: absolute;
background-image: url('../images/menu-grey-small.png');
}
.main-backup-entry .caption-text, .main-backup-entry ul.hint-text, #main-newbackup > .caption-text, #main-newbackup > ul.hint-text, #main-restorebackup > .caption-text, #main-restorebackup > ul.hint-text {
margin-left: 42px;
}
.main-backup-action-buttons > .caption-text {
font-size: 14pt;
margin-top: 4px;
}
.main-button-add-text {
display: inline-block;
vertical-align: top;
padding-left: 10px;
padding-top: 4px;
}
.progress-area {
background-color: #c8d1c5;
color: #8f968e;
border-radius: 3px;
display: block;
padding: 6px 12px 6px 12px;
display: block;
position: relative;
}
.in-progress {
color: #ecf0eb;
min-height: 23px;
}
.main-progress-cell {
width: 100%;
}
.progress-area .main-icon-hourglass, .progress-area .main-icon-clock {
display: inline-block;
margin-right: 8px;
}
.main-progress-text {
display: inline-block;
vertical-align: top;
padding-top: 4px;
white-space: nowrap;
position: relative;
}
.backup-progress-indeterminate {
background-image: url('green-theme/images/animated-overlay.gif');
}
.backup-progress-overall {
border-radius: 3px;
display: block;
height: 100%;
width: 20%;
background-color: green;
display: block;
position: absolute;
top: 0px;
left: 0;
}
.backup-details {
float: left;
width: 300px;
}
.backup-progress {
float: left;
padding-bottom: 20px;
min-width: 250px;
white-space: nowrap;
position: relative;
}
#edit-dialog {
padding: 0px;
border: 0px none;
}
/* Merge tabs in dialog */
#backup-log-dialog, #log-dialog, #about-dialog {
padding: 0px;
border: 0px none;
width: 100%;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
}
.ui-dialog-titlebar {
border-bottom-right-radius: 0px;
border-bottom-left-radius: 0px;
}
#click-intercept {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
display: none;
z-index: 9999;
}
#about-dialog-current {
margin-bottom: 10px;
margin-top: 10px;
}
.about-library-entry {
margin-bottom: 10px;
margin-top: 10px;
}
.about-library-name {
font-weight: bold;
}
.about-library-name, .about-library-description, .about-library-license {
display: inline;
}
.about-library-notes {
display: none;
}
.main-status-area-outer {
position: absolute;
top: 46px;
left: 0px;
right: 0px;
height: auto;
z-index: 1;
overflow: hidden;
background-color: #91AA8A;
}
#main-status-area {
font-size: 14px;
margin-left: auto;
margin-right: auto;
height: 20px;
padding: 8px 0;
color: #f0f0f0;
}
#main-status-area-text {
display: inline-block;
min-width: 100px;
}
#main-status-area-progress-text {
position: relative;
z-index: 1;
margin-left: 5px;
margin-right: 5px;
text-shadow:
-1px -1px 0 #f0f0f0,
1px -1px 0 #f0f0f0,
-1px 1px 0 #f0f0f0,
1px 1px 0 #f0f0f0;
}
#main-status-area-progress-outer {
background-color: #f0f0f0;
min-width: 180px;
margin-left: 20px;
float: right;
position: relative;
color: #3a5e30;
border-radius: 100px;
overflow: hidden;
}
#main-status-area-cancel-button {
height: 19px;
width: 19px;
float: right;
background-image: url('../images/small-close.png');
cursor: pointer;
}
#main-status-area-progress-bar {
border-radius: 100px;
position: absolute;
background-color: #ccc;
height: 100%;
width: 30%;
}
#about-dialog-current-version {
display: inline;
}
#about-dialog-changelog, .noty-update-changelog-link {
display: inline;
cursor: pointer;
text-decoration: underline;
}
.export-dialog-label, .import-dialog-label {
display: inline;
}
.ui-icon-inline {
display: inline-block;
}
#options-dialog .options-header {
font-size: 22px;
font-weight: bold;
}
#options-dialog .options-items, #options-dialog .edit-dialog-label {
margin-left: 10px;
}
#options-dialog .hint-line-last {
margin-left: 10px;
font-style: italic;
}
#options-dialog .options-items > div {
display: inline-block;
}
#options-dialog .options-header {
padding-top: 15px;
}
#options-dialog .options-header.options-header-first {
padding-top: 0px;
}
#global-advanced-options, #global-webservice-options {
width: 320px;
}
#global-options-startup-delay-multiplier {
width: 270px;
}
#webservice-password-label {
min-width: 180px;
}
#source-folder-filter-area {
margin-top: 10px;
}
#backup-context-menu > li > u {
text-decoration: none;
}
#backup-context-menu > li > u > b {
padding: 0.4em;
padding-top: 2px;
color: #7f7f7f;
}
/*
* custom CSS
*/
header {
position: fixed;
width: 100%;
z-index: 100;
}
footer{
height: 50px;
width: 100%;
background-color: #3A5E30;
color: #F0F0F0;
bottom:0px;
position:fixed;
border-top: 10px solid #91AA8A;
z-index: 100;
}
a.link_extern:hover, a.link_extern:active , a.link_extern:visited, a.link_extern:link {
color: #F0F0F0;
}
div.box-duplicati-copy{
float:left;
margin-left:5px;
text-align: left;
}
div.box-visit-us{
float:right;
margin-right: 5px;
text-align: right;
}
@@ -1,60 +0,0 @@
#restore-dialog {
overflow: hidden;
}
#restore-files-tree {
overflow: auto;
position: absolute;
top: 58px;
bottom: 16px;
left: 16px;
right: 8px;
}
#restore-search {
width: 320px;
}
#restore-version {
float: right;
}
.search-match {
display: inline;
font-weight: bold;
color: black;
}
#restore-hint-paypal, #restore-hint-bitcoin {
background-color: #9b9b9b;
color: black;
padding: 20px;
border-radius: 8px;
font-weight: bold;
margin: 20px;
cursor: pointer;
}
#restore-complete-page > .hint-text {
margin: 20px;
}
#restore-hint-paypal > a, #restore-hint-bitcoin > a {
color: black;
text-decoration: none;
}
a.restore-current-time {
font-weight: bold !important;
color: black !important;
}
#restore-search-loader {
display: inline-block;
margin-left: 10px;
}
#restore-hint-overwrite, #restore-hint-metadata {
margin-top: 20px;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

File diff suppressed because one or more lines are too long
+2
View File
@@ -41,6 +41,8 @@
var theme = parseCookies()['default-theme'];
if ((theme || '').trim().length == 0)
theme = 'ngax';
if (theme == 'greeno') // Make sure users are redirected automatically
theme = 'ngax';
setCookieAndRun(theme); // Refresh
+2 -2
View File
@@ -84,13 +84,13 @@
<div class="button" onclick="setView('ngax')">View now</div>
</div>
</li>
<li class="theme-item">
<!--<li class="theme-item">
<h3 class="title">Greeno - Your friendly green theme</h3>
<div class="buttons">
<div class="button" id="greeno" onclick="setDefault('greeno')">Use as default</div>
<div class="button" onclick="setView('greeno')">View now</div>
</div>
</li>
</li>-->
</ul>
<script type="text/javascript">updateToCurrentTheme();</script>