Skip to content

Commit 341b5bd

Browse files
Merge pull request #149 from Kibibit/feature-support-images
[Feature] Support images 2
2 parents 89652f9 + 24cdf01 commit 341b5bd

File tree

11 files changed

+168
-20
lines changed

11 files changed

+168
-20
lines changed

app/models/fileService.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var dirTree = require('directory-tree'),
22
fs = require('fs'),
3+
util = require('util'),
34
mime = require('mime-types');
45
var console = require('./consoleService')('FILE CONTENT', ['blue', 'inverse']);
56

@@ -20,16 +21,24 @@ fileService.get = function(req, res) {
2021

2122
var showNoContent = false ||
2223
isFileOfType('zip') ||
23-
isFileOfType('program') ||
24-
isFileOfType('image') ||
25-
isFileOfType('font');
24+
isFileOfType('program');
2625

2726
// temprorary solution until we have a view selector on the FRONT-END
2827
if (showNoContent) {
2928
res.json({
3029
content: 'awww man... we can\'t show ' + mimeType + ' yet :-(',
3130
mimeType: 'text/text'
3231
});
32+
} else if (isFileOfType('image')) {
33+
console.info('image requested. Serving data URI');
34+
var dataUri = base64Image(fileFullPath);
35+
var file = {
36+
content: dataUri,
37+
mimeType: mimeType
38+
};
39+
res.json(file);
40+
} else if (isFileOfType('font')) {
41+
res.download(fileFullPath); // Set disposition and send it.
3342
} else {
3443
fs.readFile(fileFullPath, 'utf8', function(err, data) {
3544
if (err) {
@@ -119,7 +128,6 @@ fileService.putExtraArg = function(req, res) {
119128
message: 'For a hard save, 2nd param should be: True'
120129
});
121130
}
122-
123131
};
124132

125133
fileService.getFileTags = function(filepath) {
@@ -174,6 +182,11 @@ fileService.getFileTags = function(filepath) {
174182
return fileTags;
175183
};
176184

185+
function base64Image(src) {
186+
var data = fs.readFileSync(src).toString('base64');
187+
return util.format('data:%s;base64,%s', mime.lookup(src), data);
188+
}
189+
177190
function extraTypes(filepath) {
178191
if (filepath.indexOf('.') !== -1) {
179192
var extensionStart = filepath.lastIndexOf('.') + 1;

bower.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"json-formatter": "~0.5.0",
2121
"velocity": "~1.2.3",
2222
"ngclipboard": "~1.1.1",
23-
"ng-device-detector": "~3.0.1"
23+
"ng-device-detector": "~3.0.1",
24+
"viewerjs": "fengyuanchen/viewerjs#~0.4.0"
2425
},
2526
"resolutions": {
2627
"angular": "1.5.7"

public/app/components/codeEditor/codeEditor.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,16 +81,14 @@ angular.module('kibibitCodeEditor')
8181
onChange: vm.aceChanged
8282
};
8383

84-
vm.updateFileContent = function(filePath) {
85-
if (filePath !== '') {
86-
FileService.getFile(filePath, function(fileInfo) {
87-
vm.fileInfo = fileInfo.data;
88-
vm.code = vm.fileInfo.content;
89-
var fileMode = getModeFromMimeType(vm.fileInfo);
90-
editorSettings.syntaxMode = fileMode;
91-
vm.parsedJson = undefined;
92-
console.debug('changed mode to ' + fileMode);
93-
});
84+
vm.updateFileContent = function(fileObject) {
85+
if (fileObject) {
86+
vm.fileInfo = fileObject;
87+
vm.code = vm.fileInfo.content;
88+
var fileMode = getModeFromMimeType(vm.fileInfo);
89+
editorSettings.syntaxMode = fileMode;
90+
vm.parsedJson = undefined;
91+
console.debug('changed mode to ' + fileMode);
9492
}
9593
};
9694

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
angular.module('kibibitCodeEditor')
2+
3+
.directive('kbFullImageView', function() {
4+
return {
5+
scope: {},
6+
controller: 'fullImageViewController',
7+
controllerAs: 'fullImageViewCtrl',
8+
link: function(scope, element, attrs, fullImageViewCtrl) {
9+
fullImageViewCtrl.addFullImageView(element);
10+
11+
scope.$watch(function() {
12+
return element.attr('src');
13+
}, function() {
14+
if (fullImageViewCtrl.viewer) {
15+
fullImageViewCtrl.viewer.update();
16+
}
17+
});
18+
}
19+
};
20+
})
21+
22+
.controller('fullImageViewController', [
23+
function() {
24+
var vm = this;
25+
26+
vm.addFullImageView = function(element) {
27+
if (window.Viewer) {
28+
element.css({
29+
visibility: 'hidden'
30+
});
31+
// View one image
32+
vm.viewer = new Viewer(element[0], {
33+
inline: true,
34+
title: false,
35+
button: false,
36+
navbar: false
37+
});
38+
}
39+
};
40+
41+
}
42+
]);
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
angular.module('kibibitCodeEditor')
2+
3+
.directive('kbViewByFile', function() {
4+
return {
5+
scope: {},
6+
bindToController: {
7+
openFile: '=kbOpenFile'
8+
},
9+
controller: 'viewByFileController',
10+
controllerAs: 'viewByFileCtrl',
11+
templateUrl: 'app/components/viewByFile/viewByFileTemplate.html',
12+
link: function(scope, element, attrs, viewByFileCtrl) {
13+
scope.$watch('viewByFileCtrl.openFile', function(newOpenFile) {
14+
viewByFileCtrl.updateFileContent(newOpenFile);
15+
});
16+
}
17+
};
18+
})
19+
20+
.controller('viewByFileController', [
21+
'FileService',
22+
function(FileService) {
23+
var vm = this;
24+
25+
vm.updateFileContent = function(filePath) {
26+
if (filePath !== '') {
27+
FileService.getFile(filePath, function(fileInfo) {
28+
vm.fileInfo = fileInfo.data;
29+
vm.fileType = getFileTypeFromMimeType(vm.fileInfo.mimeType);
30+
vm.imageUri = vm.fileType === 'image' ? vm.fileInfo.content : undefined;
31+
});
32+
}
33+
};
34+
35+
function getFileTypeFromMimeType(mimeType) {
36+
if (mimeType.indexOf('image') !== -1) {
37+
return 'image';
38+
} else {
39+
return 'code';
40+
}
41+
}
42+
43+
}
44+
]);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<div class="view-by-file" ng-switch="viewByFileCtrl.fileType">
2+
<kb-code-editor kb-open-file="viewByFileCtrl.fileInfo" ng-switch-default></kb-code-editor>
3+
<div class="img-view-container" ng-switch-when="image">
4+
<img kb-full-image-view class="img-view" ng-src="{{ viewByFileCtrl.imageUri }}">
5+
</div>
6+
</div>

public/app/controllers/mainCtrl.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@ angular.module('kibibitCodeEditor')
44
'$scope',
55
'$http',
66
'ngDialog',
7-
'Fullscreen',
87
'SettingsService',
98
function(
109
$scope,
1110
$http,
1211
ngDialog,
13-
Fullscreen,
1412
SettingsService) {
1513

1614
var vm = this;

public/app/services/settingsService.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,14 @@ angular.module('kibibitCodeEditor')
198198
});
199199

200200
editorSettings.__defineSetter__('syntaxMode', function(newValue) {
201+
if (!settings.currentEditor) {
202+
return;
203+
}
204+
201205
var matchedMode = CODE_EDITOR.MODE_LIST.modesByName[newValue];
206+
matchedMode = matchedMode ?
207+
matchedMode :
208+
CODE_EDITOR.MODE_LIST.modesByName['text'];
202209

203210
console.assert(matchedMode, {
204211
'message': ERROR_MSGS
@@ -268,5 +275,5 @@ angular.module('kibibitCodeEditor')
268275
function currentFullscreenState() {
269276
return $(window).data('fullscreen-state');
270277
}
271-
272-
}]);
278+
}
279+
]);

public/app/views/home.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
<kb-zombify ng-model="main.zombify" ng-if="main.zombify"></kb-zombify>
2-
<kb-code-editor kb-open-file="main.openFile"></kb-code-editor>
2+
<kb-view-by-file kb-open-file="main.openFile"></kb-view-by-file>

public/app/views/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<link rel="stylesheet" type="text/css" href="assets/lib/bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.min.css"/>
2626
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.2.0/styles/default.min.css">
2727
<link rel="stylesheet" href="assets/lib/bower_components/angular-emoji/dist/emoji.min.css">
28+
<link rel="stylesheet" type="text/css" href="assets/lib/bower_components/viewerjs/dist/viewer.css">
2829
<link href='//goo.gl/QatcDl' rel='stylesheet' type='text/css'>
2930
<link rel="stylesheet" type="text/css" href="assets/css/style.css">
3031
</head>
@@ -115,6 +116,7 @@
115116
<script src="assets/lib/bower_components/angular-marked/dist/angular-marked.js"></script>
116117
<script src="assets/lib/highlight/highlight.pack.js"></script>
117118
<script src="assets/lib/bower_components/angular-emoji/dist/emoji.min.js"></script>
119+
<script type="text/javascript" src="assets/lib/bower_components/viewerjs/dist/viewer.js"></script>
118120

119121
<!-- Kibibit Code Editor -->
120122
<!-- Initialize -->
@@ -135,6 +137,8 @@
135137
<script type="text/javascript" src="app/components/errorView/errorView.js"></script>
136138
<script type="text/javascript" src="app/components/movingGears/movingGears.js"></script>
137139
<script type="text/javascript" src="app/components/zombify/zombify.js"></script>
140+
<script type="text/javascript" src="app/components/viewByFile/viewByFile.js"></script>
141+
<script type="text/javascript" src="app/components/fullImageView/fullImageView.js"></script>
138142
<!-- Services -->
139143
<!-- <script src="app/services/authService.js"></script> -->
140144
<script type="text/javascript" src="app/services/userService.js"></script>

0 commit comments

Comments
 (0)