Author: jruchaud Date: 2015-05-26 15:19:33 +0000 (Tue, 26 May 2015) New Revision: 1497 Url: http://forge.nuiton.org/projects/sandbox/repository/revisions/1497 Log: Create PrinterService Added: wit/js/services/PrinterService.js Removed: wit/js/utils/ Added: wit/js/services/PrinterService.js =================================================================== --- wit/js/services/PrinterService.js (rev 0) +++ wit/js/services/PrinterService.js 2015-05-26 15:19:33 UTC (rev 1497) @@ -0,0 +1,98 @@ +"use strict"; + +class Printer { + + constructor() { + this.contentFormatters = { + csv: this._getCSV.bind(this), + txt: this._getTXT.bind(this) + }; + } + + static get CSV() { + return "csv"; + } + + static get TXT() { + return "txt"; + } + + _getCSV() { + let result = ""; + + let nodes = document.querySelectorAll("tr"); + for (let r = 0, lr = nodes.length; r < lr; r++) { + let row = nodes[r].children; + + for (let c = 0, lc = row.length; c < lc; c++) { + let col = row[c]; + result += col.textContent + ";"; + } + result += "\n"; + } + + return result; + } + + _getTXT(logs) { + let result = ""; + + let dates = Object.keys(logs.data); + for (let date of dates) { + result += date + "\n--------\n"; + result += "\n" + this._getTXTRow(logs.tags, date, [], logs.data[date]) + "\n"; + } + + return result; + } + + _getTXTRow(existingTags, date, tags, tagObject) { + let r = ""; + + if (tagObject.duration) { + let filterTags = tags.filter(function(tag) { + return existingTags[tag]; + }); + + if (filterTags.length) { + r += tagObject.duration + " - " + filterTags.join(", ") + "\n"; + } + } + + let keys = Object.keys(tagObject); + for (let k of keys) { + if (k !== "diff" && k !== "duration") { + r += this._getTXTRow(existingTags, date, tags.concat(k), tagObject[k]); + } + } + + return r; + } + + clipboard(format, logs) { + let formatter = this.contentFormatters[format]; + + if (formatter) { + let content = formatter(logs); + + let gui = require("nw.gui"); + let clipboard = gui.Clipboard.get(); + + clipboard.set(content, "text"); + } + } + + mail(format, logs) { + let formatter = this.contentFormatters[format]; + + if (formatter) { + let content = formatter(logs); + content = content.replace(/\n/g, "%0A").replace(/;/g, "%3B").replace(/-/g, "%2D"); + + let link = "mailto:?body=" + content; + window.location.href = link; + } + } +} + +module.exports = Printer;
participants (1)
-
jruchaud@users.nuiton.org