diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cd8ec49c3b..21febb49bd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,7 +20,8 @@ Before you file an issue or a pull request, read the following tips on how to ke ### Prerequisites for developing Kitematic on Mac You will need to install: - The [Docker Toolbox](https://docker.com/toolbox) -- [Node.js](https://nodejs.org/) +- [Node.js](https://nodejs.org/) +- Wine `brew install wine` (only if you want to generate a Windows release on OS X) - The latest Xcode from the Apple App Store. ### Prerequisites for developing Kitematic on Windows @@ -30,7 +31,6 @@ You will need to install: - Open a command prompt (`cmd`) and run the command `mkdir ~/AppData/Roaming/npm` - [Visual Studio 2013 Community](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) (or similar) - You do not need to install any optional packages during install. - [Python](https://www.python.org/downloads/release/python-2710/) -- [Temporary] Set the `DOCKER_TOOLBOX_INSTALL_PATH` environment variable as follows: ![Toolbox Env Var](https://cloud.githubusercontent.com/assets/251292/10656552/adaedb20-7834-11e5-8881-d5402d3fee37.png) diff --git a/Gruntfile.js b/Gruntfile.js index eba8dbb4b7..ee2afeadc6 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -20,25 +20,14 @@ module.exports = function (grunt) { }; var BASENAME = 'Kitematic'; - var APPNAME = BASENAME; - - if (alpha) { - APPNAME += ' (Alpha)'; - } else if (beta) { - APPNAME += ' (Beta)'; - } - + var OSX_APPNAME = BASENAME + ' (Beta)'; + var WINDOWS_APPNAME = BASENAME + ' (Alpha)'; var OSX_OUT = './dist'; - var OSX_OUT_X64 = OSX_OUT + '/' + APPNAME + '-darwin-x64'; - var OSX_FILENAME = OSX_OUT_X64 + '/' + APPNAME + '.app'; + var OSX_OUT_X64 = OSX_OUT + '/' + OSX_APPNAME + '-darwin-x64'; + var OSX_FILENAME = OSX_OUT_X64 + '/' + OSX_APPNAME + '.app'; grunt.initConfig({ IDENTITY: 'Developer ID Application: Docker Inc', - APPNAME: APPNAME, - APPNAME_ESCAPED: APPNAME.replace(/ /g, '\\ ').replace(/\(/g,'\\(').replace(/\)/g,'\\)'), - OSX_OUT: OSX_OUT, - OSX_OUT_ESCAPED: OSX_OUT.replace(/ /g, '\\ ').replace(/\(/g,'\\(').replace(/\)/g,'\\)'), - OSX_OUT_X64: OSX_OUT_X64, OSX_FILENAME: OSX_FILENAME, OSX_FILENAME_ESCAPED: OSX_FILENAME.replace(/ /g, '\\ ').replace(/\(/g,'\\(').replace(/\)/g,'\\)'), @@ -58,7 +47,7 @@ module.exports = function (grunt) { }, osx: { options: { - name: APPNAME, + name: OSX_APPNAME, dir: 'build/', out: 'dist', version: packagejson['electron-version'], @@ -85,8 +74,8 @@ module.exports = function (grunt) { 'version-string': { 'CompanyName': 'Docker', 'ProductVersion': packagejson.version, - 'ProductName': APPNAME, - 'FileDescription': APPNAME, + 'ProductName': WINDOWS_APPNAME, + 'FileDescription': WINDOWS_APPNAME, 'InternalName': BASENAME + '.exe', 'OriginalFilename': BASENAME + '.exe', 'LegalCopyright': 'Copyright 2015 Docker Inc. All rights reserved.' @@ -95,21 +84,6 @@ module.exports = function (grunt) { } }, - 'create-windows-installer': { - config: { - appDirectory: path.join(__dirname, 'dist/' + BASENAME + '-win32-x64'), - outputDirectory: path.join(__dirname, 'dist'), - authors: 'Docker Inc.', - loadingGif: 'util/loading.gif', - setupIcon: 'util/setup.ico', - iconUrl: 'https://raw.githubusercontent.com/kitematic/kitematic/master/util/kitematic.ico', - description: APPNAME, - title: APPNAME, - exe: BASENAME + '.exe', - version: packagejson.version - } - }, - // images copy: { dev: { @@ -269,12 +243,7 @@ module.exports = function (grunt) { }); grunt.registerTask('default', ['newer:babel', 'less', 'newer:copy:dev', 'shell:electron', 'watchChokidar']); - - if (process.platform === 'win32') { - grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron:windows', 'copy:windows', 'rcedit:exes', 'compress']); - } else { - grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron:osx', 'copy:osx', 'shell:sign', 'shell:zip']); - } + grunt.registerTask('release', ['clean:release', 'babel', 'less', 'copy:dev', 'electron', 'copy:osx', 'shell:sign', 'shell:zip', 'copy:windows', 'rcedit:exes', 'compress']); process.on('SIGINT', function () { grunt.task.run(['shell:electron:kill']); diff --git a/fonts/kitematic.eot b/fonts/kitematic.eot index 3bccd0f7fc..5f57382eed 100644 Binary files a/fonts/kitematic.eot and b/fonts/kitematic.eot differ diff --git a/fonts/kitematic.svg b/fonts/kitematic.svg index 717dfdef22..0d577b4207 100644 --- a/fonts/kitematic.svg +++ b/fonts/kitematic.svg @@ -7,25 +7,26 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/fonts/kitematic.ttf b/fonts/kitematic.ttf index 72bb395c5a..99254250b0 100644 Binary files a/fonts/kitematic.ttf and b/fonts/kitematic.ttf differ diff --git a/fonts/kitematic.woff b/fonts/kitematic.woff index 121ee6e711..af71b03b6d 100644 Binary files a/fonts/kitematic.woff and b/fonts/kitematic.woff differ diff --git a/package.json b/package.json index e1cf0cdfba..81342308da 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "mixpanel": "kitematic/mixpanel-node", "mkdirp": "^0.5.0", "node-uuid": "^1.4.3", + "numeral": "^1.5.3", "object-assign": "^4.0.1", "osx-release": "^1.1.0", "parseUri": "^1.2.3-2", diff --git a/src/components/ImageCard.react.js b/src/components/ImageCard.react.js index 6d77201f9f..a18420b16c 100644 --- a/src/components/ImageCard.react.js +++ b/src/components/ImageCard.react.js @@ -8,6 +8,7 @@ import containerActions from '../actions/ContainerActions'; import containerStore from '../stores/ContainerStore'; import tagStore from '../stores/TagStore'; import tagActions from '../actions/TagActions'; +import numeral from 'numeral'; var ImageCard = React.createClass({ mixins: [Router.Navigation], @@ -147,6 +148,8 @@ var ImageCard = React.createClass({ ); } + let favCount = (this.props.image.star_count < 1000) ? numeral(this.props.image.star_count).value() : numeral(this.props.image.star_count).format('0.0a').toUpperCase(); + let pullCount = (this.props.image.pull_count < 1000) ? numeral(this.props.image.pull_count).value() : numeral(this.props.image.pull_count).format('0a').toUpperCase(); return (
@@ -185,7 +188,9 @@ var ImageCard = React.createClass({
- {this.props.image.star_count} + {favCount} + + {pullCount}
diff --git a/src/utils/RegHubUtil.js b/src/utils/RegHubUtil.js index 4adf6db830..3bdc56a22e 100644 --- a/src/utils/RegHubUtil.js +++ b/src/utils/RegHubUtil.js @@ -137,7 +137,7 @@ module.exports = { // Get Orgs for user hubUtil.request({ url: `${REGHUB2_ENDPOINT}/user/orgs/`, - qs: { page_size: 50 } + qs: { page_size: 1000 } }, (orgError, orgResponse, orgBody) => { if (orgError) { repositoryServerActions.error({orgError}); @@ -178,7 +178,8 @@ module.exports = { async.map(namespaces, (namespace, cb) => { hubUtil.request({ - url: `${REGHUB2_ENDPOINT}/repositories/${namespace}` + url: `${REGHUB2_ENDPOINT}/repositories/${namespace}`, + qs: { page_size: 1000 } }, (error, response, body) => { if (error) { repositoryServerActions.error({error}); diff --git a/styles/icons.less b/styles/icons.less index de69405330..65f7f2e74e 100644 --- a/styles/icons.less +++ b/styles/icons.less @@ -35,8 +35,8 @@ text-transform: none !important; speak: none; line-height: 1; - //-webkit-font-smoothing: subpixel-antialiased; - -webkit-font-smoothing: antialiased; + -webkit-font-smoothing: subpixel-antialiased; + //-webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } @@ -103,3 +103,6 @@ .icon-edit:before { content: "o"; } +.icon-download:before { + content: "p"; +} diff --git a/styles/new-container.less b/styles/new-container.less index c84361a26d..7ca9247a3d 100644 --- a/styles/new-container.less +++ b/styles/new-container.less @@ -366,16 +366,20 @@ font-size: 11px; color: @gray-normal; border-right: 1px solid @color-divider; - padding: 1.1rem 1.2rem; + padding: 1.1rem 1rem; .icon { position: relative; font-size: 11px; - margin-right: 0.5rem; + margin-right: 0.3rem; color: @gray-normal; } + .icon-download { + margin-left: 0.5rem; + } .text { position: relative; top: -0.2rem; + margin-right: 0.3rem; } } .tags { @@ -400,10 +404,16 @@ } .more-menu { flex: 0 auto; - width: 39px; - padding: 0.4rem 1rem; + width: 30px; + padding: 0.4rem 0.5rem; font-size: 20px; .box-button(); + .box-button { + .icon { + font-size: 1.5rem; + margin-left: 0.2rem; + } + } } .action { flex: 0 auto;