mirror of
https://github.com/ascribe/onion.git
synced 2024-12-22 17:33:14 +01:00
Merge remote-tracking branches 'remotes/origin/AD-51-refactor-table-to-mockup' and 'remotes/origin/piece-detail-mediaplayer' into piece-detail-setup
This commit is contained in:
commit
3f9f133224
@ -10,7 +10,7 @@
|
|||||||
<link rel="stylesheet" href="node_modules/react-datepicker/dist/react-datepicker.css">
|
<link rel="stylesheet" href="node_modules/react-datepicker/dist/react-datepicker.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="main" class="container"></div>
|
<div id="main" class="container clear-margins-and-paddings"></div>
|
||||||
<div id="modal" class="container"></div>
|
<div id="modal" class="container"></div>
|
||||||
<script src="build/app.js"></script>
|
<script src="build/app.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -6,7 +6,8 @@ class EditionListActions {
|
|||||||
constructor() {
|
constructor() {
|
||||||
this.generateActions(
|
this.generateActions(
|
||||||
'updateEditionList',
|
'updateEditionList',
|
||||||
'selectEdition'
|
'selectEdition',
|
||||||
|
'clearAllEditionSelections'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
js/components/ascribe_accordion_list/accordion_list.js
Normal file
26
js/components/ascribe_accordion_list/accordion_list.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import ReactAddons from 'react/addons';
|
||||||
|
|
||||||
|
|
||||||
|
let AccordionList = React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
className: React.PropTypes.string,
|
||||||
|
children: React.PropTypes.arrayOf(React.PropTypes.element).isRequired
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
if(this.props.itemList && this.props.itemList.length > 0) {
|
||||||
|
return (
|
||||||
|
<div className={this.props.className}>
|
||||||
|
{this.props.children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<p>Loading</p>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default AccordionList;
|
33
js/components/ascribe_accordion_list/accordion_list_item.js
Normal file
33
js/components/ascribe_accordion_list/accordion_list_item.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import AccordionListItemTable from './accordion_list_item_table';
|
||||||
|
|
||||||
|
|
||||||
|
let AccordionListItem = React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
className: React.PropTypes.string,
|
||||||
|
content: React.PropTypes.object
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div className="row">
|
||||||
|
<div className={this.props.className}>
|
||||||
|
<div className="wrapper">
|
||||||
|
<div className="thumbnail-wrapper">
|
||||||
|
<img src={this.props.content.thumbnail} />
|
||||||
|
</div>
|
||||||
|
<div className="info-wrapper">
|
||||||
|
<h1>{this.props.content.title}</h1>
|
||||||
|
<h3>by {this.props.content.artist_name}</h3>
|
||||||
|
</div>
|
||||||
|
<span style={{'clear': 'both'}}></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{this.props.children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default AccordionListItem;
|
@ -0,0 +1,87 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import Table from '../ascribe_table/table';
|
||||||
|
import TableItem from '../ascribe_table/table_item';
|
||||||
|
|
||||||
|
import TableColumnContentModel from '../../models/table_column_content_model';
|
||||||
|
|
||||||
|
let AccordionListItemTable = React.createClass({
|
||||||
|
getInitialState() {
|
||||||
|
return {
|
||||||
|
'show': false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
propTypes: {
|
||||||
|
className: React.PropTypes.string,
|
||||||
|
parentId: React.PropTypes.number,
|
||||||
|
fetchData: React.PropTypes.func,
|
||||||
|
itemList: React.PropTypes.array,
|
||||||
|
columnList: React.PropTypes.arrayOf(React.PropTypes.instanceOf(TableColumnContentModel)),
|
||||||
|
numOfTableItems: React.PropTypes.number
|
||||||
|
},
|
||||||
|
|
||||||
|
toggleTable() {
|
||||||
|
this.props.fetchData();
|
||||||
|
this.setState({
|
||||||
|
'show': !this.state.show
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
if(this.props.itemList && this.state.show) {
|
||||||
|
return (
|
||||||
|
<div className={this.props.className}>
|
||||||
|
<Table
|
||||||
|
columnList={this.props.columnList}
|
||||||
|
itemList={this.props.itemList}>
|
||||||
|
{this.props.itemList.map((item, i) => {
|
||||||
|
return (
|
||||||
|
<TableItem
|
||||||
|
className="ascribe-table-item-selectable"
|
||||||
|
key={i}>
|
||||||
|
</TableItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Table>
|
||||||
|
<AccordionListItemTableToggle
|
||||||
|
className="ascribe-accordion-list-table-toggle"
|
||||||
|
onClick={this.toggleTable}
|
||||||
|
show={this.state.show}
|
||||||
|
numOfTableItems={this.props.numOfTableItems} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<div className={this.props.className}>
|
||||||
|
<AccordionListItemTableToggle
|
||||||
|
className="ascribe-accordion-list-table-toggle"
|
||||||
|
onClick={this.toggleTable}
|
||||||
|
show={this.state.show}
|
||||||
|
numOfTableItems={this.props.numOfTableItems} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let AccordionListItemTableToggle = React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
className: React.PropTypes.string,
|
||||||
|
onClick: React.PropTypes.func,
|
||||||
|
show: React.PropTypes.bool,
|
||||||
|
numOfTableItems: React.PropTypes.number
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<span
|
||||||
|
className={this.props.className}
|
||||||
|
onClick={this.props.onClick}>
|
||||||
|
{this.props.show ? 'Hide all ' + this.props.numOfTableItems + ' Editions' : 'Show all ' + this.props.numOfTableItems + ' Editions'}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default AccordionListItemTable;
|
@ -0,0 +1,67 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import EditionListStore from '../../stores/edition_list_store';
|
||||||
|
import EditionListActions from '../../actions/edition_list_actions';
|
||||||
|
|
||||||
|
import AccordionListItemTable from './accordion_list_item_table';
|
||||||
|
|
||||||
|
import TableColumnContentModel from '../../models/table_column_content_model';
|
||||||
|
|
||||||
|
import TableItemImg from '../ascribe_table/table_item_img';
|
||||||
|
import TableItemText from '../ascribe_table/table_item_text';
|
||||||
|
import TableItemCheckbox from '../ascribe_table/table_item_checkbox';
|
||||||
|
import TableItemAclFiltered from '../ascribe_table/table_item_acl_filtered';
|
||||||
|
|
||||||
|
let AccordionListItemTableEditions = React.createClass({
|
||||||
|
|
||||||
|
propTypes: {
|
||||||
|
className: React.PropTypes.string,
|
||||||
|
parentId: React.PropTypes.number,
|
||||||
|
numOfEditions: React.PropTypes.number
|
||||||
|
},
|
||||||
|
|
||||||
|
getInitialState() {
|
||||||
|
return EditionListStore.getState();
|
||||||
|
},
|
||||||
|
|
||||||
|
onChange(state) {
|
||||||
|
this.setState(state);
|
||||||
|
},
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
EditionListStore.listen(this.onChange);
|
||||||
|
},
|
||||||
|
|
||||||
|
componentDidUnmount() {
|
||||||
|
EditionListStore.unlisten(this.onChange);
|
||||||
|
},
|
||||||
|
|
||||||
|
getEditionList() {
|
||||||
|
EditionListActions.fetchEditionList(this.props.parentId);
|
||||||
|
},
|
||||||
|
|
||||||
|
selectItem(pieceId, editionId) {
|
||||||
|
EditionListActions.selectEdition({pieceId, editionId});
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
let columnList = [
|
||||||
|
new TableColumnContentModel((item) => { return { 'editionId': item.id, 'pieceId': this.props.parentId, 'selectItem': this.selectItem, 'selected': item.selected }}, '', '', TableItemCheckbox, 1, false),
|
||||||
|
new TableColumnContentModel((item) => { return { 'content': item.edition_number }}, 'num_editions', 'Nr', TableItemText, 1, false),
|
||||||
|
new TableColumnContentModel((item) => { return { 'content': item.bitcoin_id }}, 'bitcoin_id', 'Bitcoin Address', TableItemText, 5, false),
|
||||||
|
new TableColumnContentModel((item) => { return { 'content': item.acl }}, 'acl', 'Actions', TableItemAclFiltered, 4, false)
|
||||||
|
];
|
||||||
|
|
||||||
|
return (
|
||||||
|
<AccordionListItemTable
|
||||||
|
className={this.props.className}
|
||||||
|
parentId={this.props.parentId}
|
||||||
|
fetchData={this.getEditionList}
|
||||||
|
itemList={this.state.editionList[this.props.parentId]}
|
||||||
|
columnList={columnList}
|
||||||
|
numOfTableItems={this.props.numOfEditions} />
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default AccordionListItemTableEditions;
|
@ -1,25 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the component that implements display-specific functionality
|
|
||||||
*/
|
|
||||||
let ImageViewer = React.createClass({
|
|
||||||
propTypes: {
|
|
||||||
thumbnail: React.PropTypes.string.isRequired
|
|
||||||
},
|
|
||||||
|
|
||||||
render() {
|
|
||||||
let thumbnail = <img className="img-responsive" src={this.props.thumbnail}/>;
|
|
||||||
let aligner = <span className="vcenter"></span>;
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<div>
|
|
||||||
{aligner}
|
|
||||||
{thumbnail}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
export default ImageViewer;
|
|
40
js/components/ascribe_media/resource_viewer.js
Normal file
40
js/components/ascribe_media/resource_viewer.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import InjectInHeadMixin from '../../mixins/inject_in_head_mixin';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the component that implements display-specific functionality.
|
||||||
|
*
|
||||||
|
* ResourceViewer handles the following mimetypes:
|
||||||
|
* - image
|
||||||
|
* - video
|
||||||
|
* - audio
|
||||||
|
* - pdf
|
||||||
|
* - other
|
||||||
|
*/
|
||||||
|
|
||||||
|
let resourceMap = {
|
||||||
|
'image': 1
|
||||||
|
}
|
||||||
|
|
||||||
|
let ResourceViewer = React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
thumbnail: React.PropTypes.string.isRequired,
|
||||||
|
mimetype: React.PropTypes.oneOf(['image', 'video', 'audio', 'pdf', 'other']).isRequired
|
||||||
|
},
|
||||||
|
|
||||||
|
mixins: [InjectInHeadMixin],
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
this.inject('http://antani.com');
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
resourceviewer {this.props.thumbnail} {this.props.mimetype}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default ResourceViewer;
|
@ -1,11 +1,16 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import EditionListStore from '../../stores/edition_list_store';
|
import EditionListStore from '../../stores/edition_list_store';
|
||||||
|
import EditionListActions from '../../actions/edition_list_actions';
|
||||||
|
|
||||||
import AclButton from '../acl_button';
|
import AclButton from '../acl_button';
|
||||||
import PieceListToolbarSelectedEditionsWidget from './piece_list_toolbar_selected_editions_widget';
|
import PieceListToolbarSelectedEditionsWidget from './piece_list_toolbar_selected_editions_widget';
|
||||||
|
|
||||||
let PieceListToolbar = React.createClass({
|
let PieceListToolbar = React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
className: React.PropTypes.string
|
||||||
|
},
|
||||||
|
|
||||||
getInitialState() {
|
getInitialState() {
|
||||||
return EditionListStore.getState();
|
return EditionListStore.getState();
|
||||||
},
|
},
|
||||||
@ -66,17 +71,32 @@ let PieceListToolbar = React.createClass({
|
|||||||
return availableAcls;
|
return availableAcls;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
clearAllSelections() {
|
||||||
|
EditionListActions.clearAllEditionSelections();
|
||||||
|
},
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let availableAcls = this.getAvailableAcls();
|
let availableAcls = this.getAvailableAcls();
|
||||||
|
|
||||||
|
if(availableAcls.length > 0) {
|
||||||
return (
|
return (
|
||||||
|
<div className={this.props.className}>
|
||||||
<div className="row no-margin">
|
<div className="row no-margin">
|
||||||
<div className="col-xs-12 col-sm-12 col-md-12 col-lg-12 piece-list-toolbar">
|
<div className="col-xs-12 col-sm-12 col-md-12 col-lg-12 piece-list-toolbar">
|
||||||
<div className="pull-left">
|
<p></p>
|
||||||
|
<div className="row">
|
||||||
|
<div className="text-center">
|
||||||
<PieceListToolbarSelectedEditionsWidget
|
<PieceListToolbarSelectedEditionsWidget
|
||||||
numberOfSelectedEditions={this.fetchSelectedEditionList().length} />
|
numberOfSelectedEditions={this.fetchSelectedEditionList().length} />
|
||||||
|
|
||||||
|
<span
|
||||||
|
className="piece-list-toolbar-clear-all"
|
||||||
|
onClick={this.clearAllSelections}>clear all</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="pull-right">
|
</div>
|
||||||
|
<p></p>
|
||||||
|
<div className="row">
|
||||||
|
<div className="text-center">
|
||||||
<AclButton availableAcls={availableAcls} action="transfer" actionFunction={this.bulk} />
|
<AclButton availableAcls={availableAcls} action="transfer" actionFunction={this.bulk} />
|
||||||
<AclButton availableAcls={availableAcls} action="consign" actionFunction={this.bulk} />
|
<AclButton availableAcls={availableAcls} action="consign" actionFunction={this.bulk} />
|
||||||
<AclButton availableAcls={availableAcls} action="share" actionFunction={this.bulk} />
|
<AclButton availableAcls={availableAcls} action="share" actionFunction={this.bulk} />
|
||||||
@ -84,7 +104,13 @@ let PieceListToolbar = React.createClass({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ let Table = React.createClass({
|
|||||||
|
|
||||||
propTypes: {
|
propTypes: {
|
||||||
columnList: React.PropTypes.arrayOf(React.PropTypes.instanceOf(TableColumnContentModel)),
|
columnList: React.PropTypes.arrayOf(React.PropTypes.instanceOf(TableColumnContentModel)),
|
||||||
changeOrder: React.PropTypes.func // turn isRequired on again after editions order implemented
|
changeOrder: React.PropTypes.func
|
||||||
},
|
},
|
||||||
|
|
||||||
renderChildren() {
|
renderChildren() {
|
||||||
@ -24,7 +24,6 @@ let Table = React.createClass({
|
|||||||
},
|
},
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
if(this.props.itemList && this.props.itemList.length > 0) {
|
|
||||||
return (
|
return (
|
||||||
<div className="ascribe-table">
|
<div className="ascribe-table">
|
||||||
<TableHeader
|
<TableHeader
|
||||||
@ -34,14 +33,11 @@ let Table = React.createClass({
|
|||||||
changeOrder={this.props.changeOrder}
|
changeOrder={this.props.changeOrder}
|
||||||
orderAsc={this.props.orderAsc}
|
orderAsc={this.props.orderAsc}
|
||||||
orderBy={this.props.orderBy} />
|
orderBy={this.props.orderBy} />
|
||||||
|
<div className="row">
|
||||||
{this.renderChildren()}
|
{this.renderChildren()}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
return (
|
|
||||||
<p>Loading</p>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -11,13 +11,12 @@ let TableItem = React.createClass({
|
|||||||
columnList: React.PropTypes.arrayOf(React.PropTypes.instanceOf(TableColumnContentModel)),
|
columnList: React.PropTypes.arrayOf(React.PropTypes.instanceOf(TableColumnContentModel)),
|
||||||
columnContent: React.PropTypes.object,
|
columnContent: React.PropTypes.object,
|
||||||
onClick: React.PropTypes.func, // See: https://facebook.github.io/react/tips/expose-component-functions.html
|
onClick: React.PropTypes.func, // See: https://facebook.github.io/react/tips/expose-component-functions.html
|
||||||
classNames: React.PropTypes.string
|
className: React.PropTypes.string
|
||||||
},
|
},
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div
|
<div className={this.props.className + ' col-xs-12 col-sm-12 col-md-12 col-lg-12 ascribe-table-item'}
|
||||||
className={this.props.classNames + ' col-xs-12 col-sm-12 col-md-12 col-lg-12 ascribe-table-item'}
|
|
||||||
onClick={this.props.onClick}>
|
onClick={this.props.onClick}>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<TableItemWrapper
|
<TableItemWrapper
|
||||||
|
22
js/components/ascribe_table/table_item_acl_filtered.js
Normal file
22
js/components/ascribe_table/table_item_acl_filtered.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
|
||||||
|
let TableItemAclFiltered = React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
content: React.PropTypes.array.isRequired
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
let filteredAcls = this.props.content.filter((v) => {
|
||||||
|
return v === 'consign' || v === 'loan' || v === 'transfer' || v === 'view';
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<span>
|
||||||
|
{filteredAcls.join('/')}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default TableItemAclFiltered;
|
23
js/components/ascribe_table/table_item_checkbox.js
Normal file
23
js/components/ascribe_table/table_item_checkbox.js
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
|
||||||
|
let TableItemCheckbox = React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
editionId: React.PropTypes.number,
|
||||||
|
pieceId: React.PropTypes.number,
|
||||||
|
selectItem: React.PropTypes.func,
|
||||||
|
selected: React.PropTypes.bool
|
||||||
|
},
|
||||||
|
|
||||||
|
selectItem() {
|
||||||
|
this.props.selectItem(this.props.pieceId, this.props.editionId);
|
||||||
|
},
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<input type="checkbox" onChange={this.selectItem} checked={this.props.selected}/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default TableItemCheckbox;
|
@ -26,12 +26,13 @@ let TableItemSelectable = React.createClass({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<TableItem
|
<TableItem
|
||||||
classNames={tableItemClasses + ' ' + this.props.className}
|
className={tableItemClasses + ' ' + this.props.className}
|
||||||
columnList={this.props.columnList}
|
columnList={this.props.columnList}
|
||||||
columnContent={this.props.columnContent}
|
columnContent={this.props.columnContent}
|
||||||
onClick={this.selectItem}>
|
onClick={this.selectItem}>
|
||||||
</TableItem>
|
</TableItem>
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -17,11 +17,13 @@ let TableItemWrapper = React.createClass({
|
|||||||
{this.props.columnList.map((column, i) => {
|
{this.props.columnList.map((column, i) => {
|
||||||
|
|
||||||
let TypeElement = column.displayType;
|
let TypeElement = column.displayType;
|
||||||
|
let typeElementProps = column.transformFn(this.props.columnContent);
|
||||||
|
|
||||||
let columnClass = this.calcColumnClasses(this.props.columnList, i, this.props.columnWidth);
|
let columnClass = this.calcColumnClasses(this.props.columnList, i, this.props.columnWidth);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={columnClass + ' ascribe-table-item-column'} key={i}>
|
<div className={columnClass + ' ascribe-table-item-column'} key={i}>
|
||||||
<TypeElement content={this.props.columnContent[column.columnName]} width="50" />
|
<TypeElement {...typeElementProps} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
<<<<<<< HEAD
|
||||||
|
import ResourceViewer from './ascribe_media/resource_viewer';
|
||||||
|
=======
|
||||||
|
|
||||||
import ImageViewer from './ascribe_media/image_viewer';
|
import ImageViewer from './ascribe_media/image_viewer';
|
||||||
import LoanModalButton from './ascribe_modal/modal_loan';
|
import LoanModalButton from './ascribe_modal/modal_loan';
|
||||||
@ -7,16 +10,22 @@ import UnConsignModalButton from './ascribe_modal/modal_unconsign';
|
|||||||
import UnConsignRequestModalButton from './ascribe_modal/modal_unconsign_request';
|
import UnConsignRequestModalButton from './ascribe_modal/modal_unconsign_request';
|
||||||
import TransferModalButton from './ascribe_modal/modal_transfer';
|
import TransferModalButton from './ascribe_modal/modal_transfer';
|
||||||
import ShareModalButton from './ascribe_modal/modal_share';
|
import ShareModalButton from './ascribe_modal/modal_share';
|
||||||
|
>>>>>>> master
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the component that implements display-specific functionality
|
* This is the component that implements display-specific functionality
|
||||||
*/
|
*/
|
||||||
let Edition = React.createClass({
|
let Edition = React.createClass({
|
||||||
render() {
|
render() {
|
||||||
|
let thumbnail = this.props.edition.thumbnail;
|
||||||
|
let mimetype = this.props.edition.digital_work.mime;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className="col-md-7">
|
<div className="col-md-7">
|
||||||
<ImageViewer thumbnail={this.props.edition.thumbnail}/>
|
<ResourceViewer thumbnail={thumbnail}
|
||||||
|
mimetype={mimetype}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-md-5">
|
<div className="col-md-5">
|
||||||
<EditionHeader edition={this.props.edition}/>
|
<EditionHeader edition={this.props.edition}/>
|
||||||
@ -83,4 +92,3 @@ let EditionDetailProperty = React.createClass({
|
|||||||
|
|
||||||
|
|
||||||
export default Edition;
|
export default Edition;
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ let Header = React.createClass({
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<nav className="navbar navbar-default navbar-fixed-top">
|
<nav className="navbar navbar-default">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="navbar-header">
|
<div className="navbar-header">
|
||||||
<button type="button" className="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
<button type="button" className="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
||||||
@ -35,15 +35,12 @@ let Header = React.createClass({
|
|||||||
</button>
|
</button>
|
||||||
<a className="navbar-brand" href="#">
|
<a className="navbar-brand" href="#">
|
||||||
<span>ascribe </span>
|
<span>ascribe </span>
|
||||||
<span className="glyph-ascribe-spool-chunked"></span>
|
<span className="glyph-ascribe-spool-chunked ascribe-color"></span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="navbar" className="navbar-collapse collapse">
|
<div id="navbar" className="navbar-collapse collapse">
|
||||||
<ul className="nav navbar-nav navbar-left">
|
<ul className="nav navbar-nav navbar-left">
|
||||||
<li>
|
|
||||||
<Link to="pieces">Pieces</Link>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
<ul className="nav navbar-nav navbar-right">
|
<ul className="nav navbar-nav navbar-right">
|
||||||
<li className="dropdown">
|
<li className="dropdown">
|
||||||
|
@ -4,14 +4,9 @@ import AltContainer from 'alt/AltContainer';
|
|||||||
import PieceListStore from '../stores/piece_list_store';
|
import PieceListStore from '../stores/piece_list_store';
|
||||||
import PieceListActions from '../actions/piece_list_actions';
|
import PieceListActions from '../actions/piece_list_actions';
|
||||||
|
|
||||||
import Table from './ascribe_table/table';
|
import AccordionList from './ascribe_accordion_list/accordion_list';
|
||||||
import TableItem from './ascribe_table/table_item';
|
import AccordionListItem from './ascribe_accordion_list/accordion_list_item';
|
||||||
import TableItemImg from './ascribe_table/table_item_img';
|
import AccordionListItemTableEditions from './ascribe_accordion_list/accordion_list_item_table_editions';
|
||||||
import TableItemText from './ascribe_table/table_item_text';
|
|
||||||
import TableItemSubtable from './ascribe_table/table_item_subtable';
|
|
||||||
import TableItemSubtableButton from './ascribe_table/table_item_subtable_button';
|
|
||||||
|
|
||||||
import TableColumnContentModel from '../models/table_column_content_model';
|
|
||||||
|
|
||||||
import Pagination from './ascribe_pagination/pagination';
|
import Pagination from './ascribe_pagination/pagination';
|
||||||
|
|
||||||
@ -44,30 +39,22 @@ let PieceList = React.createClass({
|
|||||||
this.state.orderAsc);
|
this.state.orderAsc);
|
||||||
},
|
},
|
||||||
|
|
||||||
tableChangeOrder(orderBy, orderAsc) {
|
accordionChangeOrder(orderBy, orderAsc) {
|
||||||
PieceListActions.fetchPieceList(this.state.page, this.state.pageSize,
|
PieceListActions.fetchPieceList(this.state.page, this.state.pageSize,
|
||||||
this.state.search, orderBy, orderAsc);
|
this.state.search, orderBy, orderAsc);
|
||||||
},
|
},
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
let columnList = [
|
|
||||||
new TableColumnContentModel('thumbnail', '', TableItemImg, 2, false),
|
|
||||||
new TableColumnContentModel('artist_name', 'Artist', TableItemText, 4, true),
|
|
||||||
new TableColumnContentModel('title', 'Title', TableItemText, 4, true)
|
|
||||||
];
|
|
||||||
|
|
||||||
let currentPage = parseInt(this.props.query.page, 10) || 1;
|
let currentPage = parseInt(this.props.query.page, 10) || 1;
|
||||||
let totalPages = Math.ceil(this.state.pieceListCount / this.state.pageSize)
|
let totalPages = Math.ceil(this.state.pieceListCount / this.state.pageSize)
|
||||||
|
|
||||||
if(this.state.pieceList && this.state.pieceList.length > 0) {
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<PieceListToolbar />
|
<PieceListToolbar className="ascribe-piece-list-toolbar" />
|
||||||
<Table
|
<AccordionList
|
||||||
columnList={columnList}
|
className="ascribe-accordion-list"
|
||||||
changeOrder={this.tableChangeOrder}
|
changeOrder={this.accordionChangeOrder}
|
||||||
itemList={this.state.pieceList}
|
itemList={this.state.pieceList}
|
||||||
itemListCount={this.state.pieceListCount}
|
|
||||||
orderBy={this.state.orderBy}
|
orderBy={this.state.orderBy}
|
||||||
orderAsc={this.state.orderAsc}
|
orderAsc={this.state.orderAsc}
|
||||||
search={this.state.search}
|
search={this.state.search}
|
||||||
@ -75,24 +62,25 @@ let PieceList = React.createClass({
|
|||||||
pageSize={this.state.pageSize}>
|
pageSize={this.state.pageSize}>
|
||||||
{this.state.pieceList.map((item, i) => {
|
{this.state.pieceList.map((item, i) => {
|
||||||
return (
|
return (
|
||||||
<TableItemSubtable
|
<AccordionListItem
|
||||||
|
className="col-xs-12 col-sm-10 col-md-8 col-lg-8 col-sm-offset-1 col-md-offset-2 col-lg-offset-2 ascribe-accordion-list-item"
|
||||||
|
content={item}
|
||||||
key={i}>
|
key={i}>
|
||||||
</TableItemSubtable>
|
<AccordionListItemTableEditions
|
||||||
|
className="ascribe-accordion-list-item-table col-xs-6 col-sm-6 col-md-6 col-lg-6 col-xs-offset-3 col-sm-offset-3 col-md-offset-3 col-lg-offset-3"
|
||||||
|
parentId={item.id}
|
||||||
|
numOfEditions={item.num_editions}/>
|
||||||
|
</AccordionListItem>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</Table>
|
</AccordionList>
|
||||||
<Pagination currentPage={currentPage}
|
<Pagination
|
||||||
|
currentPage={currentPage}
|
||||||
totalPages={totalPages}
|
totalPages={totalPages}
|
||||||
goToPage={this.paginationGoToPage}>
|
goToPage={this.paginationGoToPage}>
|
||||||
</Pagination>
|
</Pagination>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
return (
|
|
||||||
<p>Loading</p>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
57
js/mixins/inject_in_head_mixin.js
Normal file
57
js/mixins/inject_in_head_mixin.js
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
let mapAttr = {
|
||||||
|
link: 'href',
|
||||||
|
source: 'src'
|
||||||
|
}
|
||||||
|
|
||||||
|
let mapExt = {
|
||||||
|
js: 'source',
|
||||||
|
css: 'link'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let InjectInHeadMixin = {
|
||||||
|
/**
|
||||||
|
* Provide functions to inject `<script>` and `<link>` in `<head>`.
|
||||||
|
* Useful when you have to load a huge external library and
|
||||||
|
* you don't want to embed everything inside the build file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
isPresent(tag, src) {
|
||||||
|
let attr = mapAttr[tag];
|
||||||
|
let query = `head > ${tag}[${attr}="${src}"]`;
|
||||||
|
return document.querySelector(query);
|
||||||
|
},
|
||||||
|
|
||||||
|
injectTag(tag, src){
|
||||||
|
console.log(this.foobar);
|
||||||
|
if (InjectInHeadMixin.isPresent(tag, src))
|
||||||
|
return;
|
||||||
|
|
||||||
|
let attr = mapAttr[tag];
|
||||||
|
let element = document.createElement(tag);
|
||||||
|
document.head.appendChild(element);
|
||||||
|
element[attr] = src;
|
||||||
|
},
|
||||||
|
|
||||||
|
injectStylesheet(src) {
|
||||||
|
this.injectTag('link', src);
|
||||||
|
},
|
||||||
|
|
||||||
|
injectScript(src) {
|
||||||
|
this.injectTag('source', src);
|
||||||
|
},
|
||||||
|
|
||||||
|
inject(src) {
|
||||||
|
debugger;
|
||||||
|
let ext = src.split('.').pop();
|
||||||
|
try {
|
||||||
|
let tag = mapAttr(src);
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(`Cannot inject ${src} in the DOM, cannot guess the tag name from extension ${ext}. Valid extensions are "js" and "css".`);
|
||||||
|
}
|
||||||
|
InjectInHeadMixin.injectTag(tag, src);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
export default InjectInHeadMixin;
|
@ -1,6 +1,7 @@
|
|||||||
class TableColumnContentModel {
|
class TableColumnContentModel {
|
||||||
// ToDo: Add validation for all passed-in parameters
|
// ToDo: Add validation for all passed-in parameters
|
||||||
constructor(columnName, displayName, displayType, rowWidth, canBeOrdered) {
|
constructor(transformFn, columnName, displayName, displayType, rowWidth, canBeOrdered) {
|
||||||
|
this.transformFn = transformFn;
|
||||||
this.columnName = columnName;
|
this.columnName = columnName;
|
||||||
this.displayName = displayName;
|
this.displayName = displayName;
|
||||||
this.displayType = displayType;
|
this.displayType = displayType;
|
||||||
|
@ -9,8 +9,8 @@ let Route = Router.Route;
|
|||||||
|
|
||||||
|
|
||||||
let routes = (
|
let routes = (
|
||||||
<Route name="app" path="/" handler={AscribeApp}>
|
<Route name="app" handler={AscribeApp}>
|
||||||
<Route name="pieces" path="/pieces" handler={PieceList}>
|
<Route name="pieces" path="/" handler={PieceList}>
|
||||||
|
|
||||||
</Route>
|
</Route>
|
||||||
<Route name="edition" path="/editions/:editionId" handler={EditionContainer}>
|
<Route name="edition" path="/editions/:editionId" handler={EditionContainer}>
|
||||||
|
@ -21,9 +21,8 @@ class EditionListStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onSelectEdition({pieceId, editionId}) {
|
onSelectEdition({pieceId, editionId}) {
|
||||||
|
|
||||||
this.editionList[pieceId].forEach((edition) => {
|
this.editionList[pieceId].forEach((edition) => {
|
||||||
if(edition.edition_number === editionId) {
|
if(edition.id === editionId) {
|
||||||
if(edition.selected) {
|
if(edition.selected) {
|
||||||
edition.selected = false;
|
edition.selected = false;
|
||||||
} else {
|
} else {
|
||||||
@ -31,7 +30,21 @@ class EditionListStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onClearAllEditionSelections() {
|
||||||
|
Object
|
||||||
|
.keys(this.editionList)
|
||||||
|
.forEach((pieceId) => {
|
||||||
|
this.editionList[pieceId]
|
||||||
|
.forEach((edition) => {
|
||||||
|
try {
|
||||||
|
delete edition.selected;
|
||||||
|
} catch(err) {
|
||||||
|
//just ignore
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
78
sass/ascribe-accordion_list.scss
Normal file
78
sass/ascribe-accordion_list.scss
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
$ascribe-accordion-list-item-height: 9em;
|
||||||
|
$ascribe-accordion-list-font: 'Source Sans Pro';
|
||||||
|
|
||||||
|
.ascribe-accordion-list-item {
|
||||||
|
background-color: rgba(0,0,0,0.004);
|
||||||
|
border: 1px solid black;
|
||||||
|
height: $ascribe-accordion-list-item-height;
|
||||||
|
|
||||||
|
padding-left:0;
|
||||||
|
padding-right:0;
|
||||||
|
|
||||||
|
overflow:hidden;
|
||||||
|
|
||||||
|
border-left: 0.1em solid #E0E0E0;
|
||||||
|
border-right: 0.1em solid #E0E0E0;
|
||||||
|
border-top: 0.1em solid #E0E0E0;
|
||||||
|
border-radius: 5px;
|
||||||
|
border-bottom: 0.2em solid #E0E0E0;
|
||||||
|
.wrapper {
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
// ToDo: Include media queries for thumbnail
|
||||||
|
.thumbnail-wrapper {
|
||||||
|
float:left;
|
||||||
|
height:100%;
|
||||||
|
width:$ascribe-accordion-list-item-height;
|
||||||
|
overflow:hidden;
|
||||||
|
padding-left:0;
|
||||||
|
padding-right:0;
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: $ascribe-accordion-list-item-height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.info-wrapper {
|
||||||
|
float:left;
|
||||||
|
font-family: $ascribe-accordion-list-font;
|
||||||
|
margin-left: 2em;
|
||||||
|
padding-top: .75em;
|
||||||
|
h1 {
|
||||||
|
font-size: 2.25em;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 1.1em;
|
||||||
|
margin: .7em 0 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ascribe-accordion-list-item-table {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 3em;
|
||||||
|
background-color: rgba(0,0,0,0.004);
|
||||||
|
|
||||||
|
border-bottom-left-radius: 4px;
|
||||||
|
border-bottom-right-radius: 4px;
|
||||||
|
border-bottom: 0.15em solid #E0E0E0;
|
||||||
|
border-left: 0.1em solid #E0E0E0;
|
||||||
|
border-right: 0.1em solid #E0E0E0;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.ascribe-accordion-list-table-toggle {
|
||||||
|
::selection { background: transparent; }
|
||||||
|
::-moz-selection { background: transparent; }
|
||||||
|
&:hover {
|
||||||
|
color: $ascribe-color-dark;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ascribe-accordion-list-table-list {
|
||||||
|
margin-bottom: .5em;
|
||||||
|
th, td {
|
||||||
|
font-size:.85em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
20
sass/ascribe-piece-list-toolbar.scss
Normal file
20
sass/ascribe-piece-list-toolbar.scss
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
.ascribe-piece-list-toolbar {
|
||||||
|
position: fixed;
|
||||||
|
top:0;
|
||||||
|
width:1170px;
|
||||||
|
height:6em;
|
||||||
|
background-color: #FAFAFA;
|
||||||
|
|
||||||
|
border-left: 0.1em solid #E0E0E0;
|
||||||
|
border-right: 0.1em solid #E0E0E0;
|
||||||
|
border-top: 0.1em solid #E0E0E0;
|
||||||
|
border-bottom-left-radius: 5px;
|
||||||
|
border-bottom-right-radius: 5px;
|
||||||
|
border-bottom: 0.2em solid #E0E0E0;
|
||||||
|
z-index:9999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.piece-list-toolbar-clear-all {
|
||||||
|
text-decoration: underline;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
2
sass/ascribe-variables.scss
Normal file
2
sass/ascribe-variables.scss
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
$ascribe-color: rgba(2, 182, 163, 0.5);
|
||||||
|
$ascribe-color-dark: rgba(2, 182, 163, 0.8);
|
@ -1,16 +1,32 @@
|
|||||||
|
// If you import a new .scss file, make sure to restart gulp
|
||||||
|
// otherwise it will not be included
|
||||||
@import 'variables';
|
@import 'variables';
|
||||||
|
@import 'ascribe-variables';
|
||||||
@import '../node_modules/bootstrap-sass/assets/stylesheets/bootstrap';
|
@import '../node_modules/bootstrap-sass/assets/stylesheets/bootstrap';
|
||||||
@import './ascribe-fonts/style';
|
@import './ascribe-fonts/style';
|
||||||
@import './ascribe-fonts/ascribe-fonts';
|
@import './ascribe-fonts/ascribe-fonts';
|
||||||
|
@import 'ascribe-accordion_list';
|
||||||
#main {
|
@import 'ascribe-piece-list-toolbar';
|
||||||
padding-top: 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hidden {
|
.hidden {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-default {
|
||||||
|
border-left:0;
|
||||||
|
border-right:0;
|
||||||
|
margin-bottom: 3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear-margins-and-paddings {
|
||||||
|
padding-left:0;
|
||||||
|
padding-right:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ascribe-color {
|
||||||
|
color: $ascribe-color;
|
||||||
|
}
|
||||||
|
|
||||||
/* Taken from http://stackoverflow.com/a/20548578 */
|
/* Taken from http://stackoverflow.com/a/20548578 */
|
||||||
.vcenter {
|
.vcenter {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@ -19,8 +35,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.ascribe-table-header-row {
|
.ascribe-table-header-row {
|
||||||
border-bottom: 2px solid rgba(2, 182, 163, 0.5);
|
border-bottom: 2px solid #E0E0E0;
|
||||||
border-top: 2px solid rgba(2, 182, 163, 0.5);
|
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,8 +50,7 @@
|
|||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
font-family: 'Source Sans Pro';
|
font-family: 'Source Sans Pro';
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: rgba(2, 182, 163, 1);
|
color: #424242;
|
||||||
font-size: 1.4em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.ascribe-table-header-column > span > .glyphicon {
|
.ascribe-table-header-column > span > .glyphicon {
|
||||||
@ -54,13 +68,16 @@
|
|||||||
.ascribe-table-item-column {
|
.ascribe-table-item-column {
|
||||||
display: table;
|
display: table;
|
||||||
font-family: 'Source Sans Pro';
|
font-family: 'Source Sans Pro';
|
||||||
font-size: 1.2em;
|
font-size: .8em;
|
||||||
height:3em;
|
height:3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ascribe-table-item-column > * {
|
.ascribe-table-item-column > * {
|
||||||
display: table-cell;
|
display: table-cell;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ascribe-table-item-selected {
|
.ascribe-table-item-selected {
|
||||||
@ -71,10 +88,6 @@
|
|||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
.piece-list-toolbar {
|
|
||||||
height:3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.no-margin {
|
.no-margin {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
|
@ -359,13 +359,13 @@ $container-lg: $container-large-desktop !default;
|
|||||||
// Basics of a navbar
|
// Basics of a navbar
|
||||||
$navbar-height: 50px !default;
|
$navbar-height: 50px !default;
|
||||||
$navbar-margin-bottom: $line-height-computed !default;
|
$navbar-margin-bottom: $line-height-computed !default;
|
||||||
$navbar-border-radius: $border-radius-base !default;
|
$navbar-border-radius: 0 !default;
|
||||||
$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default;
|
$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default;
|
||||||
$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default;
|
$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default;
|
||||||
$navbar-collapse-max-height: 340px !default;
|
$navbar-collapse-max-height: 340px !default;
|
||||||
|
|
||||||
$navbar-default-color: #777 !default;
|
$navbar-default-color: #777 !default;
|
||||||
$navbar-default-bg: #f8f8f8 !default;
|
$navbar-default-bg: white !default;
|
||||||
$navbar-default-border: darken($navbar-default-bg, 6.5%) !default;
|
$navbar-default-border: darken($navbar-default-bg, 6.5%) !default;
|
||||||
|
|
||||||
// Navbar links
|
// Navbar links
|
||||||
@ -378,7 +378,7 @@ $navbar-default-link-disabled-color: #ccc !default;
|
|||||||
$navbar-default-link-disabled-bg: transparent !default;
|
$navbar-default-link-disabled-bg: transparent !default;
|
||||||
|
|
||||||
// Navbar brand label
|
// Navbar brand label
|
||||||
$navbar-default-brand-color: $navbar-default-link-color !default;
|
$navbar-default-brand-color: black !default;
|
||||||
$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default;
|
$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default;
|
||||||
$navbar-default-brand-hover-bg: transparent !default;
|
$navbar-default-brand-hover-bg: transparent !default;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user