const {Disposable} = require('atom') const etch = require('etch') const shell = require('shell') const AtomLogo = require('./atom-logo') const EtchComponent = require('../etch-component') const UpdateView = require('./update-view') const $ = etch.dom module.exports = class AboutView extends EtchComponent { handleAtomVersionClick (e) { e.preventDefault() atom.clipboard.write(this.props.currentAtomVersion) } handleElectronVersionClick (e) { e.preventDefault() atom.clipboard.write(this.props.currentElectronVersion) } handleChromeVersionClick (e) { e.preventDefault() atom.clipboard.write(this.props.currentChromeVersion) } handleNodeVersionClick (e) { e.preventDefault() atom.clipboard.write(this.props.currentNodeVersion) } handleReleaseNotesClick (e) { e.preventDefault() shell.openExternal(this.props.updateManager.getReleaseNotesURLForAvailableVersion()) } handleLicenseClick (e) { e.preventDefault() atom.commands.dispatch(atom.views.getView(atom.workspace), 'application:open-license') } handleTermsOfUseClick (e) { e.preventDefault() shell.openExternal('https://atom.io/terms') } handleHowToUpdateClick (e) { e.preventDefault() shell.openExternal('https://flight-manual.atom.io/getting-started/sections/installing-atom/') } handleShowMoreClick (e) { e.preventDefault() var showMoreDiv = document.querySelector('.show-more') var showMoreText = document.querySelector('.about-more-expand') switch (showMoreText.textContent) { case 'Show more': showMoreDiv.classList.toggle('hidden') showMoreText.textContent = 'Hide' break case 'Hide': showMoreDiv.classList.toggle('hidden') showMoreText.textContent = 'Show more' break } } render () { return $.div({className: 'pane-item native-key-bindings about'}, $.div({className: 'about-container'}, $.header({className: 'about-header'}, $.a({className: 'about-atom-io', href: 'https://atom.io'}, $(AtomLogo) ), $.div({className: 'about-header-info'}, $.span({className: 'about-version-container inline-block atom', onclick: this.handleAtomVersionClick.bind(this)}, $.span({className: 'about-version'}, `${this.props.currentAtomVersion} ${process.arch}`), $.span({className: 'icon icon-clippy about-copy-version'}) ), $.a({className: 'about-header-release-notes', onclick: this.handleReleaseNotesClick.bind(this)}, 'Release Notes') ), $.span({className: 'about-version-container inline-block show-more-expand', onclick: this.handleShowMoreClick.bind(this)}, $.span({className: 'about-more-expand'}, 'Show more') ), $.div({className: 'show-more hidden about-more-info'}, $.div({className: 'about-more-info'}, $.span({className: 'about-version-container inline-block electron', onclick: this.handleElectronVersionClick.bind(this)}, $.span({className: 'about-more-version'}, `Electron: ${this.props.currentElectronVersion} `), $.span({className: 'icon icon-clippy about-copy-version'}) ) ), $.div({className: 'about-more-info'}, $.span({className: 'about-version-container inline-block chrome', onclick: this.handleChromeVersionClick.bind(this)}, $.span({className: 'about-more-version'}, `Chrome: ${this.props.currentChromeVersion} `), $.span({className: 'icon icon-clippy about-copy-version'}) ) ), $.div({className: 'about-more-info'}, $.span({className: 'about-version-container inline-block node', onclick: this.handleNodeVersionClick.bind(this)}, $.span({className: 'about-more-version'}, `Node: ${this.props.currentNodeVersion} `), $.span({className: 'icon icon-clippy about-copy-version'}) ) ) ) ) ), $(UpdateView, { updateManager: this.props.updateManager, availableVersion: this.props.availableVersion, viewUpdateReleaseNotes: this.handleReleaseNotesClick.bind(this), viewUpdateInstructions: this.handleHowToUpdateClick.bind(this) }), $.div({className: 'about-actions group-item'}, $.div({className: 'btn-group'}, $.button({className: 'btn view-license', onclick: this.handleLicenseClick.bind(this)}, 'License'), $.button({className: 'btn terms-of-use', onclick: this.handleTermsOfUseClick.bind(this)}, 'Terms of Use') ) ), $.div({className: 'about-love group-start'}, $.span({className: 'icon icon-code'}), $.span({className: 'inline'}, ' with '), $.span({className: 'icon icon-heart'}), $.span({className: 'inline'}, ' by '), $.a({className: 'icon icon-logo-github', href: 'https://github.com'}) ), $.div({className: 'about-credits group-item'}, $.span({className: 'inline'}, 'And the awesome '), $.a({href: 'https://github.com/atom/atom/contributors'}, 'Atom Community') ) ) } serialize () { return { deserializer: this.constructor.name, uri: this.props.uri } } onDidChangeTitle () { return new Disposable() } onDidChangeModified () { return new Disposable() } getTitle () { return 'About' } getIconName () { return 'info' } }