diff --git a/src/js/service/FileDropperService.js b/src/js/service/FileDropperService.js index 5bc2a3c3..94c94df6 100644 --- a/src/js/service/FileDropperService.js +++ b/src/js/service/FileDropperService.js @@ -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) { diff --git a/src/js/service/palette/PaletteGplReader.js b/src/js/service/palette/PaletteGplReader.js deleted file mode 100644 index 76173859..00000000 --- a/src/js/service/palette/PaletteGplReader.js +++ /dev/null @@ -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(); - } - - }; -})(); \ No newline at end of file diff --git a/src/js/service/palette/PaletteImportService.js b/src/js/service/palette/PaletteImportService.js index fe618dac..0b954c5b 100644 --- a/src/js/service/palette/PaletteImportService.js +++ b/src/js/service/palette/PaletteImportService.js @@ -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]; diff --git a/src/js/service/palette/PaletteTxtReader.js b/src/js/service/palette/PaletteTxtReader.js deleted file mode 100644 index ee7dcf66..00000000 --- a/src/js/service/palette/PaletteTxtReader.js +++ /dev/null @@ -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(); - } - }; -})(); \ No newline at end of file diff --git a/src/js/service/palette/reader/AbstractPaletteFileReader.js b/src/js/service/palette/reader/AbstractPaletteFileReader.js new file mode 100644 index 00000000..1ef4be99 --- /dev/null +++ b/src/js/service/palette/reader/AbstractPaletteFileReader.js @@ -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(); + } + }; +})(); \ No newline at end of file diff --git a/src/js/service/palette/reader/PaletteGplReader.js b/src/js/service/palette/reader/PaletteGplReader.js new file mode 100644 index 00000000..c1384de8 --- /dev/null +++ b/src/js/service/palette/reader/PaletteGplReader.js @@ -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(); + }; +})(); \ No newline at end of file diff --git a/src/js/service/palette/PaletteImageReader.js b/src/js/service/palette/reader/PaletteImageReader.js similarity index 96% rename from src/js/service/palette/PaletteImageReader.js rename to src/js/service/palette/reader/PaletteImageReader.js index d96b66ea..f5953bc9 100644 --- a/src/js/service/palette/PaletteImageReader.js +++ b/src/js/service/palette/reader/PaletteImageReader.js @@ -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(); diff --git a/src/js/service/palette/reader/PalettePalReader.js b/src/js/service/palette/reader/PalettePalReader.js new file mode 100644 index 00000000..54f1ea67 --- /dev/null +++ b/src/js/service/palette/reader/PalettePalReader.js @@ -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; + }; +})(); \ No newline at end of file diff --git a/src/js/service/palette/reader/PaletteTxtReader.js b/src/js/service/palette/reader/PaletteTxtReader.js new file mode 100644 index 00000000..33349b8f --- /dev/null +++ b/src/js/service/palette/reader/PaletteTxtReader.js @@ -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; + }; +})(); \ No newline at end of file diff --git a/src/piskel-script-list.js b/src/piskel-script-list.js index 1e9e38cb..9f1a8bef 100644 --- a/src/piskel-script-list.js +++ b/src/piskel-script-list.js @@ -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",