Jump To …
READMElib / psd / blend_mode.coffeelib / psd / channel_image.coffeelib / psd / color.coffeelib / psd / descriptor.coffeelib / psd / file.coffeelib / psd / header.coffeelib / psd / image.coffeelib / psd / image_export.coffeelib / psd / image_exports / png.coffeelib / psd / image_format.coffeelib / psd / image_formats / layer_raw.coffeelib / psd / image_formats / layer_rle.coffeelib / psd / image_formats / raw.coffeelib / psd / image_formats / rle.coffeelib / psd / image_mode.coffeelib / psd / image_modes / cmyk.coffeelib / psd / image_modes / greyscale.coffeelib / psd / image_modes / rgb.coffeelib / psd / init.coffeelib / psd / layer / blend_modes.coffeelib / psd / layer / blending_ranges.coffeelib / psd / layer / channel_image.coffeelib / psd / layer / helpers.coffeelib / psd / layer / info.coffeelib / psd / layer / mask.coffeelib / psd / layer / name.coffeelib / psd / layer / position_channels.coffeelib / psd / layer.coffeelib / psd / layer_info / blend_clipping_elements.coffeelib / psd / layer_info / blend_interior_elements.coffeelib / psd / layer_info / fill_opacity.coffeelib / psd / layer_info / gradient_fill.coffeelib / psd / layer_info / layer_id.coffeelib / psd / layer_info / layer_name_source.coffeelib / psd / layer_info / legacy_typetool.coffeelib / psd / layer_info / locked.coffeelib / psd / layer_info / metadata.coffeelib / psd / layer_info / nested_section_divider.coffeelib / psd / layer_info / object_effects.coffeelib / psd / layer_info / section_divider.coffeelib / psd / layer_info / solid_color.coffeelib / psd / layer_info / typetool.coffeelib / psd / layer_info / unicode_name.coffeelib / psd / layer_info / vector_mask.coffeelib / psd / layer_info / vector_origination.coffeelib / psd / layer_info / vector_stroke.coffeelib / psd / layer_info / vector_stroke_content.coffeelib / psd / layer_info.coffeelib / psd / layer_mask.coffeelib / psd / lazy_execute.coffeelib / psd / mask.coffeelib / psd / node.coffeelib / psd / nodes / ancestry.coffeelib / psd / nodes / build_preview.coffeelib / psd / nodes / group.coffeelib / psd / nodes / layer.coffeelib / psd / nodes / root.coffeelib / psd / nodes / search.coffeelib / psd / path_record.coffeelib / psd / resource.coffeelib / psd / resource_section.coffeelib / psd / resources / layer_comps.coffeelib / psd / resources.coffeelib / psd / util.coffeelib / psd.coffeeshims / init.coffeeshims / 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:08:14 GMT-0400 (EDT)