code: function(callback) {
          var container = document.createElement('div');
          if (_isSvgUrl()) { // SVG Data URL to SVG Element
            container.innerHTML = _svgTextFromUrl();
            callback(container.children[0]);
            return;
          } else {
            self.editable(function(){
              _loadImage.call(self, self.url, function(img, err) {
                if (err) {
                  return callback.call(self, null, err);
                }
                var svg;
                if (self.svgTemplate) { // SVG Text Template to SVG Element
                  if (typeof self.svgTemplate === 'string') {
                    container = document.createElement('div');
                    container.innerHTML = self.svgTemplate;
                    self.svgTemplate = container.children[0];
                  }
                  svg = self.svgTemplate;
                  self._injectImage(svg);
                  callback.call(self, svg);
                } else {
                  callback.call(self, null, new Error('No SVG Template'));
                }
              });
            });
          }
        }
docs: svg(callback):
  Callback will be passed (svgElement, err) arguments.
  
  If no SVG tempalte has been set beforehand, svgElement will be null
  and err.message will be 'No SVG Template'.
  
  This will mutate the URL to an editable one to avoid cross origin issues.
  
  If svgElement is an actual node, it will be retrieved by reference rather
  than copied.