{"version":3,"names":["CloneDeepHTML","Rasterize","TemplatePreview","rasterizeHTML","pt","diffCSS","a","b","astyle","getComputedStyle","bstyle","css","i","length","name","item","match","getPropertyValue","shallowClone","obj","parent","root","node","constructor","parentElement","tagName","document","createTextNode","textContent","replace","lively4url","createElement","id","_shadowRootContentNode","SVGElement","createElementNS","Array","from","attributes","forEach","ea","setAttribute","value","e","console","log","shadowRoot","lively","showElement","style","beforeElementStyle","beforeContent","content","text","JSON","parse","warn","cssText","appendChild","deepCopyAsHTML","to","deepCopyAsHTMLFromTo","undefined","target","contentNode","childNodes","fromChild","toChild","trimCanvas","canvas","rowBlank","imageData","width","y","x","data","columnBlank","top","bottom","ctx","getContext","getImageData","height","left","right","trimmed","copy","ownerDocument","copyCtx","putImageData","elementToCanvas","element","zoom","bounds","getTotalClientBounds","extent","sleep","cloned","h","querySelector","setPosition","minExtent","Math","max","drawHTML","outerHTML","elementToDataURL","toDataURL","elementToURL","url","dataURL","files","copyURLtoURL","asImage","img","src","openAsImage","body","createPreview","templateName","Error","comp","Promise","race","openComponentInWindow","r","setTimeout","livelyExample","$morph","remove","windowTitle","then","position","imgData","fetch","blob","imgURL","method","error","generate","dry","urls","components","getTemplatePaths","dir","json","templates","contents","filter","previewUrl","existFile","stoped"],"sources":["rasterize.js"],"sourcesContent":["import rasterizeHTML from \"src/external/rasterizeHTML.js\"\nimport {pt} from \"src/client/graphics.js\"\n\n/* ## Workspace Snipped for interactive Testing\n\n```\n  import {CloneDeepHTML} from \"src/client/rasterize.js\"\n\n  $morph(\"Cloned\").innerHTML = \"\"\n  var cloned = CloneDeepHTML.deepCopyAsHTML($morph(\"Original\"))\n  $morph(\"Cloned\").appendChild(cloned)\n```\n*/\n\n// the rasterization code expects only plain HTML and cannot deal with shadow dom, so we flatten it away\nexport class CloneDeepHTML {\n\n  // computes the styles of a and b and prints the difference CSS\n  static diffCSS(a,b) {\n    var astyle = getComputedStyle(a)\n    var bstyle = getComputedStyle(b)\n    var css = \"\"\n    for(var i=0; i < astyle.length; i++) {\n      var name = astyle.item(i)\n      if (!name.match(\"-webkit\")) {\n        if (astyle.getPropertyValue(name) != bstyle.getPropertyValue(name)) {\n          css += name +\": \" + astyle.getPropertyValue(name) +\";\\n\"\n        }        \n      }\n    }\n    return css\n  }\n  \n  \n  static shallowClone(obj, parent, root) {\n    if (!obj) return;\n    var node\n    if (obj.constructor.name == \"Text\") {\n      if (obj.parentElement && obj.parentElement.tagName == \"STYLE\") {\n        // #Hack hot fix font-awesome styles...\n        node = document.createTextNode(obj.textContent.replace(/url\\('\\.\\.\\/fonts\\/fontawesome-webfont/g, \n          `url('${lively4url}/src/external/font-awesome/fonts/fontawesome-webfont`)) \n      } else {\n        node = document.createTextNode(obj.textContent) \n      }\n    } else if (obj.tagName == \"CONTENT\"){\n      node = document.createElement(\"div\")\n      node.id = \"CONTENTNODE\"\n      if (root) {\n        root._shadowRootContentNode = node\n      }      \n      return node\n    } else if (obj.tagName == \"STYLE\"){\n      node = document.createElement(\"style\")\n      \n      return node\n    } else if (obj instanceof SVGElement) {\n      // console.log(\"svg element \" + obj)\n      node = document.createElementNS(\"http://www.w3.org/2000/svg\", obj.tagName); \n      Array.from(obj.attributes).forEach(ea => {\n        try {\n          // console.log(\"attr \" + ea.name + \" \" + ea.value)\n          node.setAttribute(ea.name, ea.value)        \n        } catch(e) {\n          console.log('rasterize: could not write attribute ' + ea.name + \" from \" + obj)\n        }\n      })\n      return node\n    } else if ( obj.shadowRoot){\n      node = document.createElement(\"div\")\n    } else {\n      if (!obj.tagName) {\n        // comments...\n      } else{\n        node = document.createElement(obj.tagName);\n      }\n    }\n    if (obj.tagName == \"H1\") {\n      lively.showElement(obj)\n    }\n    \n    if (obj.attributes) {\n      Array.from(obj.attributes).forEach(ea => {\n        if (ea.name == \"style\") return;\n        try {\n          node[ea.name] = \"\" + ea.value        \n        } catch(e) {\n          console.log('rasterize: could not write attribute ' + ea.name + \" from \" + obj)\n        }\n      })\n      if (obj.style) {\n        node.style = this.diffCSS(obj, node)      \n      }\n      \n      var beforeElementStyle = getComputedStyle(obj, ':before')\n      var beforeContent = beforeElementStyle.content\n      if (beforeContent && beforeContent.length > 0 && beforeContent !== 'none') {\n        var text = document.createElement(\"span\")\n        \n        try {\n          text.textContent = \"\" + JSON.parse(beforeContent)\n        } catch(e) {\n          lively.warn('could not parse ' + beforeContent, e);\n        }\n        text.style  = beforeContent.cssText\n        node.appendChild(text)\n      }\n    }\n    if (obj.tagName == \"INPUT\") {\n      // weired... why are they not connected?\n      node.value = obj.value\n      node.setAttribute(\"value\", obj.value)\n    }\n    \n    return node\n  }\n\n  static deepCopyAsHTML(obj) {\n    var to = this.shallowClone(obj)\n    this.deepCopyAsHTMLFromTo(obj, to, undefined)\n    return to\n  }\n\n  static deepCopyAsHTMLFromTo(from, to, root) {\n    var target = to;\n    \n    if (from.shadowRoot) {\n      this.deepCopyAsHTMLFromTo(from.shadowRoot, to, from)\n      \n      var contentNode  = from._shadowRootContentNode\n      if (contentNode) {\n        target = contentNode;\n      }\n    }\n    \n    from.childNodes.forEach( fromChild => {\n      var toChild = this.shallowClone(fromChild, target, root);\n      if (toChild) {\n        target.appendChild(toChild);\n        this.deepCopyAsHTMLFromTo(fromChild, toChild, root);    \n      }\n    })\n  }\n}\n\n// var clone = CloneDeepHTML.deepCopyAsHTML(that)\n// $morph(\"result\").innerHTML = \"\"\n// $morph(\"result\").appendChild(clone)\n// $morph(\"showResult\").inspect(clone)\n\nexport default class Rasterize {  \n    // from: https://gist.github.com/timdown/021d9c8f2aabc7092df564996f5afbbf\n    static trimCanvas(canvas) {\n        function rowBlank(imageData, width, y) {\n            for (var x = 0; x < width; ++x) {\n                if (imageData.data[y * width * 4 + x * 4 + 3] !== 0) return false;\n            }\n            return true;\n        }\n\n        function columnBlank(imageData, width, x, top, bottom) {\n            for (var y = top; y < bottom; ++y) {\n                if (imageData.data[y * width * 4 + x * 4 + 3] !== 0) return false;\n            }\n            return true;\n        }\n\n        var ctx = canvas.getContext(\"2d\");\n        var width = canvas.width;\n        var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n        var top = 0, bottom = imageData.height, left = 0, right = imageData.width;\n\n        while (top < bottom && rowBlank(imageData, width, top)) ++top;\n        while (bottom - 1 > top && rowBlank(imageData, width, bottom - 1)) --bottom;\n        while (left < right && columnBlank(imageData, width, left, top, bottom)) ++left;\n        while (right - 1 > left && columnBlank(imageData, width, right - 1, top, bottom)) --right;\n\n        var trimmed = ctx.getImageData(left, top, right - left, bottom - top);\n        var copy = canvas.ownerDocument.createElement(\"canvas\");\n        var copyCtx = copy.getContext(\"2d\");\n        copy.width = trimmed.width;\n        copy.height = trimmed.height;\n        copyCtx.putImageData(trimmed, 0, 0);\n\n        return copy;\n    }\n  \n   static async elementToCanvas(element, zoom=1) {\n    // zoom = 2; // see   tmp.style.transform = \"scale(2)\" in (rc/client/html.js)\n    var bounds = lively.getTotalClientBounds(element)\n    var extent = pt(bounds.width, bounds.height)\n\n    await lively.sleep(100); // give the element some time to render...\n    \n    var cloned = CloneDeepHTML.deepCopyAsHTML(element)\n    \n    \n    var h = document.createElement(\"html\")\n    h.appendChild(document.createElement(\"body\"))\n    // var style = document.createElement(\"style\")\n    // style.textContent = await fetch(lively4url + \"/src/external/font-awesome/css/font-awesome.css\").then(r => r.text())\n    // h.appendChild(document.createElement(\"head\"))\n    // h.querySelector(\"head\").appendChild(style)\n    h.querySelector(\"body\").appendChild(cloned)\n\n    lively.setPosition(cloned, pt(0,0))\n    var canvas = document.createElement(\"canvas\")\n    var minExtent = pt(1,1);\n    canvas.width = Math.max(extent.x * zoom, minExtent.x);\n    canvas.height = Math.max(extent.y * zoom, minExtent.y);\n    await rasterizeHTML.drawHTML(h.outerHTML, canvas)\n    \n    canvas = this.trimCanvas(canvas)\n    return canvas\n  } \n\n  static async elementToDataURL(element, zoom) {\n    var canvas = await this.elementToCanvas(element, zoom)\n    return canvas.toDataURL(\"image/png\")\n  } \n\n  \n  static async elementToURL(element, url, zoom) {\n    var dataURL = await this.elementToDataURL(element, zoom)\n    return lively.files.copyURLtoURL(dataURL, url)\n  } \n  \n  static async asImage(element) {\n    var dataURL = await this.elementToDataURL(element)\n    var img = document.createElement(\"img\")\n    img.src = dataURL\n    return img\n  } \n  \n  static async openAsImage(element) {\n    var img = await this.asImage(element)\n    document.body.appendChild(img)\n    return img\n  } \n}\n\nexport class TemplatePreview {\n  \n  static async createPreview(url, templateName) {\n    if (!url) throw new Error(\"url argument missing\");\n    if (!templateName) throw new Error(\"templateName argument missing\");    \n    console.log(\"PREVIEW work on:\" + templateName)\n    try {\n      var comp = await Promise.race([\n        lively.openComponentInWindow(templateName),\n        new Promise(r => setTimeout(r, 4000))\n      ])\n      if (!comp) {\n        console.log(\"could not load component in time: \" + templateName)\n        return \n      }\n      \n      if (comp.livelyExample) {\n        await comp.livelyExample()\n      }\n      \n      var a = $morph(\"RasterImg\"); if(a) a.remove();\n      var img = await Rasterize.openAsImage(comp.windowTitle ? comp.parentElement : comp).then(img => {\n        img.id = \"RasterImg\"\n        img.style.width = (img.width * 1) + \"px\"\n        img.style.position = \"fixed\"\n        img.style.top  = \"0px\"\n        img.style.right  = \"0px\"\n        \n        return img\n      })\n      // img.remove()\n\n      var imgData = await fetch(img.src).then(r => r.blob())      \n      var imgURL = url + templateName + \".png\";\n      await fetch(imgURL, { method: \"PUT\", body: imgData})\n      console.log(\"PREVIEW wrote \" + imgURL)\n    } catch(e) {\n      console.error(e)\n    } finally {\n      if (comp && comp.parentElement) {\n        comp.parentElement.remove()  \n      }  \n    }\n    return imgURL\n  }\n  \n  static async generate(dry) {\n    let urls = lively.components.getTemplatePaths();\n    for(let url of urls) {\n      console.log(\"generate preview in: \" + url)\n      let dir = await fetch(url, {\n          method: \"OPTIONS\"\n        }).then( r => r.json())\n        let templates = dir.contents\n          .filter(ea => ea.name.match(/\\.html$/))\n        for(let ea of templates) {\n          let name = ea.name.replace(/\\.html$/,\"\")\n          let previewUrl = (url + name + \".png\")\n          try {\n            console.log(\"next \" + previewUrl)\n            if (! await lively.files.existFile(previewUrl)) {\n              if (TemplatePreview.stoped) return;\n              if (dry) {\n                console.warn(\"would generate \" + url)\n              } else {\n                try {\n                  await Promise.race([\n                    this.createPreview(url, name),\n                    new Promise(r => setTimeout(r, 6000))\n                  ])\n                } catch(e) {\n                  console.warn(\"GeneratePreview Errro: \" + e)\n                }\n              }\n            } else {\n              console.warn(\"Preview exists: \" + previewUrl)\n            }            \n          } catch(e) {\n            console.warn(\"Error when generating preview: \" + e)\n          }\n          \n        }\n      }      \n    }\n}\n\n\n// TemplatePreview.generate()\n\n// Rasterize.openAsImage(that)"],"mappings":"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"}