mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
Added support for .PAL palettes
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
};
|
||||
})();
|
||||
@@ -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];
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
};
|
||||
})();
|
||||
35
src/js/service/palette/reader/AbstractPaletteFileReader.js
Normal file
35
src/js/service/palette/reader/AbstractPaletteFileReader.js
Normal 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();
|
||||
}
|
||||
};
|
||||
})();
|
||||
23
src/js/service/palette/reader/PaletteGplReader.js
Normal file
23
src/js/service/palette/reader/PaletteGplReader.js
Normal 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();
|
||||
};
|
||||
})();
|
||||
@@ -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();
|
||||
17
src/js/service/palette/reader/PalettePalReader.js
Normal file
17
src/js/service/palette/reader/PalettePalReader.js
Normal 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;
|
||||
};
|
||||
})();
|
||||
17
src/js/service/palette/reader/PaletteTxtReader.js
Normal file
17
src/js/service/palette/reader/PaletteTxtReader.js
Normal 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;
|
||||
};
|
||||
})();
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user