var $ = require('jquery'); var React = require('react/addons'); var RetinaImage = require('react-retina-image'); var ContainerStore = require('./ContainerStore'); var metrics = require('./Metrics'); var OverlayTrigger = require('react-bootstrap').OverlayTrigger; var Tooltip = require('react-bootstrap').Tooltip; var ImageCard = React.createClass({ getInitialState: function () { return { tags: [], chosenTag: 'latest' }; }, handleTagClick: function (tag) { this.setState({ chosenTag: tag }); var $tagOverlay = $(this.getDOMNode()).find('.tag-overlay'); $tagOverlay.fadeOut(300); metrics.track('Selected Image Tag'); }, handleClick: function (name) { metrics.track('Created Container'); ContainerStore.create(name, this.state.chosenTag, function (err) { if (err) { throw err; } $(document.body).find('.new-container-item').parent().fadeOut(); }.bind(this)); }, handleTagOverlayClick: function (name) { var $tagOverlay = $(this.getDOMNode()).find('.tag-overlay'); $tagOverlay.fadeIn(300); $.get('https://registry.hub.docker.com/v1/repositories/' + name + '/tags', function (result) { this.setState({ tags: result }); }.bind(this)); }, handleCloseTagOverlay: function () { var $tagOverlay = $(this.getDOMNode()).find('.tag-overlay'); $tagOverlay.fadeOut(300); }, render: function () { var self = this; var name; var imageNameTokens = this.props.image.name.split('/'); var namespace; var repo; if (imageNameTokens.length > 1) { namespace = imageNameTokens[0]; repo = imageNameTokens[1]; } else { namespace = "official"; repo = imageNameTokens[0]; } if (this.props.image.is_official) { name = (
{namespace}
{this.props.image.name}}> {repo}
); } else { name = (
{namespace}
{this.props.image.name}}> {repo}
); } var description; if (this.props.image.description) { description = this.props.image.description; } else { description = "No description."; } var logoStyle = { backgroundImage: `linear-gradient(-180deg, ${this.props.image.gradient_start} 4%, ${this.props.image.gradient_end} 100%)` }; var imgsrc; if (this.props.image.img) { imgsrc = `http://kitematic.com/recommended/${this.props.image.img}`; } else { imgsrc = 'http://kitematic.com/recommended/kitematic_html.png'; } var tags; if (self.state.tags.length > 0) { var tagDisplay = self.state.tags.map(function (t) { if (t.name === self.state.chosenTag) { return
{t.name}
; } else { return
{t.name}
; } }); tags = (
{tagDisplay}
); } else { tags = ; } var officialBadge; if (this.props.image.is_official) { officialBadge = ( ); } return (
{tags}
{officialBadge}
{name}
{description}
Favorites}>
{this.props.image.star_count}
Change Tag}> {this.state.chosenTag}
); } }); module.exports = ImageCard;