diff --git a/src/routes.json b/src/routes.json index 49adc172d..ef64a6b38 100644 --- a/src/routes.json +++ b/src/routes.json @@ -168,8 +168,8 @@ }, { "name": "download", - "pattern": "^/scratch2download/", - "routeAlias": "/scratch2download/?$", + "pattern": "^/download/", + "routeAlias": "/download/?$", "view": "download/download", "title": "Scratch Offline Editor" }, @@ -252,6 +252,12 @@ "routeAlias": "/explore(?!/ajax)", "redirect": "/explore/studios/all" }, + { + "name": "download-redirect", + "pattern": "^/scratch2download/?$", + "routeAlias": "/scratch2download", + "view": "/download" + }, { "name": "microworld-art", "pattern": "^/microworlds/art", diff --git a/src/views/download/download.jsx b/src/views/download/download.jsx index 1a6cffad3..a80447e03 100644 --- a/src/views/download/download.jsx +++ b/src/views/download/download.jsx @@ -4,6 +4,7 @@ var render = require('../../lib/render.jsx'); var FormattedHTMLMessage = require('react-intl').FormattedHTMLMessage; var FormattedMessage = require('react-intl').FormattedMessage; +var api = require('../../lib/api'); var Page = require('../../components/page/www/page.jsx'); var TitleBanner = require('../../components/title-banner/title-banner.jsx'); var FlexRow = require('../../components/flex-row/flex-row.jsx'); @@ -14,7 +15,33 @@ require('../../components/forms/button.scss'); var Download = React.createClass({ type: 'Download', + getInitialState: function () { + return { + swfVersion: '456.0.3' + }; + }, + componentDidMount: function () { + api({ + host: '', + uri: '/scratchr2/static/sa/version.xml', + responseType: 'string' + }, function (err, body) { + if (err) return; + + var doc = new DOMParser().parseFromString(body, 'text/xml'); + return this.setState({ + swfVersion: doc.getElementsByTagName('versionNumber')[0].childNodes[0].nodeValue + }); + }.bind(this)); + }, render: function () { + var downloadUrls = { + mac: '/scratchr2/static/sa/Scratch-'+ this.state.swfVersion + '.dmg', + mac105: '/scratchr2/static/sa/Scratch-'+ this.state.swfVersion + '.air', + windows: '/scratchr2/static/sa/Scratch-'+ this.state.swfVersion + '.exe', + linux: '/scratchr2/static/sa/Scratch-'+ this.state.swfVersion + '.air' + }; + return ( <div className="download"> <TitleBanner className="masthead"> @@ -95,25 +122,25 @@ var Download = React.createClass({ <ul className="installation-downloads"> <li className="installation-downloads-item"> <FormattedMessage id='download.macOSX' /> - - {' '}<a href="http://get.adobe.com/air/"> + {' '}<a href={downloadUrls.mac}> <FormattedMessage id='download.download' /> </a> </li> <li className="installation-downloads-item"> <FormattedMessage id='download.macOlder' /> - - {' '}<a href="http://airdownload.adobe.com/air/mac/download/2.6/AdobeAIR.zip"> + {' '}<a href={downloadUrls.mac105}> <FormattedMessage id='download.download' /> </a> </li> <li className="installation-downloads-item"> <FormattedMessage id='download.windows' /> - - {' '}<a href="http://get.adobe.com/air/"> + {' '}<a href={downloadUrls.windows}> <FormattedMessage id='download.download' /> </a> </li> <li className="installation-downloads-item"> <FormattedMessage id='download.linux' /> - - {' '}<a href="http://airdownload.adobe.com/air/lin/download/2.6/AdobeAIRInstaller.bin"> + {' '}<a href={downloadUrls.linux}> <FormattedMessage id='download.download' /> </a> </li> @@ -150,7 +177,14 @@ var Download = React.createClass({ <span className="nav-spacer"></span> <h2><FormattedMessage id='download.updatesTitle' /></h2> <p><FormattedMessage id='download.updatesBody' /></p> - <p><FormattedMessage id='download.currentVersion' /></p> + <p> + <FormattedMessage + id='download.currentVersion' + values={{ + version: this.state.swfVersion + }} + /> + </p> </section> <section id="other"> diff --git a/src/views/download/l10n.json b/src/views/download/l10n.json index f9f69db90..63910a7ee 100644 --- a/src/views/download/l10n.json +++ b/src/views/download/l10n.json @@ -19,7 +19,7 @@ "download.scratchCards": "Scratch Cards", "download.updatesTitle": "Updates", "download.updatesBody": "The Offline Editor can update itself (with user permission). It will check for updates at startup or you can use the \"Check for updates\" command in the file menu.", - "download.currentVersion": "The current version is 454.", + "download.currentVersion": "The current version is {version}.", "download.otherVersionsTitle": "Other Versions of Scratch", "download.otherVersionsOlder": "If you have an older computer, or cannot install the Scratch 2.0 offline editor, you can try installing <a href=\"http://scratch.mit.edu/scratch_1.4/\">Scratch 1.4</a>.", "download.otherVersionsAdmin": "If you are a network administrator: a Scratch 2.0 MSI has been created and maintained by a member of the community and hosted for public download <a href=\"http://llk.github.io/scratch-msi/\">here</a>.",