aboutsummaryrefslogtreecommitdiffstats
path: root/src/helpers.js
blob: f3f8f26109c3049e8610ea78d366bd994ce609a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// Convert dash-separated-string to camelCase
function camelCase(s) { 
  return s.toLowerCase().replace(/-(.)/g, function(m, g) {
    return g.toUpperCase()
  })
}

// Ensure to six-based hex 
function fullHex(hex) {
  return hex.length == 4 ?
    [ '#',
      hex.substring(1, 2), hex.substring(1, 2)
    , hex.substring(2, 3), hex.substring(2, 3)
    , hex.substring(3, 4), hex.substring(3, 4)
    ].join('') : hex
}

// Component to hex value
function compToHex(comp) {
  var hex = comp.toString(16)
  return hex.length == 1 ? '0' + hex : hex
}

// Calculate proportional width and height values when necessary
function proportionalSize(box, width, height) {
  if (width == null || height == null) {
    if (height == null)
      height = box.height / box.width * width
    else if (width == null)
      width = box.width / box.height * height
  }
  
  return {
    width:  width
  , height: height
  }
}

// Calculate position according to from and to
function at(o, pos) {
  /* number recalculation (don't bother converting to SVG.Number for performance reasons) */
  return typeof o.from == 'number' ?
    o.from + (o.to - o.from) * pos :
  
  /* instance recalculation */
  o instanceof SVG.Color || o instanceof SVG.Number ? o.at(pos) :
  
  /* for all other values wait until pos has reached 1 to return the final value */
  pos < 1 ? o.from : o.to
}

// PathArray Helpers
function arrayToString(a) {
  for (var i = 0, il = a.length, s = ''; i < il; i++) {
    s += a[i][0]

    if (a[i][1] != null) {
      s += a[i][1]

      if (a[i][2] != null) {
        s += ' '
        s += a[i][2]

        if (a[i][3] != null) {
          s += ' '
          s += a[i][3]
          s += ' '
          s += a[i][4]

          if (a[i][5] != null) {
            s += ' '
            s += a[i][5]
            s += ' '
            s += a[i][6]

            if (a[i][7] != null) {
              s += ' '
              s += a[i][7]
            }
          }
        }
      }
    }
  }
  
  return s + ' '
}

// Add more bounding box properties
function boxProperties(b) {
  b.x2 = b.x + b.width
  b.y2 = b.y + b.height
  b.cx = b.x + b.width / 2
  b.cy = b.y + b.height / 2
}

// Parse a matrix string
function parseMatrix(o) {
  if (o.matrix) {
    /* split matrix string */
    var m = o.matrix.replace(/\s/g, '').split(',')
    
    /* pasrse values */
    if (m.length == 6) {
      o.a = parseFloat(m[0])
      o.b = parseFloat(m[1])
      o.c = parseFloat(m[2])
      o.d = parseFloat(m[3])
      o.e = parseFloat(m[4])
      o.f = parseFloat(m[5])
    }
  }
  
  return o
}

// Get id from reference string
function idFromReference(url) {
  var m = url.toString().match(SVG.regex.reference)

  if (m) return m[1]
}