text: !function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.ShareButton=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
  _dereq_('../../modules/es6.array.iterator');
  module.exports = _dereq_('../../modules/$').core.Array.values;
  },{"../../modules/$":12,"../../modules/es6.array.iterator":19}],2:[function(_dereq_,module,exports){
  _dereq_('../../modules/es6.math');
  module.exports = _dereq_('../../modules/$').core.Math.trunc;
  },{"../../modules/$":12,"../../modules/es6.math":20}],3:[function(_dereq_,module,exports){
  _dereq_('../../modules/es6.symbol');
  module.exports = _dereq_('../../modules/$').core.Symbol;
  },{"../../modules/$":12,"../../modules/es6.symbol":21}],4:[function(_dereq_,module,exports){
  var $ = _dereq_('./$');
  function assert(condition, msg1, msg2){
    if(!condition)throw TypeError(msg2 ? msg1 + msg2 : msg1);
  }
  assert.def = $.assertDefined;
  assert.fn = function(it){
    if(!$.isFunction(it))throw TypeError(it + ' is not a function!');
    return it;
  };
  assert.obj = function(it){
    if(!$.isObject(it))throw TypeError(it + ' is not an object!');
    return it;
  };
  assert.inst = function(it, Constructor, name){
    if(!(it instanceof Constructor))throw TypeError(name + ": use the 'new' operator!");
    return it;
  };
  module.exports = assert;
  },{"./$":12}],5:[function(_dereq_,module,exports){
  var $        = _dereq_('./$')
    , TAG      = _dereq_('./$.wks')('toStringTag')
    , toString = {}.toString;
  function cof(it){
    return toString.call(it).slice(8, -1);
  }
  cof.classof = function(it){
    var O, T;
    return it == undefined ? it === undefined ? 'Undefined' : 'Null'
      : typeof (T = (O = Object(it))[TAG]) == 'string' ? T : cof(O);
  };
  cof.set = function(it, tag, stat){
    if(it && !$.has(it = stat ? it : it.prototype, TAG))$.hide(it, TAG, tag);
  };
  module.exports = cof;
  },{"./$":12,"./$.wks":18}],6:[function(_dereq_,module,exports){
  var $          = _dereq_('./$')
    , global     = $.g
    , core       = $.core
    , isFunction = $.isFunction
    , $redef     = _dereq_('./$.redef');
  function ctx(fn, that){
    return function(){
      return fn.apply(that, arguments);
    };
  }
  global.core = core;
  // type bitmap
  $def.F = 1;  // forced
  $def.G = 2;  // global
  $def.S = 4;  // static
  $def.P = 8;  // proto
  $def.B = 16; // bind
  $def.W = 32; // wrap
  function $def(type, name, source){
    var key, own, out, exp
      , isGlobal = type & $def.G
      , isProto  = type & $def.P
      , target   = isGlobal ? global : type & $def.S
          ? global[name] : (global[name] || {}).prototype
      , exports  = isGlobal ? core : core[name] || (core[name] = {});
    if(isGlobal)source = name;
    for(key in source){
      // contains in native
      own = !(type & $def.F) && target && key in target;
      // export native or passed
      out = (own ? target : source)[key];
      // bind timers to global for call from export context
      if(type & $def.B && own)exp = ctx(out, global);
      else exp = isProto && isFunction(out) ? ctx(Function.call, out) : out;
      // extend global
      if(target && !own)$redef(target, key, out);
      // export
      if(exports[key] != out)$.hide(exports, key, exp);
      if(isProto)(exports.prototype || (exports.prototype = {}))[key] = out;
    }
  }
  module.exports = $def;
  },{"./$":12,"./$.redef":14}],7:[function(_dereq_,module,exports){
  var $ = _dereq_('./$');
  module.exports = function(it){
    var keys       = $.getKeys(it)
      , getDesc    = $.getDesc
      , getSymbols = $.getSymbols;
    if(getSymbols)$.each.call(getSymbols(it), function(key){
      if(getDesc(it, key).enumerable)keys.push(key);
    });
    return keys;
  };
  },{"./$":12}],8:[function(_dereq_,module,exports){
  module.exports = function($){
    $.FW   = true;
    $.path = $.g;
    return $;
  };
  },{}],9:[function(_dereq_,module,exports){
  // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
  var $ = _dereq_('./$')
    , toString = {}.toString
    , getNames = $.getNames;
  
  var windowNames = typeof window == 'object' && Object.getOwnPropertyNames
    ? Object.getOwnPropertyNames(window) : [];
  
  function getWindowNames(it){
    try {
      return getNames(it);
    } catch(e){
      return windowNames.slice();
    }
  }
  
  module.exports.get = function getOwnPropertyNames(it){
    if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it);
    return getNames($.toObject(it));
  };
  },{"./$":12}],10:[function(_dereq_,module,exports){
  var $def            = _dereq_('./$.def')
    , $redef          = _dereq_('./$.redef')
    , $               = _dereq_('./$')
    , cof             = _dereq_('./$.cof')
    , $iter           = _dereq_('./$.iter')
    , SYMBOL_ITERATOR = _dereq_('./$.wks')('iterator')
    , FF_ITERATOR     = '@@iterator'
    , KEYS            = 'keys'
    , VALUES          = 'values'
    , Iterators       = $iter.Iterators;
  module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCE){
    $iter.create(Constructor, NAME, next);
    function createMethod(kind){
      function $$(that){
        return new Constructor(that, kind);
      }
      switch(kind){
        case KEYS: return function keys(){ return $$(this); };
        case VALUES: return function values(){ return $$(this); };
      } return function entries(){ return $$(this); };
    }
    var TAG      = NAME + ' Iterator'
      , proto    = Base.prototype
      , _native  = proto[SYMBOL_ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
      , _default = _native || createMethod(DEFAULT)
      , methods, key;
    // Fix native
    if(_native){
      var IteratorPrototype = $.getProto(_default.call(new Base));
      // Set @@toStringTag to native iterators
      cof.set(IteratorPrototype, TAG, true);
      // FF fix
      if($.FW && $.has(proto, FF_ITERATOR))$iter.set(IteratorPrototype, $.that);
    }
    // Define iterator
    if($.FW || FORCE)$iter.set(proto, _default);
    // Plug for library
    Iterators[NAME] = _default;
    Iterators[TAG]  = $.that;
    if(DEFAULT){
      methods = {
        keys:    IS_SET            ? _default : createMethod(KEYS),
        values:  DEFAULT == VALUES ? _default : createMethod(VALUES),
        entries: DEFAULT != VALUES ? _default : createMethod('entries')
      };
      if(FORCE)for(key in methods){
        if(!(key in proto))$redef(proto, key, methods[key]);
      } else $def($def.P + $def.F * $iter.BUGGY, NAME, methods);
    }
  };
  },{"./$":12,"./$.cof":5,"./$.def":6,"./$.iter":11,"./$.redef":14,"./$.wks":18}],11:[function(_dereq_,module,exports){
  'use strict';
  var $                 = _dereq_('./$')
    , cof               = _dereq_('./$.cof')
    , classof           = cof.classof
    , assert            = _dereq_('./$.assert')
    , assertObject      = assert.obj
    , SYMBOL_ITERATOR   = _dereq_('./$.wks')('iterator')
    , FF_ITERATOR       = '@@iterator'
    , Iterators         = _dereq_('./$.shared')('iterators')
    , IteratorPrototype = {};
  // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
  setIterator(IteratorPrototype, $.that);
  function setIterator(O, value){
    $.hide(O, SYMBOL_ITERATOR, value);
    // Add iterator for FF iterator protocol
    if(FF_ITERATOR in [])$.hide(O, FF_ITERATOR, value);
  }
  
  module.exports = {
    // Safari has buggy iterators w/o `next`
    BUGGY: 'keys' in [] && !('next' in [].keys()),
    Iterators: Iterators,
    step: function(done, value){
      return {value: value, done: !!done};
    },
    is: function(it){
      var O      = Object(it)
        , Symbol = $.g.Symbol;
      return (Symbol && Symbol.iterator || FF_ITERATOR) in O
        || SYMBOL_ITERATOR in O
        || $.has(Iterators, classof(O));
    },
    get: function(it){
      var Symbol = $.g.Symbol
        , getIter;
      if(it != undefined){
        getIter = it[Symbol && Symbol.iterator || FF_ITERATOR]
          || it[SYMBOL_ITERATOR]
          || Iterators[classof(it)];
      }
      assert($.isFunction(getIter), it, ' is not iterable!');
      return assertObject(getIter.call(it));
    },
    set: setIterator,
    create: function(Constructor, NAME, next, proto){
      Constructor.prototype = $.create(proto || IteratorPrototype, {next: $.desc(1, next)});
      cof.set(Constructor, NAME + ' Iterator');
    }
  };
  },{"./$":12,"./$.assert":4,"./$.cof":5,"./$.shared":15,"./$.wks":18}],12:[function(_dereq_,module,exports){
  'use strict';
  var global = typeof self != 'undefined' ? self : Function('return this')()
    , core   = {}
    , defineProperty = Object.defineProperty
    , hasOwnProperty = {}.hasOwnProperty
    , ceil  = Math.ceil
    , floor = Math.floor
    , max   = Math.max
    , min   = Math.min;
  // The engine works fine with descriptors? Thank's IE8 for his funny defineProperty.
  var DESC = !!function(){
    try {
      return defineProperty({}, 'a', {get: function(){ return 2; }}).a == 2;
    } catch(e){ /* empty */ }
  }();
  var hide = createDefiner(1);
  // 7.1.4 ToInteger
  function toInteger(it){
    return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
  }
  function desc(bitmap, value){
    return {
      enumerable  : !(bitmap & 1),
      configurable: !(bitmap & 2),
      writable    : !(bitmap & 4),
      value       : value
    };
  }
  function simpleSet(object, key, value){
    object[key] = value;
    return object;
  }
  function createDefiner(bitmap){
    return DESC ? function(object, key, value){
      return $.setDesc(object, key, desc(bitmap, value));
    } : simpleSet;
  }
  
  function isObject(it){
    return it !== null && (typeof it == 'object' || typeof it == 'function');
  }
  function isFunction(it){
    return typeof it == 'function';
  }
  function assertDefined(it){
    if(it == undefined)throw TypeError("Can't call method on  " + it);
    return it;
  }
  
  var $ = module.exports = _dereq_('./$.fw')({
    g: global,
    core: core,
    html: global.document && document.documentElement,
    // http://jsperf.com/core-js-isobject
    isObject:   isObject,
    isFunction: isFunction,
    that: function(){
      return this;
    },
    // 7.1.4 ToInteger
    toInteger: toInteger,
    // 7.1.15 ToLength
    toLength: function(it){
      return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
    },
    toIndex: function(index, length){
      index = toInteger(index);
      return index < 0 ? max(index + length, 0) : min(index, length);
    },
    has: function(it, key){
      return hasOwnProperty.call(it, key);
    },
    create:     Object.create,
    getProto:   Object.getPrototypeOf,
    DESC:       DESC,
    desc:       desc,
    getDesc:    Object.getOwnPropertyDescriptor,
    setDesc:    defineProperty,
    setDescs:   Object.defineProperties,
    getKeys:    Object.keys,
    getNames:   Object.getOwnPropertyNames,
    getSymbols: Object.getOwnPropertySymbols,
    assertDefined: assertDefined,
    // Dummy, fix for not array-like ES3 string in es5 module
    ES5Object: Object,
    toObject: function(it){
      return $.ES5Object(assertDefined(it));
    },
    hide: hide,
    def: createDefiner(0),
    set: global.Symbol ? simpleSet : hide,
    each: [].forEach
  });
  /* eslint-disable no-undef */
  if(typeof __e != 'undefined')__e = core;
  if(typeof __g != 'undefined')__g = global;
  },{"./$.fw":8}],13:[function(_dereq_,module,exports){
  var $ = _dereq_('./$');
  module.exports = function(object, el){
    var O      = $.toObject(object)
      , keys   = $.getKeys(O)
      , length = keys.length
      , index  = 0
      , key;
    while(length > index)if(O[key = keys[index++]] === el)return key;
  };
  },{"./$":12}],14:[function(_dereq_,module,exports){
  var $   = _dereq_('./$')
    , tpl = String({}.hasOwnProperty)
    , SRC = _dereq_('./$.uid').safe('src')
    , _toString = Function.toString;
  
  function $redef(O, key, val, safe){
    if($.isFunction(val)){
      var base = O[key];
      $.hide(val, SRC, base ? String(base) : tpl.replace(/hasOwnProperty/, String(key)));
      if(!('name' in val))val.name = key;
    }
    if(O === $.g){
      O[key] = val;
    } else {
      if(!safe)delete O[key];
      $.hide(O, key, val);
    }
  }
  
  // add fake Function#toString for correct work wrapped methods / constructors
  // with methods similar to LoDash isNative
  $redef(Function.prototype, 'toString', function toString(){
    return $.has(this, SRC) ? this[SRC] : _toString.call(this);
  });
  
  $.core.inspectSource = function(it){
    return _toString.call(it);
  };
  
  module.exports = $redef;
  },{"./$":12,"./$.uid":16}],15:[function(_dereq_,module,exports){
  var $      = _dereq_('./$')
    , SHARED = '__core-js_shared__'
    , store  = $.g[SHARED] || ($.g[SHARED] = {});
  module.exports = function(key){
    return store[key] || (store[key] = {});
  };
  },{"./$":12}],16:[function(_dereq_,module,exports){
  var sid = 0;
  function uid(key){
    return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++sid + Math.random()).toString(36));
  }
  uid.safe = _dereq_('./$').g.Symbol || uid;
  module.exports = uid;
  },{"./$":12}],17:[function(_dereq_,module,exports){
  // 22.1.3.31 Array.prototype[@@unscopables]
  var UNSCOPABLES = _dereq_('./$.wks')('unscopables');
  if(!(UNSCOPABLES in []))_dereq_('./$').hide(Array.prototype, UNSCOPABLES, {});
  module.exports = function(key){
    [][UNSCOPABLES][key] = true;
  };
  },{"./$":12,"./$.wks":18}],18:[function(_dereq_,module,exports){
  var global = _dereq_('./$').g
    , store  = _dereq_('./$.shared')('wks');
  module.exports = function(name){
    return store[name] || (store[name] =
      global.Symbol && global.Symbol[name] || _dereq_('./$.uid').safe('Symbol.' + name));
  };
  },{"./$":12,"./$.shared":15,"./$.uid":16}],19:[function(_dereq_,module,exports){
  var $          = _dereq_('./$')
    , setUnscope = _dereq_('./$.unscope')
    , ITER       = _dereq_('./$.uid').safe('iter')
    , $iter      = _dereq_('./$.iter')
    , step       = $iter.step
    , Iterators  = $iter.Iterators;
  
  // 22.1.3.4 Array.prototype.entries()
  // 22.1.3.13 Array.prototype.keys()
  // 22.1.3.29 Array.prototype.values()
  // 22.1.3.30 Array.prototype[@@iterator]()
  _dereq_('./$.iter-define')(Array, 'Array', function(iterated, kind){
    $.set(this, ITER, {o: $.toObject(iterated), i: 0, k: kind});
  // 22.1.5.2.1 %ArrayIteratorPrototype%.next()
  }, function(){
    var iter  = this[ITER]
      , O     = iter.o
      , kind  = iter.k
      , index = iter.i++;
    if(!O || index >= O.length){
      iter.o = undefined;
      return step(1);
    }
    if(kind == 'keys'  )return step(0, index);
    if(kind == 'values')return step(0, O[index]);
    return step(0, [index, O[index]]);
  }, 'values');
  
  // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
  Iterators.Arguments = Iterators.Array;
  
  setUnscope('keys');
  setUnscope('values');
  setUnscope('entries');
  },{"./$":12,"./$.iter":11,"./$.iter-define":10,"./$.uid":16,"./$.unscope":17}],20:[function(_dereq_,module,exports){
  var Infinity = 1 / 0
    , $def  = _dereq_('./$.def')
    , E     = Math.E
    , pow   = Math.pow
    , abs   = Math.abs
    , exp   = Math.exp
    , log   = Math.log
    , sqrt  = Math.sqrt
    , ceil  = Math.ceil
    , floor = Math.floor
    , EPSILON   = pow(2, -52)
    , EPSILON32 = pow(2, -23)
    , MAX32     = pow(2, 127) * (2 - EPSILON32)
    , MIN32     = pow(2, -126);
  function roundTiesToEven(n){
    return n + 1 / EPSILON - 1 / EPSILON;
  }
  
  // 20.2.2.28 Math.sign(x)
  function sign(x){
    return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
  }
  // 20.2.2.5 Math.asinh(x)
  function asinh(x){
    return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : log(x + sqrt(x * x + 1));
  }
  // 20.2.2.14 Math.expm1(x)
  function expm1(x){
    return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : exp(x) - 1;
  }
  
  $def($def.S, 'Math', {
    // 20.2.2.3 Math.acosh(x)
    acosh: function acosh(x){
      return (x = +x) < 1 ? NaN : isFinite(x) ? log(x / E + sqrt(x + 1) * sqrt(x - 1) / E) + 1 : x;
    },
    // 20.2.2.5 Math.asinh(x)
    asinh: asinh,
    // 20.2.2.7 Math.atanh(x)
    atanh: function atanh(x){
      return (x = +x) == 0 ? x : log((1 + x) / (1 - x)) / 2;
    },
    // 20.2.2.9 Math.cbrt(x)
    cbrt: function cbrt(x){
      return sign(x = +x) * pow(abs(x), 1 / 3);
    },
    // 20.2.2.11 Math.clz32(x)
    clz32: function clz32(x){
      return (x >>>= 0) ? 31 - floor(log(x + 0.5) * Math.LOG2E) : 32;
    },
    // 20.2.2.12 Math.cosh(x)
    cosh: function cosh(x){
      return (exp(x = +x) + exp(-x)) / 2;
    },
    // 20.2.2.14 Math.expm1(x)
    expm1: expm1,
    // 20.2.2.16 Math.fround(x)
    fround: function fround(x){
      var $abs  = abs(x)
        , $sign = sign(x)
        , a, result;
      if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
      a = (1 + EPSILON32 / EPSILON) * $abs;
      result = a - (a - $abs);
      if(result > MAX32 || result != result)return $sign * Infinity;
      return $sign * result;
    },
    // 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
    hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars
      var sum  = 0
        , i    = 0
        , len  = arguments.length
        , larg = 0
        , arg, div;
      while(i < len){
        arg = abs(arguments[i++]);
        if(larg < arg){
          div  = larg / arg;
          sum  = sum * div * div + 1;
          larg = arg;
        } else if(arg > 0){
          div  = arg / larg;
          sum += div * div;
        } else sum += arg;
      }
      return larg === Infinity ? Infinity : larg * sqrt(sum);
    },
    // 20.2.2.18 Math.imul(x, y)
    imul: function imul(x, y){
      var UInt16 = 0xffff
        , xn = +x
        , yn = +y
        , xl = UInt16 & xn
        , yl = UInt16 & yn;
      return 0 | xl * yl + ((UInt16 & xn >>> 16) * yl + xl * (UInt16 & yn >>> 16) << 16 >>> 0);
    },
    // 20.2.2.20 Math.log1p(x)
    log1p: function log1p(x){
      return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : log(1 + x);
    },
    // 20.2.2.21 Math.log10(x)
    log10: function log10(x){
      return log(x) / Math.LN10;
    },
    // 20.2.2.22 Math.log2(x)
    log2: function log2(x){
      return log(x) / Math.LN2;
    },
    // 20.2.2.28 Math.sign(x)
    sign: sign,
    // 20.2.2.30 Math.sinh(x)
    sinh: function sinh(x){
      return abs(x = +x) < 1 ? (expm1(x) - expm1(-x)) / 2 : (exp(x - 1) - exp(-x - 1)) * (E / 2);
    },
    // 20.2.2.33 Math.tanh(x)
    tanh: function tanh(x){
      var a = expm1(x = +x)
        , b = expm1(-x);
      return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));
    },
    // 20.2.2.34 Math.trunc(x)
    trunc: function trunc(it){
      return (it > 0 ? floor : ceil)(it);
    }
  });
  },{"./$.def":6}],21:[function(_dereq_,module,exports){
  'use strict';
  // ECMAScript 6 symbols shim
  var $        = _dereq_('./$')
    , setTag   = _dereq_('./$.cof').set
    , uid      = _dereq_('./$.uid')
    , shared   = _dereq_('./$.shared')
    , $def     = _dereq_('./$.def')
    , $redef   = _dereq_('./$.redef')
    , keyOf    = _dereq_('./$.keyof')
    , enumKeys = _dereq_('./$.enum-keys')
    , assertObject = _dereq_('./$.assert').obj
    , ObjectProto = Object.prototype
    , DESC     = $.DESC
    , has      = $.has
    , $create  = $.create
    , getDesc  = $.getDesc
    , setDesc  = $.setDesc
    , desc     = $.desc
    , $names   = _dereq_('./$.get-names')
    , getNames = $names.get
    , toObject = $.toObject
    , $Symbol  = $.g.Symbol
    , setter   = false
    , TAG      = uid('tag')
    , HIDDEN   = uid('hidden')
    , _propertyIsEnumerable = {}.propertyIsEnumerable
    , SymbolRegistry = shared('symbol-registry')
    , AllSymbols = shared('symbols')
    , useNative = $.isFunction($Symbol);
  
  var setSymbolDesc = DESC ? function(){ // fallback for old Android
    try {
      return $create(setDesc({}, HIDDEN, {
        get: function(){
          return setDesc(this, HIDDEN, {value: false})[HIDDEN];
        }
      }))[HIDDEN] || setDesc;
    } catch(e){
      return function(it, key, D){
        var protoDesc = getDesc(ObjectProto, key);
        if(protoDesc)delete ObjectProto[key];
        setDesc(it, key, D);
        if(protoDesc && it !== ObjectProto)setDesc(ObjectProto, key, protoDesc);
      };
    }
  }() : setDesc;
  
  function wrap(tag){
    var sym = AllSymbols[tag] = $.set($create($Symbol.prototype), TAG, tag);
    DESC && setter && setSymbolDesc(ObjectProto, tag, {
      configurable: true,
      set: function(value){
        if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
        setSymbolDesc(this, tag, desc(1, value));
      }
    });
    return sym;
  }
  
  function defineProperty(it, key, D){
    if(D && has(AllSymbols, key)){
      if(!D.enumerable){
        if(!has(it, HIDDEN))setDesc(it, HIDDEN, desc(1, {}));
        it[HIDDEN][key] = true;
      } else {
        if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
        D = $create(D, {enumerable: desc(0, false)});
      } return setSymbolDesc(it, key, D);
    } return setDesc(it, key, D);
  }
  function defineProperties(it, P){
    assertObject(it);
    var keys = enumKeys(P = toObject(P))
      , i    = 0
      , l = keys.length
      , key;
    while(l > i)defineProperty(it, key = keys[i++], P[key]);
    return it;
  }
  function create(it, P){
    return P === undefined ? $create(it) : defineProperties($create(it), P);
  }
  function propertyIsEnumerable(key){
    var E = _propertyIsEnumerable.call(this, key);
    return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key]
      ? E : true;
  }
  function getOwnPropertyDescriptor(it, key){
    var D = getDesc(it = toObject(it), key);
    if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
    return D;
  }
  function getOwnPropertyNames(it){
    var names  = getNames(toObject(it))
      , result = []
      , i      = 0
      , key;
    while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN)result.push(key);
    return result;
  }
  function getOwnPropertySymbols(it){
    var names  = getNames(toObject(it))
      , result = []
      , i      = 0
      , key;
    while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]);
    return result;
  }
  
  // 19.4.1.1 Symbol([description])
  if(!useNative){
    $Symbol = function Symbol(){
      if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor');
      return wrap(uid(arguments[0]));
    };
    $redef($Symbol.prototype, 'toString', function(){
      return this[TAG];
    });
  
    $.create     = create;
    $.setDesc    = defineProperty;
    $.getDesc    = getOwnPropertyDescriptor;
    $.setDescs   = defineProperties;
    $.getNames   = $names.get = getOwnPropertyNames;
    $.getSymbols = getOwnPropertySymbols;
  
    if($.DESC && $.FW)$redef(ObjectProto, 'propertyIsEnumerable', propertyIsEnumerable, true);
  }
  
  var symbolStatics = {
    // 19.4.2.1 Symbol.for(key)
    'for': function(key){
      return has(SymbolRegistry, key += '')
        ? SymbolRegistry[key]
        : SymbolRegistry[key] = $Symbol(key);
    },
    // 19.4.2.5 Symbol.keyFor(sym)
    keyFor: function keyFor(key){
      return keyOf(SymbolRegistry, key);
    },
    useSetter: function(){ setter = true; },
    useSimple: function(){ setter = false; }
  };
  // 19.4.2.2 Symbol.hasInstance
  // 19.4.2.3 Symbol.isConcatSpreadable
  // 19.4.2.4 Symbol.iterator
  // 19.4.2.6 Symbol.match
  // 19.4.2.8 Symbol.replace
  // 19.4.2.9 Symbol.search
  // 19.4.2.10 Symbol.species
  // 19.4.2.11 Symbol.split
  // 19.4.2.12 Symbol.toPrimitive
  // 19.4.2.13 Symbol.toStringTag
  // 19.4.2.14 Symbol.unscopables
  $.each.call((
      'hasInstance,isConcatSpreadable,iterator,match,replace,search,' +
      'species,split,toPrimitive,toStringTag,unscopables'
    ).split(','), function(it){
      var sym = _dereq_('./$.wks')(it);
      symbolStatics[it] = useNative ? sym : wrap(sym);
    }
  );
  
  setter = true;
  
  $def($def.G + $def.W, {Symbol: $Symbol});
  
  $def($def.S, 'Symbol', symbolStatics);
  
  $def($def.S + $def.F * !useNative, 'Object', {
    // 19.1.2.2 Object.create(O [, Properties])
    create: create,
    // 19.1.2.4 Object.defineProperty(O, P, Attributes)
    defineProperty: defineProperty,
    // 19.1.2.3 Object.defineProperties(O, Properties)
    defineProperties: defineProperties,
    // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
    getOwnPropertyDescriptor: getOwnPropertyDescriptor,
    // 19.1.2.7 Object.getOwnPropertyNames(O)
    getOwnPropertyNames: getOwnPropertyNames,
    // 19.1.2.8 Object.getOwnPropertySymbols(O)
    getOwnPropertySymbols: getOwnPropertySymbols
  });
  
  // 19.4.3.5 Symbol.prototype[@@toStringTag]
  setTag($Symbol, 'Symbol');
  // 20.2.1.9 Math[@@toStringTag]
  setTag(Math, 'Math', true);
  // 24.3.3 JSON[@@toStringTag]
  setTag($.g.JSON, 'JSON', true);
  },{"./$":12,"./$.assert":4,"./$.cof":5,"./$.def":6,"./$.enum-keys":7,"./$.get-names":9,"./$.keyof":13,"./$.redef":14,"./$.shared":15,"./$.uid":16,"./$.wks":18}],22:[function(_dereq_,module,exports){
  'use strict';
  
  var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
  
  var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
  
  function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; }
  
  var _ShareUtils2 = _dereq_('./ShareUtils');
  
  var _ShareUtils3 = _interopRequireDefault(_ShareUtils2);
  
  _dereq_('core-js/fn/symbol');
  _dereq_('core-js/fn/array/iterator');
  _dereq_('core-js/fn/math/trunc');
  
  /**
   * Sharebutton
   * @class
   * @classdesc
   * @extends ShareUtils
  
   * @param {String} element
   * @param {Object} options
   */
  
  var ShareButton = (function (_ShareUtils) {
    _inherits(ShareButton, _ShareUtils);
  
    function ShareButton(element, options) {
      _classCallCheck(this, ShareButton);
  
      _get(Object.getPrototypeOf(ShareButton.prototype), 'constructor', this).call(this);
  
      if (typeof element === 'object') {
        this.element = undefined;
        options = element;
      } else this.element = element;
  
      this.el = {
        head: document.getElementsByTagName('head')[0],
        body: document.getElementsByTagName('body')[0]
      };
  
      this.config = {
        enabledNetworks: 0,
        protocol: '//',
        url: window.location.href,
        caption: null,
        title: this._defaultTitle(),
        image: this._defaultImage(),
        description: this._defaultDescription(),
  
        ui: {
          flyout: 'sb-top sb-center',
          buttonText: 'Share',
          namespace: 'sb-',
          networkOrder: [],
          collision: false,
          updateShareButtonSize: true
        },
  
        networks: {
          googlePlus: {
            enabled: true,
            url: null
          },
          twitter: {
            enabled: true,
            url: null,
            description: null
          },
          facebook: {
            enabled: true,
            loadSdk: true,
            url: null,
            appId: null,
            title: null,
            caption: null,
            description: null,
            image: null
          },
          pinterest: {
            enabled: true,
            url: null,
            image: null,
            description: null
          },
          reddit: {
            enabled: true,
            url: null,
            title: null
          },
          linkedin: {
            enabled: true,
            url: null,
            title: null,
            description: null
          },
          whatsapp: {
            enabled: true,
            description: null,
            url: null
          },
          email: {
            enabled: true,
            title: null,
            description: null
          }
        }
      };
  
      this.listener = null;
      this._setup(this.element, options);
    }
  
    _createClass(ShareButton, [{
      key: 'open',
  
      /**
       * @method open
       * @description Opens Share Button
       */
      value: function open() {
        this._public('Open');
      }
    }, {
      key: 'close',
  
      /**
       * @method close
       * @description Cpens Share Button
       */
      value: function close() {
        this._public('Close');
      }
    }, {
      key: 'toggle',
  
      /**
       * @method toggle
       * @description Toggles Share Button
       */
      value: function toggle() {
        this._public('Toggle');
      }
    }, {
      key: 'toggleListen',
  
      /**
       * @method toggleListen
       * @description Toggles the Share Button listener, good for updaing share
       * button for CSS animations.
       */
      value: function toggleListen() {
        this._public('Listen');
      }
    }, {
      key: '_public',
  
      /**
       * @method _public
       * @description Executes action
       * @private
       *
       * @param {String} action
       */
      value: function _public(action) {
        var instances = undefined;
  
        if (typeof element === 'undefined') instances = _get(Object.getPrototypeOf(ShareButton.prototype), '_objToArray', this).call(this, document.getElementsByTagName('share-button'));else instances = document.querySelectorAll(element);
  
        var _iteratorNormalCompletion = true;
        var _didIteratorError = false;
        var _iteratorError = undefined;
  
        try {
          for (var _iterator = instances[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
            var instance = _step.value;
  
            var networks = instance.getElementsByClassName(this.config.ui.namespace + 'social')[0];
            this['_event' + action](instance, networks);
          }
        } catch (err) {
          _didIteratorError = true;
          _iteratorError = err;
        } finally {
          try {
            if (!_iteratorNormalCompletion && _iterator['return']) {
              _iterator['return']();
            }
          } finally {
            if (_didIteratorError) {
              throw _iteratorError;
            }
          }
        }
      }
    }, {
      key: '_setup',
  
      /**
       * @method _setup
       * @description Sets up Share Button
       * @private
       *
       * @param {String} element selector
       * @param {Object} opts
       */
      value: function _setup(element, opts) {
        var instances = undefined;
  
        if (typeof element === 'undefined') instances = _get(Object.getPrototypeOf(ShareButton.prototype), '_objToArray', this).call(this, document.getElementsByTagName('share-button'));else instances = document.querySelectorAll('share-button' + element);
  
        // Adding user configs to default configs
        this._merge(this.config, opts);
  
        // Disable whatsapp display if not a mobile device
        if (this.config.networks.whatsapp.enabled && !this._isMobile()) this.config.networks.whatsapp.enabled = false;
  
        // Default order of networks if no network order entered
        if (this.config.ui.networkOrder.length === 0) this.config.ui.networkOrder = ['pinterest', 'twitter', 'facebook', 'whatsapp', 'googlePlus', 'reddit', 'linkedin', 'email'];
  
        var _iteratorNormalCompletion2 = true;
        var _didIteratorError2 = false;
        var _iteratorError2 = undefined;
  
        try {
          for (var _iterator2 = Object.keys(this.config.networks)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
            var network = _step2.value;
  
            if (this.config.ui.networkOrder.indexOf(network.toString()) < 0) {
              this.config.networks[network].enabled = false;
              this.config.ui.networkOrder.push(network);
            }
          }
        } catch (err) {
          _didIteratorError2 = true;
          _iteratorError2 = err;
        } finally {
          try {
            if (!_iteratorNormalCompletion2 && _iterator2['return']) {
              _iterator2['return']();
            }
          } finally {
            if (_didIteratorError2) {
              throw _iteratorError2;
            }
          }
        }
  
        this._fixFlyout();
        this._detectNetworks();
        this._normalizeNetworkConfiguration();
  
        // Inject Facebook JS SDK (if Facebook is enabled)
        if (this.config.networks.facebook.enabled && this.config.networks.facebook.loadSdk) this._injectFacebookSdk();
  
        // Initialize instances
        var index = 0;
        var _iteratorNormalCompletion3 = true;
        var _didIteratorError3 = false;
        var _iteratorError3 = undefined;
  
        try {
          for (var _iterator3 = instances[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
            var instance = _step3.value;
  
            this._setupInstance(instance, index++);
          }
        } catch (err) {
          _didIteratorError3 = true;
          _iteratorError3 = err;
        } finally {
          try {
            if (!_iteratorNormalCompletion3 && _iterator3['return']) {
              _iterator3['return']();
            }
          } finally {
            if (_didIteratorError3) {
              throw _iteratorError3;
            }
          }
        }
      }
    }, {
      key: '_setupInstance',
  
      /**
       * @method _setupInstance
       * @description Sets up each instance with config and styles
       * @private
       *
       * @param {DOMNode} element
       * @param {Integer} index
       */
      value: function _setupInstance(instance, index) {
        var _this = this;
  
        this._hide(instance);
  
        // Add necessary classes to instance
        // (Note: FF doesn't support adding multiple classes in a single call)
        this._addClass(instance, 'sharer-' + index);
        this._injectHtml(instance);
        this._show(instance);
  
        var networksCon = instance.getElementsByClassName(this.config.ui.namespace + 'social')[0];
        var networks = instance.getElementsByTagName('li');
  
        this._addClass(networksCon, 'networks-' + this.config.enabledNetworks);
        instance.addEventListener('click', function () {
          return _this._eventToggle(instance, networksCon);
        });
  
        var _loop = function (k) {
          var network = networks[k];
  
          if (typeof network !== 'undefined') {
            (function () {
              var name = network.getAttribute('data-network');
              var a = network.getElementsByTagName('a')[0];
  
              _this._addClass(network, _this.config.networks[name]['class']);
  
              if (network.className !== 'email') a.setAttribute('onclick', 'return false');
  
              a.addEventListener('mousedown', function () {
                _this._hook('before', name, instance);
              });
              a.addEventListener('mouseup', function () {
                _this['_network' + name.capFLetter()](network);
              });
              a.addEventListener('click', function () {
                _this._hook('after', name, instance);
              });
            })();
          }
        };
  
        // Add listener to activate networks and close button
        for (var k in Object.keys(networks)) {
          _loop(k);
        }
      }
    }, {
      key: '_eventToggle',
  
      /**
       * @method _eventToggle
       * @description Toggles 'active' class on button
       * @private
       *
       * @param {DOMNode} button
       * @param {DOMNode} networks
       */
      value: function _eventToggle(button, networks) {
        if (this._hasClass(networks, 'active')) this._eventClose(networks);else this._eventOpen(button, networks);
      }
    }, {
      key: '_eventOpen',
  
      /**
       * @method _eventOpen
       * @description Add 'active' class & remove 'load' class on button
       * @private
       *
       * @param {DOMNode} button
       * @param {DOMNode} networks
       */
      value: function _eventOpen(button, networks) {
        if (this._hasClass(networks, 'load')) this._removeClass(networks, 'load');
        if (this.collision) this._collisionDetection(button, networks);
  
        this._addClass(networks, 'active');
      }
    }, {
      key: '_eventClose',
  
      /**
       * @method _eventClose
       * @description Remove 'active' class on button
       * @private
       *
       * @param {DOMNode} button
       */
      value: function _eventClose(button) {
        this._removeClass(button, 'active');
      }
    }, {
      key: '_eventListen',
  
      /**
       * @method _eventListen
       * @description Toggles weather or not a button's classes are being
       * constantly updated regardless of scrolls or window resizes.
       * @private
       *
       * @param {DOMNode} button
       * @param {DOMNode} networks
       */
      value: function _eventListen(button, networks) {
        var _this2 = this;
  
        var dimensions = this._getDimensions(button, networks);
        if (this.listener === null) this.listener = window.setInterval(function () {
          return _this2._adjustClasses(button, networks, dimensions);
        }, 100);else {
          window.clearInterval(this.listener);
          this.listener = null;
        }
      }
    }, {
      key: '_fixFlyout',
  
      /**
       * @method _fixFlyout
       * @description Fixes the flyout entered by the user to match their provided
       * namespace
       *@private
       */
      value: function _fixFlyout() {
        var flyouts = this.config.ui.flyout.split(' ');
        if (flyouts[0].substring(0, this.config.ui.namespace.length) !== this.config.ui.namespace) flyouts[0] = '' + this.config.ui.namespace + flyouts[0];
        if (flyouts[1].substring(0, this.config.ui.namespace.length) !== this.config.ui.namespace) flyouts[1] = '' + this.config.ui.namespace + flyouts[1];
        this.config.ui.flyout = flyouts.join(' ');
      }
    }, {
      key: '_collisionDetection',
  
      /**
       * @method _collisionDetection
       * @description Adds listeners the first time a button is clicked to call
       * this._adjustClasses during scrolls and resizes.
       * @private
       *
       * @param {DOMNode} button - share button
       * @param {DOMNode} networks - list of social networks
       */
      value: function _collisionDetection(button, networks) {
        var _this3 = this;
  
        var dimensions = this._getDimensions(button, networks);
        this._adjustClasses(button, networks, dimensions);
  
        if (!button.classList.contains('clicked')) {
          window.addEventListener('scroll', function () {
            return _this3._adjustClasses(button, dimensions);
          });
          window.addEventListener('resize', function () {
            return _this3._adjustClasses(button, dimensions);
          });
          button.classList.add('clicked');
        }
      }
    }, {
      key: '_getDimensions',
  
      /**
       * @method _getDimensions
       * @description Returns an object with the dimensions of the button and
       * label elements of a Share Button.
       * @private
       *
       * @param {DOMNode} button
       * @param {DOMNode} networks
       * @returns {Object}
       */
      value: function _getDimensions(button, networks) {
        return {
          networksWidth: networks.offsetWidth,
          buttonHeight: button.offsetHeight,
          buttonWidth: button.offsetWidth
        };
      }
    }, {
      key: '_adjustClasses',
  
      /**
       * @method _adjustClasses
       * @description Adjusts the positioning of the list of social networks based
       * off of where the share button is relative to the window.
       *
       * @private
       * @param {DOMNode} button
       * @param {DOMNode} label
       * @param {Object} dimensions
       */
      value: function _adjustClasses(button, networks, dimensions) {
        var windowWidth = window.innerWidth;
        var windowHeight = window.innerHeight;
        var leftOffset = button.getBoundingClientRect().left + dimensions.buttonWidth / 2;
        var rightOffset = windowWidth - leftOffset;
        var topOffset = button.getBoundingClientRect().top + dimensions.buttonHeight / 2;
        var position = this._findLocation(leftOffset, topOffset, windowWidth, windowHeight);
  
        if (position[1] === 'middle' && position[0] !== 'center' && (position[0] === 'left' && windowWidth <= leftOffset + 220 + dimensions.buttonWidth / 2 || position[0] === 'right' && windowWidth <= rightOffset + 220 + dimensions.buttonWidth / 2)) {
          networks.classList.add(this.config.ui.namespace + 'top');
          networks.classList.remove(this.config.ui.namespace + 'middle');
          networks.classList.remove(this.config.ui.namespace + 'bottom');
        } else {
          switch (position[0]) {
            case 'left':
              networks.classList.add(this.config.ui.namespace + 'right');
              networks.classList.remove(this.config.ui.namespace + 'center');
              networks.classList.remove(this.config.ui.namespace + 'left');
              break;
            case 'center':
              if (position[1] !== 'top') networks.classList.add(this.config.ui.namespace + 'top');
              networks.classList.add(this.config.ui.namespace + 'center');
              networks.classList.remove(this.config.ui.namespace + 'left');
              networks.classList.remove(this.config.ui.namespace + 'right');
              networks.classList.remove(this.config.ui.namespace + 'middle');
              break;
            case 'right':
              networks.classList.add(this.config.ui.namespace + 'left');
              networks.classList.remove(this.config.ui.namespace + 'center');
              networks.classList.remove(this.config.ui.namespace + 'right');
              break;
          }
          switch (position[1]) {
            case 'top':
              networks.classList.add(this.config.ui.namespace + 'bottom');
              networks.classList.remove(this.config.ui.namespace + 'middle');
              if (position[0] !== 'center') networks.classList.remove(this.config.ui.namespace + 'top');
              break;
            case 'middle':
              if (position[0] !== 'center') {
                networks.classList.add(this.config.ui.namespace + 'middle');
                networks.classList.remove(this.config.ui.namespace + 'top');
              }
              networks.classList.remove(this.config.ui.namespace + 'bottom');
              break;
            case 'bottom':
              networks.classList.add(this.config.ui.namespace + 'top');
              networks.classList.remove(this.config.ui.namespace + 'middle');
              networks.classList.remove(this.config.ui.namespace + 'bottom');
              break;
          }
        }
      }
    }, {
      key: '_findLocation',
  
      /**
       * @method _findLocation
       * @description Finds the location of the label given by its x and y value
       * with respect to the window width and window height given.
       * @private
       *
       * @param {number} labelX
       * @param {number} labelY
       * @param {number} windowWidth
       * @param {number} windowHeight
       * @returns {Array}
       */
      value: function _findLocation(labelX, labelY, windowWidth, windowHeight) {
        var xPosition = ['left', 'center', 'right'];
        var yPosition = ['top', 'middle', 'bottom'];
        var xLocation = Math.trunc(3 * (1 - (windowWidth - labelX) / windowWidth));
        var yLocation = Math.trunc(3 * (1 - (windowHeight - labelY) / windowHeight));
        if (xLocation >= 3) xLocation = 2;else if (xLocation <= -1) xLocation = 0;
        if (yLocation >= 3) yLocation = 2;else if (yLocation <= -1) yLocation = 0;
        return [xPosition[xLocation], yPosition[yLocation]];
      }
    }, {
      key: '_networkFacebook',
  
      /**
       * @method _networkFacebook
       * @description Create & display a Facebook window
       * @private
       */
      value: function _networkFacebook(element) {
        if (this.config.networks.facebook.loadSdk) {
          if (!window.FB) return console.error('The Facebook JS SDK hasn\'t loaded yet.');
          this._updateHref(element, 'https://www.facebook.com/sharer/sharer.php', {
            u: this.config.networks.facebook.url
          });
          return FB.ui({
            method: 'feed',
            name: this.config.networks.facebook.title,
            link: this.config.networks.facebook.url,
            picture: this.config.networks.facebook.image,
            caption: this.config.networks.facebook.caption,
            description: this.config.networks.facebook.description
          });
        } else return this._updateHref(element, 'https://www.facebook.com/sharer/sharer.php', {
          u: this.config.networks.facebook.url
        });
      }
    }, {
      key: '_networkTwitter',
  
      /**
       * @method _networkTwitter
       * @description Create & display a Twitter window
       * @private
       */
      value: function _networkTwitter(element) {
        this._updateHref(element, 'https://twitter.com/intent/tweet', {
          text: this.config.networks.twitter.description,
          url: this.config.networks.twitter.url
        });
      }
    }, {
      key: '_networkGooglePlus',
  
      /**
       * @method _networkGooglePlus
       * @description Create & display a Google Plus window
       * @private
       */
      value: function _networkGooglePlus(element) {
        this._updateHref(element, 'https://plus.google.com/share', {
          url: this.config.networks.googlePlus.url
        });
      }
    }, {
      key: '_networkPinterest',
  
      /**
       * @method _networkPinterest
       * @description Create & display a Pinterest window
       * @private
       */
      value: function _networkPinterest(element) {
        this._updateHref(element, 'https://www.pinterest.com/pin/create/button', {
          url: this.config.networks.pinterest.url,
          media: this.config.networks.pinterest.image,
          description: this.config.networks.pinterest.description
        });
      }
    }, {
      key: '_networkLinkedin',
  
      /**
       * @method _networkLinkedIn
       * @description Create & display a Linkedin window
       * @private
       */
      value: function _networkLinkedin(element) {
        this._updateHref(element, 'https://www.linkedin.com/shareArticle', {
          mini: 'true',
          url: this.config.networks.linkedin.url,
          title: this.config.networks.linkedin.title,
          summary: this.config.networks.linkedin.description
        });
      }
    }, {
      key: '_networkEmail',
  
      /**
       * @method _networkEmail
       * @description Create & display an Email window
       * @private
       */
      value: function _networkEmail(element) {
        this._updateHref(element, 'mailto:', {
          subject: this.config.networks.email.title,
          body: this.config.networks.email.description
        });
      }
    }, {
      key: '_networkReddit',
  
      /**
       * @method _networkReddit
       * @description Create & display a Reddit window
       * @private
       */
      value: function _networkReddit(element) {
        this._updateHref(element, 'http://www.reddit.com/submit', {
          url: this.config.networks.reddit.url,
          title: this.config.networks.reddit.title
        });
      }
    }, {
      key: '_networkWhatsapp',
  
      /**
       * @method _networkWhatsapp
       * @description Create & display a Whatsapp window
       * @private
       */
      value: function _networkWhatsapp(element) {
        this._updateHref(element, 'whatsapp://send', {
          text: this.config.networks.whatsapp.description + ' ' + this.config.networks.whatsapp.url
        });
      }
    }, {
      key: '_injectStylesheet',
  
      /**
       * @method _injectStylesheet
       * @description Inject link to stylesheet
       * @private
       *
       * @param {String} url
       */
      value: function _injectStylesheet(url) {
        if (!this.el.head.querySelector('link[href=\'' + url + '\']')) {
          var link = document.createElement('link');
          link.setAttribute('rel', 'stylesheet');
          link.setAttribute('href', url);
          this.el.head.appendChild(link);
        }
      }
    }, {
      key: '_injectHtml',
  
      /**
       * @method _injectHtml
       * @description Inject button structure
       * @private
       *
       * @param {DOMNode} instance
       */
      value: function _injectHtml(instance) {
        var networks = this.config.ui.networkOrder;
        var networkList = '';
  
        var _iteratorNormalCompletion4 = true;
        var _didIteratorError4 = false;
        var _iteratorError4 = undefined;
  
        try {
          for (var _iterator4 = networks[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
            var network = _step4.value;
  
            networkList += '<li class=\'' + network + '\' data-network=\'' + network + '\'><a></a></li>';
          }
        } catch (err) {
          _didIteratorError4 = true;
          _iteratorError4 = err;
        } finally {
          try {
            if (!_iteratorNormalCompletion4 && _iterator4['return']) {
              _iterator4['return']();
            }
          } finally {
            if (_didIteratorError4) {
              throw _iteratorError4;
            }
          }
        }
  
        instance.innerHTML = this.config.ui.buttonText + '<div class=\'' + this.config.ui.namespace + 'social load ' + this.config.ui.flyout + '\'><ul>' + networkList + '</ul></div>';
      }
    }, {
      key: '_injectFacebookSdk',
  
      /**
       * @method _injectFacebookSdk
       * @description Inject Facebook SDK
       * @private
       */
      value: function _injectFacebookSdk() {
        if (!window.FB && this.config.networks.facebook.appId && !this.el.body.querySelector('#fb-root')) {
          var script = document.createElement('script');
          script.text = 'window.fbAsyncInit=function(){FB.init({appId:\'' + this.config.networks.facebook.appId + '\',status:true,xfbml:true})};(function(e,t,n){var r,i=e.getElementsByTagName(t)[0];if (e.getElementById(n)){return}r=e.createElement(t);r.id=n;r.src=\'//connect.facebook.net/en_US/all.js\';i.parentNode.insertBefore(r,i)})(document,\'script\',\'facebook-jssdk\');';
  
          var fbRoot = document.createElement('div');
          fbRoot.id = 'fb-root';
  
          this.el.body.appendChild(fbRoot);
          this.el.body.appendChild(script);
        }
      }
    }, {
      key: '_hook',
  
      /**
       * @method _hook
       * @description Hook helper function
       * @private
       *
       * @param {String}   type
       * @param {String}   network
       * @param {DOMNode}  instance
       */
      value: function _hook(type, network, instance) {
        var fn = this.config.networks[network][type];
  
        if (typeof fn === 'function') {
          var opts = fn.call(this.config.networks[network], instance);
  
          if (opts !== undefined) {
            opts = this._normalizeFilterConfigUpdates(opts);
            this.extend(this.config.networks[network], opts, true);
            this._normalizeNetworkConfiguration();
          }
        }
      }
    }, {
      key: '_defaultTitle',
  
      /**
       * @method _defaultTitle
       * @description Gets default title
       * @private
       *
       * @returns {String}
       */
      value: function _defaultTitle() {
        var content = undefined;
        if (content = document.querySelector('meta[property="og:title"]') || document.querySelector('meta[name="twitter:title"]')) return content.getAttribute('content');else if (content = document.querySelector('title')) return content.innerText;
      }
    }, {
      key: '_defaultImage',
  
      /**
       * @method _defaultImage
       * @description Gets default image
       * @private
       *
       * @returns {String}
       */
      value: function _defaultImage() {
        var content = undefined;
        if (content = document.querySelector('meta[property="og:image"]') || document.querySelector('meta[name="twitter:image"]')) return content.getAttribute('content');
      }
    }, {
      key: '_defaultDescription',
  
      /**
       * @method _defaultDescription
       * @description Gets default description
       * @private
       *
       * @returns {String}
       */
      value: function _defaultDescription() {
        var content = undefined;
        if (content = document.querySelector('meta[property="og:description"]') || document.querySelector('meta[name="twitter:description"]') || document.querySelector('meta[name="description"]')) return content.getAttribute('content');else return '';
      }
    }, {
      key: '_detectNetworks',
  
      /**
       * @method _detectNetworks
       * @description Detect number of networks in use and display/hide
       * @private
       */
      value: function _detectNetworks() {
        // Update network-specific configuration with global configurations
        var _iteratorNormalCompletion5 = true;
        var _didIteratorError5 = false;
        var _iteratorError5 = undefined;
  
        try {
          for (var _iterator5 = Object.keys(this.config.networks)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
            var network = _step5.value;
  
            var display = undefined;
            var _iteratorNormalCompletion6 = true;
            var _didIteratorError6 = false;
            var _iteratorError6 = undefined;
  
            try {
              for (var _iterator6 = Object.keys(this.config.networks[network])[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {
                var option = _step6.value;
  
                if (this.config.networks[network][option] === null) {
                  this.config.networks[network][option] = this.config[option];
                }
              }
            } catch (err) {
              _didIteratorError6 = true;
              _iteratorError6 = err;
            } finally {
              try {
                if (!_iteratorNormalCompletion6 && _iterator6['return']) {
                  _iterator6['return']();
                }
              } finally {
                if (_didIteratorError6) {
                  throw _iteratorError6;
                }
              }
            }
  
            // Check for enabled networks and display them
            if (this.config.networks[network].enabled) {
              this['class'] = 'enabled';
              this.config.enabledNetworks += 1;
            } else this['class'] = 'disabled';
  
            this.config.networks[network]['class'] = this['class'];
          }
        } catch (err) {
          _didIteratorError5 = true;
          _iteratorError5 = err;
        } finally {
          try {
            if (!_iteratorNormalCompletion5 && _iterator5['return']) {
              _iterator5['return']();
            }
          } finally {
            if (_didIteratorError5) {
              throw _iteratorError5;
            }
          }
        }
      }
    }, {
      key: '_normalizeNetworkConfiguration',
  
      /**
       * @method _normalizeNetworkConfiguration
       * @description Normalizes network configuration for Facebook & Twitter
       * @private
       */
      value: function _normalizeNetworkConfiguration() {
        // Don't load FB SDK if FB appId isn't present
        if (!this.config.networks.facebook.appId) this.config.networks.facebook.loadSdk = false;
  
        // Encode Twitter description for URL
        if (!!this.config.networks.twitter.description) if (!this._isEncoded(this.config.networks.twitter.description)) this.config.networks.twitter.description = encodeURIComponent(this.config.networks.twitter.description);
  
        // Typecast Facebook appId to a String
        if (typeof this.config.networks.facebook.appId === 'number') this.config.networks.facebook.appId = this.config.networks.facebook.appId.toString();
      }
    }, {
      key: '_normalizeFilterConfigUpdates',
  
      /**
       * @method _normalizeFilterConfigUpdates
       * @description Normalizes Facebook config
       * @private
       *
       * @param {Object} opts
       * @returns {Object}
       */
      value: function _normalizeFilterConfigUpdates(opts) {
        if (this.config.networks.facebook.appId !== opts.appId) {
          console.warn('You are unable to change the Facebook appId after the button has been initialized. Please update your Facebook filters accordingly.');
          delete opts.appId;
        }
  
        if (this.config.networks.facebook.loadSdk !== opts.loadSdk) {
          console.warn('You are unable to change the Facebook loadSdk option after the button has been initialized. Please update your Facebook filters accordingly.');
          delete opts.appId;
        }
  
        return opts;
      }
    }]);
  
    return ShareButton;
  })(_ShareUtils3['default']);
  
  module.exports = ShareButton;
  
  },{"./ShareUtils":23,"core-js/fn/array/iterator":1,"core-js/fn/math/trunc":2,"core-js/fn/symbol":3}],23:[function(_dereq_,module,exports){
  /**
   * ShareUtils
   * @class
   * @classdesc A nice set of utilities.
   */
  "use strict";
  
  Object.defineProperty(exports, "__esModule", {
    value: true
  });
  
  var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
  
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  
  var ShareUtils = (function () {
    function ShareUtils() {
      _classCallCheck(this, ShareUtils);
    }
  
    _createClass(ShareUtils, [{
      key: "_getStyle",
      value: function _getStyle(ele, css) {
        var strValue = "";
  
        if (document.defaultView && document.defaultView.getComputedStyle) {
          strValue = document.defaultView.getComputedStyle(ele, "").getPropertyValue(css);
        } else if (ele.currentStyle) {
          css = css.replace(/\-(\w)/g, function (strMatch, p1) {
            return p1.toUpperCase();
          });
          strValue = ele.currentStyle[css];
        }
  
        return strValue;
      }
    }, {
      key: "_hide",
  
      /**
       * @method _hide
       * @description Change element's display to 'none'
       * @private
       *
       * @param {DOMNode} el
       */
      value: function _hide(el) {
        el.style.display = "none";
      }
    }, {
      key: "_show",
  
      /**
       * @method _show
       * @description Change element's display to 'block'
       * @private
       *
       * @param {DOMNode} el
       */
      value: function _show(el) {
        el.style.display = "initial";
      }
    }, {
      key: "_hasClass",
  
      /**
       * @method _hasClass
       * @description Wrapper to see if an element contains a class.
       * @private
       *
       * @param {DOMNode} el
       * @param {String}  className
       * @returns {Boolean}
       */
      value: function _hasClass(el, className) {
        return el.classList.contains(className);
      }
    }, {
      key: "_addClass",
  
      /**
       * @method addClass
       * @description Wrapper to add class to element.
       * @private
       *
       * @param {DOMNode} el
       * @param {String}  className
       */
      value: function _addClass(el, className) {
        el.classList.add(className);
      }
    }, {
      key: "_removeClass",
  
      /**
       * @method removeClass
       * @description Wrapper to remove class from element.
       * @private
       *
       * @param {DOMNode} el
       * @param {String}  className
       */
      value: function _removeClass(el, className) {
        el.classList.remove(className);
      }
    }, {
      key: "_isEncoded",
  
      /**
       * @method _isEncoded
       * @description Wrapper to check if the string is encoded.
       * @private
       *
       * @param {String}  str
       * @param {Boolean}
       */
      value: function _isEncoded(str) {
        str = str.toRFC3986();
        return decodeURIComponent(str) !== str;
      }
    }, {
      key: "_encode",
  
      /**
       * @method _encode
       * @description Wrapper to _encode a string if the string isn't already encoded.
       * @private
       *
       * @param {DOMNode} el
       * @param {String}  className
       */
      value: function _encode(str) {
        if (typeof str === "undefined" || str === null || this._isEncoded(str)) return encodeURIComponent(str);else return str.toRFC3986();
      }
    }, {
      key: "_getUrl",
  
      /**
       * @method _getUrl
       * @description Returns the correct share URL based off of the incoming
       * URL and parameters given
       * @private
       *
       * @param {String} url
       * @param {boolean} encode
       * @param {Object} params
       */
      value: function _getUrl(url) {
        var _this = this;
  
        var encode = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
        var params = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
  
        var qs = (function () {
          var results = [];
          var _iteratorNormalCompletion = true;
          var _didIteratorError = false;
          var _iteratorError = undefined;
  
          try {
            for (var _iterator = Object.keys(params)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
              var k = _step.value;
  
              var v = params[k];
              results.push(k + "=" + _this._encode(v));
            }
          } catch (err) {
            _didIteratorError = true;
            _iteratorError = err;
          } finally {
            try {
              if (!_iteratorNormalCompletion && _iterator["return"]) {
                _iterator["return"]();
              }
            } finally {
              if (_didIteratorError) {
                throw _iteratorError;
              }
            }
          }
  
          return results.join("&");
        })();
  
        if (qs) qs = "?" + qs;
  
        return url + qs;
      }
    }, {
      key: "_updateHref",
  
      /**
       * @method _updateHref
       * @description Makes the elements a tag have a href of the popup link and
       * as pops up the share window for the element
       * @private
       *
       * @param {DOMNode} element
       * @param {String} url
       * @param {Object} params
       */
      value: function _updateHref(element, url, params) {
        var encode = url.indexOf("mailto:") >= 0;
        var a = element.getElementsByTagName("a")[0];
        a.setAttribute("href", this._getUrl(url, !encode, params));
        if (!encode && (!this.config.networks.facebook.loadSdk || element.getAttribute("class") !== "facebook")) {
          var popup = {
            width: 500,
            height: 350
          };
  
          popup.top = screen.height / 2 - popup.height / 2;
          popup.left = screen.width / 2 - popup.width / 2;
  
          window.open(a.href, "targetWindow", "\n          toolbar=no,\n          location=no,\n          status=no,\n          menubar=no,\n          scrollbars=yes,\n          resizable=yes,\n          left=" + popup.left + ",\n          top=" + popup.top + ",\n          width=" + popup.width + ",\n          height=" + popup.height + "\n        ");
        }
      }
    }, {
      key: "popup",
  
      /**
       * @method popup
       * @description Create a window for specified network
       *
       * @param {String}  url
       * @param {Object}  params
       */
      value: function popup(url) {
        var _this2 = this;
  
        var params = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
  
        var popup = {
          width: 500,
          height: 350
        };
  
        popup.top = screen.height / 2 - popup.height / 2;
        popup.left = screen.width / 2 - popup.width / 2;
  
        var qs = (function () {
          var results = [];
          var _iteratorNormalCompletion2 = true;
          var _didIteratorError2 = false;
          var _iteratorError2 = undefined;
  
          try {
            for (var _iterator2 = Object.keys(params)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
              var k = _step2.value;
  
              var v = params[k];
              results.push(k + "=" + _this2._encode(v));
            }
          } catch (err) {
            _didIteratorError2 = true;
            _iteratorError2 = err;
          } finally {
            try {
              if (!_iteratorNormalCompletion2 && _iterator2["return"]) {
                _iterator2["return"]();
              }
            } finally {
              if (_didIteratorError2) {
                throw _iteratorError2;
              }
            }
          }
  
          return results.join("&");
        })();
  
        if (qs) qs = "?" + qs;
  
        // This does work even though it contains \n once converted.
        window.open(url + qs, "targetWindow", "\n        toolbar=no,\n        location=no,\n        status=no,\n        menubar=no,\n        scrollbars=yes,\n        resizable=yes,\n        left=" + popup.left + ",\n        top=" + popup.top + ",\n        width=" + popup.width + ",\n        height=" + popup.height + "\n      ");
      }
    }, {
      key: "_merge",
  
      /**
       * @method _merge
       * @description Combines two (or more) objects, giving the last one precedence
       * @author svlasov-gists
       * [Original Gist]{@link https://gist.github.com/svlasov-gists/2383751}
       *
       * @param {Object}  target
       * @param {Object}  source
       * @return {Object} target
       */
      value: (function (_merge2) {
        function _merge(_x, _x2) {
          return _merge2.apply(this, arguments);
        }
  
        _merge.toString = function () {
          return _merge2.toString();
        };
  
        return _merge;
      })(function (target, source) {
        if (typeof target !== "object") target = {};
  
        for (var property in source) {
          if (source.hasOwnProperty(property)) {
            var sourceProperty = source[property];
  
            if (typeof sourceProperty === "object") {
              target[property] = this._merge(target[property], sourceProperty);
              continue;
            }
  
            target[property] = sourceProperty;
          }
        }
  
        for (var a = 2, l = arguments.length; a < l; a++) {
          _merge(target, arguments[a]);
        }return target;
      })
    }, {
      key: "_objToArray",
  
      /**
       * @method _objectToArray
       * @description Takes an Object and converts it into an array of Objects. This is used when converting a list of DOMNodes into an array.
       *
       * @param {Object} obj
       * @returns {Array} arr
       */
      value: function _objToArray(obj) {
        var arr = [];
  
        for (var k in obj) {
          if (typeof obj[k] === "object") arr.push(obj[k]);
        }return arr;
      }
    }, {
      key: "_isMobile",
  
      /**
       * @method _isMobile
       * @description Returns true if current device is mobile (or PhantomJS for
       * testing purposes), and false otherwise
       * @author kriskbx
       * [Original Gist] {@link https://github.com/kriskbx/whatsapp-sharing/blob/master/src/button.js}
       * @private
       */
      value: function _isMobile() {
        if (navigator.userAgent.match(/Android|iPhone|PhantomJS/i) && !navigator.userAgent.match(/iPod|iPad/i)) return true;
        return false;
      }
    }]);
  
    return ShareUtils;
  })();
  
  /**
   * @method toRFC3986
   * @description Encodes the string in RFC3986
   * @memberof String
   *
   * @return {String}
   */
  String.prototype.toRFC3986 = function () {
    var tmp = encodeURIComponent(this);
    tmp.replace(/[!'()*]/g, function (c) {
      return "%" + c.charCodeAt(0).toString(16);
    });
  };
  
  /**
   * @method capFLetter
   * @description Does exactly what the method name states
   * @memberof String
   *
   * @return {String}
   */
  String.prototype.capFLetter = function () {
    return this.charAt(0).toUpperCase() + this.slice(1);
  };
  
  exports["default"] = ShareUtils;
  module.exports = exports["default"];
  
  },{}]},{},[22])
  (22)
  });