whole_func_string: function CoverLayout(context, options) {
  
          //
          // Prepare
          //
          size = context.size;
          zOffset = options.zOffset;
          itemAngle = options.itemAngle;
          direction = context.direction;
          revDirection = direction ? 0 : 1;
          itemSize = options.itemSize || (size[direction] / 2);
          radialOpacity = (options.radialOpacity === undefined) ? 1 : options.radialOpacity;
  
          //
          // reset size & translation
          //
          set.opacity = 1;
          set.size[0] = size[0];
          set.size[1] = size[1];
          set.size[revDirection] = itemSize;
          set.size[direction] = itemSize;
          set.translate[0] = 0;
          set.translate[1] = 0;
          set.translate[2] = 0;
          set.rotate[0] = 0;
          set.rotate[1] = 0;
          set.rotate[2] = 0;
          set.scrollLength = itemSize;
  
          //
          // process next nodes
          //
          offset = context.scrollOffset;
          bound = (((Math.PI / 2) / itemAngle) * itemSize) + itemSize;
          while (offset <= bound) {
              node = context.next();
              if (!node) {
                  break;
              }
              if (offset >= -bound) {
                  set.translate[direction] = offset;
                  set.translate[2] = Math.abs(offset) > itemSize ? -zOffset : -(Math.abs(offset) * (zOffset / itemSize));
                  set.rotate[revDirection] = Math.abs(offset) > itemSize ? itemAngle : (Math.abs(offset) * (itemAngle / itemSize));
                  if (((offset > 0) && !direction) || ((offset < 0) && direction)) {
                      set.rotate[revDirection] = 0 - set.rotate[revDirection];
                  }
                  set.opacity = 1 - ((Math.abs(angle) / (Math.PI / 2)) * (1 - radialOpacity));
                  context.set(node, set);
              }
              offset += itemSize;
          }
  
          //
          // process previous nodes
          //
          offset = context.scrollOffset - itemSize;
          while (offset >= -bound) {
              node = context.prev();
              if (!node) {
                  break;
              }
              if (offset <= bound) {
                  set.translate[direction] = offset;
                  set.translate[2] = Math.abs(offset) > itemSize ? -zOffset : -(Math.abs(offset) * (zOffset / itemSize));
                  set.rotate[revDirection] = Math.abs(offset) > itemSize ? itemAngle : (Math.abs(offset) * (itemAngle / itemSize));
                  if (((offset > 0) && !direction) || ((offset < 0) && direction)) {
                      set.rotate[revDirection] = 0 - set.rotate[revDirection];
                  }
                  set.opacity = 1 - ((Math.abs(angle) / (Math.PI / 2)) * (1 - radialOpacity));
                  context.set(node, set);
              }
              offset -= itemSize;
          }
      }
func_code_string: function CoverLayout(context, options) {
  
          //
          // Prepare
          //
          size = context.size;
          zOffset = options.zOffset;
          itemAngle = options.itemAngle;
          direction = context.direction;
          revDirection = direction ? 0 : 1;
          itemSize = options.itemSize || (size[direction] / 2);
          radialOpacity = (options.radialOpacity === undefined) ? 1 : options.radialOpacity;
  
          //
          // reset size & translation
          //
          set.opacity = 1;
          set.size[0] = size[0];
          set.size[1] = size[1];
          set.size[revDirection] = itemSize;
          set.size[direction] = itemSize;
          set.translate[0] = 0;
          set.translate[1] = 0;
          set.translate[2] = 0;
          set.rotate[0] = 0;
          set.rotate[1] = 0;
          set.rotate[2] = 0;
          set.scrollLength = itemSize;
  
          //
          // process next nodes
          //
          offset = context.scrollOffset;
          bound = (((Math.PI / 2) / itemAngle) * itemSize) + itemSize;
          while (offset <= bound) {
              node = context.next();
              if (!node) {
                  break;
              }
              if (offset >= -bound) {
                  set.translate[direction] = offset;
                  set.translate[2] = Math.abs(offset) > itemSize ? -zOffset : -(Math.abs(offset) * (zOffset / itemSize));
                  set.rotate[revDirection] = Math.abs(offset) > itemSize ? itemAngle : (Math.abs(offset) * (itemAngle / itemSize));
                  if (((offset > 0) && !direction) || ((offset < 0) && direction)) {
                      set.rotate[revDirection] = 0 - set.rotate[revDirection];
                  }
                  set.opacity = 1 - ((Math.abs(angle) / (Math.PI / 2)) * (1 - radialOpacity));
                  context.set(node, set);
              }
              offset += itemSize;
          }
  
          //
          // process previous nodes
          //
          offset = context.scrollOffset - itemSize;
          while (offset >= -bound) {
              node = context.prev();
              if (!node) {
                  break;
              }
              if (offset <= bound) {
                  set.translate[direction] = offset;
                  set.translate[2] = Math.abs(offset) > itemSize ? -zOffset : -(Math.abs(offset) * (zOffset / itemSize));
                  set.rotate[revDirection] = Math.abs(offset) > itemSize ? itemAngle : (Math.abs(offset) * (itemAngle / itemSize));
                  if (((offset > 0) && !direction) || ((offset < 0) && direction)) {
                      set.rotate[revDirection] = 0 - set.rotate[revDirection];
                  }
                  set.opacity = 1 - ((Math.abs(angle) / (Math.PI / 2)) * (1 - radialOpacity));
                  context.set(node, set);
              }
              offset -= itemSize;
          }
      }
func_documentation_string: CoverLayout