diff --git a/app/app.js b/app/app.js
index 42e61bed4..d9a48daf6 100644
--- a/app/app.js
+++ b/app/app.js
@@ -1,4 +1,4 @@
-angular.module('dockerui', ['dockerui.templates', 'ngRoute', 'dockerui.services', 'dockerui.filters', 'masthead', 'footer', 'dashboard', 'container', 'containers', 'containersNetwork', 'images', 'image', 'startContainer', 'sidebar', 'info', 'builder', 'containerLogs', 'containerTop', 'events'])
+angular.module('dockerui', ['dockerui.templates', 'ngRoute', 'dockerui.services', 'dockerui.filters', 'masthead', 'footer', 'dashboard', 'container', 'containers', 'containersNetwork', 'images', 'image', 'pullImage', 'startContainer', 'sidebar', 'info', 'builder', 'containerLogs', 'containerTop', 'events'])
.config(['$routeProvider', function ($routeProvider) {
'use strict';
$routeProvider.when('/', {
diff --git a/app/components/images/images.html b/app/components/images/images.html
index a2c68053e..bb3ab40c2 100644
--- a/app/components/images/images.html
+++ b/app/components/images/images.html
@@ -1,5 +1,5 @@
-
+
Images:
@@ -10,6 +10,7 @@
Remove
+ Pull
diff --git a/app/components/pullImage/pullImage.html b/app/components/pullImage/pullImage.html
new file mode 100644
index 000000000..9599fbe0d
--- /dev/null
+++ b/app/components/pullImage/pullImage.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+ {{ error }}
+
+
+
+
+
diff --git a/app/components/pullImage/pullImageController.js b/app/components/pullImage/pullImageController.js
new file mode 100644
index 000000000..04ca4d5ab
--- /dev/null
+++ b/app/components/pullImage/pullImageController.js
@@ -0,0 +1,49 @@
+angular.module('pullImage', [])
+ .controller('PullImageController', ['$scope', '$log', 'Dockerfile', 'Messages', 'Image', 'ViewSpinner',
+ function($scope, $log, Dockerfile, Messages, Image, ViewSpinne) {
+ $scope.template = 'app/components/pullImage/pullImage.html';
+
+ $scope.config = {
+ registry: '',
+ repo: '',
+ fromImage: '',
+ tag: 'latest'
+ }
+
+ function failedRequestHandler(e, Messages) {
+ Messages.error('Error', errorMsgFilter(e));
+ }
+
+ $scope.pull = function() {
+ $('#error-message').hide();
+ var config = angular.copy($scope.config);
+ var imageName = (config.registry ? config.registry + '/' : '' ) +
+ (config.repo ? config.repo + '/' : '') +
+ (config.fromImage) +
+ (config.tag ? ':' + config.tag : '');
+
+ ViewSpinner.spin();
+ Image.create(config, function(data) {
+ ViewSpinner.stop();
+ if (data.constructor === Array) {
+ var f = data.length > 0 && data[data.length-1].hasOwnProperty('error');
+ //check for error
+ if (f) {
+ var d = data[data.length - 1];
+ $scope.error = "Cannot pull image " + imageName + " Reason: " + d.error;
+ $('#error-message').show();
+ } else {
+ Messages.send("Image Added", imageName);
+ $('#pull-modal').modal('hide');
+ }
+ } else {
+ Messages.send("Image Added", imageName);
+ $('#pull-modal').modal('hide');
+ }
+ }, function(e) {
+ ViewSpinner.stop();
+ $scope.error = "Cannot pull image " + imageName + " Reason: " + e.data;
+ $('#error-message').show();
+ });
+ }
+ }]);
diff --git a/app/shared/services.js b/app/shared/services.js
index ad5f0de52..a996e20cf 100644
--- a/app/shared/services.js
+++ b/app/shared/services.js
@@ -79,7 +79,11 @@ angular.module('dockerui.services', ['ngResource'])
get: {method: 'GET', params: {action: 'json'}},
search: {method: 'GET', params: {action: 'search'}},
history: {method: 'GET', params: {action: 'history'}, isArray: true},
- create: {method: 'POST', params: {action: 'create'}},
+ create: {method: 'POST', isArray: true, transformResponse: [function f(data) {
+ var str = data.replace(/\n/g, " ").replace(/\}\W*\{/g, "}, {");
+ return angular.fromJson("[" + str + "]");
+ }],
+ params: {action: 'create', fromImage: '@fromImage', repo: '@repo', tag: '@tag', registry: '@registry'}},
insert: {method: 'POST', params: {id: '@id', action: 'insert'}},
push: {method: 'POST', params: {id: '@id', action: 'push'}},
tag: {method: 'POST', params: {id: '@id', action: 'tag', force: 0, repo: '@repo'}},