Skip to content

Instantly share code, notes, and snippets.

@kmod-midori
Created July 11, 2014 13:34
Show Gist options
  • Select an option

  • Save kmod-midori/97ac69714a283d469231 to your computer and use it in GitHub Desktop.

Select an option

Save kmod-midori/97ac69714a283d469231 to your computer and use it in GitHub Desktop.
// Generated by CoffeeScript 1.7.1
(function() {
var app, fs, gate, genBgList, genFgList, okay, _;
app = angular.module('MyApp', ['ui.router', 'ngProgress']);
fs = require('fs-extra');
_ = require('lodash');
okay = require('okay');
gate = require('gate');
app.directive('mycanvas', function() {
return {
restrict: 'E',
template: '<canvas width="1280" height="720" ng-click="$state.go(\'noSel\')" id="imgcanvas"></canvas>',
replace: true,
link: function(scope, elem, attrs) {
var drawCanvas;
drawCanvas = function() {
var bg, ctx, fg, g;
ctx = elem[0].getContext('2d');
fg = new Image();
bg = new Image();
bg.src = attrs.bgSrc;
fg.src = attrs.fgSrc;
g = gate.create();
fg.onload = g.latch();
bg.onload = g.latch();
return g.await(function() {
ctx.clearRect(0, 0, 1280, 720);
ctx.drawImage(bg, 0, 0);
return ctx.drawImage(fg, attrs.xpos, -70);
});
};
scope.$watch('fgimageSrc', function() {
return drawCanvas();
});
scope.$watch('bgimageSrc', function() {
return drawCanvas();
});
return scope.$watch('xpos', _.throttle(drawCanvas, 500));
}
};
});
genFgList = function($q) {
var deferred, ok;
deferred = $q.defer();
ok = _.partial(okay, function(err) {
return deferred.reject(err);
});
fs.readdir('img/fgimage', ok(function(files) {
var f, g, _i, _len;
deferred.notify(25);
g = gate.create();
for (_i = 0, _len = files.length; _i < _len; _i++) {
f = files[_i];
fs.stat('img/fgimage/' + f, g.latch({
data: 1,
name: g.val(f)
}));
}
return g.await(ok(function(stats, g) {
var dir, _j, _len1;
deferred.notify(50);
stats = _.filter(stats, function(stat) {
return stat.data.isDirectory();
});
for (_j = 0, _len1 = stats.length; _j < _len1; _j++) {
dir = stats[_j];
fs.readdir('img/fgimage/' + dir.name, g.latch(dir.name, 1));
}
return g.await(ok(function(files) {
var k, pics, v;
deferred.notify(75);
files = (function() {
var _results;
_results = [];
for (k in files) {
v = files[k];
pics = v.filter(function(f) {
return require('path').extname(f) === '.png';
});
if (pics.length === 0) {
continue;
}
_results.push({
dir: k,
pics: pics
});
}
return _results;
})();
return deferred.resolve(files);
}));
}));
}));
return deferred.promise;
};
genBgList = function($q) {
var deferred, ok;
deferred = $q.defer();
ok = _.partial(okay, function(err) {
return deferred.reject(err);
});
fs.readdir('img/bgimage', ok(function(files) {
return deferred.resolve(files.filter(function(f) {
return require('path').extname(f) === '.png';
}));
}));
return deferred.promise;
};
app.config(function($stateProvider, $urlRouterProvider, $compileProvider) {
$compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|app):/);
$stateProvider.state('noSel', {
template: '',
url: '/index'
});
$stateProvider.state('fgDir', {
url: '/fgdir',
templateUrl: 'partial/fgDir.html',
controller: function($scope, $q, ngProgress, $state, $rootScope) {
$scope.goToDir = function(dir) {
$rootScope.currDir = dir;
return $state.go('fgImg');
};
ngProgress.color('blue');
return genFgList($q).then(function(dirs) {
ngProgress.color('green');
ngProgress.complete();
return $scope.dirs = dirs;
}).then(null, null, function(stat) {
return ngProgress.set(stat);
})["catch"](function(err) {
ngProgress.color('red');
return setTimeout(function() {
alert(err.message);
ngProgress.reset();
return $state.go('noSel');
}, 700);
});
}
}).state('fgImg', {
url: '/fgimg',
templateUrl: 'partial/fgImg.html',
controller: function($scope, $rootScope) {
return $scope.setFg = function(dir, file) {
$rootScope.fgimage = {
dir: dir,
file: file
};
return $rootScope.fgimageSrc = 'app://host/img/fgimage/' + dir + '/' + file;
};
}
});
return $stateProvider.state('bgImg', {
url: '/bgimg',
templateUrl: 'partial/bgImg.html',
controller: function($scope, $q, $state, $rootScope) {
$scope.setBg = function(file) {
$rootScope.bgimage = file;
return $rootScope.bgimageSrc = 'app://host/img/bgimage/' + file;
};
return genBgList($q).then(function(imgs) {
return $scope.imgs = imgs;
})["catch"](function(err) {
return setTimeout(function() {
alert(err.message);
return $state.go('noSel');
}, 700);
});
}
});
});
app.run(function($rootScope, $state, $stateParams, ngProgress) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
$rootScope.bgimage = 'img13b.png';
$rootScope.bgimageSrc = 'app://host/img/bgimage/img13b.png';
$rootScope.fgimage = {
dir: 'pab1',
file: '2.png'
};
$rootScope.fgimageSrc = 'app://host/img/fgimage/pab1/2.png';
$rootScope.xpos = 105;
$rootScope.saveImg = function() {
var buf, canvas, e, fname;
ngProgress.color('blue');
ngProgress.start();
canvas = document.getElementById('imgcanvas');
buf = new Buffer(canvas.toDataURL('image/png').substr('data:image/png;base64,'.length), 'base64');
fname = 'saved/' + $rootScope.bgimage.slice(0, -4) + '+' + $rootScope.fgimage.dir + '-' + $rootScope.fgimage.file.slice(0, -4) + '@' + $rootScope.xpos + '.png';
try {
fs.writeFileSync(fname, buf);
return setTimeout(function() {
ngProgress.color('green');
ngProgress.set(99);
return ngProgress.complete();
}, 500);
} catch (_error) {
e = _error;
ngProgress.color('red');
return setTimeout(function() {
alert(e.message);
return ngProgress.reset();
}, 700);
}
};
return $state.go('noSel');
});
}).call(this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment