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 file = files[i];
|
||||||
var isImage = file.type.indexOf('image') === 0;
|
var isImage = file.type.indexOf('image') === 0;
|
||||||
var isPiskel = /\.piskel$/i.test(file.name);
|
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) {
|
if (isImage) {
|
||||||
this.readImageFile_(file);
|
this.readImageFile_(file);
|
||||||
} else if (isPiskel) {
|
} 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 ns = $.namespace('pskl.service.palette');
|
||||||
|
|
||||||
var fileReaders = {
|
var fileReaders = {
|
||||||
'gpl' : ns.PaletteGplReader,
|
'gpl' : ns.reader.PaletteGplReader,
|
||||||
'txt' : ns.PaletteTxtReader
|
'pal' : ns.reader.PalettePalReader,
|
||||||
|
'txt' : ns.reader.PaletteTxtReader,
|
||||||
|
'img' : ns.reader.PaletteImageReader
|
||||||
};
|
};
|
||||||
|
|
||||||
ns.PaletteImportService = function () {};
|
ns.PaletteImportService = function () {};
|
||||||
@@ -33,7 +35,7 @@
|
|||||||
ns.PaletteImportService.prototype.getReaderClass_ = function (file) {
|
ns.PaletteImportService.prototype.getReaderClass_ = function (file) {
|
||||||
var readerClass;
|
var readerClass;
|
||||||
if (this.isImage_(file)) {
|
if (this.isImage_(file)) {
|
||||||
readerClass = ns.PaletteImageReader;
|
readerClass = fileReaders.img;
|
||||||
} else {
|
} else {
|
||||||
var extension = this.getExtension_(file);
|
var extension = this.getExtension_(file);
|
||||||
readerClass = fileReaders[extension];
|
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 () {
|
(function () {
|
||||||
var ns = $.namespace('pskl.service.palette');
|
var ns = $.namespace('pskl.service.palette.reader');
|
||||||
|
|
||||||
ns.PaletteImageReader = function (file, onSuccess, onError) {
|
ns.PaletteImageReader = function (file, onSuccess, onError) {
|
||||||
this.file = file;
|
this.file = file;
|
||||||
@@ -19,7 +19,6 @@
|
|||||||
this.onWorkerStep_.bind(this),
|
this.onWorkerStep_.bind(this),
|
||||||
this.onWorkerError_.bind(this));
|
this.onWorkerError_.bind(this));
|
||||||
|
|
||||||
|
|
||||||
$.publish(Events.SHOW_PROGRESS, [{"name": 'Processing image colors ...'}]);
|
$.publish(Events.SHOW_PROGRESS, [{"name": 'Processing image colors ...'}]);
|
||||||
|
|
||||||
imageProcessor.process();
|
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/color/ColorSorter.js",
|
||||||
"js/service/palette/CurrentColorsPalette.js",
|
"js/service/palette/CurrentColorsPalette.js",
|
||||||
"js/service/palette/PaletteService.js",
|
"js/service/palette/PaletteService.js",
|
||||||
"js/service/palette/PaletteTxtReader.js",
|
|
||||||
"js/service/palette/PaletteGplReader.js",
|
|
||||||
"js/service/palette/PaletteGplWriter.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/palette/PaletteImportService.js",
|
||||||
"js/service/SavedStatusService.js",
|
"js/service/SavedStatusService.js",
|
||||||
"js/service/keyboard/ShortcutService.js",
|
"js/service/keyboard/ShortcutService.js",
|
||||||
|
|||||||
Reference in New Issue
Block a user