14 var logger = Logger('image.js');
18 // connected socket object
21 // the list of checked pakages
22 var checkedPackagesList;
24 // template for the URL
25 var URL_EXPORTS = '<%= url %>/exports';
28 var IMAGE_LOG = '<p><%= log %></p>';
29 var IMAGE_ITEM = '<li class="list-group-item image-item">' +
30 '<p class="image-list-name" title="<%= fileName %>"><%= fileName %></p>' +
31 '<p class="image-list-detail">Size: <%= fileSize %></p>' +
32 '<p class="image-list-detail">Updated: <%= fileTime %></p>' +
33 '<a class="image-list-btndownload" href="<%= hrefPath %>" date-name="<%= fileName %>" download="download">Download</a>' +
36 function _initSocket(socket) {
39 client.emit('ws/mic/available/from');
40 client.on('ws/mic/available/to', function (data) {
41 $('#tic-image-create').prop('disabled', !data);
44 client.on('ws/fs/image/list/to', function (data) {
45 var $imageList = $('#tic-image-list').empty();
46 _.forEach(data.list, function (file) {
47 var imageItem = _.template(IMAGE_ITEM)({
49 fileSize: Util.bytesToSize(file.size),
50 fileTime: new Date(file.birthtime).toLocaleString(),
51 hrefPath: '/api/fs/download/' + file.name
53 $imageList.append(imageItem);
57 client.on('ws/fs/image/add/to', function (data) {
58 var logItem = _.template(IMAGE_LOG)({
61 var $imageNewLog = $('#tic-image-new-log').append(logItem);
62 $imageNewLog.animate({ scrollTop : $imageNewLog.height() }, 'slow');
68 * manage the logs for file.
71 client.on('ws/fs/image/add/finish', function (data) {
72 var logItem = _.template(IMAGE_LOG)({
75 var $imageNewLog = $('#tic-image-new-log').append(logItem);
76 $imageNewLog.animate({ scrollTop : $imageNewLog.height() }, 'slow');
79 $('#tic-image-create').prop('disabled', false);
80 $('#tic-image-cancel').toggleClass('hidden', true);
82 // upate the list of images
87 function updateList() {
89 path: AppConfig.MIC.OUT_DIR
91 client.emit('ws/fs/image/list/from', msgData);
94 function updateSummary() {
95 var pacakgeImageSize = $('#tic-image-image-size').empty();
96 var packageImageInstalledSize = $('#tic-image-image-installed-size').empty();
97 var packageListBadge = $('#tic-image-package-list-badge').empty();
98 var packageList = $('#tic-image-package-list').empty();
100 checkedPackagesList = require('js/page/package').getCheckedPackages();
101 var count = _.size(checkedPackagesList);
102 var imageSize = _.sumBy(checkedPackagesList, function getImageSize(item) {
103 return _.toNumber(item.size);
105 var imageInstalledSize = _.sumBy(checkedPackagesList, function getImageInstalled(item) {
106 return _.toNumber(item.installed);
109 if (_.isNumber(imageSize)) {
110 pacakgeImageSize.html(Util.bytesToSize(imageSize));
112 if (_.isNumber(imageInstalledSize)) {
113 packageImageInstalledSize.html(Util.bytesToSize(imageInstalledSize));
115 if (_.isNumber(count)) {
116 packageListBadge.html(count);
118 if (!_.isEmpty(checkedPackagesList)) {
119 packageList.html(_.orderBy(_.map(checkedPackagesList, 'text')).join('<br>'));
122 $('#tic-image-create').prop('disabled', count === 0);
123 client.emit('ws/mic/available/from');
126 function confirmCreateImage() {
127 $('#tic-image-create').prop('disabled', true);
129 // when packages are checked nothing
130 if (_.isEmpty(checkedPackagesList)) {
134 function createImage(pathKsFile) {
135 $('#tic-image-new-log').empty();
138 * TODO - checks the msgData
141 pathKsFile: pathKsFile,
142 pathOutput: AppConfig.MIC.OUT_DIR
144 client.emit('ws/fs/image/add/from', msgData);
147 function getExportsUrl() {
148 return _.template(URL_EXPORTS)({
153 function getKickstartRecipeFile() {
158 packages: _.map(checkedPackagesList, 'name'),
159 output: AppConfig.TIC_CORE.KS_OUT_DIR
161 return Util.POST(getExportsUrl(), msgData)
162 .then(function (result) {
168 Util.showConfirmDialog('Are you sure want to create the image?')
170 $('#tic-image-cancel').toggleClass('hidden', false);
171 getKickstartRecipeFile()
173 .catch(function (err) {
175 Util.showAlertDialog('Failed to create a image.<br>Please check the ks file.');
176 $('#tic-image-create').prop('disabled', false);
177 $('#tic-image-cancel').toggleClass('hidden', true);
181 logger.info('Image creation was canceled.');
182 $('#tic-image-create').prop('disabled', false);
183 $('#tic-image-cancel').toggleClass('hidden', true);
188 * Initiation for the all widgets
190 function _initWidgets() {
192 $('#tic-image-create').prop('disabled', true).on('click', confirmCreateImage);
194 function _imageCreateCancel() {
195 client.emit('ws/fs/image/add/kill');
196 $(this).toggleClass('hidden', true);
198 $('#tic-image-cancel').on('click', _imageCreateCancel);
205 _initSocket(Util.getWebSocket());
208 .then(function (data) {
218 * Update summary in image page
219 * @method updateSummary
221 updateSummary: updateSummary,
224 * Update list in image page
227 updateList: updateList