var $ = require('jquery'); var React = require('react/addons'); var Router = require('react-router'); var RetinaImage = require('react-retina-image'); var metrics = require('../utils/MetricsUtil'); var OverlayTrigger = require('react-bootstrap').OverlayTrigger; var Tooltip = require('react-bootstrap').Tooltip; var util = require('../utils/Util'); var containerActions = require('../actions/ContainerActions'); var containerStore = require('../stores/ContainerStore'); var ImageCard = React.createClass({ mixins: [Router.Navigation], 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 (repository) { metrics.track('Created Container', { from: 'search' }); let name = containerStore.generateName(repository); containerActions.run(name, repository, this.state.chosenTag); this.transitionTo('containerHome', {name}); }, handleTagOverlayClick: function (name) { var $tagOverlay = $(this.getDOMNode()).find('.tag-overlay'); $tagOverlay.fadeIn(300); $.get('https://registry.hub.docker.com/v1/repositories/' + name + '/tags', result => { this.setState({ tags: result }); }); }, handleCloseTagOverlay: function () { var $tagOverlay = $(this.getDOMNode()).find('.tag-overlay'); $tagOverlay.fadeOut(300); }, handleRepoClick: function () { var $repoUri = 'https://registry.hub.docker.com/'; if (this.props.image.is_official) { $repoUri = $repoUri + "_/"; } else { $repoUri = $repoUri + "u/"; } util.exec(['open', $repoUri + this.props.image.name]); }, componentDidMount: function() { $.get('https://registry.hub.docker.com/v1/repositories/' + this.props.image.name + '/tags', result => { this.setState({ tags: result, chosenTag: result[0].name }); }); }, 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 = (