Merge remote-tracking branch 'origin/AD-419-decouple-piece-registration-from-' into AD-419-decouple-piece-registration-from-
BIN
img/hq-favicons/android-chrome-144x144.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
img/hq-favicons/android-chrome-36x36.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
img/hq-favicons/android-chrome-48x48.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
img/hq-favicons/android-chrome-72x72.png
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
img/hq-favicons/android-chrome-96x96.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
img/hq-favicons/apple-touch-icon-114x114.png
Normal file
After Width: | Height: | Size: 8.9 KiB |
BIN
img/hq-favicons/apple-touch-icon-120x120.png
Normal file
After Width: | Height: | Size: 9.5 KiB |
BIN
img/hq-favicons/apple-touch-icon-144x144.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
img/hq-favicons/apple-touch-icon-152x152.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
img/hq-favicons/apple-touch-icon-57x57.png
Normal file
After Width: | Height: | Size: 4.4 KiB |
BIN
img/hq-favicons/apple-touch-icon-60x60.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
img/hq-favicons/apple-touch-icon-72x72.png
Normal file
After Width: | Height: | Size: 5.5 KiB |
BIN
img/hq-favicons/apple-touch-icon-76x76.png
Normal file
After Width: | Height: | Size: 5.9 KiB |
BIN
img/hq-favicons/apple-touch-icon-precomposed.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
img/hq-favicons/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 12 KiB |
12
img/hq-favicons/browserconfig.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<browserconfig>
|
||||
<msapplication>
|
||||
<tile>
|
||||
<square70x70logo src="images/hq-favicons/mstile-70x70.png"/>
|
||||
<square150x150logo src="images/hq-favicons/mstile-150x150.png"/>
|
||||
<square310x310logo src="images/hq-favicons/mstile-310x310.png"/>
|
||||
<wide310x150logo src="images/hq-favicons/mstile-310x150.png"/>
|
||||
<TileColor>#00aba9</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
BIN
img/hq-favicons/favicon-16x16.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
img/hq-favicons/favicon-32x32.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
img/hq-favicons/favicon-96x96.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
img/hq-favicons/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
35
img/hq-favicons/manifest.json
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
"name": "Ascribe",
|
||||
"icons": [
|
||||
{
|
||||
"src": "images\/hq-favicons\/android-chrome-36x36.png",
|
||||
"sizes": "36x36",
|
||||
"type": "image\/png",
|
||||
"density": "0.75"
|
||||
},
|
||||
{
|
||||
"src": "images\/hq-favicons\/android-chrome-48x48.png",
|
||||
"sizes": "48x48",
|
||||
"type": "image\/png",
|
||||
"density": "1.0"
|
||||
},
|
||||
{
|
||||
"src": "images\/hq-favicons\/android-chrome-72x72.png",
|
||||
"sizes": "72x72",
|
||||
"type": "image\/png",
|
||||
"density": "1.5"
|
||||
},
|
||||
{
|
||||
"src": "images\/hq-favicons\/android-chrome-96x96.png",
|
||||
"sizes": "96x96",
|
||||
"type": "image\/png",
|
||||
"density": "2.0"
|
||||
},
|
||||
{
|
||||
"src": "images\/hq-favicons\/android-chrome-144x144.png",
|
||||
"sizes": "144x144",
|
||||
"type": "image\/png",
|
||||
"density": "3.0"
|
||||
}
|
||||
]
|
||||
}
|
BIN
img/hq-favicons/mstile-144x144.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
img/hq-favicons/mstile-150x150.png
Normal file
After Width: | Height: | Size: 4.8 KiB |
BIN
img/hq-favicons/mstile-310x150.png
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
img/hq-favicons/mstile-310x310.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
img/hq-favicons/mstile-70x70.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
18
index.html
@ -2,6 +2,24 @@
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="<%= BASE_URL %>static/img/hq-favicons/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="<%= BASE_URL %>static/img/hq-favicons/apple-touch-icon-60x60.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="<%= BASE_URL %>static/img/hq-favicons/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="<%= BASE_URL %>static/img/hq-favicons/apple-touch-icon-76x76.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="<%= BASE_URL %>static/img/hq-favicons/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="<%= BASE_URL %>static/img/hq-favicons/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="<%= BASE_URL %>static/img/hq-favicons/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="<%= BASE_URL %>static/img/hq-favicons/apple-touch-icon-152x152.png">
|
||||
<link rel="icon" type="image/png" href="<%= BASE_URL %>static/img/hq-favicons/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="<%= BASE_URL %>static/img/hq-favicons/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="<%= BASE_URL %>static/img/hq-favicons/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="<%= BASE_URL %>static/img/hq-favicons/manifest.json">
|
||||
<link rel="shortcut icon" href="<%= BASE_URL %>static/img/hq-favicons/favicon.ico">
|
||||
<meta name="msapplication-TileColor" content="#00aba9">
|
||||
<meta name="msapplication-TileImage" content="<%= BASE_URL %>static/img/hq-favicons/mstile-144x144.png">
|
||||
<meta name="msapplication-config" content="<%= BASE_URL %>static/img/hq-favicons/browserconfig.xml">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<title>ascribe</title>
|
||||
|
38
js/components/acl_proxy.js
Normal file
@ -0,0 +1,38 @@
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
|
||||
/**
|
||||
* This component can easily be used to present another component conditionally
|
||||
* - dependent on their acl.
|
||||
*
|
||||
* In order to do that, just wrap AclProxy around the component, add aclObject and
|
||||
* the acl name you're looking for.
|
||||
*/
|
||||
let AclProxy = React.createClass({
|
||||
propTypes: {
|
||||
children: React.PropTypes.oneOfType([
|
||||
React.PropTypes.arrayOf(React.PropTypes.element),
|
||||
React.PropTypes.element
|
||||
]).isRequired,
|
||||
aclObject: React.PropTypes.object.isRequired,
|
||||
aclName: React.PropTypes.string.isRequired
|
||||
},
|
||||
|
||||
render() {
|
||||
if(this.props.aclObject[this.props.aclName]) {
|
||||
return (
|
||||
<div>
|
||||
{this.props.children}
|
||||
</div>
|
||||
);
|
||||
} else {
|
||||
if(typeof this.props.aclObject[this.props.aclName] === 'undefined') {
|
||||
console.warn('The aclName you\'re filtering for was not present (undefined) in the aclObject.');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export default AclProxy;
|
@ -9,6 +9,8 @@ import MediaPlayer from './../ascribe_media/media_player';
|
||||
|
||||
import CollapsibleButton from './../ascribe_collapsible/collapsible_button';
|
||||
|
||||
import AclProxy from '../acl_proxy';
|
||||
|
||||
|
||||
let MediaContainer = React.createClass({
|
||||
propTypes: {
|
||||
@ -49,9 +51,13 @@ let MediaContainer = React.createClass({
|
||||
url={this.props.content.digital_work.url}
|
||||
extraData={extraData} />
|
||||
<p className="text-center">
|
||||
<Button bsSize="xsmall" className="ascribe-margin-1px" href={this.props.content.digital_work.url} target="_blank">
|
||||
Download <Glyphicon glyph="cloud-download"/>
|
||||
</Button>
|
||||
<AclProxy
|
||||
aclObject={this.props.content.acl}
|
||||
aclName="acl_download">
|
||||
<Button bsSize="xsmall" className="ascribe-margin-1px" href={this.props.content.digital_work.url} target="_blank">
|
||||
Download <Glyphicon glyph="cloud-download"/>
|
||||
</Button>
|
||||
</AclProxy>
|
||||
{embed}
|
||||
</p>
|
||||
</div>
|
||||
|
@ -82,7 +82,7 @@ let PieceListBulkModal = React.createClass({
|
||||
|
||||
render() {
|
||||
let selectedEditions = this.fetchSelectedEditionList();
|
||||
let availableAcls = getAvailableAcls(selectedEditions);
|
||||
let availableAcls = getAvailableAcls(selectedEditions, (aclName) => aclName !== 'acl_view');
|
||||
|
||||
if(Object.keys(availableAcls).length > 0) {
|
||||
return (
|
||||
|
@ -6,7 +6,7 @@ function intersectAcls(a, b) {
|
||||
return a.filter((val) => b.indexOf(val) > -1);
|
||||
}
|
||||
|
||||
export function getAvailableAcls(editions) {
|
||||
export function getAvailableAcls(editions, filterFn) {
|
||||
let availableAcls = [];
|
||||
if (editions.constructor !== Array){
|
||||
return [];
|
||||
@ -26,6 +26,13 @@ export function getAvailableAcls(editions) {
|
||||
|
||||
edition.acl = sanitize(edition.acl, (val) => !val);
|
||||
edition.acl = Object.keys(edition.acl);
|
||||
|
||||
// additionally, the user can specify a filter function for
|
||||
// an acl array
|
||||
if(typeof filterFn === 'function') {
|
||||
edition.acl = edition.acl.filter(filterFn);
|
||||
}
|
||||
|
||||
return edition;
|
||||
});
|
||||
|
||||
|