From e7bf5952d0729b37e677168b6e8fbd1ce58ed1a2 Mon Sep 17 00:00:00 2001 From: Pacien TRAN-GIRARD Date: Sun, 10 Aug 2014 17:28:37 +0200 Subject: First version --- point/data/renderSlide.js | 127 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 point/data/renderSlide.js (limited to 'point/data/renderSlide.js') diff --git a/point/data/renderSlide.js b/point/data/renderSlide.js new file mode 100644 index 0000000..e149f41 --- /dev/null +++ b/point/data/renderSlide.js @@ -0,0 +1,127 @@ +/* + * This file is part of "What's The Point" + * Copyright (C) 2014 Pacien TRAN-GIRARD + * + * "What's The Point" is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * "What's The Point" is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +define(function () { + + var renderSlide = { + + init: function () { + this.lastTitle = undefined; + }, + + appendNode: function (parent, tag, content, appendMethod) { + var node = document.createElement(tag); + appendMethod(node, content); + parent.appendChild(node); + return parent; + }, + + appendHtmlNode: function (parent, tag, htmlContent) { + return this.appendNode(parent, tag, htmlContent, function (parent, htmlContent) { + parent.innerHTML = htmlContent; + }); + }, + + appendObjectNode: function (parent, tag, node) { + return this.appendNode(parent, tag, node, function (parent, node) { + parent.appendChild(node); + }); + }, + + appendTextNode: function (parent, tag, text) { + return this.appendObjectNode(parent, tag, document.createTextNode(text)); + }, + + appendContentNode: function (parent, tag, content) { + if (typeof (content) === "string") { + this.appendHtmlNode(parent, tag, content); + } else { + this.appendObjectNode(parent, tag, content); + } + }, + + renderTitle: function (slideData) { + var title = slideData.title; + var subtitle = slideData.subtitle; + + if (title !== undefined) { + this.lastTitle = title; + } else { + if (subtitle !== undefined) { + title = this.lastTitle; + } else { + this.lastTitle = undefined; + } + } + + var titleNode; + if (title !== undefined || subtitle !== undefined) { + titleNode = document.createElement("s-title"); + } else { + titleNode = document.createDocumentFragment("s-title"); + } + + if (title !== undefined) { + this.appendTextNode(titleNode, "h1", title); + } + + if (subtitle !== undefined) { + this.appendTextNode(titleNode, "h2", subtitle); + } + + return titleNode; + }, + + renderBody: function (slideData) { + var bodyNode = document.createDocumentFragment(); + //var bodyNode = document.createElement("s-body"); + + if (slideData.content !== undefined) { + this.appendContentNode(bodyNode, "s-content", slideData.content); + } + + var notes = slideData.notes === undefined ? "" : slideData.notes; + this.appendContentNode(bodyNode, "s-notes", notes); + + return bodyNode; + }, + + renderSlide: function (slideData, index) { + var slide = document.createElement("p-slide"); + slide.setAttribute("id", index + 1); + slide.appendChild(this.renderTitle(slideData)); + slide.appendChild(this.renderBody(slideData)); + return slide; + }, + + renderSlides: function (slidesData) { + var slides = document.createDocumentFragment(); + for (var i = 0; i < slidesData.length; i++) { + slides.appendChild(this.renderSlide(slidesData[i], i)); + } + return slides; + }, + + render: function (slidesData, callback) { + callback(this.renderSlides(slidesData)); + }, + }; + + return renderSlide; + +}); -- cgit v1.2.3