mirror of
https://github.com/telekom-security/tpotce.git
synced 2025-07-02 01:27:27 -04:00
add 10 personas for snare
This commit is contained in:
8
docker/tanner/snare/dist/pages/5/019cb674523b5dd7343da12cc6d93df0
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/019cb674523b5dd7343da12cc6d93df0
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/password.svg was not found on this server.</p>
|
||||
</body></html>
|
132
docker/tanner/snare/dist/pages/5/03cf9d943aeb3dab5698e6d496ddb5db
vendored
Normal file
132
docker/tanner/snare/dist/pages/5/03cf9d943aeb3dab5698e6d496ddb5db
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
.oc-dialog {
|
||||
background : white;
|
||||
color : #333333;
|
||||
border-radius : 3px;
|
||||
box-shadow : 0 0 7px #888888;
|
||||
padding : 15px;
|
||||
z-index : 1000;
|
||||
font-size : 100%;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing : border-box;
|
||||
box-sizing : border-box;
|
||||
min-width : 340px;
|
||||
max-height : calc(100vh - 60px);
|
||||
overflow-y : auto;
|
||||
}
|
||||
|
||||
@media (max-width: 512px) {
|
||||
.oc-dialog {
|
||||
position: absolute;
|
||||
top : 55px;
|
||||
right : 10px;
|
||||
left : 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 513px) {
|
||||
/* Center positioning */
|
||||
.oc-dialog {
|
||||
position : fixed;
|
||||
left : 50%;
|
||||
|
||||
/* Add half of the titlebar height */
|
||||
top : calc(50% + 22.5px);
|
||||
transform: translate(-50%,-50%);
|
||||
}
|
||||
}
|
||||
|
||||
.oc-dialog-title {
|
||||
background : white;
|
||||
font-weight : bold;
|
||||
font-size : 110%;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.oc-dialog-content {
|
||||
z-index : 1000;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.oc-dialog-separator {}
|
||||
|
||||
.oc-dialog-buttonrow {
|
||||
background: white;
|
||||
float : right;
|
||||
position : relative;
|
||||
bottom : 5px;
|
||||
display : block;
|
||||
margin-top: 10px;
|
||||
width : 100%;
|
||||
}
|
||||
|
||||
/* align primary button to right, other buttons to left */
|
||||
.oc-dialog-buttonrow.threebuttons button:nth-child(1) {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.oc-dialog-buttonrow.threebuttons button:nth-child(2),
|
||||
.oc-dialog-buttonrow.threebuttons button:nth-child(3) {
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* align primary button to right, other buttons to left */
|
||||
.oc-dialog-buttonrow.twobuttons button:nth-child(1) {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.oc-dialog-buttonrow.twobuttons button:nth-child(2) {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.oc-dialog-buttonrow.onebutton button {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.oc-dialog-close {
|
||||
position : absolute;
|
||||
top : 7px;
|
||||
right : 7px;
|
||||
height : 20px;
|
||||
width : 20px;
|
||||
background: url("../img/actions/close.svg") no-repeat center;
|
||||
}
|
||||
|
||||
.oc-dialog-dim {
|
||||
background-color: #000;
|
||||
opacity : 0.20;
|
||||
z-index : 999;
|
||||
position : fixed;
|
||||
top : 0;
|
||||
left : 0;
|
||||
width : 100%;
|
||||
height : 100%;
|
||||
}
|
||||
|
||||
.error-message-global,
|
||||
.success-message-global {
|
||||
background-color : rgb(242, 222, 222);
|
||||
border : 1px solid rgb(235, 204, 209);
|
||||
border-radius : 4px;
|
||||
box-sizing : border-box;
|
||||
color : rgb(169, 68, 66);
|
||||
font-family : Verdana,sans-serif;
|
||||
font-size : 15px;
|
||||
line-height : 22.5px;
|
||||
margin-bottom : 20px;
|
||||
opacity : 1;
|
||||
padding : 15px 35px 15px 15px;
|
||||
transition-delay : 0s;
|
||||
transition-duration : 0.15s;
|
||||
transition-property : opacity;
|
||||
transition-timing-function: linear;
|
||||
-moz-border-bottom-colors : none;
|
||||
-moz-border-left-colors : none;
|
||||
-moz-border-right-colors : none;
|
||||
-moz-border-top-colors : none;
|
||||
}
|
||||
|
||||
.success-message-global {
|
||||
background-color: rgb(222, 242, 226);
|
||||
border-color : rgb(177, 218, 186);
|
||||
color : rgb(66, 169, 76);
|
||||
}
|
4608
docker/tanner/snare/dist/pages/5/0cde9d2f2a4e2181c8105465e09e92a8
vendored
Normal file
4608
docker/tanner/snare/dist/pages/5/0cde9d2f2a4e2181c8105465e09e92a8
vendored
Normal file
File diff suppressed because one or more lines are too long
8
docker/tanner/snare/dist/pages/5/0dd2154b60573f4ef870b8a57c85b92a
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/0dd2154b60573f4ef870b8a57c85b92a
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/social/social-diaspora.svg was not found on this server.</p>
|
||||
</body></html>
|
743
docker/tanner/snare/dist/pages/5/1117cbdd64fe6a0f4c81c8e751158ca0
vendored
Normal file
743
docker/tanner/snare/dist/pages/5/1117cbdd64fe6a0f4c81c8e751158ca0
vendored
Normal file
@ -0,0 +1,743 @@
|
||||
/*
|
||||
* Copyright (c) 2015
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3
|
||||
* or later.
|
||||
*
|
||||
* See the COPYING-README file.
|
||||
*
|
||||
*/
|
||||
|
||||
(function() {
|
||||
if(!OC.Share) {
|
||||
OC.Share = {};
|
||||
OC.Share.Types = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* @typedef {object} OC.Share.Types.LinkShareInfo
|
||||
* @property {bool} isLinkShare
|
||||
* @property {string} token
|
||||
* @property {string|null} password
|
||||
* @property {string} link
|
||||
* @property {number} permissions
|
||||
* @property {Date} expiration
|
||||
* @property {number} stime share time
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {object} OC.Share.Types.Reshare
|
||||
* @property {string} uid_owner
|
||||
* @property {number} share_type
|
||||
* @property {string} share_with
|
||||
* @property {string} displayname_owner
|
||||
* @property {number} permissions
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {object} OC.Share.Types.ShareInfo
|
||||
* @property {number} share_type
|
||||
* @property {number} permissions
|
||||
* @property {number} file_source optional
|
||||
* @property {number} item_source
|
||||
* @property {string} token
|
||||
* @property {string} share_with
|
||||
* @property {string} share_with_displayname
|
||||
* @property {string} mail_send
|
||||
* @property {Date} expiration optional?
|
||||
* @property {number} stime optional?
|
||||
* @property {string} uid_owner
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {object} OC.Share.Types.ShareItemInfo
|
||||
* @property {OC.Share.Types.Reshare} reshare
|
||||
* @property {OC.Share.Types.ShareInfo[]} shares
|
||||
* @property {OC.Share.Types.LinkShareInfo|undefined} linkShare
|
||||
*/
|
||||
|
||||
/**
|
||||
* These properties are sometimes returned by the server as strings instead
|
||||
* of integers, so we need to convert them accordingly...
|
||||
*/
|
||||
var SHARE_RESPONSE_INT_PROPS = [
|
||||
'id', 'file_parent', 'mail_send', 'file_source', 'item_source', 'permissions',
|
||||
'storage', 'share_type', 'parent', 'stime'
|
||||
];
|
||||
|
||||
/**
|
||||
* @class OCA.Share.ShareItemModel
|
||||
* @classdesc
|
||||
*
|
||||
* Represents the GUI of the share dialogue
|
||||
*
|
||||
* // FIXME: use OC Share API once #17143 is done
|
||||
*
|
||||
* // TODO: this really should be a collection of share item models instead,
|
||||
* where the link share is one of them
|
||||
*/
|
||||
var ShareItemModel = OC.Backbone.Model.extend({
|
||||
/**
|
||||
* @type share id of the link share, if applicable
|
||||
*/
|
||||
_linkShareId: null,
|
||||
|
||||
_linkSharesCollection: null,
|
||||
|
||||
initialize: function(attributes, options) {
|
||||
if(!_.isUndefined(options.configModel)) {
|
||||
this.configModel = options.configModel;
|
||||
}
|
||||
if(!_.isUndefined(options.fileInfoModel)) {
|
||||
/** @type {OC.Files.FileInfo} **/
|
||||
this.fileInfoModel = options.fileInfoModel;
|
||||
}
|
||||
|
||||
this._linkSharesCollection = new OC.Share.SharesCollection();
|
||||
|
||||
_.bindAll(this, 'addShare');
|
||||
},
|
||||
|
||||
defaults: {
|
||||
permissions: 0,
|
||||
linkShare: {}
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the collection of link shares
|
||||
*
|
||||
* @return {OC.Share.SharesCollection} shares collection
|
||||
*/
|
||||
getLinkSharesCollection: function() {
|
||||
return this._linkSharesCollection;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the file info for the file/folder on which this share information relate to
|
||||
*
|
||||
* @return {OC.Files.FileInfoModel} file info model
|
||||
*/
|
||||
getFileInfo: function() {
|
||||
return this.fileInfoModel;
|
||||
},
|
||||
|
||||
addShare: function(attributes, options) {
|
||||
var shareType = attributes.shareType;
|
||||
options = options || {};
|
||||
attributes = _.extend({}, attributes);
|
||||
|
||||
var defaultPermissions = OC.getCapabilities()['files_sharing']['default_permissions'] || OC.PERMISSION_ALL;
|
||||
|
||||
// Default permissions are Edit (CRUD) and Share
|
||||
// Check if these permissions are possible
|
||||
var possiblePermissions = OC.PERMISSION_READ;
|
||||
if (this.updatePermissionPossible()) {
|
||||
possiblePermissions = possiblePermissions | OC.PERMISSION_UPDATE;
|
||||
}
|
||||
if (this.createPermissionPossible()) {
|
||||
possiblePermissions = possiblePermissions | OC.PERMISSION_CREATE;
|
||||
}
|
||||
if (this.deletePermissionPossible()) {
|
||||
possiblePermissions = possiblePermissions | OC.PERMISSION_DELETE;
|
||||
}
|
||||
if (this.configModel.get('isResharingAllowed') && (this.sharePermissionPossible())) {
|
||||
possiblePermissions = possiblePermissions | OC.PERMISSION_SHARE;
|
||||
}
|
||||
|
||||
attributes.permissions = defaultPermissions & possiblePermissions;
|
||||
if (_.isUndefined(attributes.path)) {
|
||||
attributes.path = this.fileInfoModel.getFullPath();
|
||||
}
|
||||
|
||||
var self = this;
|
||||
return $.ajax({
|
||||
type: 'POST',
|
||||
url: this._getUrl('shares'),
|
||||
data: attributes,
|
||||
dataType: 'json'
|
||||
}).done(function() {
|
||||
self.fetch().done(function() {
|
||||
if (_.isFunction(options.success)) {
|
||||
options.success(self);
|
||||
}
|
||||
});
|
||||
}).fail(function(xhr) {
|
||||
var msg = t('core', 'Error');
|
||||
var result = xhr.responseJSON;
|
||||
if (result && result.ocs && result.ocs.meta) {
|
||||
msg = result.ocs.meta.message;
|
||||
}
|
||||
|
||||
if (_.isFunction(options.error)) {
|
||||
options.error(self, msg);
|
||||
} else {
|
||||
OC.dialogs.alert(msg, t('core', 'Error while sharing'));
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
updateShare: function(shareId, attrs, options) {
|
||||
var self = this;
|
||||
options = options || {};
|
||||
return $.ajax({
|
||||
type: 'PUT',
|
||||
url: this._getUrl('shares/' + encodeURIComponent(shareId)),
|
||||
data: attrs,
|
||||
dataType: 'json'
|
||||
}).done(function() {
|
||||
self.fetch({
|
||||
success: function() {
|
||||
if (_.isFunction(options.success)) {
|
||||
options.success(self);
|
||||
}
|
||||
}
|
||||
});
|
||||
}).fail(function(xhr) {
|
||||
var msg = t('core', 'Error');
|
||||
var result = xhr.responseJSON;
|
||||
if (result.ocs && result.ocs.meta) {
|
||||
msg = result.ocs.meta.message;
|
||||
}
|
||||
|
||||
if (_.isFunction(options.error)) {
|
||||
options.error(self, msg);
|
||||
} else {
|
||||
OC.dialogs.alert(msg, t('core', 'Error while sharing'));
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Deletes the share with the given id
|
||||
*
|
||||
* @param {int} shareId share id
|
||||
* @return {jQuery}
|
||||
*/
|
||||
removeShare: function(shareId, options) {
|
||||
var self = this;
|
||||
options = options || {};
|
||||
return $.ajax({
|
||||
type: 'DELETE',
|
||||
url: this._getUrl('shares/' + encodeURIComponent(shareId)),
|
||||
}).done(function() {
|
||||
self.fetch({
|
||||
success: function() {
|
||||
if (_.isFunction(options.success)) {
|
||||
options.success(self);
|
||||
}
|
||||
}
|
||||
});
|
||||
}).fail(function(xhr) {
|
||||
var msg = t('core', 'Error');
|
||||
var result = xhr.responseJSON;
|
||||
if (result.ocs && result.ocs.meta) {
|
||||
msg = result.ocs.meta.message;
|
||||
}
|
||||
|
||||
if (_.isFunction(options.error)) {
|
||||
options.error(self, msg);
|
||||
} else {
|
||||
OC.dialogs.alert(msg, t('core', 'Error removing share'));
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
isFolder: function() {
|
||||
return this.get('itemType') === 'folder';
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
isFile: function() {
|
||||
return this.get('itemType') === 'file';
|
||||
},
|
||||
|
||||
/**
|
||||
* whether this item has reshare information
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasReshare: function() {
|
||||
var reshare = this.get('reshare');
|
||||
return _.isObject(reshare) && !_.isUndefined(reshare.uid_owner);
|
||||
},
|
||||
|
||||
/**
|
||||
* whether this item has user share information
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasUserShares: function() {
|
||||
return this.getSharesWithCurrentItem().length > 0;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns whether this item has a link share
|
||||
*
|
||||
* @return {bool} true if a link share exists, false otherwise
|
||||
*/
|
||||
hasLinkShare: function() {
|
||||
return this._linkSharesCollection.length > 0;
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
getReshareOwner: function() {
|
||||
return this.get('reshare').uid_owner;
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
getReshareOwnerDisplayname: function() {
|
||||
return this.get('reshare').displayname_owner;
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
getReshareWith: function() {
|
||||
return this.get('reshare').share_with;
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {string}
|
||||
*/
|
||||
getReshareWithDisplayName: function() {
|
||||
var reshare = this.get('reshare');
|
||||
return reshare.share_with_displayname || reshare.share_with;
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {number}
|
||||
*/
|
||||
getReshareType: function() {
|
||||
return this.get('reshare').share_type;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns all share entries that only apply to the current item
|
||||
* (file/folder)
|
||||
*
|
||||
* @return {Array.<OC.Share.Types.ShareInfo>}
|
||||
*/
|
||||
getSharesWithCurrentItem: function() {
|
||||
var shares = this.get('shares') || [];
|
||||
var fileId = this.fileInfoModel.get('id');
|
||||
return _.filter(shares, function(share) {
|
||||
return share.item_source === fileId;
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* @param shareIndex
|
||||
* @returns {string}
|
||||
*/
|
||||
getShareWith: function(shareIndex) {
|
||||
/** @type OC.Share.Types.ShareInfo **/
|
||||
var share = this.get('shares')[shareIndex];
|
||||
if(!_.isObject(share)) {
|
||||
throw "Unknown Share";
|
||||
}
|
||||
return share.share_with;
|
||||
},
|
||||
|
||||
/**
|
||||
* @param shareIndex
|
||||
* @returns {string}
|
||||
*/
|
||||
getShareWithDisplayName: function(shareIndex) {
|
||||
/** @type OC.Share.Types.ShareInfo **/
|
||||
var share = this.get('shares')[shareIndex];
|
||||
if(!_.isObject(share)) {
|
||||
throw "Unknown Share";
|
||||
}
|
||||
return share.share_with_displayname;
|
||||
},
|
||||
|
||||
/**
|
||||
* @param shareIndex
|
||||
* @returns {string}
|
||||
*/
|
||||
getShareWithAdditionalInfo: function(shareIndex) {
|
||||
/** @type OC.Share.Types.ShareInfo **/
|
||||
var share = this.get('shares')[shareIndex];
|
||||
if(!_.isObject(share)) {
|
||||
throw "Unknown Share";
|
||||
}
|
||||
return share.share_with_additional_info;
|
||||
},
|
||||
|
||||
getShareType: function(shareIndex) {
|
||||
/** @type OC.Share.Types.ShareInfo **/
|
||||
var share = this.get('shares')[shareIndex];
|
||||
if(!_.isObject(share)) {
|
||||
throw "Unknown Share";
|
||||
}
|
||||
return share.share_type;
|
||||
},
|
||||
|
||||
/**
|
||||
* whether a share from shares has the requested permission
|
||||
*
|
||||
* @param {number} shareIndex
|
||||
* @param {number} permission
|
||||
* @returns {boolean}
|
||||
* @private
|
||||
*/
|
||||
_shareHasPermission: function(shareIndex, permission) {
|
||||
/** @type OC.Share.Types.ShareInfo **/
|
||||
var share = this.get('shares')[shareIndex];
|
||||
if(!_.isObject(share)) {
|
||||
throw "Unknown Share";
|
||||
}
|
||||
return (share.permissions & permission) === permission;
|
||||
},
|
||||
|
||||
notificationMailWasSent: function(shareIndex) {
|
||||
/** @type OC.Share.Types.ShareInfo **/
|
||||
var share = this.get('shares')[shareIndex];
|
||||
if(!_.isObject(share)) {
|
||||
throw "Unknown Share";
|
||||
}
|
||||
return share.mail_send === 1;
|
||||
},
|
||||
|
||||
/**
|
||||
* Sends an email notification for the given share
|
||||
*
|
||||
* @param {int} shareType share type
|
||||
* @param {string} shareWith recipient
|
||||
* @param {bool} state whether to set the notification flag or remove it
|
||||
*/
|
||||
sendNotificationForShare: function(shareType, shareWith, state) {
|
||||
var itemType = this.get('itemType');
|
||||
var itemSource = this.get('itemSource');
|
||||
|
||||
return $.post(
|
||||
OC.generateUrl('core/ajax/share.php'),
|
||||
{
|
||||
action: state ? 'informRecipients' : 'informRecipientsDisabled',
|
||||
recipient: shareWith,
|
||||
shareType: shareType,
|
||||
itemSource: itemSource,
|
||||
itemType: itemType
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
sharePermissionPossible: function() {
|
||||
return (this.get('permissions') & OC.PERMISSION_SHARE) === OC.PERMISSION_SHARE;
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {number} shareIndex
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasSharePermission: function(shareIndex) {
|
||||
return this._shareHasPermission(shareIndex, OC.PERMISSION_SHARE);
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
createPermissionPossible: function() {
|
||||
return (this.get('permissions') & OC.PERMISSION_CREATE) === OC.PERMISSION_CREATE;
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {number} shareIndex
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasCreatePermission: function(shareIndex) {
|
||||
return this._shareHasPermission(shareIndex, OC.PERMISSION_CREATE);
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
updatePermissionPossible: function() {
|
||||
return (this.get('permissions') & OC.PERMISSION_UPDATE) === OC.PERMISSION_UPDATE;
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {number} shareIndex
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasUpdatePermission: function(shareIndex) {
|
||||
return this._shareHasPermission(shareIndex, OC.PERMISSION_UPDATE);
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
deletePermissionPossible: function() {
|
||||
return (this.get('permissions') & OC.PERMISSION_DELETE) === OC.PERMISSION_DELETE;
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {number} shareIndex
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasDeletePermission: function(shareIndex) {
|
||||
return this._shareHasPermission(shareIndex, OC.PERMISSION_DELETE);
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
editPermissionPossible: function() {
|
||||
return this.createPermissionPossible()
|
||||
|| this.updatePermissionPossible()
|
||||
|| this.deletePermissionPossible();
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
hasEditPermission: function(shareIndex) {
|
||||
return this.hasCreatePermission(shareIndex)
|
||||
|| this.hasUpdatePermission(shareIndex)
|
||||
|| this.hasDeletePermission(shareIndex);
|
||||
},
|
||||
|
||||
_getUrl: function(base, params) {
|
||||
params = _.extend({format: 'json'}, params || {});
|
||||
return OC.linkToOCS('apps/files_sharing/api/v1', 2) + base + '?' + OC.buildQueryString(params);
|
||||
},
|
||||
|
||||
_fetchShares: function() {
|
||||
var path = this.fileInfoModel.getFullPath();
|
||||
return $.ajax({
|
||||
type: 'GET',
|
||||
url: this._getUrl('shares', {path: path, reshares: true})
|
||||
});
|
||||
},
|
||||
|
||||
_fetchReshare: function() {
|
||||
// only fetch original share once
|
||||
if (!this._reshareFetched) {
|
||||
var path = this.fileInfoModel.getFullPath();
|
||||
this._reshareFetched = true;
|
||||
return $.ajax({
|
||||
type: 'GET',
|
||||
url: this._getUrl('shares', {path: path, shared_with_me: true})
|
||||
});
|
||||
} else {
|
||||
return $.Deferred().resolve([{
|
||||
ocs: {
|
||||
data: [this.get('reshare')]
|
||||
}
|
||||
}]);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Group reshares into a single super share element.
|
||||
* Does this by finding the most precise share and
|
||||
* combines the permissions to be the most permissive.
|
||||
*
|
||||
* @param {Array} reshares
|
||||
* @return {Object} reshare
|
||||
*/
|
||||
_groupReshares: function(reshares) {
|
||||
if (!reshares || !reshares.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var superShare = reshares.shift();
|
||||
var combinedPermissions = superShare.permissions;
|
||||
_.each(reshares, function(reshare) {
|
||||
// use share have higher priority than group share
|
||||
if (reshare.share_type === OC.Share.SHARE_TYPE_USER && superShare.share_type === OC.Share.SHARE_TYPE_GROUP) {
|
||||
superShare = reshare;
|
||||
}
|
||||
combinedPermissions |= reshare.permissions;
|
||||
});
|
||||
|
||||
superShare.permissions = combinedPermissions;
|
||||
return superShare;
|
||||
},
|
||||
|
||||
fetch: function() {
|
||||
var model = this;
|
||||
this.trigger('request', this);
|
||||
|
||||
var deferred = $.when(
|
||||
this._fetchShares(),
|
||||
this._fetchReshare()
|
||||
);
|
||||
deferred.done(function(data1, data2) {
|
||||
model.trigger('sync', 'GET', this);
|
||||
var sharesMap = {};
|
||||
_.each(data1[0].ocs.data, function(shareItem) {
|
||||
sharesMap[shareItem.id] = shareItem;
|
||||
});
|
||||
|
||||
var reshare = false;
|
||||
if (data2[0].ocs.data.length) {
|
||||
reshare = model._groupReshares(data2[0].ocs.data);
|
||||
}
|
||||
|
||||
model.set(model.parse({
|
||||
shares: sharesMap,
|
||||
reshare: reshare
|
||||
}));
|
||||
});
|
||||
|
||||
return deferred;
|
||||
},
|
||||
|
||||
/**
|
||||
* Updates OC.Share.itemShares and OC.Share.statuses.
|
||||
*
|
||||
* This is required in case the user navigates away and comes back,
|
||||
* the share statuses from the old arrays are still used to fill in the icons
|
||||
* in the file list.
|
||||
*/
|
||||
_legacyFillCurrentShares: function(shares) {
|
||||
var fileId = this.fileInfoModel.get('id');
|
||||
if (!shares || !shares.length) {
|
||||
delete OC.Share.statuses[fileId];
|
||||
OC.Share.currentShares = {};
|
||||
OC.Share.itemShares = [];
|
||||
return;
|
||||
}
|
||||
|
||||
var currentShareStatus = OC.Share.statuses[fileId];
|
||||
if (!currentShareStatus) {
|
||||
currentShareStatus = {link: false};
|
||||
OC.Share.statuses[fileId] = currentShareStatus;
|
||||
}
|
||||
currentShareStatus.link = false;
|
||||
|
||||
OC.Share.currentShares = {};
|
||||
OC.Share.itemShares = [];
|
||||
_.each(shares,
|
||||
/**
|
||||
* @param {OC.Share.Types.ShareInfo} share
|
||||
*/
|
||||
function(share) {
|
||||
if (share.share_type === OC.Share.SHARE_TYPE_LINK) {
|
||||
OC.Share.itemShares[share.share_type] = true;
|
||||
currentShareStatus.link = true;
|
||||
} else {
|
||||
if (!OC.Share.itemShares[share.share_type]) {
|
||||
OC.Share.itemShares[share.share_type] = [];
|
||||
}
|
||||
OC.Share.itemShares[share.share_type].push(share.share_with);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
parse: function(data) {
|
||||
if(data === false) {
|
||||
console.warn('no data was returned');
|
||||
this.trigger('fetchError');
|
||||
return {};
|
||||
}
|
||||
|
||||
var permissions = this.get('possiblePermissions');
|
||||
if(!_.isUndefined(data.reshare) && !_.isUndefined(data.reshare.permissions) && data.reshare.uid_owner !== OC.currentUser) {
|
||||
permissions = permissions & data.reshare.permissions;
|
||||
}
|
||||
|
||||
/** @type {OC.Share.Types.ShareInfo[]} **/
|
||||
var shares = _.map(data.shares, function(share) {
|
||||
// properly parse some values because sometimes the server
|
||||
// returns integers as string...
|
||||
var i;
|
||||
for (i = 0; i < SHARE_RESPONSE_INT_PROPS.length; i++) {
|
||||
var prop = SHARE_RESPONSE_INT_PROPS[i];
|
||||
if (!_.isUndefined(share[prop])) {
|
||||
share[prop] = parseInt(share[prop], 10);
|
||||
}
|
||||
}
|
||||
return share;
|
||||
});
|
||||
|
||||
this._legacyFillCurrentShares(shares);
|
||||
|
||||
var linkShares = [];
|
||||
// filter out the share by link
|
||||
shares = _.reject(shares,
|
||||
/**
|
||||
* @param {OC.Share.Types.ShareInfo} share
|
||||
*/
|
||||
function(share) {
|
||||
var isShareLink =
|
||||
share.share_type === OC.Share.SHARE_TYPE_LINK
|
||||
&& ( share.file_source === this.get('itemSource')
|
||||
|| share.item_source === this.get('itemSource'));
|
||||
|
||||
if (isShareLink) {
|
||||
/*
|
||||
* Ignore reshared link shares for now
|
||||
* FIXME: Find a way to display properly
|
||||
*/
|
||||
if (share.uid_owner !== OC.currentUser) {
|
||||
return share;
|
||||
}
|
||||
|
||||
linkShares.push(share);
|
||||
return share;
|
||||
}
|
||||
},
|
||||
this
|
||||
);
|
||||
|
||||
// populate link shares collection with found link shares
|
||||
this._linkSharesCollection.set(linkShares, {parse: true});
|
||||
|
||||
// use the old crappy way for other shares for now
|
||||
return {
|
||||
reshare: data.reshare,
|
||||
shares: shares,
|
||||
permissions: permissions
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Parses a string to an valid integer (unix timestamp)
|
||||
* @param time
|
||||
* @returns {*}
|
||||
* @internal Only used to work around a bug in the backend
|
||||
*/
|
||||
_parseTime: function(time) {
|
||||
if (_.isString(time)) {
|
||||
// skip empty strings and hex values
|
||||
if (time === '' || (time.length > 1 && time[0] === '0' && time[1] === 'x')) {
|
||||
return null;
|
||||
}
|
||||
time = parseInt(time, 10);
|
||||
if(isNaN(time)) {
|
||||
time = null;
|
||||
}
|
||||
}
|
||||
return time;
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns a list of share types from the existing shares.
|
||||
*
|
||||
* @return {Array.<int>} array of share types
|
||||
*/
|
||||
getShareTypes: function() {
|
||||
var result;
|
||||
result = _.pluck(this.getSharesWithCurrentItem(), 'share_type');
|
||||
if (this.hasLinkShare()) {
|
||||
result.push(OC.Share.SHARE_TYPE_LINK);
|
||||
}
|
||||
return _.uniq(result);
|
||||
}
|
||||
});
|
||||
|
||||
OC.Share.ShareItemModel = ShareItemModel;
|
||||
})();
|
8
docker/tanner/snare/dist/pages/5/1410a67e8668b8523294d3d292d5315a
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/1410a67e8668b8523294d3d292d5315a
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/play-previous.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/18f9b4d7a67eadffc01e7b71b10d4c6b
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/18f9b4d7a67eadffc01e7b71b10d4c6b
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/starred.svg was not found on this server.</p>
|
||||
</body></html>
|
6
docker/tanner/snare/dist/pages/5/1a08fe6feec5c9805a29a854fff904ec
vendored
Normal file
6
docker/tanner/snare/dist/pages/5/1a08fe6feec5c9805a29a854fff904ec
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
$(document).on('ajaxSend',function(elm, xhr, settings) {
|
||||
if(settings.crossDomain === false) {
|
||||
xhr.setRequestHeader('requesttoken', oc_requesttoken);
|
||||
xhr.setRequestHeader('OCS-APIREQUEST', 'true');
|
||||
}
|
||||
});
|
8
docker/tanner/snare/dist/pages/5/1b26a2ac26e30b982afff5ad49e0debe
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/1b26a2ac26e30b982afff5ad49e0debe
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/caret-dark.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/1b87b581d6d68a1e86d0dc1869ea0ce3
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/1b87b581d6d68a1e86d0dc1869ea0ce3
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/error-white.svg was not found on this server.</p>
|
||||
</body></html>
|
238
docker/tanner/snare/dist/pages/5/1c8c915f45ba51325697d446a83e18ca
vendored
Normal file
238
docker/tanner/snare/dist/pages/5/1c8c915f45ba51325697d446a83e18ca
vendored
Normal file
@ -0,0 +1,238 @@
|
||||
/**
|
||||
* Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3
|
||||
* or later.
|
||||
*
|
||||
* See the COPYING-README file.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* L10N namespace with localization functions.
|
||||
*
|
||||
* @namespace
|
||||
*/
|
||||
OC.L10N = {
|
||||
/**
|
||||
* String bundles with app name as key.
|
||||
* @type {Object.<String,String>}
|
||||
*/
|
||||
_bundles: {},
|
||||
|
||||
/**
|
||||
* Plural functions, key is app name and value is function.
|
||||
* @type {Object.<String,Function>}
|
||||
*/
|
||||
_pluralFunctions: {},
|
||||
|
||||
/**
|
||||
* Load an app's translation bundle if not loaded already.
|
||||
*
|
||||
* @param {String} appName name of the app
|
||||
* @param {Function} callback callback to be called when
|
||||
* the translations are loaded
|
||||
* @return {Promise} promise
|
||||
*/
|
||||
load: function(appName, callback) {
|
||||
// already available ?
|
||||
if (this._bundles[appName] || OC.getLocale() === 'en') {
|
||||
var deferred = $.Deferred();
|
||||
var promise = deferred.promise();
|
||||
promise.then(callback);
|
||||
deferred.resolve();
|
||||
return promise;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var url = OC.filePath(appName, 'l10n', OC.getLocale() + '.json');
|
||||
|
||||
// load JSON translation bundle per AJAX
|
||||
return $.get(url)
|
||||
.then(
|
||||
function(result) {
|
||||
if (result.translations) {
|
||||
self.register(appName, result.translations, result.pluralForm);
|
||||
}
|
||||
})
|
||||
.then(callback);
|
||||
},
|
||||
|
||||
/**
|
||||
* Register an app's translation bundle.
|
||||
*
|
||||
* @param {String} appName name of the app
|
||||
* @param {Object<String,String>} bundle
|
||||
* @param {Function|String} [pluralForm] optional plural function or plural string
|
||||
*/
|
||||
register: function(appName, bundle, pluralForm) {
|
||||
var self = this;
|
||||
if (_.isUndefined(this._bundles[appName])) {
|
||||
this._bundles[appName] = bundle || {};
|
||||
|
||||
if (_.isFunction(pluralForm)) {
|
||||
this._pluralFunctions[appName] = pluralForm;
|
||||
} else {
|
||||
// generate plural function based on form
|
||||
this._pluralFunctions[appName] = this._generatePluralFunction(pluralForm);
|
||||
}
|
||||
} else {
|
||||
// Theme overwriting the default language
|
||||
_.extend(self._bundles[appName], bundle);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Generates a plural function based on the given plural form.
|
||||
* If an invalid form has been given, returns a default function.
|
||||
*
|
||||
* @param {String} pluralForm plural form
|
||||
*/
|
||||
_generatePluralFunction: function(pluralForm) {
|
||||
// default func
|
||||
var func = function (n) {
|
||||
var p = (n !== 1) ? 1 : 0;
|
||||
return { 'nplural' : 2, 'plural' : p };
|
||||
};
|
||||
|
||||
if (!pluralForm) {
|
||||
console.warn('Missing plural form in language file');
|
||||
return func;
|
||||
}
|
||||
|
||||
/**
|
||||
* code below has been taken from jsgettext - which is LGPL licensed
|
||||
* https://developer.berlios.de/projects/jsgettext/
|
||||
* http://cvs.berlios.de/cgi-bin/viewcvs.cgi/jsgettext/jsgettext/lib/Gettext.js
|
||||
*/
|
||||
var pf_re = new RegExp('^(\\s*nplurals\\s*=\\s*[0-9]+\\s*;\\s*plural\\s*=\\s*(?:\\s|[-\\?\\|&=!<>+*/%:;a-zA-Z0-9_\\(\\)])+)', 'm');
|
||||
if (pf_re.test(pluralForm)) {
|
||||
//ex english: "Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
//pf = "nplurals=2; plural=(n != 1);";
|
||||
//ex russian: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10< =4 && (n%100<10 or n%100>=20) ? 1 : 2)
|
||||
//pf = "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)";
|
||||
var pf = pluralForm;
|
||||
if (! /;\s*$/.test(pf)) {
|
||||
pf = pf.concat(';');
|
||||
}
|
||||
/* We used to use eval, but it seems IE has issues with it.
|
||||
* We now use "new Function", though it carries a slightly
|
||||
* bigger performance hit.
|
||||
var code = 'function (n) { var plural; var nplurals; '+pf+' return { "nplural" : nplurals, "plural" : (plural === true ? 1 : plural ? plural : 0) }; };';
|
||||
Gettext._locale_data[domain].head.plural_func = eval("("+code+")");
|
||||
*/
|
||||
var code = 'var plural; var nplurals; '+pf+' return { "nplural" : nplurals, "plural" : (plural === true ? 1 : plural ? plural : 0) };';
|
||||
func = new Function("n", code);
|
||||
} else {
|
||||
console.warn('Invalid plural form in language file: "' + pluralForm + '"');
|
||||
}
|
||||
return func;
|
||||
},
|
||||
|
||||
/**
|
||||
* Translate a string
|
||||
* @param {string} app the id of the app for which to translate the string
|
||||
* @param {string} text the string to translate
|
||||
* @param [vars] map of placeholder key to value
|
||||
* @param {number} [count] number to replace %n with
|
||||
* @param {array} [options] options array
|
||||
* @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)
|
||||
* @return {string}
|
||||
*/
|
||||
translate: function(app, text, vars, count, options) {
|
||||
var defaultOptions = {
|
||||
escape: true
|
||||
},
|
||||
allOptions = options || {};
|
||||
_.defaults(allOptions, defaultOptions);
|
||||
|
||||
// TODO: cache this function to avoid inline recreation
|
||||
// of the same function over and over again in case
|
||||
// translate() is used in a loop
|
||||
var _build = function (text, vars, count) {
|
||||
return text.replace(/%n/g, count).replace(/{([^{}]*)}/g,
|
||||
function (a, b) {
|
||||
var r = vars[b];
|
||||
if(typeof r === 'string' || typeof r === 'number') {
|
||||
if(allOptions.escape) {
|
||||
return escapeHTML(r);
|
||||
} else {
|
||||
return r;
|
||||
}
|
||||
} else {
|
||||
return a;
|
||||
}
|
||||
}
|
||||
);
|
||||
};
|
||||
var translation = text;
|
||||
var bundle = this._bundles[app] || {};
|
||||
var value = bundle[text];
|
||||
if( typeof(value) !== 'undefined' ){
|
||||
translation = value;
|
||||
}
|
||||
|
||||
if(typeof vars === 'object' || count !== undefined ) {
|
||||
return _build(translation, vars, count);
|
||||
} else {
|
||||
return translation;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Translate a plural string
|
||||
* @param {string} app the id of the app for which to translate the string
|
||||
* @param {string} textSingular the string to translate for exactly one object
|
||||
* @param {string} textPlural the string to translate for n objects
|
||||
* @param {number} count number to determine whether to use singular or plural
|
||||
* @param [vars] map of placeholder key to value
|
||||
* @param {array} [options] options array
|
||||
* @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)
|
||||
* @return {string} Translated string
|
||||
*/
|
||||
translatePlural: function(app, textSingular, textPlural, count, vars, options) {
|
||||
var identifier = '_' + textSingular + '_::_' + textPlural + '_';
|
||||
var bundle = this._bundles[app] || {};
|
||||
var value = bundle[identifier];
|
||||
if( typeof(value) !== 'undefined' ){
|
||||
var translation = value;
|
||||
if ($.isArray(translation)) {
|
||||
var plural = this._pluralFunctions[app](count);
|
||||
return this.translate(app, translation[plural.plural], vars, count, options);
|
||||
}
|
||||
}
|
||||
|
||||
if(count === 1) {
|
||||
return this.translate(app, textSingular, vars, count, options);
|
||||
}
|
||||
else{
|
||||
return this.translate(app, textPlural, vars, count, options);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* translate a string
|
||||
* @param {string} app the id of the app for which to translate the string
|
||||
* @param {string} text the string to translate
|
||||
* @param [vars] map of placeholder key to value
|
||||
* @param {number} [count] number to replace %n with
|
||||
* @return {string}
|
||||
*/
|
||||
window.t = _.bind(OC.L10N.translate, OC.L10N);
|
||||
|
||||
/**
|
||||
* translate a string
|
||||
* @param {string} app the id of the app for which to translate the string
|
||||
* @param {string} text_singular the string to translate for exactly one object
|
||||
* @param {string} text_plural the string to translate for n objects
|
||||
* @param {number} count number to determine whether to use singular or plural
|
||||
* @param [vars] map of placeholder key to value
|
||||
* @return {string} Translated string
|
||||
*/
|
||||
window.n = _.bind(OC.L10N.translatePlural, OC.L10N);
|
||||
|
||||
Handlebars.registerHelper('t', function(app, text) {
|
||||
return OC.L10N.translate(app, text);
|
||||
});
|
||||
|
415
docker/tanner/snare/dist/pages/5/1d627629d45b1396b09ee5c268e0f52f
vendored
Normal file
415
docker/tanner/snare/dist/pages/5/1d627629d45b1396b09ee5c268e0f52f
vendored
Normal file
@ -0,0 +1,415 @@
|
||||
/**
|
||||
* ownCloud - core
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Jörn Friedrich Dreyer <jfd@owncloud.com>
|
||||
* @copyright Jörn Friedrich Dreyer 2014
|
||||
*/
|
||||
|
||||
(function () {
|
||||
/**
|
||||
* @class OCA.Search
|
||||
* @classdesc
|
||||
*
|
||||
* The Search class manages a search queries and their results
|
||||
*
|
||||
* @param $searchBox container element with existing markup for the #searchbox form
|
||||
* @param $searchResults container element for results und status message
|
||||
*/
|
||||
var Search = function($searchBox, $searchResults) {
|
||||
this.initialize($searchBox, $searchResults);
|
||||
};
|
||||
/**
|
||||
* @memberof OC
|
||||
*/
|
||||
Search.prototype = {
|
||||
|
||||
/**
|
||||
* Initialize the search box
|
||||
*
|
||||
* @param $searchBox container element with existing markup for the #searchbox form
|
||||
* @param $searchResults container element for results und status message
|
||||
* @private
|
||||
*/
|
||||
initialize: function($searchBox, $searchResults) {
|
||||
|
||||
var self = this;
|
||||
|
||||
/**
|
||||
* contains closures that are called to filter the current content
|
||||
*/
|
||||
var filters = {};
|
||||
this.setFilter = function(type, filter) {
|
||||
filters[type] = filter;
|
||||
};
|
||||
this.hasFilter = function(type) {
|
||||
return typeof filters[type] !== 'undefined';
|
||||
};
|
||||
this.getFilter = function(type) {
|
||||
return filters[type];
|
||||
};
|
||||
|
||||
/**
|
||||
* contains closures that are called to render search results
|
||||
*/
|
||||
var renderers = {};
|
||||
this.setRenderer = function(type, renderer) {
|
||||
renderers[type] = renderer;
|
||||
};
|
||||
this.hasRenderer = function(type) {
|
||||
return typeof renderers[type] !== 'undefined';
|
||||
};
|
||||
this.getRenderer = function(type) {
|
||||
return renderers[type];
|
||||
};
|
||||
|
||||
/**
|
||||
* contains closures that are called when a search result has been clicked
|
||||
*/
|
||||
var handlers = {};
|
||||
this.setHandler = function(type, handler) {
|
||||
handlers[type] = handler;
|
||||
};
|
||||
this.hasHandler = function(type) {
|
||||
return typeof handlers[type] !== 'undefined';
|
||||
};
|
||||
this.getHandler = function(type) {
|
||||
return handlers[type];
|
||||
};
|
||||
|
||||
var currentResult = -1;
|
||||
var lastQuery = '';
|
||||
var lastInApps = [];
|
||||
var lastPage = 0;
|
||||
var lastSize = 30;
|
||||
var lastResults = [];
|
||||
var timeoutID = null;
|
||||
|
||||
this.getLastQuery = function() {
|
||||
return lastQuery;
|
||||
};
|
||||
|
||||
/**
|
||||
* Do a search query and display the results
|
||||
* @param {string} query the search query
|
||||
* @param inApps
|
||||
* @param page
|
||||
* @param size
|
||||
*/
|
||||
this.search = function(query, inApps, page, size) {
|
||||
if (query) {
|
||||
OC.addStyle('core/search','results');
|
||||
if (typeof page !== 'number') {
|
||||
page = 1;
|
||||
}
|
||||
if (typeof size !== 'number') {
|
||||
size = 30;
|
||||
}
|
||||
if (typeof inApps !== 'object') {
|
||||
var currentApp = getCurrentApp();
|
||||
if(currentApp) {
|
||||
inApps = [currentApp];
|
||||
} else {
|
||||
inApps = [];
|
||||
}
|
||||
}
|
||||
// prevent double pages
|
||||
if ($searchResults && query === lastQuery && page === lastPage && size === lastSize) {
|
||||
return;
|
||||
}
|
||||
window.clearTimeout(timeoutID);
|
||||
timeoutID = window.setTimeout(function() {
|
||||
lastQuery = query;
|
||||
lastInApps = inApps;
|
||||
lastPage = page;
|
||||
lastSize = size;
|
||||
|
||||
//show spinner
|
||||
$searchResults.removeClass('hidden');
|
||||
$status.addClass('status');
|
||||
$status.html(t('core', 'Searching other places')+'<img class="spinner" alt="search in progress" src="'+OC.webroot+'/core/img/loading.gif" />');
|
||||
|
||||
// do the actual search query
|
||||
$.getJSON(OC.generateUrl('core/search'), {query:query, inApps:inApps, page:page, size:size }, function(results) {
|
||||
lastResults = results;
|
||||
if (page === 1) {
|
||||
showResults(results);
|
||||
} else {
|
||||
addResults(results);
|
||||
}
|
||||
});
|
||||
}, 500);
|
||||
}
|
||||
};
|
||||
|
||||
//TODO should be a core method, see https://github.com/owncloud/core/issues/12557
|
||||
function getCurrentApp() {
|
||||
var content = document.getElementById('content');
|
||||
if (content) {
|
||||
var classList = document.getElementById('content').className.split(/\s+/);
|
||||
for (var i = 0; i < classList.length; i++) {
|
||||
if (classList[i].indexOf('app-') === 0) {
|
||||
return classList[i].substr(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
var $status = $searchResults.find('#status');
|
||||
// summaryAndStatusHeight is a constant
|
||||
var summaryAndStatusHeight = 118;
|
||||
|
||||
function isStatusOffScreen() {
|
||||
return $searchResults.position() &&
|
||||
($searchResults.position().top + summaryAndStatusHeight > window.innerHeight);
|
||||
}
|
||||
|
||||
function placeStatus() {
|
||||
if (isStatusOffScreen()) {
|
||||
$status.addClass('fixed');
|
||||
} else {
|
||||
$status.removeClass('fixed');
|
||||
}
|
||||
}
|
||||
function showResults(results) {
|
||||
lastResults = results;
|
||||
$searchResults.find('tr.result').remove();
|
||||
$searchResults.removeClass('hidden');
|
||||
addResults(results);
|
||||
}
|
||||
function addResults(results) {
|
||||
var $template = $searchResults.find('tr.template');
|
||||
jQuery.each(results, function (i, result) {
|
||||
var $row = $template.clone();
|
||||
$row.removeClass('template');
|
||||
$row.addClass('result');
|
||||
|
||||
$row.data('result', result);
|
||||
|
||||
// generic results only have four attributes
|
||||
$row.find('td.info div.name').text(result.name);
|
||||
$row.find('td.info a').attr('href', result.link);
|
||||
|
||||
/**
|
||||
* Give plugins the ability to customize the search results. see result.js for examples
|
||||
*/
|
||||
if (self.hasRenderer(result.type)) {
|
||||
$row = self.getRenderer(result.type)($row, result);
|
||||
} else {
|
||||
// for backward compatibility add text div
|
||||
$row.find('td.info div.name').addClass('result');
|
||||
$row.find('td.result div.name').after('<div class="text"></div>');
|
||||
$row.find('td.result div.text').text(result.name);
|
||||
if (OC.search.customResults && OC.search.customResults[result.type]) {
|
||||
OC.search.customResults[result.type]($row, result);
|
||||
}
|
||||
}
|
||||
if ($row) {
|
||||
$searchResults.find('tbody').append($row);
|
||||
}
|
||||
});
|
||||
var count = $searchResults.find('tr.result').length;
|
||||
$status.data('count', count);
|
||||
if (count === 0) {
|
||||
$status.addClass('emptycontent').removeClass('status');
|
||||
$status.html('');
|
||||
$status.append('<div class="icon-search"></div>');
|
||||
$status.append('<h2>' + t('core', 'No search results in other folders') + '</h2>');
|
||||
} else {
|
||||
$status.removeClass('emptycontent').addClass('status');
|
||||
$status.text(n('core', '{count} search result in another folder', '{count} search results in other folders', count, {count:count}));
|
||||
}
|
||||
}
|
||||
function renderCurrent() {
|
||||
var result = $searchResults.find('tr.result')[currentResult];
|
||||
if (result) {
|
||||
var $result = $(result);
|
||||
var currentOffset = $('#app-content').scrollTop();
|
||||
$('#app-content').animate({
|
||||
// Scrolling to the top of the new result
|
||||
scrollTop: currentOffset + $result.offset().top - $result.height() * 2
|
||||
}, {
|
||||
duration: 100
|
||||
});
|
||||
$searchResults.find('tr.result.current').removeClass('current');
|
||||
$result.addClass('current');
|
||||
}
|
||||
}
|
||||
this.hideResults = function() {
|
||||
$searchResults.addClass('hidden');
|
||||
$searchResults.find('tr.result').remove();
|
||||
lastQuery = false;
|
||||
};
|
||||
this.clear = function() {
|
||||
self.hideResults();
|
||||
if(self.hasFilter(getCurrentApp())) {
|
||||
self.getFilter(getCurrentApp())('');
|
||||
}
|
||||
$searchBox.val('');
|
||||
$searchBox.blur();
|
||||
};
|
||||
|
||||
/**
|
||||
* Event handler for when scrolling the list container.
|
||||
* This appends/renders the next page of entries when reaching the bottom.
|
||||
*/
|
||||
function onScroll() {
|
||||
if ($searchResults && lastQuery !== false && lastResults.length > 0) {
|
||||
var resultsBottom = $searchResults.offset().top + $searchResults.height();
|
||||
var containerBottom = $searchResults.offsetParent().offset().top +
|
||||
$searchResults.offsetParent().height();
|
||||
if ( resultsBottom < containerBottom * 1.2 ) {
|
||||
self.search(lastQuery, lastInApps, lastPage + 1);
|
||||
}
|
||||
placeStatus();
|
||||
}
|
||||
}
|
||||
|
||||
$('#app-content').on('scroll', _.bind(onScroll, this));
|
||||
|
||||
/**
|
||||
* scrolls the search results to the top
|
||||
*/
|
||||
function scrollToResults() {
|
||||
setTimeout(function() {
|
||||
if (isStatusOffScreen()) {
|
||||
var newScrollTop = $('#app-content').prop('scrollHeight') - $searchResults.height();
|
||||
console.log('scrolling to ' + newScrollTop);
|
||||
$('#app-content').animate({
|
||||
scrollTop: newScrollTop
|
||||
}, {
|
||||
duration: 100,
|
||||
complete: function () {
|
||||
scrollToResults();
|
||||
}
|
||||
});
|
||||
}
|
||||
}, 150);
|
||||
}
|
||||
|
||||
$('form.searchbox').submit(function(event) {
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
$searchBox.on('search', function () {
|
||||
if($searchBox.val() === '') {
|
||||
if(self.hasFilter(getCurrentApp())) {
|
||||
self.getFilter(getCurrentApp())('');
|
||||
}
|
||||
self.hideResults();
|
||||
}
|
||||
});
|
||||
$searchBox.keyup(function(event) {
|
||||
if (event.keyCode === 13) { //enter
|
||||
if(currentResult > -1) {
|
||||
var result = $searchResults.find('tr.result a')[currentResult];
|
||||
window.location = $(result).attr('href');
|
||||
}
|
||||
} else if(event.keyCode === 38) { //up
|
||||
if(currentResult > 0) {
|
||||
currentResult--;
|
||||
renderCurrent();
|
||||
}
|
||||
} else if(event.keyCode === 40) { //down
|
||||
if(lastResults.length > currentResult + 1){
|
||||
currentResult++;
|
||||
renderCurrent();
|
||||
}
|
||||
} else {
|
||||
var query = $searchBox.val();
|
||||
if (lastQuery !== query) {
|
||||
currentResult = -1;
|
||||
if (query.length > 2) {
|
||||
self.search(query);
|
||||
} else {
|
||||
self.hideResults();
|
||||
}
|
||||
if(self.hasFilter(getCurrentApp())) {
|
||||
self.getFilter(getCurrentApp())(query);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
$(document).keyup(function(event) {
|
||||
if(event.keyCode === 27) { //esc
|
||||
$searchBox.val('');
|
||||
if(self.hasFilter(getCurrentApp())) {
|
||||
self.getFilter(getCurrentApp())('');
|
||||
}
|
||||
self.hideResults();
|
||||
}
|
||||
});
|
||||
|
||||
$(document).keydown(function(event) {
|
||||
if ((event.ctrlKey || event.metaKey) && // Ctrl or Command (OSX)
|
||||
!event.shiftKey &&
|
||||
event.keyCode === 70 && // F
|
||||
self.hasFilter(getCurrentApp()) && // Search is enabled
|
||||
!$searchBox.is(':focus') // if searchbox is already focused do nothing (fallback to browser default)
|
||||
) {
|
||||
$searchBox.focus();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
$searchResults.on('click', 'tr.result', function (event) {
|
||||
var $row = $(this);
|
||||
var item = $row.data('result');
|
||||
if(self.hasHandler(item.type)){
|
||||
var result = self.getHandler(item.type)($row, item, event);
|
||||
$searchBox.val('');
|
||||
if(self.hasFilter(getCurrentApp())) {
|
||||
self.getFilter(getCurrentApp())('');
|
||||
}
|
||||
self.hideResults();
|
||||
return result;
|
||||
}
|
||||
});
|
||||
$searchResults.on('click', '#status', function (event) {
|
||||
event.preventDefault();
|
||||
scrollToResults();
|
||||
return false;
|
||||
});
|
||||
placeStatus();
|
||||
|
||||
OC.Plugins.attach('OCA.Search', this);
|
||||
|
||||
// hide search file if search is not enabled
|
||||
if(self.hasFilter(getCurrentApp())) {
|
||||
return;
|
||||
}
|
||||
if ($searchResults.length === 0) {
|
||||
$searchBox.hide();
|
||||
}
|
||||
}
|
||||
};
|
||||
OCA.Search = Search;
|
||||
})();
|
||||
|
||||
$(document).ready(function() {
|
||||
var $searchResults = $('#searchresults');
|
||||
if ($searchResults.length > 0) {
|
||||
$searchResults.addClass('hidden');
|
||||
$('#app-content')
|
||||
.find('.viewcontainer').css('min-height', 'initial');
|
||||
$searchResults.load(OC.webroot + '/core/search/templates/part.results.html', function () {
|
||||
OC.Search = new OCA.Search($('#searchbox'), $('#searchresults'));
|
||||
});
|
||||
} else {
|
||||
_.defer(function() {
|
||||
OC.Search = new OCA.Search($('#searchbox'), $('#searchresults'));
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @deprecated use get/setRenderer() instead
|
||||
*/
|
||||
OC.search.customResults = {};
|
||||
/**
|
||||
* @deprecated use get/setRenderer() instead
|
||||
*/
|
||||
OC.search.resultTypes = {};
|
8
docker/tanner/snare/dist/pages/5/1d64c1452b894f9ab863742c9aaf96fc
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/1d64c1452b894f9ab863742c9aaf96fc
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/view-play.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/1dc9c5c1e31bb044a16a4d538161a078
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/1dc9c5c1e31bb044a16a4d538161a078
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/view-close.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/1de7d95c81cf00f21dd9bf78cc866338
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/1de7d95c81cf00f21dd9bf78cc866338
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/shared.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/1e11f96e642d166cc5562874b2ad80d8
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/1e11f96e642d166cc5562874b2ad80d8
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/places/home.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/1f904ea7553ebfd2f33c2d61b37fad35
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/1f904ea7553ebfd2f33c2d61b37fad35
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-icons_cd0a0a_256x240.png was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/216e03f528e1d4765667b7fe9a394edf
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/216e03f528e1d4765667b7fe9a394edf
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/public.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/22b3a5be67276b7b4c374e2d19b71bf6
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/22b3a5be67276b7b4c374e2d19b71bf6
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-bg_glass_65_ffffff_1x400.png was not found on this server.</p>
|
||||
</body></html>
|
9977
docker/tanner/snare/dist/pages/5/22c148353a628e5d0bf0fb1981bdec8b
vendored
Normal file
9977
docker/tanner/snare/dist/pages/5/22c148353a628e5d0bf0fb1981bdec8b
vendored
Normal file
File diff suppressed because it is too large
Load Diff
8
docker/tanner/snare/dist/pages/5/23a51831037e1340c05b30ee319c7c87
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/23a51831037e1340c05b30ee319c7c87
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/share.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/24fc0f382e58f321cd4307b8bc1db9de
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/24fc0f382e58f321cd4307b8bc1db9de
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/rename.svg was not found on this server.</p>
|
||||
</body></html>
|
4
docker/tanner/snare/dist/pages/5/2504fd4e47740832e7f0daeb924c2788
vendored
Normal file
4
docker/tanner/snare/dist/pages/5/2504fd4e47740832e7f0daeb924c2788
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16px" width="16px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<path style="color:#000000;block-progression:tb;text-transform:none;text-indent:0" d="m4 6 4 4 4-3.9941z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 395 B |
2
docker/tanner/snare/dist/pages/5/26438b9ac098ffd30bfe31cc23b97f0b
vendored
Normal file
2
docker/tanner/snare/dist/pages/5/26438b9ac098ffd30bfe31cc23b97f0b
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" version="1.1" xml:space="preserve" height="16" width="16" enable-background="new 0 0 595.275 311.111" y="0px" x="0px" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 16 15.999999"><g transform="matrix(.125 0 0 .125 0 14)"><path d="m20-112c-11.08 0-20 8.92-20 20v88c0 11.08 8.92 20 20 20h88c11.08 0 20-8.92 20-20v-88c0-11.08-8.92-20-20-20h-88zm38.328 29.125c8.932 0 16.156 7.2089 16.156 16.141 0 1.2073-0.14055 2.3846-0.39062 3.5156-3.0889-1.4114-6.51-2.2188-10.125-2.2188-7.389 0-14 3.3102-18.484 8.5-2.0669-2.7134-3.2969-6.1152-3.2969-9.7969 0-8.932 7.2089-16.141 16.141-16.141zm-21.078 7.4688c1.7281 0 3.325 0.4979 4.6562 1.3906-0.98881 2.2266-1.5625 4.6906-1.5625 7.2812-0.000001 0.481 0.0253 0.96598 0.0625 1.4375-0.3285-0.02-0.63611-0.03125-0.96875-0.03125-3.4468 0-6.6932 0.9166-9.5 2.5-0.68798-1.2188-1.0781-2.6502-1.0781-4.1562 0-4.6514 3.7392-8.4219 8.3906-8.4219zm39.828 5.7969c8.4592 0 15.31 6.5054 16.016 14.781-2.7381 0.1835-5.3124 0.95225-7.625 2.1562-2.2297-4.0909-5.6126-7.4636-9.6875-9.7188 0.34758-1.3914 0.53125-2.8444 0.53125-4.3438 0-0.9636-0.10364-1.8898-0.25-2.8125 0.33833-0.0212 0.67198-0.0625 1.0156-0.0625zm-13.109 6.0156c12.498 0 22.609 10.11 22.609 22.609 0 12.498-10.11 22.609-22.609 22.609s-22.609-10.111-22.609-22.609c0-12.499 10.111-22.609 22.609-22.609zm-24.531 0.09375c0.41458 0 0.827 0.0345 1.2344 0.0625 0.5497 2.9515 1.8386 5.6671 3.6406 7.9219-3.0103 4.063-4.7813 9.0916-4.7813 14.531 0.000001 1.1378 0.06803 2.2628 0.21875 3.3594-0.48017-0.0664-0.95496-0.125-1.4531-0.125-4.1218 0-7.6921 2.3232-9.4688 5.75-4.2144-3.202-6.9375-8.2451-6.9375-13.953 0-9.6963 7.8507-17.547 17.547-17.547zm54.953 10.453c9.6963 0 17.547 7.8038 17.547 17.5-0.00001 9.6964-7.8507 17.547-17.547 17.547-5.1793 0-9.8376-2.2339-13.047-5.7969 4.3686-4.417 7.0625-10.492 7.0625-17.188 0-3.5761-0.75792-6.9842-2.1406-10.047 2.435-1.2747 5.1808-2.0156 8.125-2.0156zm-74.219 2.3125h0.01563c0.15552 0.0017 0.31393 0.02738 0.46875 0.03125-0.38539 1.5224-0.60937 3.1094-0.60937 4.75 0 6.4567 3.1766 12.183 8.0469 15.703-0.31205 1.0019-0.46875 2.0524-0.46875 3.1562 0 2.1267 0.62812 4.1265 1.7031 5.7969-2.6015 1.7904-5.7566 2.8594-9.1562 2.8594-8.9316 0-16.172-7.2555-16.172-16.187 0-8.9267 7.2462-16.102 16.172-16.109zm94.969 13.859c4.8964 0 8.8594 3.9786 8.8594 8.875 0 4.8965-3.963 8.8281-8.8594 8.8281-2.6882 0-5.0703-1.1975-6.6875-3.0781 3.2872-3.4734 5.3281-8.1468 5.3281-13.297 0-0.40912-0.0217-0.80036-0.0469-1.2031 0.45554-0.0724 0.92976-0.125 1.4062-0.125zm-76.844 0.95312c0.6229 0 1.2103 0.0663 1.7969 0.1875 1.0023 4.5568 3.2654 8.6601 6.4219 11.875-1.2936 3.2941-4.4657 5.6406-8.2187 5.6406-4.8962 0-8.8438-3.9788-8.8438-8.875s3.9476-8.8281 8.8438-8.8281z"/></g></svg>
|
After Width: | Height: | Size: 2.8 KiB |
2
docker/tanner/snare/dist/pages/5/272a69ff3e03d3953ed4c6b316f8bf32
vendored
Normal file
2
docker/tanner/snare/dist/pages/5/272a69ff3e03d3953ed4c6b316f8bf32
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
docker/tanner/snare/dist/pages/5/272c1346056e03ee4264804f7f8e10d3
vendored
Normal file
BIN
docker/tanner/snare/dist/pages/5/272c1346056e03ee4264804f7f8e10d3
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
8
docker/tanner/snare/dist/pages/5/27c29e1fef4a72852743a997400a07da
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/27c29e1fef4a72852743a997400a07da
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/pause-big.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/286e86d6d9f51d7c538980649dfac488
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/286e86d6d9f51d7c538980649dfac488
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/checkmark-color.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/28ebc7d7789e1fc337f9d46716e1fac6
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/28ebc7d7789e1fc337f9d46716e1fac6
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/info.svg was not found on this server.</p>
|
||||
</body></html>
|
14
docker/tanner/snare/dist/pages/5/2b9aff01c53aef1ca65dbb6a3f501e18
vendored
Normal file
14
docker/tanner/snare/dist/pages/5/2b9aff01c53aef1ca65dbb6a3f501e18
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright (c) 2015
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3
|
||||
* or later.
|
||||
*
|
||||
* See the COPYING-README file.
|
||||
*
|
||||
*/
|
||||
|
||||
/* global Backbone */
|
||||
if(!_.isUndefined(Backbone)) {
|
||||
OC.Backbone = Backbone.noConflict();
|
||||
}
|
23
docker/tanner/snare/dist/pages/5/2be5aeca84f167ff589a59ed8f7e539a
vendored
Normal file
23
docker/tanner/snare/dist/pages/5/2be5aeca84f167ff589a59ed8f7e539a
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
/* for low-res screens, use Regular font-weight instead of Light */
|
||||
@media (-webkit-max-device-pixel-ratio: 1.3), (max-resolution: 124.8dpi) {
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
src: local('Open Sans'), local('OpenSans'), url('../fonts/OpenSans-Regular.woff') format('woff');
|
||||
}
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 300;
|
||||
src: local('Open Sans Light'), local('OpenSans-Light'), url('../fonts/OpenSans-Light.woff') format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Open Sans';
|
||||
font-style: normal;
|
||||
font-weight: 600;
|
||||
src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url('../fonts/OpenSans-Semibold.woff') format('woff');
|
||||
}
|
8
docker/tanner/snare/dist/pages/5/2bf4c43d416669bf989bb6348d92596d
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/2bf4c43d416669bf989bb6348d92596d
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-icons_888888_256x240.png was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/2c7447150abd4a732e91bb660544b090
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/2c7447150abd4a732e91bb660544b090
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/radio.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/2d15c0abbfa9e912307eddfd25ea4eb1
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/2d15c0abbfa9e912307eddfd25ea4eb1
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /select2-spinner.gif was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/2de8f6656092e142040622dab21b01bf
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/2de8f6656092e142040622dab21b01bf
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/mail.svg was not found on this server.</p>
|
||||
</body></html>
|
105
docker/tanner/snare/dist/pages/5/320199dfe0efe9c5e7451643e1d9575c
vendored
Normal file
105
docker/tanner/snare/dist/pages/5/320199dfe0efe9c5e7451643e1d9575c
vendored
Normal file
@ -0,0 +1,105 @@
|
||||
/**
|
||||
* jQuery plugin for micro templates
|
||||
*
|
||||
* Strings are automatically escaped, but that can be disabled by setting
|
||||
* escapeFunction to null.
|
||||
*
|
||||
* Usage examples:
|
||||
*
|
||||
* var htmlStr = '<p>Bake, uncovered, until the {greasystuff} is melted and the {pasta} is heated through, about {min} minutes.</p>'
|
||||
* $(htmlStr).octemplate({greasystuff: 'cheese', pasta: 'macaroni', min: 10});
|
||||
*
|
||||
* var htmlStr = '<p>Welcome back {user}</p>';
|
||||
* $(htmlStr).octemplate({user: 'John Q. Public'}, {escapeFunction: null});
|
||||
*
|
||||
* Be aware that the target string must be wrapped in an HTML element for the
|
||||
* plugin to work. The following won't work:
|
||||
*
|
||||
* var textStr = 'Welcome back {user}';
|
||||
* $(textStr).octemplate({user: 'John Q. Public'});
|
||||
*
|
||||
* For anything larger than one-liners, you can use a simple $.get() ajax
|
||||
* request to get the template, or you can embed them it the page using the
|
||||
* text/template type:
|
||||
*
|
||||
* <script id="contactListItemTemplate" type="text/template">
|
||||
* <tr class="contact" data-id="{id}">
|
||||
* <td class="name">
|
||||
* <input type="checkbox" name="id" value="{id}" /><span class="nametext">{name}</span>
|
||||
* </td>
|
||||
* <td class="email">
|
||||
* <a href="mailto:{email}">{email}</a>
|
||||
* </td>
|
||||
* <td class="phone">{phone}</td>
|
||||
* </tr>
|
||||
* </script>
|
||||
*
|
||||
* var $tmpl = $('#contactListItemTemplate');
|
||||
* var contacts = // fetched in some ajax call
|
||||
*
|
||||
* $.each(contacts, function(idx, contact) {
|
||||
* $contactList.append(
|
||||
* $tmpl.octemplate({
|
||||
* id: contact.getId(),
|
||||
* name: contact.getDisplayName(),
|
||||
* email: contact.getPreferredEmail(),
|
||||
* phone: contact.getPreferredPhone(),
|
||||
* });
|
||||
* );
|
||||
* });
|
||||
*/
|
||||
(function( $ ) {
|
||||
/**
|
||||
* Object Template
|
||||
* Inspired by micro templating done by e.g. underscore.js
|
||||
*/
|
||||
var Template = {
|
||||
init: function(vars, options, elem) {
|
||||
// Mix in the passed in options with the default options
|
||||
this.vars = vars;
|
||||
this.options = $.extend({},this.options,options);
|
||||
|
||||
this.elem = elem;
|
||||
var self = this;
|
||||
|
||||
if(typeof this.options.escapeFunction === 'function') {
|
||||
var keys = Object.keys(this.vars);
|
||||
for (var key = 0; key < keys.length; key++) {
|
||||
if(typeof this.vars[keys[key]] === 'string') {
|
||||
this.vars[keys[key]] = self.options.escapeFunction(this.vars[keys[key]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var _html = this._build(this.vars);
|
||||
return $(_html);
|
||||
},
|
||||
// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript
|
||||
_build: function(o){
|
||||
var data = this.elem.attr('type') === 'text/template' ? this.elem.html() : this.elem.get(0).outerHTML;
|
||||
try {
|
||||
return data.replace(/{([^{}]*)}/g,
|
||||
function (a, b) {
|
||||
var r = o[b];
|
||||
return typeof r === 'string' || typeof r === 'number' ? r : a;
|
||||
}
|
||||
);
|
||||
} catch(e) {
|
||||
console.error(e, 'data:', data);
|
||||
}
|
||||
},
|
||||
options: {
|
||||
escapeFunction: escapeHTML
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.octemplate = function(vars, options) {
|
||||
var vars = vars ? vars : {};
|
||||
if(this.length) {
|
||||
var _template = Object.create(Template);
|
||||
return _template.init(vars, options, this);
|
||||
}
|
||||
};
|
||||
|
||||
})( jQuery );
|
||||
|
164
docker/tanner/snare/dist/pages/5/329184e26e8ba2719ccd43a7b12d342b
vendored
Normal file
164
docker/tanner/snare/dist/pages/5/329184e26e8ba2719ccd43a7b12d342b
vendored
Normal file
@ -0,0 +1,164 @@
|
||||
@media only screen and (max-width: 768px) {
|
||||
|
||||
#body-login #header {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
#body-login .wrapper {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: horizontal;
|
||||
-webkit-box-pack: center;
|
||||
-webkit-box-align: center;
|
||||
|
||||
display: -webkit-flex;
|
||||
-webkit-flex-direction: row;
|
||||
-webkit-align-self: center;
|
||||
-webkit-align-items: center;
|
||||
|
||||
display: -moz-box;
|
||||
-moz-box-orient: horizontal;
|
||||
-moz-box-pack: center;
|
||||
-moz-box-align: center;
|
||||
|
||||
display: -ms-flexbox;
|
||||
-ms-flex-direction: row;
|
||||
-ms-flex-pack: center;
|
||||
-ms-flex-align: center;
|
||||
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* on mobile public share, show only the icon of the logo, hide the text */
|
||||
#body-public #header .header-appname-container {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* do not show update notification on mobile */
|
||||
#update-notification {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* position share dropdown */
|
||||
#dropdown {
|
||||
margin-right: 10% !important;
|
||||
width: 80% !important;
|
||||
}
|
||||
|
||||
/* fix name autocomplete not showing on mobile */
|
||||
.ui-autocomplete {
|
||||
z-index: 1000 !important;
|
||||
}
|
||||
|
||||
/* fix error display on smaller screens */
|
||||
.error-wide {
|
||||
width: 100%;
|
||||
margin-left: 0 !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
|
||||
/* APP SIDEBAR TOGGLE and SWIPE ----------------------------------------------*/
|
||||
|
||||
#app-navigation,
|
||||
#app-content {
|
||||
position: absolute !important;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
#app-navigation {
|
||||
width: 250px !important;
|
||||
}
|
||||
|
||||
#app-content {
|
||||
width: 100% !important;
|
||||
left: 0 !important;
|
||||
background-color: #fff;
|
||||
overflow-x: hidden !important;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
/* allow horizontal scrollbar in settings
|
||||
otherwise user management is not usable on mobile */
|
||||
#body-settings #app-content {
|
||||
overflow-x: auto !important;
|
||||
}
|
||||
|
||||
#app-navigation-toggle {
|
||||
position: fixed;
|
||||
display: inline-block !important;
|
||||
top: 45px;
|
||||
left: 0;
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
z-index: 149;
|
||||
background-color: rgba(255, 255, 255, .7);
|
||||
cursor: pointer;
|
||||
opacity: .6;
|
||||
}
|
||||
#app-navigation-toggle:hover,
|
||||
#app-navigation-toggle:focus {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
|
||||
/* controls bar for mobile */
|
||||
#controls {
|
||||
min-width: initial !important;
|
||||
left: 0 !important;
|
||||
padding-left: 0;
|
||||
}
|
||||
/* position controls for apps with app-navigation */
|
||||
#app-navigation+#app-content #controls {
|
||||
padding-left: 44px;
|
||||
}
|
||||
|
||||
/* .viewer-mode is when text editor, PDF viewer, etc is open */
|
||||
#body-user .app-files.viewer-mode #controls {
|
||||
padding-left: 0 !important;
|
||||
}
|
||||
.app-files.viewer-mode #app-navigation-toggle {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
table.multiselect thead {
|
||||
left: 0 !important;
|
||||
}
|
||||
|
||||
|
||||
/* prevent overflow in user management controls bar */
|
||||
#usersearchform {
|
||||
display: none;
|
||||
}
|
||||
#body-settings #controls {
|
||||
min-width: 768px !important;
|
||||
}
|
||||
|
||||
|
||||
/* do not show dates in filepicker */
|
||||
#oc-dialog-filepicker-content .filelist .date {
|
||||
display: none;
|
||||
}
|
||||
#oc-dialog-filepicker-content .filelist .filename {
|
||||
max-width: 80%;
|
||||
}
|
||||
|
||||
|
||||
/* fix controls bar jumping when navigation is slid out */
|
||||
.snapjs-left #app-navigation-toggle,
|
||||
.snapjs-left #controls {
|
||||
top: 0;
|
||||
}
|
||||
.snapjs-left table.multiselect thead {
|
||||
top: 44px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* end of media query */
|
||||
}
|
8
docker/tanner/snare/dist/pages/5/33e44715f24907a19f025a3e51f1b43a
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/33e44715f24907a19f025a3e51f1b43a
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/download.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/342c9a7cffc1a857f545d63179f8ea3b
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/342c9a7cffc1a857f545d63179f8ea3b
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/radio-white.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/345b25dc7bb641426caa7c74cb25445c
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/345b25dc7bb641426caa7c74cb25445c
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/checkbox-mixed-disabled.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/35d9658735e425766c2a9747c7b33cbd
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/35d9658735e425766c2a9747c7b33cbd
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/add.svg was not found on this server.</p>
|
||||
</body></html>
|
514
docker/tanner/snare/dist/pages/5/377711c741764c8a98f2cb89af16eabf
vendored
Normal file
514
docker/tanner/snare/dist/pages/5/377711c741764c8a98f2cb89af16eabf
vendored
Normal file
@ -0,0 +1,514 @@
|
||||
/* ========================================================================
|
||||
* Bootstrap: tooltip.js v3.3.6
|
||||
* http://getbootstrap.com/javascript/#tooltip
|
||||
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||
* ========================================================================
|
||||
* Copyright 2011-2015 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
* ======================================================================== */
|
||||
|
||||
|
||||
+function ($) {
|
||||
'use strict';
|
||||
|
||||
// TOOLTIP PUBLIC CLASS DEFINITION
|
||||
// ===============================
|
||||
|
||||
var Tooltip = function (element, options) {
|
||||
this.type = null
|
||||
this.options = null
|
||||
this.enabled = null
|
||||
this.timeout = null
|
||||
this.hoverState = null
|
||||
this.$element = null
|
||||
this.inState = null
|
||||
|
||||
this.init('tooltip', element, options)
|
||||
}
|
||||
|
||||
Tooltip.VERSION = '3.3.6'
|
||||
|
||||
Tooltip.TRANSITION_DURATION = 150
|
||||
|
||||
Tooltip.DEFAULTS = {
|
||||
animation: true,
|
||||
placement: 'top',
|
||||
selector: false,
|
||||
template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
|
||||
trigger: 'hover focus',
|
||||
title: '',
|
||||
delay: 0,
|
||||
html: false,
|
||||
container: false,
|
||||
viewport: {
|
||||
selector: 'body',
|
||||
padding: 0
|
||||
}
|
||||
}
|
||||
|
||||
Tooltip.prototype.init = function (type, element, options) {
|
||||
this.enabled = true
|
||||
this.type = type
|
||||
this.$element = $(element)
|
||||
this.options = this.getOptions(options)
|
||||
this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
|
||||
this.inState = { click: false, hover: false, focus: false }
|
||||
|
||||
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
|
||||
throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
|
||||
}
|
||||
|
||||
var triggers = this.options.trigger.split(' ')
|
||||
|
||||
for (var i = triggers.length; i--;) {
|
||||
var trigger = triggers[i]
|
||||
|
||||
if (trigger == 'click') {
|
||||
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
|
||||
} else if (trigger != 'manual') {
|
||||
var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
|
||||
var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
|
||||
|
||||
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
|
||||
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
|
||||
}
|
||||
}
|
||||
|
||||
this.options.selector ?
|
||||
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
|
||||
this.fixTitle()
|
||||
}
|
||||
|
||||
Tooltip.prototype.getDefaults = function () {
|
||||
return Tooltip.DEFAULTS
|
||||
}
|
||||
|
||||
Tooltip.prototype.getOptions = function (options) {
|
||||
options = $.extend({}, this.getDefaults(), this.$element.data(), options)
|
||||
|
||||
if (options.delay && typeof options.delay == 'number') {
|
||||
options.delay = {
|
||||
show: options.delay,
|
||||
hide: options.delay
|
||||
}
|
||||
}
|
||||
|
||||
return options
|
||||
}
|
||||
|
||||
Tooltip.prototype.getDelegateOptions = function () {
|
||||
var options = {}
|
||||
var defaults = this.getDefaults()
|
||||
|
||||
this._options && $.each(this._options, function (key, value) {
|
||||
if (defaults[key] != value) options[key] = value
|
||||
})
|
||||
|
||||
return options
|
||||
}
|
||||
|
||||
Tooltip.prototype.enter = function (obj) {
|
||||
var self = obj instanceof this.constructor ?
|
||||
obj : $(obj.currentTarget).data('bs.' + this.type)
|
||||
|
||||
if (!self) {
|
||||
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
|
||||
$(obj.currentTarget).data('bs.' + this.type, self)
|
||||
}
|
||||
|
||||
if (obj instanceof $.Event) {
|
||||
self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
|
||||
}
|
||||
|
||||
if (self.tip().hasClass('in') || self.hoverState == 'in') {
|
||||
self.hoverState = 'in'
|
||||
return
|
||||
}
|
||||
|
||||
clearTimeout(self.timeout)
|
||||
|
||||
self.hoverState = 'in'
|
||||
|
||||
if (!self.options.delay || !self.options.delay.show) return self.show()
|
||||
|
||||
self.timeout = setTimeout(function () {
|
||||
if (self.hoverState == 'in') self.show()
|
||||
}, self.options.delay.show)
|
||||
}
|
||||
|
||||
Tooltip.prototype.isInStateTrue = function () {
|
||||
for (var key in this.inState) {
|
||||
if (this.inState[key]) return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
Tooltip.prototype.leave = function (obj) {
|
||||
var self = obj instanceof this.constructor ?
|
||||
obj : $(obj.currentTarget).data('bs.' + this.type)
|
||||
|
||||
if (!self) {
|
||||
self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
|
||||
$(obj.currentTarget).data('bs.' + this.type, self)
|
||||
}
|
||||
|
||||
if (obj instanceof $.Event) {
|
||||
self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
|
||||
}
|
||||
|
||||
if (self.isInStateTrue()) return
|
||||
|
||||
clearTimeout(self.timeout)
|
||||
|
||||
self.hoverState = 'out'
|
||||
|
||||
if (!self.options.delay || !self.options.delay.hide) return self.hide()
|
||||
|
||||
self.timeout = setTimeout(function () {
|
||||
if (self.hoverState == 'out') self.hide()
|
||||
}, self.options.delay.hide)
|
||||
}
|
||||
|
||||
Tooltip.prototype.show = function () {
|
||||
var e = $.Event('show.bs.' + this.type)
|
||||
|
||||
if (this.hasContent() && this.enabled) {
|
||||
this.$element.trigger(e)
|
||||
|
||||
var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
|
||||
if (e.isDefaultPrevented() || !inDom) return
|
||||
var that = this
|
||||
|
||||
var $tip = this.tip()
|
||||
|
||||
var tipId = this.getUID(this.type)
|
||||
|
||||
this.setContent()
|
||||
$tip.attr('id', tipId)
|
||||
this.$element.attr('aria-describedby', tipId)
|
||||
|
||||
if (this.options.animation) $tip.addClass('fade')
|
||||
|
||||
var placement = typeof this.options.placement == 'function' ?
|
||||
this.options.placement.call(this, $tip[0], this.$element[0]) :
|
||||
this.options.placement
|
||||
|
||||
var autoToken = /\s?auto?\s?/i
|
||||
var autoPlace = autoToken.test(placement)
|
||||
if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
|
||||
|
||||
$tip
|
||||
.detach()
|
||||
.css({ top: 0, left: 0, display: 'block' })
|
||||
.addClass(placement)
|
||||
.data('bs.' + this.type, this)
|
||||
|
||||
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
|
||||
this.$element.trigger('inserted.bs.' + this.type)
|
||||
|
||||
var pos = this.getPosition()
|
||||
var actualWidth = $tip[0].offsetWidth
|
||||
var actualHeight = $tip[0].offsetHeight
|
||||
|
||||
if (autoPlace) {
|
||||
var orgPlacement = placement
|
||||
var viewportDim = this.getPosition(this.$viewport)
|
||||
|
||||
placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
|
||||
placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
|
||||
placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
|
||||
placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
|
||||
placement
|
||||
|
||||
$tip
|
||||
.removeClass(orgPlacement)
|
||||
.addClass(placement)
|
||||
}
|
||||
|
||||
var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
|
||||
|
||||
this.applyPlacement(calculatedOffset, placement)
|
||||
|
||||
var complete = function () {
|
||||
var prevHoverState = that.hoverState
|
||||
that.$element.trigger('shown.bs.' + that.type)
|
||||
that.hoverState = null
|
||||
|
||||
if (prevHoverState == 'out') that.leave(that)
|
||||
}
|
||||
|
||||
$.support.transition && this.$tip.hasClass('fade') ?
|
||||
$tip
|
||||
.one('bsTransitionEnd', complete)
|
||||
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
|
||||
complete()
|
||||
}
|
||||
}
|
||||
|
||||
Tooltip.prototype.applyPlacement = function (offset, placement) {
|
||||
var $tip = this.tip()
|
||||
var width = $tip[0].offsetWidth
|
||||
var height = $tip[0].offsetHeight
|
||||
|
||||
// manually read margins because getBoundingClientRect includes difference
|
||||
var marginTop = parseInt($tip.css('margin-top'), 10)
|
||||
var marginLeft = parseInt($tip.css('margin-left'), 10)
|
||||
|
||||
// we must check for NaN for ie 8/9
|
||||
if (isNaN(marginTop)) marginTop = 0
|
||||
if (isNaN(marginLeft)) marginLeft = 0
|
||||
|
||||
offset.top += marginTop
|
||||
offset.left += marginLeft
|
||||
|
||||
// $.fn.offset doesn't round pixel values
|
||||
// so we use setOffset directly with our own function B-0
|
||||
$.offset.setOffset($tip[0], $.extend({
|
||||
using: function (props) {
|
||||
$tip.css({
|
||||
top: Math.round(props.top),
|
||||
left: Math.round(props.left)
|
||||
})
|
||||
}
|
||||
}, offset), 0)
|
||||
|
||||
$tip.addClass('in')
|
||||
|
||||
// check to see if placing tip in new offset caused the tip to resize itself
|
||||
var actualWidth = $tip[0].offsetWidth
|
||||
var actualHeight = $tip[0].offsetHeight
|
||||
|
||||
if (placement == 'top' && actualHeight != height) {
|
||||
offset.top = offset.top + height - actualHeight
|
||||
}
|
||||
|
||||
var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
|
||||
|
||||
if (delta.left) offset.left += delta.left
|
||||
else offset.top += delta.top
|
||||
|
||||
var isVertical = /top|bottom/.test(placement)
|
||||
var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
|
||||
var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
|
||||
|
||||
$tip.offset(offset)
|
||||
this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
|
||||
}
|
||||
|
||||
Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
|
||||
this.arrow()
|
||||
.css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
|
||||
.css(isVertical ? 'top' : 'left', '')
|
||||
}
|
||||
|
||||
Tooltip.prototype.setContent = function () {
|
||||
var $tip = this.tip()
|
||||
var title = this.getTitle()
|
||||
|
||||
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
|
||||
$tip.removeClass('fade in top bottom left right')
|
||||
}
|
||||
|
||||
Tooltip.prototype.hide = function (callback) {
|
||||
var that = this
|
||||
var $tip = $(this.$tip)
|
||||
var e = $.Event('hide.bs.' + this.type)
|
||||
|
||||
function complete() {
|
||||
if (that.hoverState != 'in') $tip.detach()
|
||||
that.$element
|
||||
.removeAttr('aria-describedby')
|
||||
.trigger('hidden.bs.' + that.type)
|
||||
callback && callback()
|
||||
}
|
||||
|
||||
this.$element.trigger(e)
|
||||
|
||||
if (e.isDefaultPrevented()) return
|
||||
|
||||
$tip.removeClass('in')
|
||||
|
||||
$.support.transition && $tip.hasClass('fade') ?
|
||||
$tip
|
||||
.one('bsTransitionEnd', complete)
|
||||
.emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
|
||||
complete()
|
||||
|
||||
this.hoverState = null
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
Tooltip.prototype.fixTitle = function () {
|
||||
var $e = this.$element
|
||||
if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
|
||||
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
|
||||
}
|
||||
}
|
||||
|
||||
Tooltip.prototype.hasContent = function () {
|
||||
return this.getTitle()
|
||||
}
|
||||
|
||||
Tooltip.prototype.getPosition = function ($element) {
|
||||
$element = $element || this.$element
|
||||
|
||||
var el = $element[0]
|
||||
var isBody = el.tagName == 'BODY'
|
||||
|
||||
var elRect = el.getBoundingClientRect()
|
||||
if (elRect.width == null) {
|
||||
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
|
||||
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
|
||||
}
|
||||
var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
|
||||
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
|
||||
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
|
||||
|
||||
return $.extend({}, elRect, scroll, outerDims, elOffset)
|
||||
}
|
||||
|
||||
Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
|
||||
return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
||||
placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
|
||||
placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
|
||||
/* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
|
||||
|
||||
}
|
||||
|
||||
Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
|
||||
var delta = { top: 0, left: 0 }
|
||||
if (!this.$viewport) return delta
|
||||
|
||||
var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
|
||||
var viewportDimensions = this.getPosition(this.$viewport)
|
||||
|
||||
if (/right|left/.test(placement)) {
|
||||
var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
|
||||
var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
|
||||
if (topEdgeOffset < viewportDimensions.top) { // top overflow
|
||||
delta.top = viewportDimensions.top - topEdgeOffset
|
||||
} else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
|
||||
delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
|
||||
}
|
||||
} else {
|
||||
var leftEdgeOffset = pos.left - viewportPadding
|
||||
var rightEdgeOffset = pos.left + viewportPadding + actualWidth
|
||||
if (leftEdgeOffset < viewportDimensions.left) { // left overflow
|
||||
delta.left = viewportDimensions.left - leftEdgeOffset
|
||||
} else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
|
||||
delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
|
||||
}
|
||||
}
|
||||
|
||||
return delta
|
||||
}
|
||||
|
||||
Tooltip.prototype.getTitle = function () {
|
||||
var title
|
||||
var $e = this.$element
|
||||
var o = this.options
|
||||
|
||||
title = $e.attr('data-original-title')
|
||||
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
||||
|
||||
return title
|
||||
}
|
||||
|
||||
Tooltip.prototype.getUID = function (prefix) {
|
||||
do prefix += ~~(Math.random() * 1000000)
|
||||
while (document.getElementById(prefix))
|
||||
return prefix
|
||||
}
|
||||
|
||||
Tooltip.prototype.tip = function () {
|
||||
if (!this.$tip) {
|
||||
this.$tip = $(this.options.template)
|
||||
if (this.$tip.length != 1) {
|
||||
throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
|
||||
}
|
||||
}
|
||||
return this.$tip
|
||||
}
|
||||
|
||||
Tooltip.prototype.arrow = function () {
|
||||
return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
|
||||
}
|
||||
|
||||
Tooltip.prototype.enable = function () {
|
||||
this.enabled = true
|
||||
}
|
||||
|
||||
Tooltip.prototype.disable = function () {
|
||||
this.enabled = false
|
||||
}
|
||||
|
||||
Tooltip.prototype.toggleEnabled = function () {
|
||||
this.enabled = !this.enabled
|
||||
}
|
||||
|
||||
Tooltip.prototype.toggle = function (e) {
|
||||
var self = this
|
||||
if (e) {
|
||||
self = $(e.currentTarget).data('bs.' + this.type)
|
||||
if (!self) {
|
||||
self = new this.constructor(e.currentTarget, this.getDelegateOptions())
|
||||
$(e.currentTarget).data('bs.' + this.type, self)
|
||||
}
|
||||
}
|
||||
|
||||
if (e) {
|
||||
self.inState.click = !self.inState.click
|
||||
if (self.isInStateTrue()) self.enter(self)
|
||||
else self.leave(self)
|
||||
} else {
|
||||
self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
|
||||
}
|
||||
}
|
||||
|
||||
Tooltip.prototype.destroy = function () {
|
||||
var that = this
|
||||
clearTimeout(this.timeout)
|
||||
this.hide(function () {
|
||||
that.$element.off('.' + that.type).removeData('bs.' + that.type)
|
||||
if (that.$tip) {
|
||||
that.$tip.detach()
|
||||
}
|
||||
that.$tip = null
|
||||
that.$arrow = null
|
||||
that.$viewport = null
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// TOOLTIP PLUGIN DEFINITION
|
||||
// =========================
|
||||
|
||||
function Plugin(option) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
var data = $this.data('bs.tooltip')
|
||||
var options = typeof option == 'object' && option
|
||||
|
||||
if (!data && /destroy|hide/.test(option)) return
|
||||
if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
var old = $.fn.tooltip
|
||||
|
||||
$.fn.tooltip = Plugin
|
||||
$.fn.tooltip.Constructor = Tooltip
|
||||
|
||||
|
||||
// TOOLTIP NO CONFLICT
|
||||
// ===================
|
||||
|
||||
$.fn.tooltip.noConflict = function () {
|
||||
$.fn.tooltip = old
|
||||
return this
|
||||
}
|
||||
|
||||
}(jQuery);
|
8
docker/tanner/snare/dist/pages/5/39431e85469a58f227d2b650e323d009
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/39431e85469a58f227d2b650e323d009
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/social/social-googleplus.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/3accf3731db5c8d018c6b4799ff4ef31
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/3accf3731db5c8d018c6b4799ff4ef31
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /select2x2.png was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/3b9b471dd07628b6c083d37735075da0
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/3b9b471dd07628b6c083d37735075da0
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/loading.gif was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/3e6023a735db53933cb94425ace1f4dc
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/3e6023a735db53933cb94425ace1f4dc
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /fonts/OpenSans-Light.woff was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/3f78860842a4d5794db7cff142f339c7
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/3f78860842a4d5794db7cff142f339c7
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/loading-dark.gif was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/3fba3f52a37ca3edbb349bc325412fd8
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/3fba3f52a37ca3edbb349bc325412fd8
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/settings-dark.svg was not found on this server.</p>
|
||||
</body></html>
|
742
docker/tanner/snare/dist/pages/5/4302855d158b3ad5ebc79de5617eacd5
vendored
Normal file
742
docker/tanner/snare/dist/pages/5/4302855d158b3ad5ebc79de5617eacd5
vendored
Normal file
@ -0,0 +1,742 @@
|
||||
/*!
|
||||
* clipboard.js v1.5.12
|
||||
* https://zenorocha.github.io/clipboard.js
|
||||
*
|
||||
* Licensed MIT © Zeno Rocha
|
||||
*/
|
||||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Clipboard = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
var matches = require('matches-selector')
|
||||
|
||||
module.exports = function (element, selector, checkYoSelf) {
|
||||
var parent = checkYoSelf ? element : element.parentNode
|
||||
|
||||
while (parent && parent !== document) {
|
||||
if (matches(parent, selector)) return parent;
|
||||
parent = parent.parentNode
|
||||
}
|
||||
}
|
||||
|
||||
},{"matches-selector":5}],2:[function(require,module,exports){
|
||||
var closest = require('closest');
|
||||
|
||||
/**
|
||||
* Delegates event to a selector.
|
||||
*
|
||||
* @param {Element} element
|
||||
* @param {String} selector
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @param {Boolean} useCapture
|
||||
* @return {Object}
|
||||
*/
|
||||
function delegate(element, selector, type, callback, useCapture) {
|
||||
var listenerFn = listener.apply(this, arguments);
|
||||
|
||||
element.addEventListener(type, listenerFn, useCapture);
|
||||
|
||||
return {
|
||||
destroy: function() {
|
||||
element.removeEventListener(type, listenerFn, useCapture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds closest match and invokes callback.
|
||||
*
|
||||
* @param {Element} element
|
||||
* @param {String} selector
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Function}
|
||||
*/
|
||||
function listener(element, selector, type, callback) {
|
||||
return function(e) {
|
||||
e.delegateTarget = closest(e.target, selector, true);
|
||||
|
||||
if (e.delegateTarget) {
|
||||
callback.call(element, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = delegate;
|
||||
|
||||
},{"closest":1}],3:[function(require,module,exports){
|
||||
/**
|
||||
* Check if argument is a HTML element.
|
||||
*
|
||||
* @param {Object} value
|
||||
* @return {Boolean}
|
||||
*/
|
||||
exports.node = function(value) {
|
||||
return value !== undefined
|
||||
&& value instanceof HTMLElement
|
||||
&& value.nodeType === 1;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if argument is a list of HTML elements.
|
||||
*
|
||||
* @param {Object} value
|
||||
* @return {Boolean}
|
||||
*/
|
||||
exports.nodeList = function(value) {
|
||||
var type = Object.prototype.toString.call(value);
|
||||
|
||||
return value !== undefined
|
||||
&& (type === '[object NodeList]' || type === '[object HTMLCollection]')
|
||||
&& ('length' in value)
|
||||
&& (value.length === 0 || exports.node(value[0]));
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if argument is a string.
|
||||
*
|
||||
* @param {Object} value
|
||||
* @return {Boolean}
|
||||
*/
|
||||
exports.string = function(value) {
|
||||
return typeof value === 'string'
|
||||
|| value instanceof String;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if argument is a function.
|
||||
*
|
||||
* @param {Object} value
|
||||
* @return {Boolean}
|
||||
*/
|
||||
exports.fn = function(value) {
|
||||
var type = Object.prototype.toString.call(value);
|
||||
|
||||
return type === '[object Function]';
|
||||
};
|
||||
|
||||
},{}],4:[function(require,module,exports){
|
||||
var is = require('./is');
|
||||
var delegate = require('delegate');
|
||||
|
||||
/**
|
||||
* Validates all params and calls the right
|
||||
* listener function based on its target type.
|
||||
*
|
||||
* @param {String|HTMLElement|HTMLCollection|NodeList} target
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Object}
|
||||
*/
|
||||
function listen(target, type, callback) {
|
||||
if (!target && !type && !callback) {
|
||||
throw new Error('Missing required arguments');
|
||||
}
|
||||
|
||||
if (!is.string(type)) {
|
||||
throw new TypeError('Second argument must be a String');
|
||||
}
|
||||
|
||||
if (!is.fn(callback)) {
|
||||
throw new TypeError('Third argument must be a Function');
|
||||
}
|
||||
|
||||
if (is.node(target)) {
|
||||
return listenNode(target, type, callback);
|
||||
}
|
||||
else if (is.nodeList(target)) {
|
||||
return listenNodeList(target, type, callback);
|
||||
}
|
||||
else if (is.string(target)) {
|
||||
return listenSelector(target, type, callback);
|
||||
}
|
||||
else {
|
||||
throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an event listener to a HTML element
|
||||
* and returns a remove listener function.
|
||||
*
|
||||
* @param {HTMLElement} node
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Object}
|
||||
*/
|
||||
function listenNode(node, type, callback) {
|
||||
node.addEventListener(type, callback);
|
||||
|
||||
return {
|
||||
destroy: function() {
|
||||
node.removeEventListener(type, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an event listener to a list of HTML elements
|
||||
* and returns a remove listener function.
|
||||
*
|
||||
* @param {NodeList|HTMLCollection} nodeList
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Object}
|
||||
*/
|
||||
function listenNodeList(nodeList, type, callback) {
|
||||
Array.prototype.forEach.call(nodeList, function(node) {
|
||||
node.addEventListener(type, callback);
|
||||
});
|
||||
|
||||
return {
|
||||
destroy: function() {
|
||||
Array.prototype.forEach.call(nodeList, function(node) {
|
||||
node.removeEventListener(type, callback);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an event listener to a selector
|
||||
* and returns a remove listener function.
|
||||
*
|
||||
* @param {String} selector
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Object}
|
||||
*/
|
||||
function listenSelector(selector, type, callback) {
|
||||
return delegate(document.body, selector, type, callback);
|
||||
}
|
||||
|
||||
module.exports = listen;
|
||||
|
||||
},{"./is":3,"delegate":2}],5:[function(require,module,exports){
|
||||
|
||||
/**
|
||||
* Element prototype.
|
||||
*/
|
||||
|
||||
var proto = Element.prototype;
|
||||
|
||||
/**
|
||||
* Vendor function.
|
||||
*/
|
||||
|
||||
var vendor = proto.matchesSelector
|
||||
|| proto.webkitMatchesSelector
|
||||
|| proto.mozMatchesSelector
|
||||
|| proto.msMatchesSelector
|
||||
|| proto.oMatchesSelector;
|
||||
|
||||
/**
|
||||
* Expose `match()`.
|
||||
*/
|
||||
|
||||
module.exports = match;
|
||||
|
||||
/**
|
||||
* Match `el` to `selector`.
|
||||
*
|
||||
* @param {Element} el
|
||||
* @param {String} selector
|
||||
* @return {Boolean}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function match(el, selector) {
|
||||
if (vendor) return vendor.call(el, selector);
|
||||
var nodes = el.parentNode.querySelectorAll(selector);
|
||||
for (var i = 0; i < nodes.length; ++i) {
|
||||
if (nodes[i] == el) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
},{}],6:[function(require,module,exports){
|
||||
function select(element) {
|
||||
var selectedText;
|
||||
|
||||
if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
|
||||
element.focus();
|
||||
element.setSelectionRange(0, element.value.length);
|
||||
|
||||
selectedText = element.value;
|
||||
}
|
||||
else {
|
||||
if (element.hasAttribute('contenteditable')) {
|
||||
element.focus();
|
||||
}
|
||||
|
||||
var selection = window.getSelection();
|
||||
var range = document.createRange();
|
||||
|
||||
range.selectNodeContents(element);
|
||||
selection.removeAllRanges();
|
||||
selection.addRange(range);
|
||||
|
||||
selectedText = selection.toString();
|
||||
}
|
||||
|
||||
return selectedText;
|
||||
}
|
||||
|
||||
module.exports = select;
|
||||
|
||||
},{}],7:[function(require,module,exports){
|
||||
function E () {
|
||||
// Keep this empty so it's easier to inherit from
|
||||
// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
|
||||
}
|
||||
|
||||
E.prototype = {
|
||||
on: function (name, callback, ctx) {
|
||||
var e = this.e || (this.e = {});
|
||||
|
||||
(e[name] || (e[name] = [])).push({
|
||||
fn: callback,
|
||||
ctx: ctx
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
once: function (name, callback, ctx) {
|
||||
var self = this;
|
||||
function listener () {
|
||||
self.off(name, listener);
|
||||
callback.apply(ctx, arguments);
|
||||
};
|
||||
|
||||
listener._ = callback
|
||||
return this.on(name, listener, ctx);
|
||||
},
|
||||
|
||||
emit: function (name) {
|
||||
var data = [].slice.call(arguments, 1);
|
||||
var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
|
||||
var i = 0;
|
||||
var len = evtArr.length;
|
||||
|
||||
for (i; i < len; i++) {
|
||||
evtArr[i].fn.apply(evtArr[i].ctx, data);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
off: function (name, callback) {
|
||||
var e = this.e || (this.e = {});
|
||||
var evts = e[name];
|
||||
var liveEvents = [];
|
||||
|
||||
if (evts && callback) {
|
||||
for (var i = 0, len = evts.length; i < len; i++) {
|
||||
if (evts[i].fn !== callback && evts[i].fn._ !== callback)
|
||||
liveEvents.push(evts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove event from queue to prevent memory leak
|
||||
// Suggested by https://github.com/lazd
|
||||
// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
|
||||
|
||||
(liveEvents.length)
|
||||
? e[name] = liveEvents
|
||||
: delete e[name];
|
||||
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = E;
|
||||
|
||||
},{}],8:[function(require,module,exports){
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define(['module', 'select'], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory(module, require('select'));
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {}
|
||||
};
|
||||
factory(mod, global.select);
|
||||
global.clipboardAction = mod.exports;
|
||||
}
|
||||
})(this, function (module, _select) {
|
||||
'use strict';
|
||||
|
||||
var _select2 = _interopRequireDefault(_select);
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
|
||||
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
|
||||
return typeof obj;
|
||||
} : function (obj) {
|
||||
return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
||||
};
|
||||
|
||||
function _classCallCheck(instance, Constructor) {
|
||||
if (!(instance instanceof Constructor)) {
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
}
|
||||
|
||||
var _createClass = function () {
|
||||
function defineProperties(target, props) {
|
||||
for (var i = 0; i < props.length; i++) {
|
||||
var descriptor = props[i];
|
||||
descriptor.enumerable = descriptor.enumerable || false;
|
||||
descriptor.configurable = true;
|
||||
if ("value" in descriptor) descriptor.writable = true;
|
||||
Object.defineProperty(target, descriptor.key, descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
return function (Constructor, protoProps, staticProps) {
|
||||
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
||||
if (staticProps) defineProperties(Constructor, staticProps);
|
||||
return Constructor;
|
||||
};
|
||||
}();
|
||||
|
||||
var ClipboardAction = function () {
|
||||
/**
|
||||
* @param {Object} options
|
||||
*/
|
||||
|
||||
function ClipboardAction(options) {
|
||||
_classCallCheck(this, ClipboardAction);
|
||||
|
||||
this.resolveOptions(options);
|
||||
this.initSelection();
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines base properties passed from constructor.
|
||||
* @param {Object} options
|
||||
*/
|
||||
|
||||
|
||||
ClipboardAction.prototype.resolveOptions = function resolveOptions() {
|
||||
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
||||
|
||||
this.action = options.action;
|
||||
this.emitter = options.emitter;
|
||||
this.target = options.target;
|
||||
this.text = options.text;
|
||||
this.trigger = options.trigger;
|
||||
|
||||
this.selectedText = '';
|
||||
};
|
||||
|
||||
ClipboardAction.prototype.initSelection = function initSelection() {
|
||||
if (this.text) {
|
||||
this.selectFake();
|
||||
} else if (this.target) {
|
||||
this.selectTarget();
|
||||
}
|
||||
};
|
||||
|
||||
ClipboardAction.prototype.selectFake = function selectFake() {
|
||||
var _this = this;
|
||||
|
||||
var isRTL = document.documentElement.getAttribute('dir') == 'rtl';
|
||||
|
||||
this.removeFake();
|
||||
|
||||
this.fakeHandlerCallback = function () {
|
||||
return _this.removeFake();
|
||||
};
|
||||
this.fakeHandler = document.body.addEventListener('click', this.fakeHandlerCallback) || true;
|
||||
|
||||
this.fakeElem = document.createElement('textarea');
|
||||
// Prevent zooming on iOS
|
||||
this.fakeElem.style.fontSize = '12pt';
|
||||
// Reset box model
|
||||
this.fakeElem.style.border = '0';
|
||||
this.fakeElem.style.padding = '0';
|
||||
this.fakeElem.style.margin = '0';
|
||||
// Move element out of screen horizontally
|
||||
this.fakeElem.style.position = 'absolute';
|
||||
this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';
|
||||
// Move element to the same position vertically
|
||||
this.fakeElem.style.top = (window.pageYOffset || document.documentElement.scrollTop) + 'px';
|
||||
this.fakeElem.setAttribute('readonly', '');
|
||||
this.fakeElem.value = this.text;
|
||||
|
||||
document.body.appendChild(this.fakeElem);
|
||||
|
||||
this.selectedText = (0, _select2.default)(this.fakeElem);
|
||||
this.copyText();
|
||||
};
|
||||
|
||||
ClipboardAction.prototype.removeFake = function removeFake() {
|
||||
if (this.fakeHandler) {
|
||||
document.body.removeEventListener('click', this.fakeHandlerCallback);
|
||||
this.fakeHandler = null;
|
||||
this.fakeHandlerCallback = null;
|
||||
}
|
||||
|
||||
if (this.fakeElem) {
|
||||
document.body.removeChild(this.fakeElem);
|
||||
this.fakeElem = null;
|
||||
}
|
||||
};
|
||||
|
||||
ClipboardAction.prototype.selectTarget = function selectTarget() {
|
||||
this.selectedText = (0, _select2.default)(this.target);
|
||||
this.copyText();
|
||||
};
|
||||
|
||||
ClipboardAction.prototype.copyText = function copyText() {
|
||||
var succeeded = undefined;
|
||||
|
||||
try {
|
||||
succeeded = document.execCommand(this.action);
|
||||
} catch (err) {
|
||||
succeeded = false;
|
||||
}
|
||||
|
||||
this.handleResult(succeeded);
|
||||
};
|
||||
|
||||
ClipboardAction.prototype.handleResult = function handleResult(succeeded) {
|
||||
if (succeeded) {
|
||||
this.emitter.emit('success', {
|
||||
action: this.action,
|
||||
text: this.selectedText,
|
||||
trigger: this.trigger,
|
||||
clearSelection: this.clearSelection.bind(this)
|
||||
});
|
||||
} else {
|
||||
this.emitter.emit('error', {
|
||||
action: this.action,
|
||||
trigger: this.trigger,
|
||||
clearSelection: this.clearSelection.bind(this)
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
ClipboardAction.prototype.clearSelection = function clearSelection() {
|
||||
if (this.target) {
|
||||
this.target.blur();
|
||||
}
|
||||
|
||||
window.getSelection().removeAllRanges();
|
||||
};
|
||||
|
||||
ClipboardAction.prototype.destroy = function destroy() {
|
||||
this.removeFake();
|
||||
};
|
||||
|
||||
_createClass(ClipboardAction, [{
|
||||
key: 'action',
|
||||
set: function set() {
|
||||
var action = arguments.length <= 0 || arguments[0] === undefined ? 'copy' : arguments[0];
|
||||
|
||||
this._action = action;
|
||||
|
||||
if (this._action !== 'copy' && this._action !== 'cut') {
|
||||
throw new Error('Invalid "action" value, use either "copy" or "cut"');
|
||||
}
|
||||
},
|
||||
get: function get() {
|
||||
return this._action;
|
||||
}
|
||||
}, {
|
||||
key: 'target',
|
||||
set: function set(target) {
|
||||
if (target !== undefined) {
|
||||
if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {
|
||||
if (this.action === 'copy' && target.hasAttribute('disabled')) {
|
||||
throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');
|
||||
}
|
||||
|
||||
if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {
|
||||
throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');
|
||||
}
|
||||
|
||||
this._target = target;
|
||||
} else {
|
||||
throw new Error('Invalid "target" value, use a valid Element');
|
||||
}
|
||||
}
|
||||
},
|
||||
get: function get() {
|
||||
return this._target;
|
||||
}
|
||||
}]);
|
||||
|
||||
return ClipboardAction;
|
||||
}();
|
||||
|
||||
module.exports = ClipboardAction;
|
||||
});
|
||||
|
||||
},{"select":6}],9:[function(require,module,exports){
|
||||
(function (global, factory) {
|
||||
if (typeof define === "function" && define.amd) {
|
||||
define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);
|
||||
} else if (typeof exports !== "undefined") {
|
||||
factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));
|
||||
} else {
|
||||
var mod = {
|
||||
exports: {}
|
||||
};
|
||||
factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);
|
||||
global.clipboard = mod.exports;
|
||||
}
|
||||
})(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {
|
||||
'use strict';
|
||||
|
||||
var _clipboardAction2 = _interopRequireDefault(_clipboardAction);
|
||||
|
||||
var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);
|
||||
|
||||
var _goodListener2 = _interopRequireDefault(_goodListener);
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
|
||||
function _classCallCheck(instance, Constructor) {
|
||||
if (!(instance instanceof Constructor)) {
|
||||
throw new TypeError("Cannot call a class as a function");
|
||||
}
|
||||
}
|
||||
|
||||
function _possibleConstructorReturn(self, call) {
|
||||
if (!self) {
|
||||
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
||||
}
|
||||
|
||||
return call && (typeof call === "object" || typeof call === "function") ? call : self;
|
||||
}
|
||||
|
||||
function _inherits(subClass, superClass) {
|
||||
if (typeof superClass !== "function" && superClass !== null) {
|
||||
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
|
||||
}
|
||||
|
||||
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
||||
constructor: {
|
||||
value: subClass,
|
||||
enumerable: false,
|
||||
writable: true,
|
||||
configurable: true
|
||||
}
|
||||
});
|
||||
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
|
||||
}
|
||||
|
||||
var Clipboard = function (_Emitter) {
|
||||
_inherits(Clipboard, _Emitter);
|
||||
|
||||
/**
|
||||
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger
|
||||
* @param {Object} options
|
||||
*/
|
||||
|
||||
function Clipboard(trigger, options) {
|
||||
_classCallCheck(this, Clipboard);
|
||||
|
||||
var _this = _possibleConstructorReturn(this, _Emitter.call(this));
|
||||
|
||||
_this.resolveOptions(options);
|
||||
_this.listenClick(trigger);
|
||||
return _this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines if attributes would be resolved using internal setter functions
|
||||
* or custom functions that were passed in the constructor.
|
||||
* @param {Object} options
|
||||
*/
|
||||
|
||||
|
||||
Clipboard.prototype.resolveOptions = function resolveOptions() {
|
||||
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
||||
|
||||
this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
|
||||
this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
|
||||
this.text = typeof options.text === 'function' ? options.text : this.defaultText;
|
||||
};
|
||||
|
||||
Clipboard.prototype.listenClick = function listenClick(trigger) {
|
||||
var _this2 = this;
|
||||
|
||||
this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {
|
||||
return _this2.onClick(e);
|
||||
});
|
||||
};
|
||||
|
||||
Clipboard.prototype.onClick = function onClick(e) {
|
||||
var trigger = e.delegateTarget || e.currentTarget;
|
||||
|
||||
if (this.clipboardAction) {
|
||||
this.clipboardAction = null;
|
||||
}
|
||||
|
||||
this.clipboardAction = new _clipboardAction2.default({
|
||||
action: this.action(trigger),
|
||||
target: this.target(trigger),
|
||||
text: this.text(trigger),
|
||||
trigger: trigger,
|
||||
emitter: this
|
||||
});
|
||||
};
|
||||
|
||||
Clipboard.prototype.defaultAction = function defaultAction(trigger) {
|
||||
return getAttributeValue('action', trigger);
|
||||
};
|
||||
|
||||
Clipboard.prototype.defaultTarget = function defaultTarget(trigger) {
|
||||
var selector = getAttributeValue('target', trigger);
|
||||
|
||||
if (selector) {
|
||||
return document.querySelector(selector);
|
||||
}
|
||||
};
|
||||
|
||||
Clipboard.prototype.defaultText = function defaultText(trigger) {
|
||||
return getAttributeValue('text', trigger);
|
||||
};
|
||||
|
||||
Clipboard.prototype.destroy = function destroy() {
|
||||
this.listener.destroy();
|
||||
|
||||
if (this.clipboardAction) {
|
||||
this.clipboardAction.destroy();
|
||||
this.clipboardAction = null;
|
||||
}
|
||||
};
|
||||
|
||||
return Clipboard;
|
||||
}(_tinyEmitter2.default);
|
||||
|
||||
/**
|
||||
* Helper function to retrieve attribute value.
|
||||
* @param {String} suffix
|
||||
* @param {Element} element
|
||||
*/
|
||||
function getAttributeValue(suffix, element) {
|
||||
var attribute = 'data-clipboard-' + suffix;
|
||||
|
||||
if (!element.hasAttribute(attribute)) {
|
||||
return;
|
||||
}
|
||||
|
||||
return element.getAttribute(attribute);
|
||||
}
|
||||
|
||||
module.exports = Clipboard;
|
||||
});
|
||||
|
||||
},{"./clipboard-action":8,"good-listener":4,"tiny-emitter":7}]},{},[9])(9)
|
||||
});
|
8
docker/tanner/snare/dist/pages/5/4429866baf2495513abb4ff314a2bb40
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/4429866baf2495513abb4ff314a2bb40
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/edit.svg was not found on this server.</p>
|
||||
</body></html>
|
2350
docker/tanner/snare/dist/pages/5/44dab09e3c261d320f4741a630f0e1f2
vendored
Normal file
2350
docker/tanner/snare/dist/pages/5/44dab09e3c261d320f4741a630f0e1f2
vendored
Normal file
File diff suppressed because it is too large
Load Diff
8
docker/tanner/snare/dist/pages/5/458f656ae7de8dd05336085745bb6253
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/458f656ae7de8dd05336085745bb6253
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/animated-overlay.gif was not found on this server.</p>
|
||||
</body></html>
|
151
docker/tanner/snare/dist/pages/5/4a767804d892d54757945c8cb4d1be99
vendored
Normal file
151
docker/tanner/snare/dist/pages/5/4a767804d892d54757945c8cb4d1be99
vendored
Normal file
@ -0,0 +1,151 @@
|
||||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author John Molakvoæ
|
||||
* @copyright Copyright (c) 2016 John Molakvoæ <fremulon@protonmail.com>
|
||||
* @author Morris Jobke
|
||||
* @copyright Copyright (c) 2013 Morris Jobke <morris.jobke@gmail.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Adds a background color to the element called on and adds the first character
|
||||
* of the passed in string. This string is also the seed for the generation of
|
||||
* the background color.
|
||||
*
|
||||
* You have following HTML:
|
||||
*
|
||||
* <div id="albumart"></div>
|
||||
*
|
||||
* And call this from Javascript:
|
||||
*
|
||||
* $('#albumart').imageplaceholder('The Album Title');
|
||||
*
|
||||
* Which will result in:
|
||||
*
|
||||
* <div id="albumart" style="background-color: hsl(123, 90%, 65%); ... ">T</div>
|
||||
*
|
||||
* You may also call it like this, to have a different background, than the seed:
|
||||
*
|
||||
* $('#albumart').imageplaceholder('The Album Title', 'Album Title');
|
||||
*
|
||||
* Resulting in:
|
||||
*
|
||||
* <div id="albumart" style="background-color: hsl(123, 90%, 65%); ... ">A</div>
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Alternatively, you can use the prototype function to convert your string to hsl colors:
|
||||
*
|
||||
* "a6741a86aded5611a8e46ce16f2ad646".toHsl()
|
||||
*
|
||||
* Will return the hsl parameters within an array:
|
||||
*
|
||||
* [290, 60, 68]
|
||||
*
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
|
||||
String.prototype.toHsl = function() {
|
||||
|
||||
var hash = this.toLowerCase().replace(/[^0-9a-f]+/g, '');
|
||||
|
||||
// Already a md5 hash?
|
||||
if( !hash.match(/^[0-9a-f]{32}$/g) ) {
|
||||
hash = md5(hash);
|
||||
}
|
||||
|
||||
function rgbToHsl(r, g, b) {
|
||||
r /= 255, g /= 255, b /= 255;
|
||||
var max = Math.max(r, g, b), min = Math.min(r, g, b);
|
||||
var h, s, l = (max + min) / 2;
|
||||
if(max === min) {
|
||||
h = s = 0; // achromatic
|
||||
} else {
|
||||
var d = max - min;
|
||||
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
||||
switch(max) {
|
||||
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
|
||||
case g: h = (b - r) / d + 2; break;
|
||||
case b: h = (r - g) / d + 4; break;
|
||||
}
|
||||
h /= 6;
|
||||
}
|
||||
return [h, s, l];
|
||||
}
|
||||
|
||||
// Init vars
|
||||
var result = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
var rgb = [0, 0, 0];
|
||||
var sat = 70;
|
||||
var lum = 68;
|
||||
var modulo = 16;
|
||||
|
||||
// Splitting evenly the string
|
||||
for(var i in hash) {
|
||||
result[i%modulo] = result[i%modulo] + parseInt(hash.charAt(i), 16).toString();
|
||||
}
|
||||
|
||||
// Converting our data into a usable rgb format
|
||||
// Start at 1 because 16%3=1 but 15%3=0 and makes the repartition even
|
||||
for(var count=1;count<modulo;count++) {
|
||||
rgb[count%3] += parseInt(result[count]);
|
||||
}
|
||||
|
||||
// Reduce values bigger than rgb requirements
|
||||
rgb[0] = rgb[0]%255;
|
||||
rgb[1] = rgb[1]%255;
|
||||
rgb[2] = rgb[2]%255;
|
||||
|
||||
var hsl = rgbToHsl(rgb[0], rgb[1], rgb[2]);
|
||||
|
||||
// Classic formulla to check the brigtness for our eye
|
||||
// If too bright, lower the sat
|
||||
var bright = Math.sqrt( 0.299 * Math.pow(rgb[0], 2) + 0.587 * Math.pow(rgb[1], 2) + 0.114 * Math.pow(rgb[2], 2) );
|
||||
if (bright >= 200) {
|
||||
sat = 60;
|
||||
}
|
||||
return [parseInt(hsl[0] * 360), sat, lum];
|
||||
};
|
||||
|
||||
$.fn.imageplaceholder = function(seed, text, size) {
|
||||
text = text || seed;
|
||||
|
||||
// Compute the hash
|
||||
var hsl = seed.toHsl();
|
||||
this.css('background-color', 'hsl('+hsl[0]+', '+hsl[1]+'%, '+hsl[2]+'%)');
|
||||
|
||||
// Placeholders are square
|
||||
var height = this.height() || size || 32;
|
||||
this.height(height);
|
||||
this.width(height);
|
||||
|
||||
// CSS rules
|
||||
this.css('color', '#fff');
|
||||
this.css('font-weight', 'normal');
|
||||
this.css('text-align', 'center');
|
||||
|
||||
// calculate the height
|
||||
this.css('line-height', height + 'px');
|
||||
this.css('font-size', (height * 0.55) + 'px');
|
||||
|
||||
if(seed !== null && seed.length) {
|
||||
this.html(text[0].toUpperCase());
|
||||
}
|
||||
};
|
||||
}(jQuery));
|
8
docker/tanner/snare/dist/pages/5/4ae8aaa6d535e8905e8065b029811ede
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/4ae8aaa6d535e8905e8065b029811ede
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/triangle-s.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/4b5483faea9a65a9c6d456d068ff2983
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/4b5483faea9a65a9c6d456d068ff2983
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-bg_highlight-soft_75_cccccc_1x100.png was not found on this server.</p>
|
||||
</body></html>
|
31
docker/tanner/snare/dist/pages/5/4bbf367876d2f25619f5279fa23be754
vendored
Normal file
31
docker/tanner/snare/dist/pages/5/4bbf367876d2f25619f5279fa23be754
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2017
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3
|
||||
* or later.
|
||||
*
|
||||
* See the COPYING-README file.
|
||||
*
|
||||
*/
|
||||
|
||||
(function() {
|
||||
/**
|
||||
* @class OC.Share.SharesCollection
|
||||
* @classdesc
|
||||
*
|
||||
* Represents a collection of shares
|
||||
*/
|
||||
var SharesCollection = OC.Backbone.Collection.extend({
|
||||
model: OC.Share.ShareModel,
|
||||
|
||||
url: function() {
|
||||
var params = {
|
||||
format: 'json'
|
||||
};
|
||||
return OC.linkToOCS('apps/files_sharing/api/v1/shares', 2) + '?' + OC.buildQueryString(params);
|
||||
}
|
||||
});
|
||||
|
||||
OC.Share = OC.Share || {};
|
||||
OC.Share.SharesCollection = SharesCollection;
|
||||
})();
|
8
docker/tanner/snare/dist/pages/5/4bc927d28f8be5bc49e85cb5f2eb6a11
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/4bc927d28f8be5bc49e85cb5f2eb6a11
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/places/contacts-dark.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/4c09f2162df220d82bf1481ebf1dfbc7
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/4c09f2162df220d82bf1481ebf1dfbc7
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/play-big.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/4ce6f0654fc05d9dd5aebb3051595abe
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/4ce6f0654fc05d9dd5aebb3051595abe
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/more.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/4d8787d288dc7902195854fc5d41b3e8
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/4d8787d288dc7902195854fc5d41b3e8
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/play.svg was not found on this server.</p>
|
||||
</body></html>
|
644
docker/tanner/snare/dist/pages/5/4e70fee769a04ca35f5de43064ff6e13
vendored
Normal file
644
docker/tanner/snare/dist/pages/5/4e70fee769a04ca35f5de43064ff6e13
vendored
Normal file
@ -0,0 +1,644 @@
|
||||
/*!
|
||||
* Bowser - a browser detector
|
||||
* https://github.com/ded/bowser
|
||||
* MIT License | (c) Dustin Diaz 2015
|
||||
*/
|
||||
|
||||
!function (root, name, definition) {
|
||||
if (typeof module != 'undefined' && module.exports) module.exports = definition()
|
||||
else if (typeof define == 'function' && define.amd) define(name, definition)
|
||||
else root[name] = definition()
|
||||
}(this, 'bowser', function () {
|
||||
/**
|
||||
* See useragents.js for examples of navigator.userAgent
|
||||
*/
|
||||
|
||||
var t = true
|
||||
|
||||
function detect(ua) {
|
||||
|
||||
function getFirstMatch(regex) {
|
||||
var match = ua.match(regex);
|
||||
return (match && match.length > 1 && match[1]) || '';
|
||||
}
|
||||
|
||||
function getSecondMatch(regex) {
|
||||
var match = ua.match(regex);
|
||||
return (match && match.length > 1 && match[2]) || '';
|
||||
}
|
||||
|
||||
var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()
|
||||
, likeAndroid = /like android/i.test(ua)
|
||||
, android = !likeAndroid && /android/i.test(ua)
|
||||
, nexusMobile = /nexus\s*[0-6]\s*/i.test(ua)
|
||||
, nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua)
|
||||
, chromeos = /CrOS/.test(ua)
|
||||
, silk = /silk/i.test(ua)
|
||||
, sailfish = /sailfish/i.test(ua)
|
||||
, tizen = /tizen/i.test(ua)
|
||||
, webos = /(web|hpw)(o|0)s/i.test(ua)
|
||||
, windowsphone = /windows phone/i.test(ua)
|
||||
, samsungBrowser = /SamsungBrowser/i.test(ua)
|
||||
, windows = !windowsphone && /windows/i.test(ua)
|
||||
, mac = !iosdevice && !silk && /macintosh/i.test(ua)
|
||||
, linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)
|
||||
, edgeVersion = getSecondMatch(/edg([ea]|ios)\/(\d+(\.\d+)?)/i)
|
||||
, versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i)
|
||||
, tablet = /tablet/i.test(ua) && !/tablet pc/i.test(ua)
|
||||
, mobile = !tablet && /[^-]mobi/i.test(ua)
|
||||
, xbox = /xbox/i.test(ua)
|
||||
, result
|
||||
|
||||
if (/opera/i.test(ua)) {
|
||||
// an old Opera
|
||||
result = {
|
||||
name: 'Opera'
|
||||
, opera: t
|
||||
, version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)
|
||||
}
|
||||
} else if (/opr\/|opios/i.test(ua)) {
|
||||
// a new Opera
|
||||
result = {
|
||||
name: 'Opera'
|
||||
, opera: t
|
||||
, version: getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || versionIdentifier
|
||||
}
|
||||
}
|
||||
else if (/SamsungBrowser/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Samsung Internet for Android'
|
||||
, samsungBrowser: t
|
||||
, version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/Whale/i.test(ua)) {
|
||||
result = {
|
||||
name: 'NAVER Whale browser'
|
||||
, whale: t
|
||||
, version: getFirstMatch(/(?:whale)[\s\/](\d+(?:\.\d+)+)/i)
|
||||
}
|
||||
}
|
||||
else if (/MZBrowser/i.test(ua)) {
|
||||
result = {
|
||||
name: 'MZ Browser'
|
||||
, mzbrowser: t
|
||||
, version: getFirstMatch(/(?:MZBrowser)[\s\/](\d+(?:\.\d+)+)/i)
|
||||
}
|
||||
}
|
||||
else if (/coast/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Opera Coast'
|
||||
, coast: t
|
||||
, version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/focus/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Focus'
|
||||
, focus: t
|
||||
, version: getFirstMatch(/(?:focus)[\s\/](\d+(?:\.\d+)+)/i)
|
||||
}
|
||||
}
|
||||
else if (/yabrowser/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Yandex Browser'
|
||||
, yandexbrowser: t
|
||||
, version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/ucbrowser/i.test(ua)) {
|
||||
result = {
|
||||
name: 'UC Browser'
|
||||
, ucbrowser: t
|
||||
, version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)
|
||||
}
|
||||
}
|
||||
else if (/mxios/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Maxthon'
|
||||
, maxthon: t
|
||||
, version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)
|
||||
}
|
||||
}
|
||||
else if (/epiphany/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Epiphany'
|
||||
, epiphany: t
|
||||
, version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)
|
||||
}
|
||||
}
|
||||
else if (/puffin/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Puffin'
|
||||
, puffin: t
|
||||
, version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/sleipnir/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Sleipnir'
|
||||
, sleipnir: t
|
||||
, version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)
|
||||
}
|
||||
}
|
||||
else if (/k-meleon/i.test(ua)) {
|
||||
result = {
|
||||
name: 'K-Meleon'
|
||||
, kMeleon: t
|
||||
, version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)
|
||||
}
|
||||
}
|
||||
else if (windowsphone) {
|
||||
result = {
|
||||
name: 'Windows Phone'
|
||||
, osname: 'Windows Phone'
|
||||
, windowsphone: t
|
||||
}
|
||||
if (edgeVersion) {
|
||||
result.msedge = t
|
||||
result.version = edgeVersion
|
||||
}
|
||||
else {
|
||||
result.msie = t
|
||||
result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/msie|trident/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Internet Explorer'
|
||||
, msie: t
|
||||
, version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)
|
||||
}
|
||||
} else if (chromeos) {
|
||||
result = {
|
||||
name: 'Chrome'
|
||||
, osname: 'Chrome OS'
|
||||
, chromeos: t
|
||||
, chromeBook: t
|
||||
, chrome: t
|
||||
, version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
} else if (/edg([ea]|ios)/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Microsoft Edge'
|
||||
, msedge: t
|
||||
, version: edgeVersion
|
||||
}
|
||||
}
|
||||
else if (/vivaldi/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Vivaldi'
|
||||
, vivaldi: t
|
||||
, version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier
|
||||
}
|
||||
}
|
||||
else if (sailfish) {
|
||||
result = {
|
||||
name: 'Sailfish'
|
||||
, osname: 'Sailfish OS'
|
||||
, sailfish: t
|
||||
, version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/seamonkey\//i.test(ua)) {
|
||||
result = {
|
||||
name: 'SeaMonkey'
|
||||
, seamonkey: t
|
||||
, version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/firefox|iceweasel|fxios/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Firefox'
|
||||
, firefox: t
|
||||
, version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)
|
||||
}
|
||||
if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) {
|
||||
result.firefoxos = t
|
||||
result.osname = 'Firefox OS'
|
||||
}
|
||||
}
|
||||
else if (silk) {
|
||||
result = {
|
||||
name: 'Amazon Silk'
|
||||
, silk: t
|
||||
, version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/phantom/i.test(ua)) {
|
||||
result = {
|
||||
name: 'PhantomJS'
|
||||
, phantom: t
|
||||
, version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/slimerjs/i.test(ua)) {
|
||||
result = {
|
||||
name: 'SlimerJS'
|
||||
, slimer: t
|
||||
, version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) {
|
||||
result = {
|
||||
name: 'BlackBerry'
|
||||
, osname: 'BlackBerry OS'
|
||||
, blackberry: t
|
||||
, version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (webos) {
|
||||
result = {
|
||||
name: 'WebOS'
|
||||
, osname: 'WebOS'
|
||||
, webos: t
|
||||
, version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)
|
||||
};
|
||||
/touchpad\//i.test(ua) && (result.touchpad = t)
|
||||
}
|
||||
else if (/bada/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Bada'
|
||||
, osname: 'Bada'
|
||||
, bada: t
|
||||
, version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)
|
||||
};
|
||||
}
|
||||
else if (tizen) {
|
||||
result = {
|
||||
name: 'Tizen'
|
||||
, osname: 'Tizen'
|
||||
, tizen: t
|
||||
, version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier
|
||||
};
|
||||
}
|
||||
else if (/qupzilla/i.test(ua)) {
|
||||
result = {
|
||||
name: 'QupZilla'
|
||||
, qupzilla: t
|
||||
, version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier
|
||||
}
|
||||
}
|
||||
else if (/chromium/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Chromium'
|
||||
, chromium: t
|
||||
, version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier
|
||||
}
|
||||
}
|
||||
else if (/chrome|crios|crmo/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Chrome'
|
||||
, chrome: t
|
||||
, version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
}
|
||||
else if (android) {
|
||||
result = {
|
||||
name: 'Android'
|
||||
, version: versionIdentifier
|
||||
}
|
||||
}
|
||||
else if (/safari|applewebkit/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Safari'
|
||||
, safari: t
|
||||
}
|
||||
if (versionIdentifier) {
|
||||
result.version = versionIdentifier
|
||||
}
|
||||
}
|
||||
else if (iosdevice) {
|
||||
result = {
|
||||
name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'
|
||||
}
|
||||
// WTF: version is not part of user agent in web apps
|
||||
if (versionIdentifier) {
|
||||
result.version = versionIdentifier
|
||||
}
|
||||
}
|
||||
else if(/googlebot/i.test(ua)) {
|
||||
result = {
|
||||
name: 'Googlebot'
|
||||
, googlebot: t
|
||||
, version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier
|
||||
}
|
||||
}
|
||||
else {
|
||||
result = {
|
||||
name: getFirstMatch(/^(.*)\/(.*) /),
|
||||
version: getSecondMatch(/^(.*)\/(.*) /)
|
||||
};
|
||||
}
|
||||
|
||||
// set webkit or gecko flag for browsers based on these engines
|
||||
if (!result.msedge && /(apple)?webkit/i.test(ua)) {
|
||||
if (/(apple)?webkit\/537\.36/i.test(ua)) {
|
||||
result.name = result.name || "Blink"
|
||||
result.blink = t
|
||||
} else {
|
||||
result.name = result.name || "Webkit"
|
||||
result.webkit = t
|
||||
}
|
||||
if (!result.version && versionIdentifier) {
|
||||
result.version = versionIdentifier
|
||||
}
|
||||
} else if (!result.opera && /gecko\//i.test(ua)) {
|
||||
result.name = result.name || "Gecko"
|
||||
result.gecko = t
|
||||
result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)
|
||||
}
|
||||
|
||||
// set OS flags for platforms that have multiple browsers
|
||||
if (!result.windowsphone && (android || result.silk)) {
|
||||
result.android = t
|
||||
result.osname = 'Android'
|
||||
} else if (!result.windowsphone && iosdevice) {
|
||||
result[iosdevice] = t
|
||||
result.ios = t
|
||||
result.osname = 'iOS'
|
||||
} else if (mac) {
|
||||
result.mac = t
|
||||
result.osname = 'macOS'
|
||||
} else if (xbox) {
|
||||
result.xbox = t
|
||||
result.osname = 'Xbox'
|
||||
} else if (windows) {
|
||||
result.windows = t
|
||||
result.osname = 'Windows'
|
||||
} else if (linux) {
|
||||
result.linux = t
|
||||
result.osname = 'Linux'
|
||||
}
|
||||
|
||||
function getWindowsVersion (s) {
|
||||
switch (s) {
|
||||
case 'NT': return 'NT'
|
||||
case 'XP': return 'XP'
|
||||
case 'NT 5.0': return '2000'
|
||||
case 'NT 5.1': return 'XP'
|
||||
case 'NT 5.2': return '2003'
|
||||
case 'NT 6.0': return 'Vista'
|
||||
case 'NT 6.1': return '7'
|
||||
case 'NT 6.2': return '8'
|
||||
case 'NT 6.3': return '8.1'
|
||||
case 'NT 10.0': return '10'
|
||||
default: return undefined
|
||||
}
|
||||
}
|
||||
|
||||
// OS version extraction
|
||||
var osVersion = '';
|
||||
if (result.windows) {
|
||||
osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i))
|
||||
} else if (result.windowsphone) {
|
||||
osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i);
|
||||
} else if (result.mac) {
|
||||
osVersion = getFirstMatch(/Mac OS X (\d+([_\.\s]\d+)*)/i);
|
||||
osVersion = osVersion.replace(/[_\s]/g, '.');
|
||||
} else if (iosdevice) {
|
||||
osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);
|
||||
osVersion = osVersion.replace(/[_\s]/g, '.');
|
||||
} else if (android) {
|
||||
osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i);
|
||||
} else if (result.webos) {
|
||||
osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i);
|
||||
} else if (result.blackberry) {
|
||||
osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i);
|
||||
} else if (result.bada) {
|
||||
osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i);
|
||||
} else if (result.tizen) {
|
||||
osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i);
|
||||
}
|
||||
if (osVersion) {
|
||||
result.osversion = osVersion;
|
||||
}
|
||||
|
||||
// device type extraction
|
||||
var osMajorVersion = !result.windows && osVersion.split('.')[0];
|
||||
if (
|
||||
tablet
|
||||
|| nexusTablet
|
||||
|| iosdevice == 'ipad'
|
||||
|| (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))
|
||||
|| result.silk
|
||||
) {
|
||||
result.tablet = t
|
||||
} else if (
|
||||
mobile
|
||||
|| iosdevice == 'iphone'
|
||||
|| iosdevice == 'ipod'
|
||||
|| android
|
||||
|| nexusMobile
|
||||
|| result.blackberry
|
||||
|| result.webos
|
||||
|| result.bada
|
||||
) {
|
||||
result.mobile = t
|
||||
}
|
||||
|
||||
// Graded Browser Support
|
||||
// http://developer.yahoo.com/yui/articles/gbs
|
||||
if (result.msedge ||
|
||||
(result.msie && result.version >= 10) ||
|
||||
(result.yandexbrowser && result.version >= 15) ||
|
||||
(result.vivaldi && result.version >= 1.0) ||
|
||||
(result.chrome && result.version >= 20) ||
|
||||
(result.samsungBrowser && result.version >= 4) ||
|
||||
(result.whale && compareVersions([result.version, '1.0']) === 1) ||
|
||||
(result.mzbrowser && compareVersions([result.version, '6.0']) === 1) ||
|
||||
(result.focus && compareVersions([result.version, '1.0']) === 1) ||
|
||||
(result.firefox && result.version >= 20.0) ||
|
||||
(result.safari && result.version >= 6) ||
|
||||
(result.opera && result.version >= 10.0) ||
|
||||
(result.ios && result.osversion && result.osversion.split(".")[0] >= 6) ||
|
||||
(result.blackberry && result.version >= 10.1)
|
||||
|| (result.chromium && result.version >= 20)
|
||||
) {
|
||||
result.a = t;
|
||||
}
|
||||
else if ((result.msie && result.version < 10) ||
|
||||
(result.chrome && result.version < 20) ||
|
||||
(result.firefox && result.version < 20.0) ||
|
||||
(result.safari && result.version < 6) ||
|
||||
(result.opera && result.version < 10.0) ||
|
||||
(result.ios && result.osversion && result.osversion.split(".")[0] < 6)
|
||||
|| (result.chromium && result.version < 20)
|
||||
) {
|
||||
result.c = t
|
||||
} else result.x = t
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')
|
||||
|
||||
bowser.test = function (browserList) {
|
||||
for (var i = 0; i < browserList.length; ++i) {
|
||||
var browserItem = browserList[i];
|
||||
if (typeof browserItem=== 'string') {
|
||||
if (browserItem in bowser) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get version precisions count
|
||||
*
|
||||
* @example
|
||||
* getVersionPrecision("1.10.3") // 3
|
||||
*
|
||||
* @param {string} version
|
||||
* @return {number}
|
||||
*/
|
||||
function getVersionPrecision(version) {
|
||||
return version.split(".").length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Array::map polyfill
|
||||
*
|
||||
* @param {Array} arr
|
||||
* @param {Function} iterator
|
||||
* @return {Array}
|
||||
*/
|
||||
function map(arr, iterator) {
|
||||
var result = [], i;
|
||||
if (Array.prototype.map) {
|
||||
return Array.prototype.map.call(arr, iterator);
|
||||
}
|
||||
for (i = 0; i < arr.length; i++) {
|
||||
result.push(iterator(arr[i]));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate browser version weight
|
||||
*
|
||||
* @example
|
||||
* compareVersions(['1.10.2.1', '1.8.2.1.90']) // 1
|
||||
* compareVersions(['1.010.2.1', '1.09.2.1.90']); // 1
|
||||
* compareVersions(['1.10.2.1', '1.10.2.1']); // 0
|
||||
* compareVersions(['1.10.2.1', '1.0800.2']); // -1
|
||||
*
|
||||
* @param {Array<String>} versions versions to compare
|
||||
* @return {Number} comparison result
|
||||
*/
|
||||
function compareVersions(versions) {
|
||||
// 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
|
||||
var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));
|
||||
var chunks = map(versions, function (version) {
|
||||
var delta = precision - getVersionPrecision(version);
|
||||
|
||||
// 2) "9" -> "9.0" (for precision = 2)
|
||||
version = version + new Array(delta + 1).join(".0");
|
||||
|
||||
// 3) "9.0" -> ["000000000"", "000000009"]
|
||||
return map(version.split("."), function (chunk) {
|
||||
return new Array(20 - chunk.length).join("0") + chunk;
|
||||
}).reverse();
|
||||
});
|
||||
|
||||
// iterate in reverse order by reversed chunks array
|
||||
while (--precision >= 0) {
|
||||
// 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
|
||||
if (chunks[0][precision] > chunks[1][precision]) {
|
||||
return 1;
|
||||
}
|
||||
else if (chunks[0][precision] === chunks[1][precision]) {
|
||||
if (precision === 0) {
|
||||
// all version chunks are same
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if browser is unsupported
|
||||
*
|
||||
* @example
|
||||
* bowser.isUnsupportedBrowser({
|
||||
* msie: "10",
|
||||
* firefox: "23",
|
||||
* chrome: "29",
|
||||
* safari: "5.1",
|
||||
* opera: "16",
|
||||
* phantom: "534"
|
||||
* });
|
||||
*
|
||||
* @param {Object} minVersions map of minimal version to browser
|
||||
* @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
|
||||
* @param {String} [ua] user agent string
|
||||
* @return {Boolean}
|
||||
*/
|
||||
function isUnsupportedBrowser(minVersions, strictMode, ua) {
|
||||
var _bowser = bowser;
|
||||
|
||||
// make strictMode param optional with ua param usage
|
||||
if (typeof strictMode === 'string') {
|
||||
ua = strictMode;
|
||||
strictMode = void(0);
|
||||
}
|
||||
|
||||
if (strictMode === void(0)) {
|
||||
strictMode = false;
|
||||
}
|
||||
if (ua) {
|
||||
_bowser = detect(ua);
|
||||
}
|
||||
|
||||
var version = "" + _bowser.version;
|
||||
for (var browser in minVersions) {
|
||||
if (minVersions.hasOwnProperty(browser)) {
|
||||
if (_bowser[browser]) {
|
||||
if (typeof minVersions[browser] !== 'string') {
|
||||
throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));
|
||||
}
|
||||
|
||||
// browser version and min supported version.
|
||||
return compareVersions([version, minVersions[browser]]) < 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return strictMode; // not found
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if browser is supported
|
||||
*
|
||||
* @param {Object} minVersions map of minimal version to browser
|
||||
* @param {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
|
||||
* @param {String} [ua] user agent string
|
||||
* @return {Boolean}
|
||||
*/
|
||||
function check(minVersions, strictMode, ua) {
|
||||
return !isUnsupportedBrowser(minVersions, strictMode, ua);
|
||||
}
|
||||
|
||||
bowser.isUnsupportedBrowser = isUnsupportedBrowser;
|
||||
bowser.compareVersions = compareVersions;
|
||||
bowser.check = check;
|
||||
|
||||
/*
|
||||
* Set our detect method to the main bowser object so we can
|
||||
* reuse it to test other user agents.
|
||||
* This is needed to implement future tests.
|
||||
*/
|
||||
bowser._detect = detect;
|
||||
|
||||
/*
|
||||
* Set our detect public method to the main bowser object
|
||||
* This is needed to implement bowser in server side
|
||||
*/
|
||||
bowser.detect = detect;
|
||||
return bowser
|
||||
});
|
8
docker/tanner/snare/dist/pages/5/5240ce94138b82da027baf7b78f4248e
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/5240ce94138b82da027baf7b78f4248e
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-bg_glass_100_f8f8f8_1x400.png was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/5490abe26017cf22188a6c4e3498fcf0
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/5490abe26017cf22188a6c4e3498fcf0
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-icons_454545_256x240.png was not found on this server.</p>
|
||||
</body></html>
|
124
docker/tanner/snare/dist/pages/5/55aaa43afa67a8b0ee710ba1b1fa764d
vendored
Normal file
124
docker/tanner/snare/dist/pages/5/55aaa43afa67a8b0ee710ba1b1fa764d
vendored
Normal file
@ -0,0 +1,124 @@
|
||||
/*
|
||||
* Copyright (c) 2015
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3
|
||||
* or later.
|
||||
*
|
||||
* See the COPYING-README file.
|
||||
*
|
||||
*/
|
||||
|
||||
(function() {
|
||||
if (!OC.Share) {
|
||||
OC.Share = {};
|
||||
}
|
||||
|
||||
var TEMPLATE =
|
||||
'<span class="reshare">' +
|
||||
' {{#if avatarEnabled}}' +
|
||||
' <div class="avatar" data-userName="{{reshareOwner}}"></div>' +
|
||||
' {{/if}}' +
|
||||
' {{sharedByText}}' +
|
||||
'</span><br/>'
|
||||
;
|
||||
|
||||
/**
|
||||
* @class OCA.Share.ShareDialogView
|
||||
* @member {OC.Share.ShareItemModel} model
|
||||
* @member {jQuery} $el
|
||||
* @memberof OCA.Sharing
|
||||
* @classdesc
|
||||
*
|
||||
* Represents the GUI of the share dialogue
|
||||
*
|
||||
*/
|
||||
var ShareDialogResharerInfoView = OC.Backbone.View.extend({
|
||||
/** @type {string} **/
|
||||
id: 'shareDialogResharerInfo',
|
||||
|
||||
/** @type {string} **/
|
||||
tagName: 'div',
|
||||
|
||||
/** @type {string} **/
|
||||
className: 'reshare',
|
||||
|
||||
/** @type {OC.Share.ShareConfigModel} **/
|
||||
configModel: undefined,
|
||||
|
||||
/** @type {Function} **/
|
||||
_template: undefined,
|
||||
|
||||
initialize: function(options) {
|
||||
var view = this;
|
||||
|
||||
this.model.on('change:reshare', function() {
|
||||
view.render();
|
||||
});
|
||||
|
||||
if(!_.isUndefined(options.configModel)) {
|
||||
this.configModel = options.configModel;
|
||||
} else {
|
||||
throw 'missing OC.Share.ShareConfigModel';
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
if (!this.model.hasReshare()
|
||||
|| this.model.getReshareOwner() === OC.currentUser)
|
||||
{
|
||||
this.$el.empty();
|
||||
return this;
|
||||
}
|
||||
|
||||
var reshareTemplate = this.template();
|
||||
var ownerDisplayName = this.model.getReshareOwnerDisplayname();
|
||||
var sharedByText = '';
|
||||
if (this.model.getReshareType() === OC.Share.SHARE_TYPE_GROUP) {
|
||||
sharedByText = t(
|
||||
'core',
|
||||
'Shared with you and the group {group} by {owner}',
|
||||
{
|
||||
group: this.model.getReshareWithDisplayName(),
|
||||
owner: ownerDisplayName
|
||||
}
|
||||
);
|
||||
} else {
|
||||
sharedByText = t(
|
||||
'core',
|
||||
'Shared with you by {owner}',
|
||||
{ owner: ownerDisplayName }
|
||||
);
|
||||
}
|
||||
|
||||
this.$el.html(reshareTemplate({
|
||||
avatarEnabled: this.configModel.areAvatarsEnabled(),
|
||||
reshareOwner: this.model.getReshareOwner(),
|
||||
sharedByText: sharedByText
|
||||
}));
|
||||
|
||||
if(this.configModel.areAvatarsEnabled()) {
|
||||
this.$el.find('.avatar').each(function() {
|
||||
var $this = $(this);
|
||||
$this.avatar($this.data('username'), 32);
|
||||
});
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {Function} from Handlebars
|
||||
* @private
|
||||
*/
|
||||
template: function () {
|
||||
if (!this._template) {
|
||||
this._template = Handlebars.compile(TEMPLATE);
|
||||
}
|
||||
return this._template;
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
OC.Share.ShareDialogResharerInfoView = ShareDialogResharerInfoView;
|
||||
|
||||
})();
|
8
docker/tanner/snare/dist/pages/5/56c2357099aaf528a0de4728979a55a3
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/56c2357099aaf528a0de4728979a55a3
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-bg_flat_75_ffffff_40x100.png was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/56e88ae314492f3f5c40a97180dc12e7
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/56e88ae314492f3f5c40a97180dc12e7
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-bg_glass_75_e6e6e6_1x400.png was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/585639540d57caba9e425914a9878b3e
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/585639540d57caba9e425914a9878b3e
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/apps/shield.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/59e528e229bf5195d077b9f8357554e8
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/59e528e229bf5195d077b9f8357554e8
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/details.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/5a61521958d54a85ffd04a553b808967
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/5a61521958d54a85ffd04a553b808967
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/sound-off.svg was not found on this server.</p>
|
||||
</body></html>
|
111
docker/tanner/snare/dist/pages/5/5b2ece29344f2147995ae190fa56fcbb
vendored
Normal file
111
docker/tanner/snare/dist/pages/5/5b2ece29344f2147995ae190fa56fcbb
vendored
Normal file
@ -0,0 +1,111 @@
|
||||
/**
|
||||
* ownCloud - core
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Bernhard Posselt <dev@bernhard-posselt.com>
|
||||
* @copyright Bernhard Posselt 2014
|
||||
*/
|
||||
|
||||
(function (document, $, exports) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var dynamicSlideToggleEnabled = false;
|
||||
|
||||
exports.Apps = {
|
||||
enableDynamicSlideToggle: function () {
|
||||
dynamicSlideToggleEnabled = true;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings
|
||||
*
|
||||
* @param {Object} [$el] sidebar element to show, defaults to $('#app-sidebar')
|
||||
*/
|
||||
exports.Apps.showAppSidebar = function($el) {
|
||||
var $appSidebar = $el || $('#app-sidebar');
|
||||
$appSidebar.removeClass('disappear');
|
||||
$('#app-content').addClass('with-app-sidebar').trigger(new $.Event('appresized'));
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Shows the #app-sidebar and removes .with-app-sidebar from subsequent
|
||||
* siblings
|
||||
*
|
||||
* @param {Object} [$el] sidebar element to hide, defaults to $('#app-sidebar')
|
||||
*/
|
||||
exports.Apps.hideAppSidebar = function($el) {
|
||||
var $appSidebar = $el || $('#app-sidebar');
|
||||
$appSidebar.addClass('disappear');
|
||||
$('#app-content').removeClass('with-app-sidebar').trigger(new $.Event('appresized'));
|
||||
};
|
||||
|
||||
/**
|
||||
* Provides a way to slide down a target area through a button and slide it
|
||||
* up if the user clicks somewhere else. Used for the news app settings and
|
||||
* add new field.
|
||||
*
|
||||
* Usage:
|
||||
* <button data-apps-slide-toggle=".slide-area">slide</button>
|
||||
* <div class=".slide-area" class="hidden">I'm sliding up</div>
|
||||
*/
|
||||
var registerAppsSlideToggle = function () {
|
||||
var buttons = $('[data-apps-slide-toggle]');
|
||||
|
||||
$(document).click(function (event) {
|
||||
|
||||
if (dynamicSlideToggleEnabled) {
|
||||
buttons = $('[data-apps-slide-toggle]');
|
||||
}
|
||||
|
||||
buttons.each(function (index, button) {
|
||||
|
||||
var areaSelector = $(button).data('apps-slide-toggle');
|
||||
var area = $(areaSelector);
|
||||
|
||||
function hideArea() {
|
||||
area.slideUp(OC.menuSpeed*4, function() {
|
||||
area.trigger(new $.Event('hide'));
|
||||
});
|
||||
}
|
||||
function showArea() {
|
||||
area.slideDown(OC.menuSpeed*4, function() {
|
||||
area.trigger(new $.Event('show'));
|
||||
});
|
||||
}
|
||||
|
||||
// do nothing if the area is animated
|
||||
if (!area.is(':animated')) {
|
||||
|
||||
// button toggles the area
|
||||
if ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {
|
||||
if (area.is(':visible')) {
|
||||
hideArea();
|
||||
} else {
|
||||
showArea();
|
||||
}
|
||||
|
||||
// all other areas that have not been clicked but are open
|
||||
// should be slid up
|
||||
} else {
|
||||
var closest = $(event.target).closest(areaSelector);
|
||||
if (area.is(':visible') && closest[0] !== area[0]) {
|
||||
hideArea();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
$(document).ready(function () {
|
||||
registerAppsSlideToggle();
|
||||
});
|
||||
|
||||
}(document, jQuery, OC));
|
8
docker/tanner/snare/dist/pages/5/5d8b445fd9d528ac35d246dd671fb1de
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/5d8b445fd9d528ac35d246dd671fb1de
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/sound.svg was not found on this server.</p>
|
||||
</body></html>
|
BIN
docker/tanner/snare/dist/pages/5/5e745110be2b0b0ef7613d5493335dfd
vendored
Normal file
BIN
docker/tanner/snare/dist/pages/5/5e745110be2b0b0ef7613d5493335dfd
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.8 KiB |
115
docker/tanner/snare/dist/pages/5/5feedbee3caa4d4667257a53a4a380e5
vendored
Normal file
115
docker/tanner/snare/dist/pages/5/5feedbee3caa4d4667257a53a4a380e5
vendored
Normal file
@ -0,0 +1,115 @@
|
||||
/**
|
||||
* @author Roeland Jago Douma <roeland@famdouma.nl>
|
||||
*
|
||||
* @copyright Copyright (c) 2018, ownCloud GmbH
|
||||
* @license AGPL-3.0
|
||||
*
|
||||
* This code is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License, version 3,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License, version 3,
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Namespace to hold functions related to convert mimetype to icons
|
||||
*
|
||||
* @namespace
|
||||
*/
|
||||
OC.MimeType = {
|
||||
|
||||
/**
|
||||
* Cache that maps mimeTypes to icon urls
|
||||
*/
|
||||
_mimeTypeIcons: {},
|
||||
|
||||
/**
|
||||
* Return the file icon we want to use for the given mimeType.
|
||||
* The file needs to be present in the supplied file list
|
||||
*
|
||||
* @param {string} mimeType The mimeType we want an icon for
|
||||
* @param {array} files The available icons in this theme
|
||||
* @return {string} The icon to use or null if there is no match
|
||||
*/
|
||||
_getFile: function(mimeType, files) {
|
||||
var icon = mimeType.replace(new RegExp('/', 'g'), '-');
|
||||
|
||||
// Generate path
|
||||
if (mimeType === 'dir' && $.inArray('folder', files) !== -1) {
|
||||
return 'folder';
|
||||
} else if (mimeType === 'dir-shared' && $.inArray('folder-shared', files) !== -1) {
|
||||
return 'folder-shared';
|
||||
} else if (mimeType === 'dir-public' && $.inArray('folder-public', files) !== -1) {
|
||||
return 'folder-public';
|
||||
} else if (mimeType === 'dir-external' && $.inArray('folder-external', files) !== -1) {
|
||||
return 'folder-external';
|
||||
} else if ($.inArray(icon, files) !== -1) {
|
||||
return icon;
|
||||
} else if ($.inArray(icon.split('-')[0], files) !== -1) {
|
||||
return icon.split('-')[0];
|
||||
} else if ($.inArray('file', files) !== -1) {
|
||||
return 'file';
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
|
||||
/**
|
||||
* Return the url to icon of the given mimeType
|
||||
*
|
||||
* @param {string} mimeType The mimeType to get the icon for
|
||||
* @return {string} Url to the icon for mimeType
|
||||
*/
|
||||
getIconUrl: function(mimeType) {
|
||||
if (_.isUndefined(mimeType)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
mimeType = this.getMimeTypeAliasTarget(mimeType);
|
||||
|
||||
if (mimeType in OC.MimeType._mimeTypeIcons) {
|
||||
return OC.MimeType._mimeTypeIcons[mimeType];
|
||||
}
|
||||
|
||||
var path, icon = null;
|
||||
|
||||
// First try to get the correct icon from the current theme
|
||||
if (OC.currentTheme.name !== '' && $.isArray(OC.MimeTypeList.themes[OC.currentTheme.name])) {
|
||||
path = '/' + OC.currentTheme.directory + '/core/img/filetypes/';
|
||||
icon = OC.MimeType._getFile(mimeType, OC.MimeTypeList.themes[OC.currentTheme.name]);
|
||||
}
|
||||
|
||||
// If we do not yet have an icon fall back to the default
|
||||
if (icon === null) {
|
||||
path = '/core/img/filetypes/';
|
||||
icon = OC.MimeType._getFile(mimeType, OC.MimeTypeList.files);
|
||||
}
|
||||
|
||||
var mimeTypeIcon = OC.getRootPath() + path + icon + '.svg';
|
||||
|
||||
// Cache the result
|
||||
OC.MimeType._mimeTypeIcons[mimeType] = mimeTypeIcon;
|
||||
return mimeTypeIcon;
|
||||
},
|
||||
|
||||
/**
|
||||
* If the given mimeType is an alias, this method returns its target,
|
||||
* else it returns the given mimeType.
|
||||
*
|
||||
* @param {string} mimeType The mimeType to get the icon for
|
||||
* @returns {string} mimeType The mimeType to get the icon for
|
||||
*/
|
||||
getMimeTypeAliasTarget: function (mimeType) {
|
||||
while (mimeType in OC.MimeTypeList.aliases) {
|
||||
mimeType = OC.MimeTypeList.aliases[mimeType];
|
||||
}
|
||||
return mimeType;
|
||||
}
|
||||
};
|
38
docker/tanner/snare/dist/pages/5/607da1c84be681be35e7bac89b607a30
vendored
Normal file
38
docker/tanner/snare/dist/pages/5/607da1c84be681be35e7bac89b607a30
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
ColorBox Core Style:
|
||||
The following CSS is consistent between example themes and should not be altered.
|
||||
*/
|
||||
#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
|
||||
#cboxOverlay{position:fixed; width:100%; height:100%;}
|
||||
#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
|
||||
#cboxContent{position:relative;}
|
||||
#cboxLoadedContent{overflow:auto;}
|
||||
#cboxTitle{margin:8;}
|
||||
#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
|
||||
#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
|
||||
.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
|
||||
.cboxIframe{width:100%; height:100%; display:block; border:0;}
|
||||
#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
|
||||
|
||||
/*
|
||||
User Style:
|
||||
Change the following styles to modify the appearance of ColorBox. They are
|
||||
ordered & tabbed in a way that represents the nesting of the generated HTML.
|
||||
*/
|
||||
#cboxOverlay{background:#000;}
|
||||
#colorbox{}
|
||||
#cboxContent{margin-top:20px;}
|
||||
.cboxIframe{background:#fff;}
|
||||
#cboxError{padding:50px; border:0px solid #ccc;}
|
||||
#cboxLoadedContent{border:0px solid #555; background:#fff;border-radius: 5px;}
|
||||
#cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;}
|
||||
#cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;}
|
||||
#cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;}
|
||||
#cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:none; width:28px; height:65px; text-indent:-9999px;}
|
||||
#cboxPrevious:hover{background-position:bottom left;}
|
||||
#cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:none; width:28px; height:65px; text-indent:-9999px;}
|
||||
#cboxNext:hover{background-position:bottom right;}
|
||||
#cboxLoadingOverlay{background:#fff;}
|
||||
#cboxLoadingGraphic{background:none;}
|
||||
#cboxClose{position:absolute; top:5px; right:5px; display:block; background:none; width:38px; height:19px; text-indent:-9999px;}
|
||||
#cboxClose:hover{background-position:bottom center;}
|
8
docker/tanner/snare/dist/pages/5/60d1cdd6d1e7af041c618bdf36a3ffe1
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/60d1cdd6d1e7af041c618bdf36a3ffe1
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/checkmark-white.svg was not found on this server.</p>
|
||||
</body></html>
|
1105
docker/tanner/snare/dist/pages/5/62e7c5f4e3f50ab4b59b98c830525190
vendored
Normal file
1105
docker/tanner/snare/dist/pages/5/62e7c5f4e3f50ab4b59b98c830525190
vendored
Normal file
File diff suppressed because it is too large
Load Diff
164
docker/tanner/snare/dist/pages/5/63e5a4a64ebab4bcc9316d5038e62d77
vendored
Normal file
164
docker/tanner/snare/dist/pages/5/63e5a4a64ebab4bcc9316d5038e62d77
vendored
Normal file
@ -0,0 +1,164 @@
|
||||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author Robin Appelman
|
||||
* @copyright Copyright (c) 2012 Robin Appelman icewind1991@gmail.com
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Wrapper for server side events
|
||||
* (http://en.wikipedia.org/wiki/Server-sent_events)
|
||||
* includes a fallback for older browsers and IE
|
||||
*
|
||||
* use server side events with caution, too many open requests can hang the
|
||||
* server
|
||||
*/
|
||||
|
||||
/* global EventSource */
|
||||
|
||||
/**
|
||||
* Create a new event source
|
||||
* @param {string} src
|
||||
* @param {object} [data] to be send as GET
|
||||
*
|
||||
* @constructs OC.EventSource
|
||||
*/
|
||||
OC.EventSource=function(src,data){
|
||||
var dataStr='';
|
||||
var name;
|
||||
var joinChar;
|
||||
this.typelessListeners=[];
|
||||
this.closed = false;
|
||||
this.listeners={};
|
||||
if(data){
|
||||
for(name in data){
|
||||
dataStr+=name+'='+encodeURIComponent(data[name])+'&';
|
||||
}
|
||||
}
|
||||
dataStr+='requesttoken='+encodeURIComponent(oc_requesttoken);
|
||||
if(!this.useFallBack && typeof EventSource !== 'undefined'){
|
||||
joinChar = '&';
|
||||
if(src.indexOf('?') === -1) {
|
||||
joinChar = '?';
|
||||
}
|
||||
this.source= new EventSource(src+joinChar+dataStr);
|
||||
this.source.onmessage=function(e){
|
||||
for(var i=0;i<this.typelessListeners.length;i++){
|
||||
this.typelessListeners[i](JSON.parse(e.data));
|
||||
}
|
||||
}.bind(this);
|
||||
}else{
|
||||
var iframeId='oc_eventsource_iframe_'+OC.EventSource.iframeCount;
|
||||
OC.EventSource.fallBackSources[OC.EventSource.iframeCount]=this;
|
||||
this.iframe=$('<iframe/>');
|
||||
this.iframe.attr('id',iframeId);
|
||||
this.iframe.hide();
|
||||
|
||||
joinChar = '&';
|
||||
if(src.indexOf('?') === -1) {
|
||||
joinChar = '?';
|
||||
}
|
||||
this.iframe.attr('src',src+joinChar+'fallback=true&fallback_id='+OC.EventSource.iframeCount+'&'+dataStr);
|
||||
$('body').append(this.iframe);
|
||||
this.useFallBack=true;
|
||||
OC.EventSource.iframeCount++;
|
||||
}
|
||||
//add close listener
|
||||
this.listen('__internal__',function(data){
|
||||
if(data === 'close'){
|
||||
this.close();
|
||||
}
|
||||
}.bind(this));
|
||||
};
|
||||
OC.EventSource.fallBackSources=[];
|
||||
OC.EventSource.iframeCount=0;//number of fallback iframes
|
||||
OC.EventSource.fallBackCallBack=function(id,type,data){
|
||||
OC.EventSource.fallBackSources[id].fallBackCallBack(type,data);
|
||||
};
|
||||
OC.EventSource.prototype={
|
||||
typelessListeners:[],
|
||||
iframe:null,
|
||||
listeners:{},//only for fallback
|
||||
useFallBack:false,
|
||||
/**
|
||||
* Fallback callback for browsers that don't have the
|
||||
* native EventSource object.
|
||||
*
|
||||
* Calls the registered listeners.
|
||||
*
|
||||
* @private
|
||||
* @param {String} type event type
|
||||
* @param {Object} data received data
|
||||
*/
|
||||
fallBackCallBack:function(type,data){
|
||||
var i;
|
||||
// ignore messages that might appear after closing
|
||||
if (this.closed) {
|
||||
return;
|
||||
}
|
||||
if(type){
|
||||
if (typeof this.listeners.done !== 'undefined') {
|
||||
for(i=0;i<this.listeners[type].length;i++){
|
||||
this.listeners[type][i](data);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for(i=0;i<this.typelessListeners.length;i++){
|
||||
this.typelessListeners[i](data);
|
||||
}
|
||||
}
|
||||
},
|
||||
lastLength:0,//for fallback
|
||||
/**
|
||||
* Listen to a given type of events.
|
||||
*
|
||||
* @param {String} type event type
|
||||
* @param {Function} callback event callback
|
||||
*/
|
||||
listen:function(type,callback){
|
||||
if(callback && callback.call){
|
||||
|
||||
if(type){
|
||||
if(this.useFallBack){
|
||||
if(!this.listeners[type]){
|
||||
this.listeners[type]=[];
|
||||
}
|
||||
this.listeners[type].push(callback);
|
||||
}else{
|
||||
this.source.addEventListener(type,function(e){
|
||||
if (typeof e.data !== 'undefined') {
|
||||
callback(JSON.parse(e.data));
|
||||
} else {
|
||||
callback('');
|
||||
}
|
||||
},false);
|
||||
}
|
||||
}else{
|
||||
this.typelessListeners.push(callback);
|
||||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Closes this event source.
|
||||
*/
|
||||
close:function(){
|
||||
this.closed = true;
|
||||
if (typeof this.source !== 'undefined') {
|
||||
this.source.close();
|
||||
}
|
||||
}
|
||||
};
|
8
docker/tanner/snare/dist/pages/5/6454b32ba1e1035d6d34156761b2f5ca
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/6454b32ba1e1035d6d34156761b2f5ca
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-bg_flat_35_1d2d44_40x100.png was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/65b51cc3913f799aa7219c6e042f8224
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/65b51cc3913f799aa7219c6e042f8224
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/delete-hover.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/660b5c7b9f1918f04d97c737f61adcfc
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/660b5c7b9f1918f04d97c737f61adcfc
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/background.jpg was not found on this server.</p>
|
||||
</body></html>
|
285
docker/tanner/snare/dist/pages/5/6626d2d05b5b04d0b6e64661ec6242ed
vendored
Normal file
285
docker/tanner/snare/dist/pages/5/6626d2d05b5b04d0b6e64661ec6242ed
vendored
Normal file
@ -0,0 +1,285 @@
|
||||
/* Copyright (c) 2011, Jan-Christoph Borchardt, http://jancborchardt.net
|
||||
This file is licensed under the Affero General Public License version 3 or later.
|
||||
See the COPYING-README file. */
|
||||
|
||||
#dropdown {
|
||||
background: #eee;
|
||||
border-bottom-left-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
box-shadow: 0 2px 3px rgba(50, 50, 50, .4);
|
||||
display: block;
|
||||
margin-right: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
width: 420px;
|
||||
z-index: 500;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 768px) and (max-width: 990px) {
|
||||
#dropdown {
|
||||
/* this limits the dropdown to float below the sidebar for mid narrow screens */
|
||||
left: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.shareTabView .unshare.icon-loading-small {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.shareTabView .linkShare .icon-loading-small,
|
||||
.shareTabView .shareWithLoading {
|
||||
display: inline-block !important;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.shareTabView .shareWithLoading {
|
||||
position: relative;
|
||||
right: 70px;
|
||||
top: 2px;
|
||||
}
|
||||
|
||||
.shareTabView .icon-loading-small.hidden {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.shareTabView .avatar {
|
||||
margin-right: 8px;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
vertical-align: middle;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
.share-autocomplete-item {
|
||||
display: flex;
|
||||
max-width: 220px;
|
||||
}
|
||||
|
||||
@media (min-width: 1152px) {
|
||||
.share-autocomplete-item {
|
||||
max-width: 20vw;
|
||||
}
|
||||
}
|
||||
|
||||
.share-autocomplete-item .autocomplete-item-text {
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
line-height: 32px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.share-autocomplete-item .autocomplete-item-displayname {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.share-autocomplete-item .avatardiv {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
#shareWithList .user-additional-info,
|
||||
.share-autocomplete-item .autocomplete-item-additional-info {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
#shareWithList {
|
||||
list-style-type: none;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
#shareWithList li {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
font-weight: bold;
|
||||
line-height: 21px;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
#shareWithList .shareOption {
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
#shareWithList .showCruds img,
|
||||
#shareWithList .unshare img {
|
||||
vertical-align: text-bottom;
|
||||
/* properly align icons */
|
||||
}
|
||||
|
||||
#shareWithList label input[type=checkbox] {
|
||||
margin-left: 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#shareWithList .username {
|
||||
padding-right: 8px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 254px;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#shareWithList li label {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
.shareTabView label {
|
||||
font-weight: 400;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.shareTabView input[type="checkbox"] {
|
||||
margin: 0 3px 0 8px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
a.showCruds {
|
||||
display: inline;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
a.unshare {
|
||||
display: inline;
|
||||
float: right;
|
||||
opacity: 0.5;
|
||||
padding: 10px;
|
||||
margin-top: -5px;
|
||||
margin-right: -10px;
|
||||
}
|
||||
|
||||
#link {
|
||||
border-top: 1px solid #ddd;
|
||||
padding-top: 8px;
|
||||
}
|
||||
|
||||
.shareTabView input[type="submit"] {
|
||||
margin-left: 7px;
|
||||
}
|
||||
|
||||
.shareTabView form {
|
||||
font-size: 100%;
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.shareTabView .error {
|
||||
color: #e9322d;
|
||||
border-color: #e9322d;
|
||||
box-shadow: 0 0 6px #f8b9b7;
|
||||
}
|
||||
|
||||
.shareTabView .linkShareView,
|
||||
.shareTabView .localShareView {
|
||||
clear: left;
|
||||
}
|
||||
|
||||
#link #showPassword img {
|
||||
padding-left: 5px;
|
||||
width: 12px;
|
||||
}
|
||||
|
||||
#expiration label,
|
||||
#link label,
|
||||
.fileowner,
|
||||
.reshare {
|
||||
display: inline-block;
|
||||
padding: 6px 4px;
|
||||
}
|
||||
|
||||
a.showCruds:hover,
|
||||
a.unshare:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
#defaultExpireMessage,
|
||||
/* fix expire message going out of box */
|
||||
.reshare {
|
||||
/* fix shared by text going out of box */
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
#defaultExpireMessage {
|
||||
/* show message on new line */
|
||||
display: block;
|
||||
padding-left: 4px;
|
||||
/* TODO: style the dropdown in a proper way - border-box, etc. */
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.ui-autocomplete {
|
||||
/* limit dropdown height to 4 1/2 entries */
|
||||
max-height: 103px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.notCreatable {
|
||||
padding-left: 12px;
|
||||
padding-top: 12px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
/* Private Link share Form */
|
||||
|
||||
.emailPrivateLinkForm {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.emailPrivateLinkForm--sending-indicator,
|
||||
.emailPrivateLinkForm--sent-indicator {
|
||||
z-index: 2;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
bottom: -8px;
|
||||
transform: translate(-50%, 100%);
|
||||
|
||||
width: auto;
|
||||
padding: 5px;
|
||||
background-color: rgba(240,240,240,.9);
|
||||
color: #555;
|
||||
border: 1px solid rgba(240,240,240,.9);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.emailPrivateLinkForm--sent-indicator {
|
||||
background-color: MediumSeaGreen;
|
||||
border-color: MediumSeaGreen;
|
||||
font-weight: 600;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.emailPrivateLinkForm--addAddressButton {
|
||||
position: absolute;
|
||||
right: 13px;
|
||||
margin-top: -30px;
|
||||
z-index: 1;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.emailPrivateLinkForm--dropDown {
|
||||
/* would love to get this from vars */
|
||||
max-width: 484px;
|
||||
}
|
||||
|
||||
.emailPrivateLinkForm--dropDown > .select2-choices {
|
||||
border-color: #ddd;
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.select2-search-choice {
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-search-choice-close {
|
||||
left: inherit;
|
||||
right: 3px;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-choice {
|
||||
padding: 3px 18px 3px 5px;
|
||||
}
|
8
docker/tanner/snare/dist/pages/5/6653e6a79ebaa402126c237227c9b9d0
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/6653e6a79ebaa402126c237227c9b9d0
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/comment.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/66734ed9cc8d4dd504d5e22d06707457
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/66734ed9cc8d4dd504d5e22d06707457
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-icons_222222_256x240.png was not found on this server.</p>
|
||||
</body></html>
|
509
docker/tanner/snare/dist/pages/5/69ac2775853ab0325f183a04090c9526
vendored
Normal file
509
docker/tanner/snare/dist/pages/5/69ac2775853ab0325f183a04090c9526
vendored
Normal file
@ -0,0 +1,509 @@
|
||||
/*
|
||||
* Copyright (c) 2015
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3
|
||||
* or later.
|
||||
*
|
||||
* See the COPYING-README file.
|
||||
*
|
||||
*/
|
||||
|
||||
(function() {
|
||||
if(!OC.Share) {
|
||||
OC.Share = {};
|
||||
}
|
||||
|
||||
var TEMPLATE_BASE =
|
||||
'<div class="resharerInfoView subView"></div>' +
|
||||
'{{#if isSharingAllowed}}' +
|
||||
'{{#if isLinkSharingAllowed}}' +
|
||||
'<ul class="subTabHeaders">' +
|
||||
' <li class="subTabHeader selected subtab-localshare">{{localSharesLabel}}</li>' +
|
||||
' <li class="subTabHeader subtab-publicshare">{{publicSharesLabel}}</li>' +
|
||||
'</ul>' +
|
||||
'{{/if}}' +
|
||||
'<div class="tabsContainer">' +
|
||||
// TODO: this really should be a separate view class
|
||||
' <div class="localShareView tab" style="padding-left:0;padding-right:0;">' +
|
||||
' <label for="shareWith-{{cid}}" class="hidden-visually">{{shareLabel}}</label>' +
|
||||
' <div class="oneline">' +
|
||||
' <input id="shareWith-{{cid}}" class="shareWithField" type="text" placeholder="{{sharePlaceholder}}" />' +
|
||||
' <span class="shareWithLoading icon-loading-small hidden"></span>'+
|
||||
'{{{remoteShareInfo}}}' +
|
||||
' </div>' +
|
||||
' <div class="shareeListView subView"></div>' +
|
||||
' </div>' +
|
||||
' <div class="linkShareView subView tab hidden" style="padding-left:0;padding-right:0;"></div>' +
|
||||
'</div>' +
|
||||
'{{else}}' +
|
||||
'<div class="noSharingPlaceholder">{{noSharingPlaceholder}}</div>' +
|
||||
'{{/if}}' +
|
||||
'<div class="loading hidden" style="height: 50px"></div>';
|
||||
|
||||
var TEMPLATE_REMOTE_SHARE_INFO =
|
||||
'<a target="_blank" class="icon icon-info shareWithRemoteInfo hasTooltip" href="{{docLink}}" ' +
|
||||
'title="{{tooltip}}"></a>';
|
||||
|
||||
var TEMPLATE_AUTOCOMPLETE_ITEM =
|
||||
'<li class="{{shareTypeClass}}">' +
|
||||
'<a>' +
|
||||
'<div class="share-autocomplete-item">' +
|
||||
'{{#if showAvatar}}' +
|
||||
'<div class="avatardiv"></div>' +
|
||||
'{{/if}}' +
|
||||
'<div class="autocomplete-item-text">' +
|
||||
'<span class="autocomplete-item-displayname">{{displayName}}</span>' +
|
||||
'{{#if additionalInfo}}' +
|
||||
'<span class="autocomplete-item-additional-info">({{additionalInfo}})</span>' +
|
||||
'{{/if}}' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</a>' +
|
||||
'</li>';
|
||||
|
||||
/**
|
||||
* @class OCA.Share.ShareDialogView
|
||||
* @member {OC.Share.ShareItemModel} model
|
||||
* @member {jQuery} $el
|
||||
* @memberof OCA.Sharing
|
||||
* @classdesc
|
||||
*
|
||||
* Represents the GUI of the share dialogue
|
||||
*
|
||||
*/
|
||||
var ShareDialogView = OC.Backbone.View.extend({
|
||||
/** @type {Object} **/
|
||||
_templates: {},
|
||||
|
||||
/** @type {string} **/
|
||||
tagName: 'div',
|
||||
|
||||
/** @type {OC.Share.ShareConfigModel} **/
|
||||
configModel: undefined,
|
||||
|
||||
/** @type {object} **/
|
||||
resharerInfoView: undefined,
|
||||
|
||||
/** @type {object} **/
|
||||
linkShareView: undefined,
|
||||
|
||||
/** @type {object} **/
|
||||
shareeListView: undefined,
|
||||
|
||||
events: {
|
||||
'input .shareWithField': 'onShareWithFieldChanged',
|
||||
'click .subTabHeader': '_onClickTabHeader'
|
||||
},
|
||||
|
||||
initialize: function(options) {
|
||||
var view = this;
|
||||
|
||||
this.model.on('fetchError', function() {
|
||||
OC.Notification.showTemporary(t('core', 'Share details could not be loaded for this item.'));
|
||||
});
|
||||
|
||||
if(!_.isUndefined(options.configModel)) {
|
||||
this.configModel = options.configModel;
|
||||
} else {
|
||||
throw 'missing OC.Share.ShareConfigModel';
|
||||
}
|
||||
|
||||
this.configModel.on('change:isRemoteShareAllowed', function() {
|
||||
view.render();
|
||||
});
|
||||
this.model.on('change:permissions', function() {
|
||||
view.render();
|
||||
});
|
||||
|
||||
this.model.on('request', this._onRequest, this);
|
||||
this.model.on('sync', this._onEndRequest, this);
|
||||
|
||||
var subViewOptions = {
|
||||
model: this.model,
|
||||
configModel: this.configModel
|
||||
};
|
||||
|
||||
var subViews = {
|
||||
resharerInfoView: 'ShareDialogResharerInfoView',
|
||||
shareeListView: 'ShareDialogShareeListView'
|
||||
};
|
||||
|
||||
for(var name in subViews) {
|
||||
var className = subViews[name];
|
||||
this[name] = _.isUndefined(options[name])
|
||||
? new OC.Share[className](subViewOptions)
|
||||
: options[name];
|
||||
}
|
||||
|
||||
this.linkShareView = null;
|
||||
|
||||
_.bindAll(this,
|
||||
'autocompleteHandler',
|
||||
'_onSelectRecipient',
|
||||
'onShareWithFieldChanged'
|
||||
);
|
||||
|
||||
OC.Plugins.attach('OC.Share.ShareDialogView', this);
|
||||
},
|
||||
|
||||
_onClickTabHeader: function(ev) {
|
||||
var $target = $(ev.target);
|
||||
this.$('.subTabHeaders .subTabHeader.selected').removeClass('selected');
|
||||
|
||||
$target.addClass('selected');
|
||||
|
||||
this.$('.localShareView').toggleClass('hidden', !$target.hasClass('subtab-localshare'));
|
||||
|
||||
var $linkShareView = this.$('.linkShareView');
|
||||
if ($linkShareView.length) {
|
||||
$linkShareView.toggleClass('hidden', !$target.hasClass('subtab-publicshare'));
|
||||
|
||||
if (!this.linkShareView) {
|
||||
this.linkShareView = new OC.Share.ShareDialogLinkListView({
|
||||
collection: this.model.getLinkSharesCollection(),
|
||||
// pass in the legacy stuff...
|
||||
itemModel: this.model
|
||||
});
|
||||
this.linkShareView.render();
|
||||
$linkShareView.append(this.linkShareView.$el);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onShareWithFieldChanged: function() {
|
||||
var $el = this.$el.find('.shareWithField');
|
||||
if ($el.val().length < 2) {
|
||||
$el.removeClass('error').tooltip('hide');
|
||||
}
|
||||
},
|
||||
|
||||
autocompleteHandler: function (search, response) {
|
||||
var view = this;
|
||||
var $loading = this.$el.find('.shareWithLoading');
|
||||
$loading.removeClass('hidden');
|
||||
$loading.addClass('inlineblock');
|
||||
$.get(
|
||||
OC.linkToOCS('apps/files_sharing/api/v1') + 'sharees',
|
||||
{
|
||||
format: 'json',
|
||||
search: search.term.trim(),
|
||||
perPage: 200,
|
||||
itemType: view.model.get('itemType')
|
||||
},
|
||||
function (result) {
|
||||
$loading.addClass('hidden');
|
||||
$loading.removeClass('inlineblock');
|
||||
if (result.ocs.meta.statuscode == 100) {
|
||||
var users = result.ocs.data.exact.users.concat(result.ocs.data.users);
|
||||
var groups = result.ocs.data.exact.groups.concat(result.ocs.data.groups);
|
||||
var remotes = result.ocs.data.exact.remotes.concat(result.ocs.data.remotes);
|
||||
|
||||
var usersLength;
|
||||
var groupsLength;
|
||||
var remotesLength;
|
||||
|
||||
var i, j;
|
||||
|
||||
//Filter out the current user
|
||||
usersLength = users.length;
|
||||
for (i = 0 ; i < usersLength; i++) {
|
||||
if (users[i].value.shareWith === OC.currentUser) {
|
||||
users.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Filter out the owner of the share
|
||||
if (view.model.hasReshare()) {
|
||||
usersLength = users.length;
|
||||
for (i = 0 ; i < usersLength; i++) {
|
||||
if (users[i].value.shareWith === view.model.getReshareOwner()) {
|
||||
users.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var shares = view.model.get('shares');
|
||||
var sharesLength = shares.length;
|
||||
|
||||
// Now filter out all sharees that are already shared with
|
||||
for (i = 0; i < sharesLength; i++) {
|
||||
var share = shares[i];
|
||||
|
||||
if (share.share_type === OC.Share.SHARE_TYPE_USER) {
|
||||
usersLength = users.length;
|
||||
for (j = 0; j < usersLength; j++) {
|
||||
if (users[j].value.shareWith === share.share_with) {
|
||||
users.splice(j, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (share.share_type === OC.Share.SHARE_TYPE_GROUP) {
|
||||
groupsLength = groups.length;
|
||||
for (j = 0; j < groupsLength; j++) {
|
||||
if (groups[j].value.shareWith === share.share_with) {
|
||||
groups.splice(j, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (share.share_type === OC.Share.SHARE_TYPE_REMOTE) {
|
||||
remotesLength = remotes.length;
|
||||
for (j = 0; j < remotesLength; j++) {
|
||||
if (remotes[j].value.shareWith === share.share_with) {
|
||||
remotes.splice(j, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var suggestions = users.concat(groups).concat(remotes);
|
||||
|
||||
|
||||
if (suggestions.length > 0) {
|
||||
suggestions.sort(function (a, b) {
|
||||
return OC.Util.naturalSortCompare(a.label, b.label);
|
||||
});
|
||||
$('.shareWithField').removeClass('error')
|
||||
.tooltip('hide')
|
||||
.autocomplete("option", "autoFocus", true);
|
||||
response(suggestions, result);
|
||||
} else {
|
||||
var title = t('core', 'No users or groups found for {search}', {search: $('.shareWithField').val()});
|
||||
if (!view.configModel.get('allowGroupSharing')) {
|
||||
title = t('core', 'No users found for {search}', {search: $('.shareWithField').val()});
|
||||
}
|
||||
var suggestStarts = OC.getCapabilities().files_sharing.search_min_length;
|
||||
if (suggestStarts > $('.shareWithField').val().length) {
|
||||
title = title + '. ' + n(
|
||||
'core',
|
||||
'Please enter at least {chars} character for suggestions',
|
||||
'Please enter at least {chars} characters for suggestions',
|
||||
suggestStarts,
|
||||
{chars: suggestStarts}
|
||||
);
|
||||
}
|
||||
$('.shareWithField').addClass('error')
|
||||
.attr('data-original-title', title)
|
||||
.tooltip('hide')
|
||||
.tooltip({
|
||||
placement: 'bottom',
|
||||
trigger: 'manual'
|
||||
})
|
||||
.tooltip('fixTitle')
|
||||
.tooltip('show');
|
||||
response(undefined, result);
|
||||
}
|
||||
} else {
|
||||
response(undefined, result);
|
||||
}
|
||||
}
|
||||
).fail(function() {
|
||||
$loading.addClass('hidden');
|
||||
$loading.removeClass('inlineblock');
|
||||
OC.Notification.show(t('core', 'An error occurred. Please try again'));
|
||||
window.setTimeout(OC.Notification.hide, 5000);
|
||||
});
|
||||
},
|
||||
|
||||
autocompleteRenderItem: function(ul, item) {
|
||||
|
||||
var text = item.label;
|
||||
if (item.value.shareType === OC.Share.SHARE_TYPE_GROUP) {
|
||||
text = t('core', '{sharee} (group)', {
|
||||
sharee: text
|
||||
});
|
||||
} else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE) {
|
||||
if (item.value.server) {
|
||||
text = t('core', '{sharee} (at {server})', {
|
||||
sharee: text,
|
||||
server: item.value.server
|
||||
});
|
||||
} else {
|
||||
text = t('core', '{sharee} (federated)', {
|
||||
sharee: text
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var template = this._getAutocompleteItemTemplate();
|
||||
var $el = $(template({
|
||||
showAvatar: this.configModel.areAvatarsEnabled(),
|
||||
displayName: text,
|
||||
additionalInfo: item.value.shareWithAdditionalInfo,
|
||||
shareTypeClass: (item.value.shareType === OC.Share.SHARE_TYPE_GROUP) ? 'group' : 'user'
|
||||
}));
|
||||
|
||||
if(this.configModel.areAvatarsEnabled()) {
|
||||
var $avatar = $el.find('.avatardiv');
|
||||
if (item.value.shareType === OC.Share.SHARE_TYPE_USER) {
|
||||
$avatar.avatar(item.value.shareWith, 32, undefined, undefined, undefined, item.label);
|
||||
} else {
|
||||
$avatar.imageplaceholder(text, undefined, 32);
|
||||
}
|
||||
}
|
||||
|
||||
return $el.appendTo(ul);
|
||||
},
|
||||
|
||||
_onSelectRecipient: function(e, s) {
|
||||
e.preventDefault();
|
||||
$(e.target).attr('disabled', true)
|
||||
.val(s.item.label);
|
||||
var $loading = this.$el.find('.shareWithLoading');
|
||||
$loading.removeClass('hidden')
|
||||
.addClass('inlineblock');
|
||||
|
||||
this.model.addShare(s.item.value, {success: function() {
|
||||
$(e.target).val('')
|
||||
.attr('disabled', false);
|
||||
$loading.addClass('hidden')
|
||||
.removeClass('inlineblock');
|
||||
}, error: function(obj, msg) {
|
||||
OC.Notification.showTemporary(msg);
|
||||
$(e.target).attr('disabled', false)
|
||||
.autocomplete('search', $(e.target).val());
|
||||
$loading.addClass('hidden')
|
||||
.removeClass('inlineblock');
|
||||
}});
|
||||
},
|
||||
|
||||
_toggleLoading: function(state) {
|
||||
this._loading = state;
|
||||
this.$el.find('.localShareView, .noSharingPlaceholder').toggleClass('hidden', state);
|
||||
this.$el.find('.loading').toggleClass('hidden', !state);
|
||||
},
|
||||
|
||||
_onRequest: function() {
|
||||
// only show the loading spinner for the first request (for now)
|
||||
if (!this._loadingOnce) {
|
||||
this._toggleLoading(true);
|
||||
}
|
||||
},
|
||||
|
||||
_onEndRequest: function() {
|
||||
var self = this;
|
||||
this._toggleLoading(false);
|
||||
if (!this._loadingOnce) {
|
||||
this._loadingOnce = true;
|
||||
// the first time, focus on the share field after the spinner disappeared
|
||||
if (!bowser.msie) {
|
||||
_.defer(function () {
|
||||
self.$('.shareWithField').focus();
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var baseTemplate = this._getTemplate('base', TEMPLATE_BASE);
|
||||
|
||||
this.$el.html(baseTemplate({
|
||||
cid: this.cid,
|
||||
shareLabel: t('core', 'Share'),
|
||||
sharePlaceholder: this._renderSharePlaceholderPart(),
|
||||
remoteShareInfo: this._renderRemoteShareInfoPart(),
|
||||
isSharingAllowed: this.model.sharePermissionPossible(),
|
||||
isLinkSharingAllowed: this.configModel.isShareWithLinkAllowed(),
|
||||
localSharesLabel: t('core', 'User and Groups'),
|
||||
publicSharesLabel: t('core', 'Public Links'),
|
||||
noSharingPlaceholder: t('core', 'Resharing is not allowed')
|
||||
}));
|
||||
|
||||
var $shareField = this.$el.find('.shareWithField');
|
||||
if ($shareField.length) {
|
||||
$shareField.autocomplete({
|
||||
minLength: 1,
|
||||
delay: 750,
|
||||
focus: function(event) {
|
||||
event.preventDefault();
|
||||
},
|
||||
source: this.autocompleteHandler,
|
||||
select: this._onSelectRecipient
|
||||
}).data('ui-autocomplete')._renderItem = _.bind(this.autocompleteRenderItem, this);
|
||||
}
|
||||
|
||||
this.resharerInfoView.$el = this.$el.find('.resharerInfoView');
|
||||
this.resharerInfoView.render();
|
||||
|
||||
var resharingAllowed = this.model.sharePermissionPossible();
|
||||
if (!resharingAllowed || !this.configModel.isShareWithLinkAllowed()) {
|
||||
this.$('.tabHeaders, .linkShareView').remove();
|
||||
}
|
||||
|
||||
this.shareeListView.$el = this.$el.find('.shareeListView');
|
||||
this.shareeListView.render();
|
||||
|
||||
this.$el.find('.hasTooltip').tooltip();
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
_renderRemoteShareInfoPart: function() {
|
||||
var remoteShareInfo = '';
|
||||
if(this.configModel.get('isRemoteShareAllowed')) {
|
||||
var infoTemplate = this._getRemoteShareInfoTemplate();
|
||||
remoteShareInfo = infoTemplate({
|
||||
docLink: this.configModel.getFederatedShareDocLink(),
|
||||
tooltip: t('core', 'Share with people on other ownClouds using the syntax username@example.com/owncloud')
|
||||
});
|
||||
}
|
||||
|
||||
return remoteShareInfo;
|
||||
},
|
||||
|
||||
_renderSharePlaceholderPart: function () {
|
||||
var sharePlaceholder = t('core', 'Share with users…');
|
||||
|
||||
if (this.configModel.get('allowGroupSharing')) {
|
||||
if (this.configModel.get('isRemoteShareAllowed')) {
|
||||
sharePlaceholder = t('core', 'Share with users, groups or remote users…');
|
||||
} else {
|
||||
sharePlaceholder = t('core', 'Share with users or groups…')
|
||||
}
|
||||
} else if (this.configModel.get('isRemoteShareAllowed')) {
|
||||
sharePlaceholder = t('core', 'Share with users or remote users…');
|
||||
}
|
||||
|
||||
return sharePlaceholder;
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {string} key - an identifier for the template
|
||||
* @param {string} template - the HTML to be compiled by Handlebars
|
||||
* @returns {Function} from Handlebars
|
||||
* @private
|
||||
*/
|
||||
_getTemplate: function (key, template) {
|
||||
if (!this._templates[key]) {
|
||||
this._templates[key] = Handlebars.compile(template);
|
||||
}
|
||||
return this._templates[key];
|
||||
},
|
||||
|
||||
/**
|
||||
* returns the info template for remote sharing
|
||||
*
|
||||
* @returns {Function}
|
||||
* @private
|
||||
*/
|
||||
_getRemoteShareInfoTemplate: function() {
|
||||
return this._getTemplate('remoteShareInfo', TEMPLATE_REMOTE_SHARE_INFO);
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the autocomplete item template
|
||||
*
|
||||
* @returns {Function}
|
||||
* @private
|
||||
*/
|
||||
_getAutocompleteItemTemplate: function() {
|
||||
return this._getTemplate('autocompleteItem', TEMPLATE_AUTOCOMPLETE_ITEM);
|
||||
}
|
||||
});
|
||||
|
||||
OC.Share.ShareDialogView = ShareDialogView;
|
||||
|
||||
})();
|
8
docker/tanner/snare/dist/pages/5/6b7e5b957c7963f409c067c9663d3ff4
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/6b7e5b957c7963f409c067c9663d3ff4
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/download-white.svg was not found on this server.</p>
|
||||
</body></html>
|
132
docker/tanner/snare/dist/pages/5/6b987a1888790cc8b5859f2daf3b358e
vendored
Normal file
132
docker/tanner/snare/dist/pages/5/6b987a1888790cc8b5859f2daf3b358e
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
/**
|
||||
* Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
/**
|
||||
* This plugin inserts the right avatar for the user, depending on, whether a
|
||||
* custom avatar is uploaded - which it uses then - or not, and display a
|
||||
* placeholder with the first letter of the users name instead.
|
||||
* For this it queries the core_avatar_get route, thus this plugin is fit very
|
||||
* tightly for owncloud, and it may not work anywhere else.
|
||||
*
|
||||
* You may use this on any <div></div>
|
||||
* Here I'm using <div class="avatardiv"></div> as an example.
|
||||
*
|
||||
* There are 5 ways to call this:
|
||||
*
|
||||
* 1. $('.avatardiv').avatar('jdoe', 128);
|
||||
* This will make the div to jdoe's fitting avatar, with a size of 128px.
|
||||
*
|
||||
* 2. $('.avatardiv').avatar('jdoe');
|
||||
* This will make the div to jdoe's fitting avatar. If the div already has a
|
||||
* height, it will be used for the avatars size. Otherwise this plugin will
|
||||
* search for 'size' DOM data, to use for avatar size. If neither are available
|
||||
* it will default to 64px.
|
||||
*
|
||||
* 3. $('.avatardiv').avatar();
|
||||
* This will search the DOM for 'user' data, to use as the username. If there
|
||||
* is no username available it will default to a placeholder with the value of
|
||||
* "x". The size will be determined the same way, as the second example.
|
||||
*
|
||||
* 4. $('.avatardiv').avatar('jdoe', 128, true);
|
||||
* This will behave like the first example, except it will also append random
|
||||
* hashes to the custom avatar images, to force image reloading in IE8.
|
||||
*
|
||||
* 5. $('.avatardiv').avatar('jdoe', 128, undefined, true);
|
||||
* This will behave like the first example, but it will hide the avatardiv, if
|
||||
* it will display the default placeholder. undefined is the ie8fix from
|
||||
* example 4 and can be either true, or false/undefined, to be ignored.
|
||||
*
|
||||
* 6. $('.avatardiv').avatar('jdoe', 128, undefined, true, callback);
|
||||
* This will behave like the above example, but it will call the function
|
||||
* defined in callback after the avatar is placed into the DOM.
|
||||
*
|
||||
*/
|
||||
|
||||
(function ($) {
|
||||
$.fn.avatar = function(user, size, ie8fix, hidedefault, callback, displayname) {
|
||||
if (typeof(size) === 'undefined') {
|
||||
if (this.height() > 0) {
|
||||
size = this.height();
|
||||
} else if (this.data('size') > 0) {
|
||||
size = this.data('size');
|
||||
} else {
|
||||
size = 64;
|
||||
}
|
||||
}
|
||||
|
||||
this.height(size);
|
||||
this.width(size);
|
||||
|
||||
if (typeof(user) === 'undefined') {
|
||||
if (typeof(this.data('user')) !== 'undefined') {
|
||||
user = this.data('user');
|
||||
} else {
|
||||
this.imageplaceholder('x');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// sanitize
|
||||
user = String(user).replace(/\//g,'');
|
||||
|
||||
var $div = this;
|
||||
|
||||
var url = OC.generateUrl(
|
||||
'/avatar/{user}/{size}',
|
||||
{user: user, size: Math.ceil(size * window.devicePixelRatio)});
|
||||
|
||||
// If the displayname is not defined we use the old code path
|
||||
if (typeof(displayname) === 'undefined') {
|
||||
$.get(url).always(function(result, status) {
|
||||
// if there is an error or an object returned (contains user information):
|
||||
// -> show the fallback placeholder
|
||||
if (typeof(result) === 'object' || status === 'error') {
|
||||
if (!hidedefault) {
|
||||
if (result.data && result.data.displayname) {
|
||||
$div.imageplaceholder(user, result.data.displayname);
|
||||
} else {
|
||||
// User does not exist
|
||||
$div.imageplaceholder(user, 'X');
|
||||
$div.css('background-color', '#b9b9b9');
|
||||
}
|
||||
} else {
|
||||
$div.hide();
|
||||
}
|
||||
// else an image is transferred and should be shown
|
||||
} else {
|
||||
$div.show();
|
||||
if (ie8fix === true) {
|
||||
$div.html('<img width="' + size + '" height="' + size + '" src="'+url+'#'+Math.floor(Math.random()*1000)+'">');
|
||||
} else {
|
||||
$div.html('<img width="' + size + '" height="' + size + '" src="'+url+'">');
|
||||
}
|
||||
}
|
||||
if(typeof callback === 'function') {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// We already have the displayname so set the placeholder (to show at least something)
|
||||
if (!hidedefault) {
|
||||
$div.imageplaceholder(displayname);
|
||||
}
|
||||
|
||||
var img = new Image();
|
||||
|
||||
// If the new image loads successfully set it.
|
||||
img.onload = function() {
|
||||
$div.show();
|
||||
$div.text('');
|
||||
$div.append(img);
|
||||
}
|
||||
|
||||
img.width = size;
|
||||
img.height = size;
|
||||
img.src = url;
|
||||
}
|
||||
};
|
||||
}(jQuery));
|
8
docker/tanner/snare/dist/pages/5/6da31c1f8c992ad0c7bdfba0b77d3c9e
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/6da31c1f8c992ad0c7bdfba0b77d3c9e
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/user.svg was not found on this server.</p>
|
||||
</body></html>
|
268
docker/tanner/snare/dist/pages/5/6e37663e7bf93f00235165b3aede64c1
vendored
Normal file
268
docker/tanner/snare/dist/pages/5/6e37663e7bf93f00235165b3aede64c1
vendored
Normal file
@ -0,0 +1,268 @@
|
||||
/*
|
||||
* Copyright (c) 2016
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3
|
||||
* or later.
|
||||
*
|
||||
* See the COPYING-README file.
|
||||
*
|
||||
*/
|
||||
|
||||
(function() {
|
||||
if (!OC.Share) {
|
||||
OC.Share = {};
|
||||
}
|
||||
|
||||
var TEMPLATE =
|
||||
'<form id="emailPrivateLink" class="emailPrivateLinkForm">' +
|
||||
' <span class="emailPrivateLinkForm--sending-indicator hidden">{{sending}}</span>' +
|
||||
' <span class="emailPrivateLinkForm--sent-indicator hidden">{{sent}}</span>' +
|
||||
' <label class="public-link-modal--label" for="emailPrivateLinkField-{{cid}}">{{mailLabel}}</label>' +
|
||||
' <input class="emailPrivateLinkForm--emailField full-width" id="emailPrivateLinkField-{{cid}}" />' +
|
||||
' <div class="emailPrivateLinkForm--elements hidden">' +
|
||||
' {{#if userHasEmail}}' +
|
||||
' <label class="public-link-modal--bccSelf">' +
|
||||
' <input class="emailPrivateLinkForm--emailBccSelf" type="checkbox"> {{bccSelf}}' +
|
||||
' </label>' +
|
||||
' {{/if}}' +
|
||||
' <label class="public-link-modal--label" for="emailBodyPrivateLinkField-{{cid}}">{{mailMessageLabel}}</label>' +
|
||||
' <textarea class="public-link-modal--input emailPrivateLinkForm--emailBodyField" id="emailBodyPrivateLinkField-{{cid}}" rows="3" placeholder="{{mailBodyPlaceholder}}"></textarea>' +
|
||||
' </div>' +
|
||||
'</form>';
|
||||
|
||||
/**
|
||||
* @class OCA.Share.ShareDialogMailView
|
||||
* @member {OC.Share.ShareItemModel} model
|
||||
* @member {jQuery} $el
|
||||
* @memberof OCA.Sharing
|
||||
* @classdesc
|
||||
*
|
||||
* Represents the GUI of the share dialogue
|
||||
*
|
||||
*/
|
||||
var ShareDialogMailView = OC.Backbone.View.extend({
|
||||
/** @type {string} **/
|
||||
id: 'shareDialogMailView',
|
||||
|
||||
events: {
|
||||
"keydown .emailPrivateLinkForm--emailBodyField" : "expandMailBody"
|
||||
},
|
||||
|
||||
/** @type {array} **/
|
||||
_addresses: [],
|
||||
|
||||
/** @type {Function} **/
|
||||
_template: undefined,
|
||||
|
||||
initialize: function(options) {
|
||||
_.bindAll(this, 'render', '_afterRender');
|
||||
var _this = this;
|
||||
this.render = _.wrap(this.render, function(render) {
|
||||
render();
|
||||
_this._afterRender();
|
||||
return _this;
|
||||
});
|
||||
|
||||
if (!_.isUndefined(options.itemModel)) {
|
||||
this.itemModel = options.itemModel;
|
||||
} else {
|
||||
throw 'missing OC.Share.ShareItemModel';
|
||||
}
|
||||
},
|
||||
|
||||
toggleMailElements: function() {
|
||||
var $emailElements = this.$el.find('.emailPrivateLinkForm--elements');
|
||||
|
||||
if (this._addresses.length > 0 && $emailElements.is(":hidden")) {
|
||||
$emailElements.slideDown();
|
||||
} else if (this._addresses.length === 0 && $emailElements.is(":visible")) {
|
||||
$emailElements.slideUp();
|
||||
}
|
||||
},
|
||||
|
||||
expandMailBody: function(event) {
|
||||
var $emailBody = this.$el.find('.emailPrivateLinkForm--emailBodyField');
|
||||
$emailBody.css('minHeight', $emailBody[0].scrollHeight - 12);
|
||||
|
||||
if (event.keyCode == 13) {
|
||||
event.stopPropagation();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Send the link share information by email
|
||||
*
|
||||
* @param {string} recipientEmail recipient email address
|
||||
*/
|
||||
_sendEmailPrivateLink: function(mail) {
|
||||
var deferred = $.Deferred();
|
||||
var itemType = this.itemModel.get('itemType');
|
||||
var itemSource = this.itemModel.get('itemSource');
|
||||
var $formSentIndicator = this.$el.find('.emailPrivateLinkForm--sent-indicator');
|
||||
|
||||
var params = {
|
||||
action : 'email',
|
||||
toAddress : this._addresses.join(','),
|
||||
emailBody : mail.body,
|
||||
bccSelf : mail.bccSelf,
|
||||
link : this.model.getLink(),
|
||||
itemType : itemType,
|
||||
itemSource : itemSource,
|
||||
file : this.itemModel.getFileInfo().get('name'),
|
||||
expiration : this.model.get('expireDate') || ''
|
||||
};
|
||||
|
||||
$.post(
|
||||
OC.generateUrl('core/ajax/share.php'), params,
|
||||
function(result) {
|
||||
if (!result || result.status !== 'success') {
|
||||
deferred.reject({
|
||||
message: result.data.message
|
||||
});
|
||||
} else {
|
||||
$formSentIndicator.removeClass('hidden');
|
||||
setTimeout(function() {
|
||||
deferred.resolve();
|
||||
$formSentIndicator.addClass('hidden');
|
||||
}, 2000);
|
||||
}
|
||||
}).fail(function(error) {
|
||||
return deferred.reject(error);
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
|
||||
validateEmail: function(email) {
|
||||
if (email.length === 0)
|
||||
return true
|
||||
|
||||
return email.match(/([\w\.\-_]+)?\w+@[\w-_]+(\.\w+){1,}$/);
|
||||
},
|
||||
|
||||
sendEmails: function() {
|
||||
var $formItems = this.$el.find('.emailPrivateLinkForm input, .emailPrivateLinkForm textarea');
|
||||
var $formSendIndicator = this.$el.find('.emailPrivateLinkForm--sending-indicator');
|
||||
var mail = {
|
||||
to : this._addresses.join(','),
|
||||
bccSelf : this.$el.find('.emailPrivateLinkForm--emailBccSelf').is(':checked'),
|
||||
body : this.$el.find('.emailPrivateLinkForm--emailBodyField').val()
|
||||
};
|
||||
|
||||
var deferred = $.Deferred();
|
||||
|
||||
if (mail.to !== '') {
|
||||
$formItems.prop('disabled', true);
|
||||
$formSendIndicator.removeClass('hidden');
|
||||
this._sendEmailPrivateLink(mail).done(function() {
|
||||
$formItems.prop('disabled', false);
|
||||
$formSendIndicator.addClass('hidden');
|
||||
deferred.resolve();
|
||||
}).fail(function(error) {
|
||||
OC.dialogs.info(error.message, t('core', 'An error occured while sending email'));
|
||||
$formSendIndicator.addClass('hidden');
|
||||
$formItems.prop('disabled', false);
|
||||
deferred.reject();
|
||||
});
|
||||
} else {
|
||||
deferred.resolve();
|
||||
}
|
||||
|
||||
return deferred.promise();
|
||||
},
|
||||
|
||||
render: function() {
|
||||
// make sure this is empty
|
||||
this._addresses = [];
|
||||
|
||||
this.$el.html(this.template({
|
||||
cid : this.cid,
|
||||
userHasEmail : !!OC.getCurrentUser().email,
|
||||
mailPlaceholder : t('core', 'Email link to person'),
|
||||
bccSelf : t('core', 'Send copy to self'),
|
||||
mailLabel : t('core', 'Send link via email'),
|
||||
mailBodyPlaceholder : t('core', 'Add personal message'),
|
||||
sending : t('core', 'Sending') + ' ...',
|
||||
sent : t('core', 'E-Mail sent') + '!'
|
||||
}));
|
||||
|
||||
this.delegateEvents();
|
||||
return this;
|
||||
|
||||
},
|
||||
|
||||
_afterRender: function () {
|
||||
var _this = this;
|
||||
|
||||
this.$el.find('.emailPrivateLinkForm--emailField').select2({
|
||||
containerCssClass: 'emailPrivateLinkForm--dropDown',
|
||||
tags: true,
|
||||
tokenSeparators:[","],
|
||||
xhr: null,
|
||||
query: function(query) {
|
||||
// directly from search
|
||||
var data = [{
|
||||
"id": query.term,
|
||||
"text" : query.term,
|
||||
"disabled" : !_this.validateEmail(query.term)
|
||||
}];
|
||||
|
||||
// return query data ASAP
|
||||
query.callback({results: data});
|
||||
|
||||
if (query.term.length >= OC.getCapabilities().files_sharing.search_min_length) {
|
||||
if (this.xhr != null)
|
||||
this.xhr.abort();
|
||||
|
||||
var xhr = $.get(OC.generateUrl('core/ajax/share.php'), {
|
||||
'fetch' : 'getShareWithEmail',
|
||||
'search': query.term
|
||||
}).done(function(result) {
|
||||
// enrich with share results
|
||||
ajaxData = _.map(result.data, function(item) {
|
||||
return {
|
||||
'id' : item.email,
|
||||
'text' : item.displayname + ' (' + item.email + ')'
|
||||
}
|
||||
});
|
||||
|
||||
query.callback({results: data.concat(ajaxData)});
|
||||
})
|
||||
this.xhr = xhr;
|
||||
}
|
||||
}
|
||||
}).on("change", function(e) {
|
||||
if (e.added)
|
||||
_this._addAddress(e.added.id);
|
||||
|
||||
if (e.removed)
|
||||
_this._removeAddress(e.removed.id);
|
||||
|
||||
_this.toggleMailElements();
|
||||
});
|
||||
},
|
||||
|
||||
_addAddress: function( email ) {
|
||||
this._addresses.push( email.toLowerCase() )
|
||||
},
|
||||
|
||||
_removeAddress: function( email ) {
|
||||
this._addresses = _.without(this._addresses, email.toLowerCase() )
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {Function} from Handlebars
|
||||
* @private
|
||||
*/
|
||||
template: function(data) {
|
||||
if (!this._template) {
|
||||
this._template = Handlebars.compile(TEMPLATE);
|
||||
}
|
||||
return this._template(data);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
OC.Share.ShareDialogMailView = ShareDialogMailView;
|
||||
|
||||
})();
|
8
docker/tanner/snare/dist/pages/5/728185226443c8b4071520f17de18517
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/728185226443c8b4071520f17de18517
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/radio-checked-disabled.svg was not found on this server.</p>
|
||||
</body></html>
|
35
docker/tanner/snare/dist/pages/5/7a00b6edfd884b7f5be06eafa1a594f1
vendored
Normal file
35
docker/tanner/snare/dist/pages/5/7a00b6edfd884b7f5be06eafa1a594f1
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Copyright (c) 2015
|
||||
* Vincent Petry <pvince81@owncloud.com>
|
||||
* Jan-Christoph Borchardt, http://jancborchardt.net
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @namespace
|
||||
* @memberOf OC
|
||||
*/
|
||||
OC.Login = _.extend(OC.Login || {}, {
|
||||
onLogin: function () {
|
||||
$('#submit')
|
||||
.removeClass('icon-confirm')
|
||||
.addClass('icon-loading-small')
|
||||
.css('opacity', '1');
|
||||
return true;
|
||||
},
|
||||
|
||||
rememberLogin: function(){
|
||||
if($(this).is(":checked")){
|
||||
if($("#user").val() && $("#password").val()) {
|
||||
$('#submit').trigger('click');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$(document).ready(function() {
|
||||
$('form[name=login]').submit(OC.Login.onLogin);
|
||||
|
||||
$('#remember_login').click(OC.Login.rememberLogin);
|
||||
});
|
8
docker/tanner/snare/dist/pages/5/7a2b9145ddbcf6dbfba78cd8d4f6ae14
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/7a2b9145ddbcf6dbfba78cd8d4f6ae14
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/places/picture.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/7af8ef1e758d2a5e0c4a309072414801
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/7af8ef1e758d2a5e0c4a309072414801
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/checkbox.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/7cf0d241b99d3f2358428f8468907416
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/7cf0d241b99d3f2358428f8468907416
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/settings.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/7e9b9ec04b8c2adedca7649a3249a46d
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/7e9b9ec04b8c2adedca7649a3249a46d
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/error.svg was not found on this server.</p>
|
||||
</body></html>
|
443
docker/tanner/snare/dist/pages/5/7effd9764eac1fd23ad35f67fcc518a6
vendored
Normal file
443
docker/tanner/snare/dist/pages/5/7effd9764eac1fd23ad35f67fcc518a6
vendored
Normal file
@ -0,0 +1,443 @@
|
||||
[class^="icon-"], [class*=" icon-"] {
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
min-width: 16px;
|
||||
min-height: 16px;
|
||||
}
|
||||
|
||||
/* general assets */
|
||||
|
||||
.icon-breadcrumb {
|
||||
background-image: url('../img/breadcrumb.svg');
|
||||
}
|
||||
|
||||
.loading,
|
||||
.loading-small,
|
||||
.icon-loading,
|
||||
.icon-loading-dark,
|
||||
.icon-loading-small,
|
||||
.icon-loading-small-dark {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.loading:after,
|
||||
.loading-small:after,
|
||||
.icon-loading:after,
|
||||
.icon-loading-dark:after,
|
||||
.icon-loading-small:after,
|
||||
.icon-loading-small-dark:after {
|
||||
z-index: 2;
|
||||
content: "";
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
margin: -17px 0 0 -17px;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
border-radius: 100%;
|
||||
-webkit-animation: rotate .8s infinite linear;
|
||||
animation: rotate .8s infinite linear;
|
||||
-webkit-transform-origin: center;
|
||||
-ms-transform-origin: center;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
.loading:after,
|
||||
.loading-small:after,
|
||||
.icon-loading:after,
|
||||
.icon-loading-dark:after,
|
||||
.icon-loading-small:after,
|
||||
.icon-loading-small-dark:after {
|
||||
border: 1px solid rgba(85, 85, 85, 0.5);
|
||||
border-top-color: #555;
|
||||
}
|
||||
|
||||
.icon-loading-dark:after,
|
||||
.icon-loading-small-dark:after {
|
||||
border: 1px solid rgba(187, 187, 187, 0.5);
|
||||
border-top-color: #BBB;
|
||||
}
|
||||
|
||||
.icon-loading-small:after,
|
||||
.icon-loading-small-dark:after {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
margin: -9px 0 0 -9px;
|
||||
}
|
||||
|
||||
/* Css replaced elements don't have ::after nor ::before */
|
||||
img.icon-loading, object.icon-loading, video.icon-loading, button.icon-loading, textarea.icon-loading, input.icon-loading, select.icon-loading {
|
||||
background-image: url("../img/loading.gif");
|
||||
}
|
||||
|
||||
img.icon-loading-dark, object.icon-loading-dark, video.icon-loading-dark, button.icon-loading-dark, textarea.icon-loading-dark, input.icon-loading-dark, select.icon-loading-dark {
|
||||
background-image: url("../img/loading-dark.gif");
|
||||
}
|
||||
|
||||
img.icon-loading-small, object.icon-loading-small, video.icon-loading-small, button.icon-loading-small, textarea.icon-loading-small, input.icon-loading-small, select.icon-loading-small {
|
||||
background-image: url("../img/loading-small.gif");
|
||||
}
|
||||
|
||||
img.icon-loading-small-dark, object.icon-loading-small-dark, video.icon-loading-small-dark, button.icon-loading-small-dark, textarea.icon-loading-small-dark, input.icon-loading-small-dark, select.icon-loading-small-dark {
|
||||
background-image: url("../img/loading-small-dark.gif");
|
||||
}
|
||||
|
||||
@-webkit-keyframes rotate {
|
||||
from {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
from {
|
||||
-webkit-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
.icon-32 {
|
||||
background-size: 32px !important;
|
||||
}
|
||||
|
||||
/* action icons */
|
||||
|
||||
.icon-add {
|
||||
background-image: url('../img/actions/add.svg');
|
||||
}
|
||||
|
||||
.icon-caret {
|
||||
background-image: url('../img/actions/caret.svg');
|
||||
}
|
||||
|
||||
.icon-caret-dark {
|
||||
background-image: url('../img/actions/caret-dark.svg');
|
||||
}
|
||||
|
||||
.icon-checkmark {
|
||||
background-image: url('../img/actions/checkmark.svg');
|
||||
}
|
||||
|
||||
.icon-checkmark-white {
|
||||
background-image: url('../img/actions/checkmark-white.svg');
|
||||
}
|
||||
|
||||
.icon-checkmark-color {
|
||||
background-image: url('../img/actions/checkmark-color.svg');
|
||||
}
|
||||
|
||||
.icon-close {
|
||||
background-image: url('../img/actions/close.svg');
|
||||
}
|
||||
|
||||
.icon-comment {
|
||||
background-image: url('../img/actions/comment.svg');
|
||||
}
|
||||
|
||||
.icon-confirm {
|
||||
background-image: url('../img/actions/confirm.svg');
|
||||
}
|
||||
|
||||
.icon-delete,
|
||||
.icon-delete.no-permission:hover,
|
||||
.icon-delete.no-permission:focus {
|
||||
background-image: url('../img/actions/delete.svg');
|
||||
}
|
||||
|
||||
.icon-delete:hover,
|
||||
.icon-delete:focus {
|
||||
background-image: url('../img/actions/delete-hover.svg');
|
||||
}
|
||||
|
||||
.icon-delete-white {
|
||||
background-image: url('../img/actions/delete-white.svg');
|
||||
}
|
||||
|
||||
.icon-details {
|
||||
background-image: url('../img/actions/details.svg');
|
||||
}
|
||||
|
||||
.icon-download {
|
||||
background-image: url('../img/actions/download.svg');
|
||||
}
|
||||
|
||||
.icon-download-white {
|
||||
background-image: url('../img/actions/download-white.svg');
|
||||
}
|
||||
|
||||
.icon-edit {
|
||||
background-image: url('../img/actions/edit.svg');
|
||||
}
|
||||
|
||||
.icon-error {
|
||||
background-image: url('../img/actions/error.svg');
|
||||
}
|
||||
|
||||
.icon-error-white {
|
||||
background-image: url('../img/actions/error-white.svg');
|
||||
}
|
||||
|
||||
.icon-error-color {
|
||||
background-image: url('../img/actions/error-color.svg');
|
||||
}
|
||||
|
||||
.icon-external {
|
||||
background-image: url('../img/actions/external.svg');
|
||||
}
|
||||
|
||||
.icon-history {
|
||||
background-image: url('../img/actions/history.svg');
|
||||
}
|
||||
|
||||
.icon-info {
|
||||
background-image: url('../img/actions/info.svg');
|
||||
}
|
||||
|
||||
.icon-info-white {
|
||||
background-image: url('../img/actions/info-white.svg');
|
||||
}
|
||||
|
||||
.icon-logout {
|
||||
background-image: url('../img/actions/logout.svg');
|
||||
}
|
||||
|
||||
.icon-mail {
|
||||
background-image: url('../img/actions/mail.svg');
|
||||
}
|
||||
|
||||
.icon-mail-grey {
|
||||
background-image: url('../img/actions/mail-grey.svg');
|
||||
}
|
||||
|
||||
.icon-menu {
|
||||
background-image: url('../img/actions/menu.svg');
|
||||
}
|
||||
|
||||
.icon-more {
|
||||
background-image: url('../img/actions/more.svg');
|
||||
}
|
||||
|
||||
.icon-password {
|
||||
background-image: url('../img/actions/password.svg');
|
||||
}
|
||||
|
||||
.icon-pause {
|
||||
background-image: url('../img/actions/pause.svg');
|
||||
}
|
||||
|
||||
.icon-pause-big {
|
||||
background-image: url('../img/actions/pause-big.svg');
|
||||
}
|
||||
|
||||
.icon-play {
|
||||
background-image: url('../img/actions/play.svg');
|
||||
}
|
||||
|
||||
.icon-play-add {
|
||||
background-image: url('../img/actions/play-add.svg');
|
||||
}
|
||||
|
||||
.icon-play-big {
|
||||
background-image: url('../img/actions/play-big.svg');
|
||||
}
|
||||
|
||||
.icon-play-next {
|
||||
background-image: url('../img/actions/play-next.svg');
|
||||
}
|
||||
|
||||
.icon-play-previous {
|
||||
background-image: url('../img/actions/play-previous.svg');
|
||||
}
|
||||
|
||||
.icon-public {
|
||||
background-image: url('../img/actions/public.svg');
|
||||
}
|
||||
|
||||
.icon-public-white {
|
||||
background-image: url('../img/actions/public-white.svg');
|
||||
}
|
||||
|
||||
.icon-rename {
|
||||
background-image: url('../img/actions/rename.svg');
|
||||
}
|
||||
|
||||
.icon-search {
|
||||
background-image: url('../img/actions/search.svg');
|
||||
}
|
||||
|
||||
.icon-search-white {
|
||||
background-image: url('../img/actions/search-white.svg');
|
||||
}
|
||||
|
||||
.icon-settings {
|
||||
background-image: url('../img/actions/settings.svg');
|
||||
}
|
||||
|
||||
.icon-settings-dark {
|
||||
background-image: url('../img/actions/settings-dark.svg');
|
||||
}
|
||||
|
||||
.icon-share {
|
||||
background-image: url('../img/actions/share.svg');
|
||||
}
|
||||
|
||||
.icon-shared {
|
||||
background-image: url('../img/actions/shared.svg');
|
||||
}
|
||||
|
||||
.icon-sound {
|
||||
background-image: url('../img/actions/sound.svg');
|
||||
}
|
||||
|
||||
.icon-sound-off {
|
||||
background-image: url('../img/actions/sound-off.svg');
|
||||
}
|
||||
|
||||
.icon-star,
|
||||
.icon-starred:hover,
|
||||
.icon-starred:focus {
|
||||
background-image: url('../img/actions/star.svg');
|
||||
}
|
||||
|
||||
.icon-starred,
|
||||
.icon-star:hover,
|
||||
.icon-star:focus {
|
||||
background-image: url('../img/actions/starred.svg');
|
||||
}
|
||||
|
||||
.icon-toggle {
|
||||
background-image: url('../img/actions/toggle.svg');
|
||||
}
|
||||
|
||||
.icon-triangle-e {
|
||||
background-image: url('../img/actions/triangle-e.svg');
|
||||
}
|
||||
|
||||
.icon-triangle-n {
|
||||
background-image: url('../img/actions/triangle-n.svg');
|
||||
}
|
||||
|
||||
.icon-triangle-s {
|
||||
background-image: url('../img/actions/triangle-s.svg');
|
||||
}
|
||||
|
||||
.icon-upload {
|
||||
background-image: url('../img/actions/upload.svg');
|
||||
}
|
||||
|
||||
.icon-upload-white {
|
||||
background-image: url('../img/actions/upload-white.svg');
|
||||
}
|
||||
|
||||
.icon-user {
|
||||
background-image: url('../img/actions/user.svg');
|
||||
}
|
||||
|
||||
.icon-view-close {
|
||||
background-image: url('../img/actions/view-close.svg');
|
||||
}
|
||||
|
||||
.icon-view-download {
|
||||
background-image: url('../img/actions/view-download.svg');
|
||||
}
|
||||
|
||||
.icon-view-next {
|
||||
background-image: url('../img/actions/view-next.svg');
|
||||
}
|
||||
|
||||
.icon-view-pause {
|
||||
background-image: url('../img/actions/view-pause.svg');
|
||||
}
|
||||
|
||||
.icon-view-play {
|
||||
background-image: url('../img/actions/view-play.svg');
|
||||
}
|
||||
|
||||
.icon-view-previous {
|
||||
background-image: url('../img/actions/view-previous.svg');
|
||||
}
|
||||
|
||||
/* places icons */
|
||||
|
||||
.icon-calendar-dark {
|
||||
background-image: url('../img/places/calendar-dark.svg');
|
||||
}
|
||||
|
||||
.icon-contacts-dark {
|
||||
background-image: url('../img/places/contacts-dark.svg');
|
||||
}
|
||||
|
||||
.icon-files {
|
||||
background-image: url('../img/places/files.svg');
|
||||
}
|
||||
|
||||
.icon-file,
|
||||
.icon-filetype-text {
|
||||
background-image: url('../img/filetypes/text.svg');
|
||||
}
|
||||
|
||||
.icon-folder,
|
||||
.icon-filetype-folder {
|
||||
background-image: url('../img/filetypes/folder.svg');
|
||||
}
|
||||
|
||||
.icon-home {
|
||||
background-image: url('../img/places/home.svg');
|
||||
}
|
||||
|
||||
.icon-link {
|
||||
background-image: url('../img/places/link.svg');
|
||||
}
|
||||
|
||||
.icon-music {
|
||||
background-image: url('../img/places/music.svg');
|
||||
}
|
||||
|
||||
.icon-picture {
|
||||
background-image: url('../img/places/picture.svg');
|
||||
}
|
||||
|
||||
.icon-clippy {
|
||||
background-image: url('../img/actions/clippy.svg');
|
||||
}
|
||||
|
||||
.icon-clippy-dark {
|
||||
background-image: url('../img/actions/clippy-dark.svg');
|
||||
}
|
||||
|
||||
.icon-social-gnu {
|
||||
background-image: url('../img/social/social-gnu.svg');
|
||||
}
|
||||
|
||||
.icon-social-diaspora {
|
||||
background-image: url('../img/social/social-diaspora.svg');
|
||||
}
|
||||
|
||||
.icon-social-twitter {
|
||||
background-image: url('../img/social/social-twitter.svg');
|
||||
}
|
||||
|
||||
.icon-social-facebook {
|
||||
background-image: url('../img/social/social-facebook.svg');
|
||||
}
|
||||
|
||||
.icon-social-googleplus {
|
||||
background-image: url('../img/social/social-googleplus.svg');
|
||||
}
|
||||
|
||||
/* apps icons */
|
||||
.icon-shield {
|
||||
background-image: url('../img/apps/shield.svg')
|
||||
}
|
||||
|
||||
.icon-workflow {
|
||||
background-image: url('../img/apps/workflow.svg')
|
||||
}
|
8
docker/tanner/snare/dist/pages/5/7ff7f597792e5cc049d423e60f257e2b
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/7ff7f597792e5cc049d423e60f257e2b
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/logo-icon.svg was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/7fff7f6fb14eda140d00618428f0316b
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/7fff7f6fb14eda140d00618428f0316b
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/places/files.svg was not found on this server.</p>
|
||||
</body></html>
|
58
docker/tanner/snare/dist/pages/5/811002756a44c702283047b2f3c54b4d
vendored
Normal file
58
docker/tanner/snare/dist/pages/5/811002756a44c702283047b2f3c54b4d
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
/**
|
||||
* Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @namespace
|
||||
*/
|
||||
OC.AppConfig={
|
||||
url:OC.filePath('core','ajax','appconfig.php'),
|
||||
getCall:function(action,data,callback){
|
||||
data.action=action;
|
||||
$.getJSON(OC.AppConfig.url,data,function(result){
|
||||
if(result.status==='success'){
|
||||
if(callback){
|
||||
callback(result.data);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
postCall:function(action,data,callback){
|
||||
data.action=action;
|
||||
return $.post(OC.AppConfig.url,data,function(result){
|
||||
if(result.status==='success'){
|
||||
if(callback){
|
||||
callback(result.data);
|
||||
}
|
||||
}
|
||||
},'json');
|
||||
},
|
||||
getValue:function(app,key,defaultValue,callback){
|
||||
if(typeof defaultValue=='function'){
|
||||
callback=defaultValue;
|
||||
defaultValue=null;
|
||||
}
|
||||
OC.AppConfig.getCall('getValue',{app:app,key:key,defaultValue:defaultValue},callback);
|
||||
},
|
||||
setValue:function(app,key,value){
|
||||
return OC.AppConfig.postCall('setValue',{app:app,key:key,value:value});
|
||||
},
|
||||
getApps:function(callback){
|
||||
OC.AppConfig.getCall('getApps',{},callback);
|
||||
},
|
||||
getKeys:function(app,callback){
|
||||
OC.AppConfig.getCall('getKeys',{app:app},callback);
|
||||
},
|
||||
hasKey:function(app,key,callback){
|
||||
OC.AppConfig.getCall('hasKey',{app:app,key:key},callback);
|
||||
},
|
||||
deleteKey:function(app,key){
|
||||
OC.AppConfig.postCall('deleteKey',{app:app,key:key});
|
||||
},
|
||||
deleteApp:function(app){
|
||||
OC.AppConfig.postCall('deleteApp',{app:app});
|
||||
}
|
||||
};
|
||||
//TODO OC.Preferences
|
8
docker/tanner/snare/dist/pages/5/81a966db3ac6533a991f996a24dbc9af
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/81a966db3ac6533a991f996a24dbc9af
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /images/ui-bg_highlight-hard_100_f8f8f8_1x100.png was not found on this server.</p>
|
||||
</body></html>
|
8
docker/tanner/snare/dist/pages/5/823729dd7dcfb2abd4761a37b3635e3f
vendored
Normal file
8
docker/tanner/snare/dist/pages/5/823729dd7dcfb2abd4761a37b3635e3f
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /img/actions/view-pause.svg was not found on this server.</p>
|
||||
</body></html>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user