Added support for .PAL palettes

This commit is contained in:
jdescottes
2014-09-30 00:58:15 +02:00
parent 243990a90f
commit dc4de32162
10 changed files with 104 additions and 97 deletions

View File

@@ -32,7 +32,7 @@
var file = files[i];
var isImage = file.type.indexOf('image') === 0;
var isPiskel = /\.piskel$/i.test(file.name);
var isPalette = /\.(gpl|txt)$/i.test(file.name);
var isPalette = /\.(gpl|txt|pal)$/i.test(file.name);
if (isImage) {
this.readImageFile_(file);
} else if (isPiskel) {

View File

@@ -1,50 +0,0 @@
(function () {
var ns = $.namespace('pskl.service.palette');
var RE_COLOR_LINE = /^(\s*\d{1,3})(\s*\d{1,3})(\s*\d{1,3})/;
var RE_EXTRACT_NAME = /^name\s*\:\s*(.*)$/i;
ns.PaletteGplReader = function (file, onSuccess, onError) {
this.file = file;
this.onSuccess = onSuccess;
this.onError = onError;
};
ns.PaletteGplReader.prototype.read = function () {
pskl.utils.FileUtils.readFile(this.file, this.onFileLoaded_.bind(this));
};
ns.PaletteGplReader.prototype.onFileLoaded_ = function (content) {
var text = pskl.utils.Base64.toText(content);
var lines = text.match(/[^\r\n]+/g);
var name = lines.map(function (l) {
var matches = l.match(RE_EXTRACT_NAME);
return matches ? matches[1] : '';
}).join('');
var colorLines = lines.filter(function (l) {
return RE_COLOR_LINE.test(l);
});
var colors = colorLines.map(function (l) {
var matches = l.match(RE_COLOR_LINE);
var color = window.tinycolor({
r : parseInt(matches[1], 10),
g : parseInt(matches[2], 10),
b : parseInt(matches[3], 10)
});
return color.toRgbString();
});
if (name && colors.length) {
var uuid = pskl.utils.Uuid.generate();
var palette = new pskl.model.Palette(uuid, name, colors);
this.onSuccess(palette);
} else {
this.onError();
}
};
})();

View File

@@ -2,8 +2,10 @@
var ns = $.namespace('pskl.service.palette');
var fileReaders = {
'gpl' : ns.PaletteGplReader,
'txt' : ns.PaletteTxtReader
'gpl' : ns.reader.PaletteGplReader,
'pal' : ns.reader.PalettePalReader,
'txt' : ns.reader.PaletteTxtReader,
'img' : ns.reader.PaletteImageReader
};
ns.PaletteImportService = function () {};
@@ -33,7 +35,7 @@
ns.PaletteImportService.prototype.getReaderClass_ = function (file) {
var readerClass;
if (this.isImage_(file)) {
readerClass = ns.PaletteImageReader;
readerClass = fileReaders.img;
} else {
var extension = this.getExtension_(file);
readerClass = fileReaders[extension];

View File

@@ -1,38 +0,0 @@
(function () {
var ns = $.namespace('pskl.service.palette');
var RE_COLOR_LINE = /^[A-F0-9]{2}([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})/;
ns.PaletteTxtReader = function (file, onSuccess, onError) {
this.file = file;
this.onSuccess = onSuccess;
this.onError = onError;
};
ns.PaletteTxtReader.prototype.read = function () {
pskl.utils.FileUtils.readFile(this.file, this.onFileLoaded_.bind(this));
};
ns.PaletteTxtReader.prototype.onFileLoaded_ = function (content) {
var text = pskl.utils.Base64.toText(content);
var lines = text.match(/[^\r\n]+/g);
var colorLines = lines.filter(function (l) {
return RE_COLOR_LINE.test(l);
});
var colors = colorLines.map(function (l) {
var matches = l.match(RE_COLOR_LINE);
var color = "#" + matches[1] + matches[2] + matches[3];
return color;
});
if (colors.length) {
var uuid = pskl.utils.Uuid.generate();
var palette = new pskl.model.Palette(uuid, 'Imported palette', colors);
this.onSuccess(palette);
} else {
this.onError();
}
};
})();

View File

@@ -0,0 +1,35 @@
(function () {
var ns = $.namespace('pskl.service.palette.reader');
ns.AbstractPaletteFileReader = function (file, onSuccess, onError, colorLineRegexp) {
this.file = file;
this.onSuccess = onSuccess;
this.onError = onError;
this.colorLineRegexp = colorLineRegexp;
};
ns.AbstractPaletteFileReader.prototype.extractColorFromLine = Constants.ABSTRACT_FUNCTION;
ns.AbstractPaletteFileReader.prototype.read = function () {
pskl.utils.FileUtils.readFile(this.file, this.onFileLoaded_.bind(this));
};
ns.AbstractPaletteFileReader.prototype.onFileLoaded_ = function (content) {
var text = pskl.utils.Base64.toText(content);
var lines = text.match(/[^\r\n]+/g);
var colorLines = lines.filter(function (l) {
return this.colorLineRegexp.test(l);
}.bind(this));
var colors = colorLines.map(this.extractColorFromLine.bind(this));
if (colors.length) {
var uuid = pskl.utils.Uuid.generate();
var palette = new pskl.model.Palette(uuid, this.file.name, colors);
this.onSuccess(palette);
} else {
this.onError();
}
};
})();

View File

@@ -0,0 +1,23 @@
(function () {
var ns = $.namespace('pskl.service.palette.reader');
var RE_COLOR_LINE = /^(\s*\d{1,3})(\s*\d{1,3})(\s*\d{1,3})/;
var RE_EXTRACT_NAME = /^name\s*\:\s*(.*)$/i;
ns.PaletteGplReader = function (file, onSuccess, onError) {
this.superclass.constructor.call(this, file, onSuccess, onError, RE_COLOR_LINE);
};
pskl.utils.inherit(ns.PaletteGplReader, ns.AbstractPaletteFileReader);
ns.PaletteGplReader.prototype.extractColorFromLine = function (line) {
var matches = line.match(RE_COLOR_LINE);
var color = window.tinycolor({
r : parseInt(matches[1], 10),
g : parseInt(matches[2], 10),
b : parseInt(matches[3], 10)
});
return color.toRgbString();
};
})();

View File

@@ -1,5 +1,5 @@
(function () {
var ns = $.namespace('pskl.service.palette');
var ns = $.namespace('pskl.service.palette.reader');
ns.PaletteImageReader = function (file, onSuccess, onError) {
this.file = file;
@@ -19,7 +19,6 @@
this.onWorkerStep_.bind(this),
this.onWorkerError_.bind(this));
$.publish(Events.SHOW_PROGRESS, [{"name": 'Processing image colors ...'}]);
imageProcessor.process();

View File

@@ -0,0 +1,17 @@
(function () {
var ns = $.namespace('pskl.service.palette.reader');
var RE_COLOR_LINE = /^(\d{1,3})\s+(\d{1,3})\s+(\d{1,3})/;
ns.PalettePalReader = function (file, onSuccess, onError) {
this.superclass.constructor.call(this, file, onSuccess, onError, RE_COLOR_LINE);
};
pskl.utils.inherit(ns.PalettePalReader, ns.AbstractPaletteFileReader);
ns.PalettePalReader.prototype.extractColorFromLine = function (line) {
var matches = line.match(RE_COLOR_LINE);
var color = 'rgb(' + matches[1] + ',' + matches[2] + ',' + matches[3] + ')';
return color;
};
})();

View File

@@ -0,0 +1,17 @@
(function () {
var ns = $.namespace('pskl.service.palette.reader');
var RE_COLOR_LINE = /^[A-F0-9]{2}([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})/;
ns.PaletteTxtReader = function (file, onSuccess, onError) {
this.superclass.constructor.call(this, file, onSuccess, onError, RE_COLOR_LINE);
};
pskl.utils.inherit(ns.PaletteTxtReader, ns.AbstractPaletteFileReader);
ns.PaletteTxtReader.prototype.extractColorFromLine = function (line) {
var matches = line.match(RE_COLOR_LINE);
var color = "#" + matches[1] + matches[2] + matches[3];
return color;
};
})();

View File

@@ -125,10 +125,12 @@
"js/service/color/ColorSorter.js",
"js/service/palette/CurrentColorsPalette.js",
"js/service/palette/PaletteService.js",
"js/service/palette/PaletteTxtReader.js",
"js/service/palette/PaletteGplReader.js",
"js/service/palette/PaletteGplWriter.js",
"js/service/palette/PaletteImageReader.js",
"js/service/palette/reader/AbstractPaletteFileReader.js",
"js/service/palette/reader/PaletteGplReader.js",
"js/service/palette/reader/PaletteImageReader.js",
"js/service/palette/reader/PalettePalReader.js",
"js/service/palette/reader/PaletteTxtReader.js",
"js/service/palette/PaletteImportService.js",
"js/service/SavedStatusService.js",
"js/service/keyboard/ShortcutService.js",