Jump To …
README lib / psd / blend_mode.coffee lib / psd / channel_image.coffee lib / psd / color.coffee lib / psd / descriptor.coffee lib / psd / file.coffee lib / psd / header.coffee lib / psd / image.coffee lib / psd / image_export.coffee lib / psd / image_exports / png.coffee lib / psd / image_format.coffee lib / psd / image_formats / layer_raw.coffee lib / psd / image_formats / layer_rle.coffee lib / psd / image_formats / raw.coffee lib / psd / image_formats / rle.coffee lib / psd / image_mode.coffee lib / psd / image_modes / cmyk.coffee lib / psd / image_modes / greyscale.coffee lib / psd / image_modes / rgb.coffee lib / psd / init.coffee lib / psd / layer / blend_modes.coffee lib / psd / layer / blending_ranges.coffee lib / psd / layer / channel_image.coffee lib / psd / layer / helpers.coffee lib / psd / layer / info.coffee lib / psd / layer / mask.coffee lib / psd / layer / name.coffee lib / psd / layer / position_channels.coffee lib / psd / layer.coffee lib / psd / layer_info / blend_clipping_elements.coffee lib / psd / layer_info / blend_interior_elements.coffee lib / psd / layer_info / fill_opacity.coffee lib / psd / layer_info / gradient_fill.coffee lib / psd / layer_info / layer_id.coffee lib / psd / layer_info / layer_name_source.coffee lib / psd / layer_info / legacy_typetool.coffee lib / psd / layer_info / locked.coffee lib / psd / layer_info / metadata.coffee lib / psd / layer_info / nested_section_divider.coffee lib / psd / layer_info / object_effects.coffee lib / psd / layer_info / section_divider.coffee lib / psd / layer_info / solid_color.coffee lib / psd / layer_info / typetool.coffee lib / psd / layer_info / unicode_name.coffee lib / psd / layer_info / vector_mask.coffee lib / psd / layer_info / vector_origination.coffee lib / psd / layer_info / vector_stroke.coffee lib / psd / layer_info / vector_stroke_content.coffee lib / psd / layer_info.coffee lib / psd / layer_mask.coffee lib / psd / lazy_execute.coffee lib / psd / mask.coffee lib / psd / node.coffee lib / psd / nodes / ancestry.coffee lib / psd / nodes / build_preview.coffee lib / psd / nodes / group.coffee lib / psd / nodes / layer.coffee lib / psd / nodes / root.coffee lib / psd / nodes / search.coffee lib / psd / path_record.coffee lib / psd / resource.coffee lib / psd / resource_section.coffee lib / psd / resources / layer_comps.coffee lib / psd / resources.coffee lib / psd / util.coffee lib / psd.coffee shims / init.coffee shims / png.coffee

# root.coffee lib/psd/nodes/ |
--- | ---
¶ |
    _     = require 'lodash'
    Node  = require '../node.coffee'
    Group = require './group.coffee'
    Layer = require './layer.coffee'

    module.exports = class Root extends Node
      @layerForPsd: (psd) ->
        layer = {}
        layer[prop] = null for prop in Node.PROPERTIES

        layer.top = 0
        layer.left = 0
        layer.right = psd.header.width
        layer.bottom = psd.header.height
        layer

      type: 'root'

      constructor: (@psd) ->
        super Root.layerForPsd(@psd)
        @buildHeirarchy()

      documentDimensions: -> [
        @width,
        @height
      ]

      depth: -> 0
      opacity: -> 255
      fillOpacity: -> 255

      export: ->
        children: @_children.map((c) -> c.export())
        document:
          width: @width
          height: @height
          resources:
            layerComps: @psd.resources.resource('layerComps')?.export() or []
            guides: []
            slices: []

      buildHeirarchy: ->
        currentGroup = @
        parseStack = []

        for layer in @psd.layers
          if layer.isFolder()
            parseStack.push currentGroup
            currentGroup = new Group(layer, _.last(parseStack))
          else if layer.isFolderEnd()
            parent = parseStack.pop()
            parent.children().push currentGroup
            currentGroup = parent
          else
            currentGroup.children().push new Layer(layer, currentGroup)

        @updateDimensions()

generated Tue May 12 2015 11:00:56 GMT-0400 (EDT)