Files
alfresco-ng2-components/react-app/webcomponents/alfresco-file-list/src/alfresco-file-list.html
2016-04-08 14:16:52 +01:00

341 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../bower_components/iron-flex-layout/iron-flex-layout.html">
<link rel="import" href="../../../bower_components/iron-ajax/iron-ajax.html">
<link rel="import" href="../../../bower_components/iron-list/iron-list.html">
<link rel="import" href="../../../bower_components/paper-styles/color.html">
<link rel="import" href="../../../bower_components/paper-styles/typography.html">
<link rel="import" href="../../../bower_components/paper-icon-button/paper-icon-button.html">
<link rel="import" href="../../../bower_components/iron-icon/iron-icon.html">
<link rel="import" href="../../../bower_components/paper-badge/paper-badge.html">
<link rel="import" href="../../../bower_components/paper-item/paper-item.html">
<link rel="import" href="../../../bower_components/paper-dropdown-menu/paper-dropdown-menu.html">
<link rel="import" href="../../../bower_components/iron-signals/iron-signals.html">
<style>
.pad {
@apply(--layout-flex);
@apply(--layout-vertical);
padding: 0 16px;
}
.dim {
color: gray;
}
paper-badge {
-webkit-transition: all 0.1s;
transition: all 0.1s;
opacity: 1;
margin-top: 5px;
}
paper-badge[label="0"] {
opacity: 0;
}
paper-item {
white-space: nowrap;
cursor: pointer;
position: relative;
}
paper-item:hover::after {
content: "";
width: 16px;
height: 16px;
display: block;
border-radius: 50% 50%;
background-color: var(--google-red-300);
margin-left: 10px;
line-height: 16px;
text-align: center;
color: white;
font-weight: bold;
text-decoration: none;
position: absolute;
right: 15px;
top: calc(50% - 8px);
}
.iron-list ul { list-style-type: none; overflow: hidden; margin:10px}
.iron-list ul li div.text{ float:left; text-align: left;height: 55px }
.iron-list ul li div.folder-container{ float:left; width: 70px;text-align: left ;height: 55px}
.iron-list ul li:hover { background: #eeeeee; height: 55px}
.file{
width: 52px;
height: 52px;
}
.folder {
height: 52px;
box-sizing: border-box;
}
.primary {
font-size: 16px;
line-height: 20px;
font-family: sans-serif;
}
.secondary {
font-size: 12px;
line-height: 20px;
color: gray;
font-family: sans-serif;
}
.pull-right{
float: right;
}
.iron-list ul{
padding: 0px;
}
.breadcrumb {
font-family: sans-serif;
font-size: 12px;
padding-left: 11px;
height: 28px;
width: auto;
}
.folder-breadcrumb-img{
float: left;
text-align: left;
height: 15px;
padding: 0px 10px 0px 0px;
}
.folder-breadcrumb-text{
float: left;
text-align: left;
height: 25px;
padding: 0px 10px 0px 0px;
}
.folder-breadcrumb-container{
float: left;
}
paper-dropdown-menu.custom {
overflow: visible;
--paper-input-container-label: {
color: white;
background-color: var(--paper-pink-500);
font-style: italic;
text-align: center;
font-weight: bold;
};
--paper-input-container-input: {
color: var(--paper-indigo-500);
font-style: normal;
font-family: serif;
text-transform: uppercase;
}
/* no underline */
--paper-input-container-underline: {
display: none;
};
}
.paper-toolbar-0 {
color: black;
}
paper-item a {
color: black;
text-decoration: none;
}
</style>
<dom-module id="alfresco-file-list">
<template>
<div class="breadcrumb">
<template is="dom-repeat" items="{{breadcrumbs}}">
<div on-click="goToFolderBreadcrumbs" data-name="[[item]]" class="folder-breadcrumb-container">
<img class="folder-breadcrumb-img" src="img/folder.svg">
<div class="folder-breadcrumb-text">[[item]]</div>
</div>
</template>
</div>
<hr>
<!-- Main List for the items -->
<iron-list id="itemsList" items="{{data}}" selected-items="{{selectedItems}}" selection-enabled>
<template>
<div>
<ul tabindex$="[[tabIndex]]" aria-label$="Select/Deselect [[item.name]]" class$="[[_computedClass(selected)]]">
<li>
<div class="folder-container" on-click="goToFolder">
<template is="dom-if" if="{{item.isFolder}}">
<img class="folder" src="img/folder.svg">
</template>
<template is="dom-if" if="{{!item.isFolder}}">
<img class="file" src="{{thumbBaseUrl()}}{{item.contentUrl}}">
</template>
</div>
<div class="text">
<div class="pad">
<div class="primary">
[[item.displayName]]
</div>
<div class="secondary dim">
[[item.node.description]]
</div>
<div class="secondary dim">
Modified [[item.modifiedOn]] by [[item.modifiedBy]]
</div>
</div>
</div>
<div lass="dropdowm menu">
<paper-dropdown-menu class="custom pull-right" label="Actions" no-label-float>
<paper-listbox class="dropdown-content">
<paper-item>Download as Zip</paper-item>
<paper-item>View Details</paper-item>
<paper-item>Edit Properties</paper-item>
<paper-item>Copy To...</paper-item>
<paper-item>Move To...</paper-item>
</paper-listbox>
</paper-dropdown-menu>
</div>
</li>
</ul>
<div class="border"></div>
</div>
</template>
</iron-list>
</template>
<script>
var alfUrl = 'http://192.168.99.100:8080/alfresco', loginUrl = '/service/api/login',
logoutUrl = '/service/api/login/ticket';
function sendXhr(options) {
if (!options.url) {
throw 'URL must be specified';
}
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest(), url = alfUrl + options.url, ticket = getTicket(), defaultMethod, requestBody = null;
if (ticket && url != loginUrl) {
console.log('Adding ticket ' + ticket);
url += (url.indexOf('?') == -1 ? '?' : '&') + 'alf_ticket=' + ticket;
}
if (options.data) {
requestBody = options.data;
} else if (options.jsonData) {
requestBody = JSON.stringify(options.jsonData);
}
defaultMethod = requestBody === null ? 'GET' : 'POST';
xhr.addEventListener('load', function reqListener () {
var status = this.status,
json = this.responseText !== null && this.responseText.indexOf('{') == 0 ?
JSON.parse(this.responseText) : null;
this.json = json;
if (status >= 200 && status < 300) {
resolve(this);
} else {
reject(this);
}
});
xhr.addEventListener('error', function reqListener () {
reject(this);
});
xhr.open(options.method || defaultMethod, url);
if (options.acceptType) {
xhr.setRequestHeader('Accept', options.acceptType);
}
if (requestBody) {
xhr.setRequestHeader('Content-Type', options.contentType || 'application/json');
xhr.send(requestBody);
} else {
xhr.send();
}
});
}
function getTicket() {
return sessionStorage.getItem('loginTicket');
}
function setTicket(ticket) {
sessionStorage.setItem('loginTicket', ticket);
}
function deleteTicket() {
sessionStorage.removeItem('loginTicket');
}
HTMLImports.whenReady(function() {
Polymer({
is: "alfresco-file-list",
host: 'http://192.168.99.100:8080',
baseUrl: function(){
return '/service/slingshot/doclib/doclist/all/site/';
},
properties: {
showSelection: {
type: Boolean,
value: true,
observer: '_showSelectionChanged'
}
},
goToFolder: function (event) {
this.container = event.model.item.location.container;
var path = event.model.item.location.path !== '/' ? (event.model.item.location.path + '/' ) : '/';
var relativePath = this.container + path + event.model.item.fileName;
var slug = event.model.item.location.site + '/' + relativePath;
this.breadcrumbs = relativePath.split('/');
this.fetchFolderFolder(slug);
},
goToFolderBreadcrumbs: function (event) {
var currentRelative = event.model.__data__.item;
var currentRelativeIndexInSlug = this.lastSlug.indexOf(currentRelative);
var slug = this.lastSlug.substr(0, currentRelativeIndexInSlug + currentRelative.length);
this.breadcrumbs = slug.substr(6,slug.length).split('/');
this.fetchFolderFolder(slug);
},
ready: function() {
this.breadcrumbs = ['documentLibrary'];
var initialFolder = 'swsdp/documentLibrary';
this.fetchFolderFolder(initialFolder);
var self = this;
if(document.querySelector("#alfresco-app")) {
document.querySelector("#alfresco-app").uploadedSignal = function () {
self.fetchFolderFolder(initialFolder);
};
}
},
fetchFolderFolder: function(slug) {
this.lastSlug = slug;
function error (resp) {
console.log("error", resp);
deleteTicket();
if (resp.status == 401) {
window.location = location.protocol + '//' + location.host + '/login.html';
}
}
function success (resp) {
this.data = resp.json.items;
}
sendXhr({
url: this.baseUrl() + slug
}).then(success.bind(this), error);
},
thumbBaseUrl: function () {
return this.host + '/share/proxy/alfresco/';
}
});
});
</script>
</dom-module>