{"version":3,"sources":["webpack:///./node_modules/babel-runtime/core-js/object/keys.js","webpack:///./node_modules/babel-runtime/core-js/promise.js","webpack:///./node_modules/clamp-js-main/clamp.js","webpack:///./node_modules/core-js/library/fn/object/keys.js","webpack:///./node_modules/core-js/library/fn/promise.js","webpack:///./node_modules/core-js/library/modules/_an-instance.js","webpack:///./node_modules/core-js/library/modules/_for-of.js","webpack:///./node_modules/core-js/library/modules/_invoke.js","webpack:///./node_modules/core-js/library/modules/_microtask.js","webpack:///./node_modules/core-js/library/modules/_new-promise-capability.js","webpack:///./node_modules/core-js/library/modules/_object-sap.js","webpack:///./node_modules/core-js/library/modules/_perform.js","webpack:///./node_modules/core-js/library/modules/_promise-resolve.js","webpack:///./node_modules/core-js/library/modules/_redefine-all.js","webpack:///./node_modules/core-js/library/modules/_set-species.js","webpack:///./node_modules/core-js/library/modules/_species-constructor.js","webpack:///./node_modules/core-js/library/modules/_task.js","webpack:///./node_modules/core-js/library/modules/es6.object.keys.js","webpack:///./node_modules/core-js/library/modules/es6.promise.js","webpack:///./node_modules/core-js/library/modules/es7.promise.finally.js","webpack:///./node_modules/core-js/library/modules/es7.promise.try.js","webpack:///./node_modules/date-fns/difference_in_calendar_days/index.js","webpack:///./node_modules/date-fns/format/index.js","webpack:///./node_modules/date-fns/get_day_of_year/index.js","webpack:///./node_modules/date-fns/get_iso_week/index.js","webpack:///./node_modules/date-fns/get_iso_year/index.js","webpack:///./node_modules/date-fns/is_date/index.js","webpack:///./node_modules/date-fns/is_valid/index.js","webpack:///./node_modules/date-fns/locale/_lib/build_formatting_tokens_reg_exp/index.js","webpack:///./node_modules/date-fns/locale/en/build_distance_in_words_locale/index.js","webpack:///./node_modules/date-fns/locale/en/build_format_locale/index.js","webpack:///./node_modules/date-fns/locale/en/index.js","webpack:///./node_modules/date-fns/parse/index.js","webpack:///./node_modules/date-fns/start_of_day/index.js","webpack:///./node_modules/date-fns/start_of_iso_week/index.js","webpack:///./node_modules/date-fns/start_of_iso_year/index.js","webpack:///./node_modules/date-fns/start_of_week/index.js","webpack:///./node_modules/date-fns/start_of_year/index.js","webpack:///./node_modules/instafeed.js/instafeed.js","webpack:///./node_modules/twitter-fetcher/js/twitterFetcher_min.js","webpack:///./src/_js/partials/SocialStream.js","webpack:///./src/_js/partials/filterizr.js"],"names":[],"mappings":"qGAAA,UAAkB,+D,kFCAlB,UAAkB,2D,sECAlB,UASA;;;;;;;iBAGA,iEAQA,WAAC,kBAMD,CA2PA,oBA1PA,gBAoCA,UACA,iDACA,aACA,sCACA,OACA,uCACA,gBACA,kCACA,qBACA,aAEA,wDACA,IACA,EACA,IAGA,8BACA,mBAMA,cACA,YACA,eAEA,qCACA,EAMA,cACA,OAEA,WACA,IAKA,cACA,WACA,qBAGA,gBAEA,4CACA,cAIA,cASA,UAIA,gCACA,uEAGA,gGACA,iBAOA,gDANA,WAIA,YAQA,gBACA,aAQA,wBACA,OACA,KACA,OACA,IAGA,IARA,iDAaA,IAiCA,SAhCA,aAIA,QAGA,OAKA,UAEA,gBAEA,YAIA,YAKA,0DACA,8CAIA,mBAoBA,aACA,MAEA,KAKA,eAvBA,gCACA,aACA,eAIA,mBAQA,mBAUA,kCACA,CACA,MAAS,sBAET,SAEA,OAEA,gBACA,iBACA,cAKA,GAzNA,SAmBA,KAlBA,OACA,SACA,gBACA,yDACA,8BACA,wDACA,6CACA,0BAGA,oBACA,UAEA,YACA,gDACA,yCACA,qBAGA,0CACA,sBAYA,mBA4DA,GAKA,yBAPA,OACA,GA8HA,YAEA,YAGA,iBACA,WACA,0BACA,wBACA,6BACA,qBACA,gBAGA,uCAEK,UACL,OACA,SACA,mBAEA,QAEA,OACA,CACA,WAEA,UAEA,CACC,uECrRD,+DACA,2ICDA,oEACA,mEACA,gEACA,2DACA,mEACA,+DACA,6ICNA,2BACA,mCACA,yBACG,2BACH,+ECJA,QACA,sDACA,4DACA,gEACA,4DACA,4DACA,sEACA,KACA,oCACA,WAIA,gBAJuC,CAAiB,QAAE,EAC1D,iBACA,KACA,4CAGA,wCAAmE,QAAgB,IACnF,kCACA,mBACG,uBAA4C,sBAC/C,mBACA,sBAEA,UACA,UACA,2ECxBA,CACA,yBACA,OACA,oBACA,wBACA,MACA,4BACA,eACA,6BACA,oBACA,kCACA,yBACA,uCACA,8BACG,cACH,oFCfA,QACA,4GACA,4BACA,2BACA,YACA,4EAEA,oBACA,SAEA,cACA,OACA,yBACA,UACA,KACA,OACA,QACA,CACA,GAAO,SACP,CAGA,QAFA,IACA,UAEA,CAAK,CACL,cACA,OAGA,EACA,iBACA,GACA,WAEG,YACH,IACA,gCACA,uBAAuC,CACvC,+BACA,UACA,EAEA,CAAG,sBACH,SACA,sBACA,GACA,OAOA,CACA,kBAEA,GACA,SAGA,oBACA,OAAgB,MAChB,mBAEA,YACA,IACK,KACL,GACA,wFClEA,aAGA,aACA,OACA,kCACA,yCACA,2BACA,IACA,GACA,gBACA,iBACA,KAXA,iEAaA,uBACA,OACA,mFCjBA,CACA,QACA,yDACA,2GACA,uBACA,UAA6B,gBAC7B,UACA,UACA,2BAAqD,GAAO,EAAE,GAC9D,+ECTA,qBACA,IACA,OAAY,QACZ,IAAG,SACH,OAAY,MACZ,IACA,iFCNA,QACA,4DACA,iIAEA,uBACA,IACA,6BACA,iBACA,SACA,cACA,QACA,oFCXA,2DACA,yBACA,QACA,qBACA,WACG,MACH,oFCNA,aACA,QACA,yDACA,uDACA,4DACA,2HAEA,qBACA,oCACA,0BACA,CACA,8BAAsB,OAAa,KAEnC,sFCbA,CACA,QACA,4DACA,0HACA,uBACA,IAEA,UADA,qDAEA,yECRA,QAcA,MAbA,sDACA,yDACA,uDACA,6DACA,yDACA,YACA,iBACA,mBACA,mBACA,WACA,EACA,OACA,iCAEA,QAEA,4BACA,OACA,WACA,MACA,GACA,CACA,eACA,UACA,KAEA,EACA,oBACA,QACA,QACA,uCACA,MAMA,wBAJA,0BACA,cACA,EACA,MAEA,eACA,OACA,KAEA,EACA,+EACA,kBACA,GAEG,OACH,iBACA,aACA,GAGA,OACA,UACA,cACA,gCAGG,2DACH,4BACA,oBACA,IACA,qBAEG,wBACH,uBACA,yCACA,eACA,QACA,OACA,CAGA,eACA,qBACA,EAEA,GACA,UACA,CACA,MACA,qFCnFA,CACA,QACA,sHAEA,4EACA,mBACA,UACA,KACA,CAAC,4ECRD,aACA,UAsBA,MArBA,0DACA,yDACA,sDACA,0DACA,yDACA,4DACA,6DACA,8DACA,yDACA,yHACA,QACA,8DACA,yEACA,0DACA,gEACA,cACA,cACA,UACA,OACA,4BAAyB,CACzB,QAGA,gBACA,IAEA,iBACA,QAA+C,2FAC/C,CACA,MAEA,yDACA,mBAAG,SAAY,CACf,CAGA,iBACA,IACA,gBACA,+BACA,iBACA,OACA,MACA,cACA,eACA,aACA,KACA,UACA,eACA,OAKA,aAJA,SACA,YACA,WACA,UAGA,IACA,cACA,UAEA,UAEA,UACA,UACA,UAEA,cACA,YACW,2BACX,QACW,YACF,MACT,IAAO,SACP,CACA,IACA,CACA,kBACA,QACA,QACA,gBACA,IACA,GACA,eACA,oBACA,SAIA,MAHA,KACA,0BAIA,UACS,+BACT,wBAAmB,WACV,4BACT,eAEA,gCAEA,kBACK,KACL,yBACA,CACA,EACA,eACA,YACA,gBAGA,aAFA,KACA,IAEA,iBACA,2BACG,SACH,QACA,eACA,oBACA,IAEA,YACK,2BACL,uBAAe,oBAEf,IACA,EACA,eACA,OACA,OACA,OACA,UACA,QACA,UACA,oBACA,SACA,QACA,eACA,IAEA,KADA,WAEA,MACA,UACA,SACA,kBACA,uCACA,kBACA,OAAuB,MACvB,UACA,yBACA,GAAS,SACT,GACA,SACA,CAEA,MACA,UACA,EAEA,QAAG,SACH,QAAkB,MAClB,SACA,EAKA,mBACA,YACA,MACA,YACA,SACA,wBACA,GAAK,SACL,QACA,OACA,CAEA,cACA,MACA,WACA,kBACA,OACA,WACA,kBACA,OACA,KACA,uFAEA,mBACA,WACA,qBACA,+BACA,qCACA,sBACA,yBACA,mBACA,WACA,OAEA,mBACA,aACA,cAEA,gBACA,OACA,WACA,6BACA,qBACA,EACA,mBACA,eACA,MACA,SACA,IACA,GAEA,iBAA0D,CAAoB,YAC9E,uEACA,+DACA,IAEA,sDACA,eAEA,mBACA,SACA,UACA,aACA,QACA,OACC,IACD,oBAEA,oBACA,wBACA,OACC,IACD,sFACA,UACA,WAAC,MAED,gBACA,OACA,OACA,SACA,YACA,qBACA,IACA,QACA,IACA,oBACA,OACA,IACA,OACA,aACA,iCAEA,KACA,KACA,YACA,KACA,IACA,QACA,IACA,mBACA,KACA,OAEA,kBACA,OACA,OACA,SACA,qBACA,mBACA,qBACA,UACA,EACA,mBACA,KACA,OACC,qFCtRD,aACA,QACA,yDACA,uDACA,yDACA,oIAEA,oBAA2C,oBAC3C,2BACA,WACA,iCACA,kBACA,gCAA8D,CAAU,QACxE,EACA,iBACA,gCAA8D,CAAS,OACvE,EAEA,IAAG,iFClBH,aACA,QACA,yDACA,+HAEA,gBAA+B,gBAC/B,WACA,QACA,sCACA,KACA,OAAG,oFCXH,QAEA,iDAsBA,MAgBA,UAfA,aACA,OACA,OAEA,SACA,YACA,0BACA,YAKA,yCACA,wECtCA,CAmRA,iBACA,IAIA,GACA,MAJA,aAEA,aAEa,EAAY,IACzB,iBAEA,MAEA,WAIA,wBACA,WACA,KAAmB,EAAY,IAC/B,qBACA,UAEA,UAGA,KACA,QACA,EAEA,aACA,gBACA,gCAEA,oBACA,IAEA,eACA,MACA,iBACA,iBAEA,0BACA,GACA,GAEA,eACA,gBACA,aACA,YAEA,MACA,oBAXA,qBAzTA,wDACA,qDACA,qDACA,8CACA,iDAoFA,gDA6BA,cACA,qBACA,CAGA,gBACA,yBACA,EAGA,eACA,mCACA,EAGA,eACA,UACA,SAGA,gBACA,sBACA,EAGA,iBACA,OACA,KAGA,kBACA,eACA,EAGA,eACA,UACA,QAGA,eACA,oBACA,CAGA,eACA,OACA,KAGA,gBACA,eACA,EAGA,gBACA,oCACA,EAGA,kBACA,0BACA,EAGA,gBACA,wBACA,EAGA,kBACA,OACA,KAGA,eACA,UACA,UAGA,gBACA,uBACA,EAGA,eACA,SACA,iBACA,OACK,GACL,OAIA,IAGA,gBACA,iBACA,EAGA,eACA,UACA,YAGA,gBACA,yBACA,EAGA,eACA,UACA,YAGA,gBACA,yBACA,EAGA,eACA,8BACA,IAGA,gBACA,oCACA,EAGA,iBACA,8BACA,EAGA,eACA,gCACA,IAGA,gBACA,YACA,oBAGA,eACA,YACA,cAGA,eACA,UACA,SACA,GAsDA,UA7OA,eACA,cACA,8BAEA,OACA,kBACA,sBACA,6CACA,wBAEA,oBACA,oCAIA,+BAEA,SACA,WAGA,qBAEA,eACA,KAEA,sECpHA,QACA,8CACA,sDAgBA,gEAQA,UAPA,WACA,OACA,WACA,MAEA,SADA,oECvBA,QACA,8CACA,0DAoBA,sDAWA,UAVA,WACA,OACA,2BAKA,uCACA,oEC/BA,QACA,8CAmBA,sDAwBA,UAvBA,WACA,OACA,SAEA,yBACA,uBACA,oBACA,SAEA,gBACA,qBACA,oBACA,SAEA,2BACA,YACG,iBAGH,cAEA,0DC5BA,CAKA,UAJA,WACA,oBACA,oECjBA,QAyBA,4CASA,UARA,WACA,IACA,YAEA,8CAEA,4HChCA,GAMA,qJAqBA,UAnBA,WACA,IACA,aACA,UACA,qBAIA,cACA,EACA,UACA,OACA,eACA,qDAGA,KACA,mGCyEA,UAlGA,UACA,OACA,kBACA,KACA,2BAGA,wCACA,KACA,iBAGA,iCAEA,iCACA,KACA,2BAGA,wCACA,KACA,iBAGA,iCACA,KACA,qBAGA,gCACA,KACA,eAGA,yBACA,KACA,cAGA,+BACA,KACA,sBAGA,kCACA,KACA,gBAGA,gCACA,KACA,qBAGA,gCACA,KACA,eAGA,8BACA,KACA,oBAGA,qCACA,KACA,sBAIA,iCAwBA,CAEA,wBAzBA,GAEA,SACA,YACA,sBACK,KACL,WAEA,uBAGA,iBACA,UACA,eAEA,UAKA,QAEA,sFCrBA,aACA,SACA,aACA,cACA,QACA,YACA,SACA,YACA,SACA,YAGA,eACA,KArFA,wFAuFA,UArFA,UAKA,IACA,6EACA,kHACA,uCACA,8CACA,2EACA,cACA,cAEA,oBAEA,gBACA,YACA,WAGA,kBACA,YACA,WAGA,gBACA,YACA,SAGA,iBACA,YACA,SAGA,kBACA,YACA,SAGA,eACA,kCACA,EAGA,eACA,kCACA,EAGA,gBACA,kCACA,EAKA,wDACA,uBACA,UACA,QACA,CAEA,GACA,CACA,oCAEA,qECtEA,QACA,iFAKA,kEACA,UACA,iBACA,WACA,+DCgHA,aACA,IAIA,GAHA,SACA,qBAGA,YACA,SAEA,cACA,OAGA,MACA,SAEA,iCACA,iBAEA,MAEA,MAEA,CACA,SAEA,eACA,IAMA,KALA,OAEA,uBAIA,UACA,SACA,SACA,iBACA,6BAEA,QAGA,mBACA,UACA,SACA,SACA,MACA,4CAEA,QAGA,OACA,MAEA,MAEA,eAEA,IACA,eAGA,SACA,GACA,EACA,EAGA,KACA,aAMA,kBALA,KACA,oBAMA,OADA,UAQA,kBANA,uBACA,IACA,6BAKA,UACA,YACA,uBACA,IAEA,0BADA,MAIA,QACA,UACA,YACA,uBACA,sBACA,IAEA,SADA,uBAIA,CAEA,OADA,qCAEA,EAIA,cACA,UACA,qBACA,0BACA,QACA,SAGA,OACA,MAEA,aACA,IACA,GACA,EAGA,EAEA,OADA,+CAEA,QAIA,KAEA,OADA,iCAEA,kCACA,QACA,KAIA,WACA,UACA,iBACA,oBACA,sCACA,eACA,KACA,IACA,KAGA,OACA,MAEA,aACA,IACA,GAGA,aAEA,WAIA,OAEA,cACA,gCAIA,WAEA,gDACA,eAGA,MACA,GAEA,iBACA,MACA,OACA,iBACA,wBACA,wBACA,UACA,IAEA,sBADA,kBA5TA,QAEA,4CACA,QACA,QAGA,SAGA,MACA,cACA,CACA,gBACA,gBAGA,mBACA,aACA,CACA,eACA,eAIA,kBACA,eACA,gBACA,yBACA,iBAGA,0BACA,wBACA,iCAGA,0CACA,eACA,UACA,oBAkCA,2BAqPA,UApPA,aACA,IAEA,uBACG,cACH,6BAGA,gBACA,OACA,mBAMA,QArFA,WAuFA,WACA,YACA,SAEA,iBAEA,YACA,IAIA,OAHA,YACA,WAGA,aAGA,SACA,eAGA,2BACA,wCAGA,kCACA,IACA,WAEA,2ECxHA,QAiBA,0CAOA,UANA,WACA,OACA,KAEA,wBADA,4ECrBA,QAmBA,kDAKA,UAJA,WACA,aAAiC,aACjC,2ECtBA,QACA,qDAoBA,sDAUA,UATA,WACA,OACA,gBACA,qBACA,oBACA,SACA,KACA,4EC7BA,QAwBA,0CAaA,UAZA,aACA,4BAEA,IACA,SACA,kBAEA,OAGA,mBAFA,8BACA,wEClCA,QAiBA,0CASA,UARA,WACA,OACA,gBACA,GAGA,uCAFA,oBACA,gECvBA,UACA,WACA,IAEA,eACA,gBACA,OACA,kBACA,QACA,gBACA,qBACA,mBACA,OACA,SACA,QAEA,YACA,mBACA,aACA,UAGA,kCACA,wBACA,SAEA,CA0UA,qCAzUA,8CACA,6BAEA,6BACA,cAGA,iCACA,QAEA,6BACA,SACA,KACA,wCACA,0DAGA,uCACA,2CACA,uDAGA,oCAcA,kCAbA,iEAEA,oCACA,2CACA,eACA,kCACA,4CACA,aACA,uCACA,oCACA,4BAEA,UAGA,+BACA,mEACA,wBACA,8BACA,sCAGA,oCAFA,wCAIA,wBACA,sBACA,8BACA,sCAGA,2CAFA,kEAIA,cACA,sBACA,8BACA,sCAGA,oCAFA,6DAIA,yCACA,gCACA,mEAEA,6BACA,GACA,uDAEA,UACA,sCAGA,uEAEA,OACA,iBACA,QACA,+BACA,iBACA,QACA,GACA,UACA,oCACA,kBACA,UACA,mCACA,iBACA,UACA,uCACA,oBACA,MACA,2EAGA,gFACA,QACA,mCACA,gCACA,qBAEA,iBACA,oDACA,uEAEA,6EACA,OACA,KACA,KACA,4BACA,gBAA0C,QAAS,QACnD,MACA,6BACA,YACA,qFACA,OAEA,cACA,UACA,SACA,SACA,QAEA,aACA,QAEA,gBACA,MACA,6DACA,oCAEA,kDACA,CACA,aACA,UACA,YACA,KACA,QACA,QACA,SACA,gDACA,8BACA,0BACA,yCAEA,mBACA,IACA,OACA,YACA,OACA,iBACA,OACA,cACA,kBAEA,cAAkD,OAAU,IAC5D,MACA,OAEA,cACA,kBAA2C,OAAU,QACrD,MACA,8BACA,+BACA,YACA,qFACA,OAEA,cACA,MACA,6DACA,oCAEA,SACA,wBACA,gCACA,cACA,OACA,iBAEA,kBAEA,cAEA,mBACA,OACA,gCAEA,mBACA,4DACA,iBAEA,YACA,uDACA,yCACA,8CACA,qBACA,MACA,OACA,UAAS,SAET,CACA,CACA,CAIA,iCAHA,+DAEA,QAGA,kCACA,SACA,WACA,4CACA,SACA,YACA,gBACA,UACA,0BACA,wBAEA,mFACA,gBACA,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","file":"socialstream.js?v=13f8e2718ef505909c85","sourcesContent":["module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/core-js/object/keys.js\n// module id = ./node_modules/babel-runtime/core-js/object/keys.js\n// module chunks = socialstream wingtagsmap","module.exports = { \"default\": require(\"core-js/library/fn/promise\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/core-js/promise.js\n// module id = ./node_modules/babel-runtime/core-js/promise.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","/*!\n * Clamp.js 0.11.4\n *\n * Now Maintained by Josh English http://joshengish.com\n * Joseph Schmitt http://joe.sh\n * Released under the WTFPL license\n * http://sam.zoy.org/wtfpl/\n */\n\n(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD\n define([], factory);\n } else if (typeof exports === 'object') {\n // Node, CommonJS-like\n module.exports = factory();\n } else {\n // Browser globals\n root.$clamp = factory();\n }\n}(this, function() {\n /**\n * Clamps a text node.\n * @param {HTMLElement} element. Element containing the text node to clamp.\n * @param {Object} options. Options to pass to the clamper.\n */\n function clamp(element, options) {\n options = options || {};\n\n var self = this,\n win = window,\n opt = {\n clamp: options.clamp || 2,\n useNativeClamp: typeof(options.useNativeClamp) != 'undefined' ? options.useNativeClamp : true,\n splitOnChars: options.splitOnChars || ['.', '-', '–', '—', ' '], //Split on sentences (periods), hypens, en-dashes, em-dashes, and words (spaces).\n animate: options.animate || false,\n truncationChar: options.truncationChar || '…',\n truncationHTML: options.truncationHTML\n },\n\n sty = element.style,\n originalText = element.innerHTML,\n\n supportsNativeClamp = typeof(element.style.webkitLineClamp) != 'undefined',\n clampValue = opt.clamp,\n isCSSValue = clampValue.indexOf && (clampValue.indexOf('px') > -1 || clampValue.indexOf('em') > -1),\n truncationHTMLContainer;\n\n if (opt.truncationHTML) {\n truncationHTMLContainer = document.createElement('span');\n truncationHTMLContainer.innerHTML = opt.truncationHTML;\n }\n\n\n // UTILITY FUNCTIONS __________________________________________________________\n\n /**\n * Return the current style for an element.\n * @param {HTMLElement} elem The element to compute.\n * @param {string} prop The style property.\n * @returns {number}\n */\n function computeStyle(elem, prop) {\n if (!win.getComputedStyle) {\n win.getComputedStyle = function(el, pseudo) {\n this.el = el;\n this.getPropertyValue = function(prop) {\n var re = /(\\-([a-z]){1})/g;\n if (prop == 'float') prop = 'styleFloat';\n if (re.test(prop)) {\n prop = prop.replace(re, function() {\n return arguments[2].toUpperCase();\n });\n }\n return el.currentStyle && el.currentStyle[prop] ? el.currentStyle[prop] : null;\n };\n return this;\n };\n }\n\n return win.getComputedStyle(elem, null).getPropertyValue(prop);\n }\n\n /**\n * Returns the maximum number of lines of text that should be rendered based\n * on the current height of the element and the line-height of the text.\n */\n function getMaxLines(height) {\n var availHeight = height || element.clientHeight,\n lineHeight = getLineHeight(element);\n\n return Math.max(Math.floor(availHeight / lineHeight), 0);\n }\n\n /**\n * Returns the maximum height a given element should have based on the line-\n * height of the text and the given clamp value.\n */\n function getMaxHeight(clmp) {\n var lineHeight = getLineHeight(element);\n // console.log(lineHeight * clmp);\n return lineHeight * clmp;\n }\n\n /**\n * Returns the line-height of an element as an integer.\n */\n function getLineHeight(elem) {\n var lh = computeStyle(elem, 'line-height');\n if (lh == 'normal') {\n // Normal line heights vary from browser to browser. The spec recommends\n // a value between 1.0 and 1.2 of the font size. Using 1.1 to split the diff.\n lh = parseInt(computeStyle(elem, 'font-size')) * 1.187;\n }\n return Math.ceil(parseFloat(lh));\n }\n\n\n // MEAT AND POTATOES (MMMM, POTATOES...) ______________________________________\n var splitOnChars = opt.splitOnChars.slice(0),\n splitChar = splitOnChars[0],\n chunks,\n lastChunk;\n\n /**\n * Gets an element's last child. That may be another node or a node's contents.\n */\n function getLastChild(elem) {\n if (!elem.lastChild) {\n return;\n }\n //Current element has children, need to go deeper and get last child as a text node\n if (elem.lastChild.children && elem.lastChild.children.length > 0) {\n return getLastChild(Array.prototype.slice.call(elem.children).pop());\n }\n //This is the absolute last child, a text node, but something's wrong with it. Remove it and keep trying\n else if (!elem.lastChild || !elem.lastChild.nodeValue || elem.lastChild.nodeValue === '' || elem.lastChild.nodeValue == opt.truncationChar) {\n elem.lastChild.parentNode.removeChild(elem.lastChild);\n return getLastChild(element);\n }\n //This is the last child we want, return it\n else {\n return elem.lastChild;\n }\n }\n\n /**\n * Removes one character at a time from the text until its width or\n * height is beneath the passed-in max param.\n */\n function truncate(target, maxHeight) {\n if (!target || !maxHeight) {\n return;\n }\n\n /**\n * Resets global variables.\n */\n function reset() {\n splitOnChars = opt.splitOnChars.slice(0);\n splitChar = splitOnChars[0];\n chunks = null;\n lastChunk = null;\n }\n // console.log(splitOnChars);\n\n var nodeValue = target.nodeValue.replace(opt.truncationChar, '');\n\n //Grab the next chunks\n if (!chunks) {\n //If there are more characters to try, grab the next one\n if (splitOnChars.length > 0) {\n splitChar = splitOnChars.shift();\n }\n //No characters to chunk by. Go character-by-character\n else {\n splitChar = '';\n }\n\n chunks = nodeValue.split(splitChar);\n }\n\n //If there are chunks left to remove, remove the last one and see if\n // the nodeValue fits.\n if (chunks.length > 1) {\n // console.log('chunks', chunks);\n lastChunk = chunks.pop();\n // console.log('lastChunk', lastChunk);\n applyEllipsis(target, chunks.join(splitChar));\n }\n //No more chunks can be removed using this character\n else {\n chunks = null;\n }\n\n //Insert the custom HTML before the truncation character\n if (truncationHTMLContainer) {\n target.nodeValue = target.nodeValue.replace(opt.truncationChar, '');\n element.innerHTML = target.nodeValue + ' ' + truncationHTMLContainer.innerHTML + opt.truncationChar;\n }\n\n //Search produced valid chunks\n if (chunks) {\n //It fits\n if (element.clientHeight <= maxHeight) {\n // console.log(element.clientHeight, maxHeight);\n //There's still more characters to try splitting on, not quite done yet\n if (splitOnChars.length >= 0 && splitChar !== '') {\n applyEllipsis(target, chunks.join(splitChar) + splitChar + lastChunk);\n chunks = null;\n }\n //Finished!\n else {\n return element.innerHTML;\n }\n }\n }\n //No valid chunks produced\n else {\n //No valid chunks even when splitting by letter, time to move\n //on to the next node\n if (splitChar === '') {\n applyEllipsis(target, '');\n target = getLastChild(element);\n\n reset();\n }\n }\n\n //If you get here it means still too big, let's keep truncating\n if (opt.animate) {\n setTimeout(function() {\n truncate(target, maxHeight);\n }, opt.animate === true ? 10 : opt.animate);\n } else {\n return truncate(target, maxHeight);\n }\n }\n\n function applyEllipsis(elem, str) {\n elem.nodeValue = str + opt.truncationChar;\n }\n\n\n // CONSTRUCTOR ________________________________________________________________\n\n if (clampValue == 'auto') {\n clampValue = getMaxLines();\n } else if (isCSSValue) {\n clampValue = getMaxLines(parseInt(clampValue));\n }\n\n var clampedText;\n if (supportsNativeClamp && opt.useNativeClamp) {\n sty.overflow = 'hidden';\n sty.textOverflow = 'ellipsis';\n sty.webkitBoxOrient = 'vertical';\n sty.display = '-webkit-box';\n sty.webkitLineClamp = clampValue;\n\n if (isCSSValue) {\n sty.height = opt.clamp + 'px';\n }\n } else {\n var height = getMaxHeight(clampValue);\n if (height < element.clientHeight) {\n clampedText = truncate(getLastChild(element), height);\n }\n }\n\n return {\n 'original': originalText,\n 'clamped': clampedText\n };\n }\n\n return clamp;\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/clamp-js-main/clamp.js\n// module id = ./node_modules/clamp-js-main/clamp.js\n// module chunks = socialstream","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/fn/object/keys.js\n// module id = ./node_modules/core-js/library/fn/object/keys.js\n// module chunks = socialstream wingtagsmap","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/fn/promise.js\n// module id = ./node_modules/core-js/library/fn/promise.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_an-instance.js\n// module id = ./node_modules/core-js/library/modules/_an-instance.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_for-of.js\n// module id = ./node_modules/core-js/library/modules/_for-of.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_invoke.js\n// module id = ./node_modules/core-js/library/modules/_invoke.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver\n } else if (Observer) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_microtask.js\n// module id = ./node_modules/core-js/library/modules/_microtask.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_new-promise-capability.js\n// module id = ./node_modules/core-js/library/modules/_new-promise-capability.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_object-sap.js\n// module id = ./node_modules/core-js/library/modules/_object-sap.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap wingtagsmap","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_perform.js\n// module id = ./node_modules/core-js/library/modules/_perform.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_promise-resolve.js\n// module id = ./node_modules/core-js/library/modules/_promise-resolve.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_redefine-all.js\n// module id = ./node_modules/core-js/library/modules/_redefine-all.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_set-species.js\n// module id = ./node_modules/core-js/library/modules/_set-species.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_species-constructor.js\n// module id = ./node_modules/core-js/library/modules/_species-constructor.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_task.js\n// module id = ./node_modules/core-js/library/modules/_task.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/es6.object.keys.js\n// module id = ./node_modules/core-js/library/modules/es6.object.keys.js\n// module chunks = socialstream wingtagsmap","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n if (promise._h == 1) return false;\n var chain = promise._a || promise._c;\n var i = 0;\n var reaction;\n while (chain.length > i) {\n reaction = chain[i++];\n if (reaction.fail || !isUnhandled(reaction.promise)) return false;\n } return true;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/es6.promise.js\n// module id = ./node_modules/core-js/library/modules/es6.promise.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/es7.promise.finally.js\n// module id = ./node_modules/core-js/library/modules/es7.promise.finally.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/es7.promise.try.js\n// module id = ./node_modules/core-js/library/modules/es7.promise.try.js\n// module chunks = socialstream herbariumprogress herbariumgallery map bluemountainmap homefeatures","var startOfDay = require('../start_of_day/index.js')\n\nvar MILLISECONDS_IN_MINUTE = 60000\nvar MILLISECONDS_IN_DAY = 86400000\n\n/**\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates.\n *\n * @param {Date|String|Number} dateLeft - the later date\n * @param {Date|String|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n */\nfunction differenceInCalendarDays (dirtyDateLeft, dirtyDateRight) {\n var startOfDayLeft = startOfDay(dirtyDateLeft)\n var startOfDayRight = startOfDay(dirtyDateRight)\n\n var timestampLeft = startOfDayLeft.getTime() -\n startOfDayLeft.getTimezoneOffset() * MILLISECONDS_IN_MINUTE\n var timestampRight = startOfDayRight.getTime() -\n startOfDayRight.getTimezoneOffset() * MILLISECONDS_IN_MINUTE\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a day is not constant\n // (e.g. it's different in the day of the daylight saving time clock shift)\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY)\n}\n\nmodule.exports = differenceInCalendarDays\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/difference_in_calendar_days/index.js\n// module id = ./node_modules/date-fns/difference_in_calendar_days/index.js\n// module chunks = socialstream map wingtagsmap","var getDayOfYear = require('../get_day_of_year/index.js')\nvar getISOWeek = require('../get_iso_week/index.js')\nvar getISOYear = require('../get_iso_year/index.js')\nvar parse = require('../parse/index.js')\nvar isValid = require('../is_valid/index.js')\nvar enLocale = require('../locale/en/index.js')\n\n/**\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format.\n *\n * Accepted tokens:\n * | Unit | Token | Result examples |\n * |-------------------------|-------|----------------------------------|\n * | Month | M | 1, 2, ..., 12 |\n * | | Mo | 1st, 2nd, ..., 12th |\n * | | MM | 01, 02, ..., 12 |\n * | | MMM | Jan, Feb, ..., Dec |\n * | | MMMM | January, February, ..., December |\n * | Quarter | Q | 1, 2, 3, 4 |\n * | | Qo | 1st, 2nd, 3rd, 4th |\n * | Day of month | D | 1, 2, ..., 31 |\n * | | Do | 1st, 2nd, ..., 31st |\n * | | DD | 01, 02, ..., 31 |\n * | Day of year | DDD | 1, 2, ..., 366 |\n * | | DDDo | 1st, 2nd, ..., 366th |\n * | | DDDD | 001, 002, ..., 366 |\n * | Day of week | d | 0, 1, ..., 6 |\n * | | do | 0th, 1st, ..., 6th |\n * | | dd | Su, Mo, ..., Sa |\n * | | ddd | Sun, Mon, ..., Sat |\n * | | dddd | Sunday, Monday, ..., Saturday |\n * | Day of ISO week | E | 1, 2, ..., 7 |\n * | ISO week | W | 1, 2, ..., 53 |\n * | | Wo | 1st, 2nd, ..., 53rd |\n * | | WW | 01, 02, ..., 53 |\n * | Year | YY | 00, 01, ..., 99 |\n * | | YYYY | 1900, 1901, ..., 2099 |\n * | ISO week-numbering year | GG | 00, 01, ..., 99 |\n * | | GGGG | 1900, 1901, ..., 2099 |\n * | AM/PM | A | AM, PM |\n * | | a | am, pm |\n * | | aa | a.m., p.m. |\n * | Hour | H | 0, 1, ... 23 |\n * | | HH | 00, 01, ... 23 |\n * | | h | 1, 2, ..., 12 |\n * | | hh | 01, 02, ..., 12 |\n * | Minute | m | 0, 1, ..., 59 |\n * | | mm | 00, 01, ..., 59 |\n * | Second | s | 0, 1, ..., 59 |\n * | | ss | 00, 01, ..., 59 |\n * | 1/10 of second | S | 0, 1, ..., 9 |\n * | 1/100 of second | SS | 00, 01, ..., 99 |\n * | Millisecond | SSS | 000, 001, ..., 999 |\n * | Timezone | Z | -01:00, +00:00, ... +12:00 |\n * | | ZZ | -0100, +0000, ..., +1200 |\n * | Seconds timestamp | X | 512969520 |\n * | Milliseconds timestamp | x | 512969520900 |\n *\n * The characters wrapped in square brackets are escaped.\n *\n * The result may vary by locale.\n *\n * @param {Date|String|Number} date - the original date\n * @param {String} [format='YYYY-MM-DDTHH:mm:ss.SSSZ'] - the string of tokens\n * @param {Object} [options] - the object with options\n * @param {Object} [options.locale=enLocale] - the locale object\n * @returns {String} the formatted date string\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(\n * new Date(2014, 1, 11),\n * 'MM/DD/YYYY'\n * )\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * var eoLocale = require('date-fns/locale/eo')\n * var result = format(\n * new Date(2014, 6, 2),\n * 'Do [de] MMMM YYYY',\n * {locale: eoLocale}\n * )\n * //=> '2-a de julio 2014'\n */\nfunction format (dirtyDate, dirtyFormatStr, dirtyOptions) {\n var formatStr = dirtyFormatStr ? String(dirtyFormatStr) : 'YYYY-MM-DDTHH:mm:ss.SSSZ'\n var options = dirtyOptions || {}\n\n var locale = options.locale\n var localeFormatters = enLocale.format.formatters\n var formattingTokensRegExp = enLocale.format.formattingTokensRegExp\n if (locale && locale.format && locale.format.formatters) {\n localeFormatters = locale.format.formatters\n\n if (locale.format.formattingTokensRegExp) {\n formattingTokensRegExp = locale.format.formattingTokensRegExp\n }\n }\n\n var date = parse(dirtyDate)\n\n if (!isValid(date)) {\n return 'Invalid Date'\n }\n\n var formatFn = buildFormatFn(formatStr, localeFormatters, formattingTokensRegExp)\n\n return formatFn(date)\n}\n\nvar formatters = {\n // Month: 1, 2, ..., 12\n 'M': function (date) {\n return date.getMonth() + 1\n },\n\n // Month: 01, 02, ..., 12\n 'MM': function (date) {\n return addLeadingZeros(date.getMonth() + 1, 2)\n },\n\n // Quarter: 1, 2, 3, 4\n 'Q': function (date) {\n return Math.ceil((date.getMonth() + 1) / 3)\n },\n\n // Day of month: 1, 2, ..., 31\n 'D': function (date) {\n return date.getDate()\n },\n\n // Day of month: 01, 02, ..., 31\n 'DD': function (date) {\n return addLeadingZeros(date.getDate(), 2)\n },\n\n // Day of year: 1, 2, ..., 366\n 'DDD': function (date) {\n return getDayOfYear(date)\n },\n\n // Day of year: 001, 002, ..., 366\n 'DDDD': function (date) {\n return addLeadingZeros(getDayOfYear(date), 3)\n },\n\n // Day of week: 0, 1, ..., 6\n 'd': function (date) {\n return date.getDay()\n },\n\n // Day of ISO week: 1, 2, ..., 7\n 'E': function (date) {\n return date.getDay() || 7\n },\n\n // ISO week: 1, 2, ..., 53\n 'W': function (date) {\n return getISOWeek(date)\n },\n\n // ISO week: 01, 02, ..., 53\n 'WW': function (date) {\n return addLeadingZeros(getISOWeek(date), 2)\n },\n\n // Year: 00, 01, ..., 99\n 'YY': function (date) {\n return addLeadingZeros(date.getFullYear(), 4).substr(2)\n },\n\n // Year: 1900, 1901, ..., 2099\n 'YYYY': function (date) {\n return addLeadingZeros(date.getFullYear(), 4)\n },\n\n // ISO week-numbering year: 00, 01, ..., 99\n 'GG': function (date) {\n return String(getISOYear(date)).substr(2)\n },\n\n // ISO week-numbering year: 1900, 1901, ..., 2099\n 'GGGG': function (date) {\n return getISOYear(date)\n },\n\n // Hour: 0, 1, ... 23\n 'H': function (date) {\n return date.getHours()\n },\n\n // Hour: 00, 01, ..., 23\n 'HH': function (date) {\n return addLeadingZeros(date.getHours(), 2)\n },\n\n // Hour: 1, 2, ..., 12\n 'h': function (date) {\n var hours = date.getHours()\n if (hours === 0) {\n return 12\n } else if (hours > 12) {\n return hours % 12\n } else {\n return hours\n }\n },\n\n // Hour: 01, 02, ..., 12\n 'hh': function (date) {\n return addLeadingZeros(formatters['h'](date), 2)\n },\n\n // Minute: 0, 1, ..., 59\n 'm': function (date) {\n return date.getMinutes()\n },\n\n // Minute: 00, 01, ..., 59\n 'mm': function (date) {\n return addLeadingZeros(date.getMinutes(), 2)\n },\n\n // Second: 0, 1, ..., 59\n 's': function (date) {\n return date.getSeconds()\n },\n\n // Second: 00, 01, ..., 59\n 'ss': function (date) {\n return addLeadingZeros(date.getSeconds(), 2)\n },\n\n // 1/10 of second: 0, 1, ..., 9\n 'S': function (date) {\n return Math.floor(date.getMilliseconds() / 100)\n },\n\n // 1/100 of second: 00, 01, ..., 99\n 'SS': function (date) {\n return addLeadingZeros(Math.floor(date.getMilliseconds() / 10), 2)\n },\n\n // Millisecond: 000, 001, ..., 999\n 'SSS': function (date) {\n return addLeadingZeros(date.getMilliseconds(), 3)\n },\n\n // Timezone: -01:00, +00:00, ... +12:00\n 'Z': function (date) {\n return formatTimezone(date.getTimezoneOffset(), ':')\n },\n\n // Timezone: -0100, +0000, ... +1200\n 'ZZ': function (date) {\n return formatTimezone(date.getTimezoneOffset())\n },\n\n // Seconds timestamp: 512969520\n 'X': function (date) {\n return Math.floor(date.getTime() / 1000)\n },\n\n // Milliseconds timestamp: 512969520900\n 'x': function (date) {\n return date.getTime()\n }\n}\n\nfunction buildFormatFn (formatStr, localeFormatters, formattingTokensRegExp) {\n var array = formatStr.match(formattingTokensRegExp)\n var length = array.length\n\n var i\n var formatter\n for (i = 0; i < length; i++) {\n formatter = localeFormatters[array[i]] || formatters[array[i]]\n if (formatter) {\n array[i] = formatter\n } else {\n array[i] = removeFormattingTokens(array[i])\n }\n }\n\n return function (date) {\n var output = ''\n for (var i = 0; i < length; i++) {\n if (array[i] instanceof Function) {\n output += array[i](date, formatters)\n } else {\n output += array[i]\n }\n }\n return output\n }\n}\n\nfunction removeFormattingTokens (input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|]$/g, '')\n }\n return input.replace(/\\\\/g, '')\n}\n\nfunction formatTimezone (offset, delimeter) {\n delimeter = delimeter || ''\n var sign = offset > 0 ? '-' : '+'\n var absOffset = Math.abs(offset)\n var hours = Math.floor(absOffset / 60)\n var minutes = absOffset % 60\n return sign + addLeadingZeros(hours, 2) + delimeter + addLeadingZeros(minutes, 2)\n}\n\nfunction addLeadingZeros (number, targetLength) {\n var output = Math.abs(number).toString()\n while (output.length < targetLength) {\n output = '0' + output\n }\n return output\n}\n\nmodule.exports = format\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/format/index.js\n// module id = ./node_modules/date-fns/format/index.js\n// module chunks = socialstream map wingtagsmap","var parse = require('../parse/index.js')\nvar startOfYear = require('../start_of_year/index.js')\nvar differenceInCalendarDays = require('../difference_in_calendar_days/index.js')\n\n/**\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * var result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nfunction getDayOfYear (dirtyDate) {\n var date = parse(dirtyDate)\n var diff = differenceInCalendarDays(date, startOfYear(date))\n var dayOfYear = diff + 1\n return dayOfYear\n}\n\nmodule.exports = getDayOfYear\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/get_day_of_year/index.js\n// module id = ./node_modules/date-fns/get_day_of_year/index.js\n// module chunks = socialstream map wingtagsmap","var parse = require('../parse/index.js')\nvar startOfISOWeek = require('../start_of_iso_week/index.js')\nvar startOfISOYear = require('../start_of_iso_year/index.js')\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nfunction getISOWeek (dirtyDate) {\n var date = parse(dirtyDate)\n var diff = startOfISOWeek(date).getTime() - startOfISOYear(date).getTime()\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n\nmodule.exports = getISOWeek\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/get_iso_week/index.js\n// module id = ./node_modules/date-fns/get_iso_week/index.js\n// module chunks = socialstream map wingtagsmap","var parse = require('../parse/index.js')\nvar startOfISOWeek = require('../start_of_iso_week/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the given date\n * @returns {Number} the ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * var result = getISOYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nfunction getISOYear (dirtyDate) {\n var date = parse(dirtyDate)\n var year = date.getFullYear()\n\n var fourthOfJanuaryOfNextYear = new Date(0)\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear)\n\n var fourthOfJanuaryOfThisYear = new Date(0)\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4)\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0)\n var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear)\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year\n } else {\n return year - 1\n }\n}\n\nmodule.exports = getISOYear\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/get_iso_year/index.js\n// module id = ./node_modules/date-fns/get_iso_year/index.js\n// module chunks = socialstream map wingtagsmap","/**\n * @category Common Helpers\n * @summary Is the given argument an instance of Date?\n *\n * @description\n * Is the given argument an instance of Date?\n *\n * @param {*} argument - the argument to check\n * @returns {Boolean} the given argument is an instance of Date\n *\n * @example\n * // Is 'mayonnaise' a Date?\n * var result = isDate('mayonnaise')\n * //=> false\n */\nfunction isDate (argument) {\n return argument instanceof Date\n}\n\nmodule.exports = isDate\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/is_date/index.js\n// module id = ./node_modules/date-fns/is_date/index.js\n// module chunks = socialstream map wingtagsmap","var isDate = require('../is_date/index.js')\n\n/**\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param {Date} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} argument must be an instance of Date\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\nfunction isValid (dirtyDate) {\n if (isDate(dirtyDate)) {\n return !isNaN(dirtyDate)\n } else {\n throw new TypeError(toString.call(dirtyDate) + ' is not an instance of Date')\n }\n}\n\nmodule.exports = isValid\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/is_valid/index.js\n// module id = ./node_modules/date-fns/is_valid/index.js\n// module chunks = socialstream map wingtagsmap","var commonFormatterKeys = [\n 'M', 'MM', 'Q', 'D', 'DD', 'DDD', 'DDDD', 'd',\n 'E', 'W', 'WW', 'YY', 'YYYY', 'GG', 'GGGG',\n 'H', 'HH', 'h', 'hh', 'm', 'mm',\n 's', 'ss', 'S', 'SS', 'SSS',\n 'Z', 'ZZ', 'X', 'x'\n]\n\nfunction buildFormattingTokensRegExp (formatters) {\n var formatterKeys = []\n for (var key in formatters) {\n if (formatters.hasOwnProperty(key)) {\n formatterKeys.push(key)\n }\n }\n\n var formattingTokens = commonFormatterKeys\n .concat(formatterKeys)\n .sort()\n .reverse()\n var formattingTokensRegExp = new RegExp(\n '(\\\\[[^\\\\[]*\\\\])|(\\\\\\\\)?' + '(' + formattingTokens.join('|') + '|.)', 'g'\n )\n\n return formattingTokensRegExp\n}\n\nmodule.exports = buildFormattingTokensRegExp\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/locale/_lib/build_formatting_tokens_reg_exp/index.js\n// module id = ./node_modules/date-fns/locale/_lib/build_formatting_tokens_reg_exp/index.js\n// module chunks = socialstream map wingtagsmap","function buildDistanceInWordsLocale () {\n var distanceInWordsLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n\n halfAMinute: 'half a minute',\n\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n }\n\n function localize (token, count, options) {\n options = options || {}\n\n var result\n if (typeof distanceInWordsLocale[token] === 'string') {\n result = distanceInWordsLocale[token]\n } else if (count === 1) {\n result = distanceInWordsLocale[token].one\n } else {\n result = distanceInWordsLocale[token].other.replace('{{count}}', count)\n }\n\n if (options.addSuffix) {\n if (options.comparison > 0) {\n return 'in ' + result\n } else {\n return result + ' ago'\n }\n }\n\n return result\n }\n\n return {\n localize: localize\n }\n}\n\nmodule.exports = buildDistanceInWordsLocale\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/locale/en/build_distance_in_words_locale/index.js\n// module id = ./node_modules/date-fns/locale/en/build_distance_in_words_locale/index.js\n// module chunks = socialstream map wingtagsmap","var buildFormattingTokensRegExp = require('../../_lib/build_formatting_tokens_reg_exp/index.js')\n\nfunction buildFormatLocale () {\n // Note: in English, the names of days of the week and months are capitalized.\n // If you are making a new locale based on this one, check if the same is true for the language you're working on.\n // Generally, formatted dates should look like they are in the middle of a sentence,\n // e.g. in Spanish language the weekdays and months should be in the lowercase.\n var months3char = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n var monthsFull = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n var weekdays2char = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n var weekdays3char = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n var weekdaysFull = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n var meridiemUppercase = ['AM', 'PM']\n var meridiemLowercase = ['am', 'pm']\n var meridiemFull = ['a.m.', 'p.m.']\n\n var formatters = {\n // Month: Jan, Feb, ..., Dec\n 'MMM': function (date) {\n return months3char[date.getMonth()]\n },\n\n // Month: January, February, ..., December\n 'MMMM': function (date) {\n return monthsFull[date.getMonth()]\n },\n\n // Day of week: Su, Mo, ..., Sa\n 'dd': function (date) {\n return weekdays2char[date.getDay()]\n },\n\n // Day of week: Sun, Mon, ..., Sat\n 'ddd': function (date) {\n return weekdays3char[date.getDay()]\n },\n\n // Day of week: Sunday, Monday, ..., Saturday\n 'dddd': function (date) {\n return weekdaysFull[date.getDay()]\n },\n\n // AM, PM\n 'A': function (date) {\n return (date.getHours() / 12) >= 1 ? meridiemUppercase[1] : meridiemUppercase[0]\n },\n\n // am, pm\n 'a': function (date) {\n return (date.getHours() / 12) >= 1 ? meridiemLowercase[1] : meridiemLowercase[0]\n },\n\n // a.m., p.m.\n 'aa': function (date) {\n return (date.getHours() / 12) >= 1 ? meridiemFull[1] : meridiemFull[0]\n }\n }\n\n // Generate ordinal version of formatters: M -> Mo, D -> Do, etc.\n var ordinalFormatters = ['M', 'D', 'DDD', 'd', 'Q', 'W']\n ordinalFormatters.forEach(function (formatterToken) {\n formatters[formatterToken + 'o'] = function (date, formatters) {\n return ordinal(formatters[formatterToken](date))\n }\n })\n\n return {\n formatters: formatters,\n formattingTokensRegExp: buildFormattingTokensRegExp(formatters)\n }\n}\n\nfunction ordinal (number) {\n var rem100 = number % 100\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st'\n case 2:\n return number + 'nd'\n case 3:\n return number + 'rd'\n }\n }\n return number + 'th'\n}\n\nmodule.exports = buildFormatLocale\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/locale/en/build_format_locale/index.js\n// module id = ./node_modules/date-fns/locale/en/build_format_locale/index.js\n// module chunks = socialstream map wingtagsmap","var buildDistanceInWordsLocale = require('./build_distance_in_words_locale/index.js')\nvar buildFormatLocale = require('./build_format_locale/index.js')\n\n/**\n * @category Locales\n * @summary English locale.\n */\nmodule.exports = {\n distanceInWords: buildDistanceInWordsLocale(),\n format: buildFormatLocale()\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/locale/en/index.js\n// module id = ./node_modules/date-fns/locale/en/index.js\n// module chunks = socialstream map wingtagsmap","var isDate = require('../is_date/index.js')\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar parseTokenDateTimeDelimeter = /[T ]/\nvar parseTokenPlainTime = /:/\n\n// year tokens\nvar parseTokenYY = /^(\\d{2})$/\nvar parseTokensYYY = [\n /^([+-]\\d{2})$/, // 0 additional digits\n /^([+-]\\d{3})$/, // 1 additional digit\n /^([+-]\\d{4})$/ // 2 additional digits\n]\n\nvar parseTokenYYYY = /^(\\d{4})/\nvar parseTokensYYYYY = [\n /^([+-]\\d{4})/, // 0 additional digits\n /^([+-]\\d{5})/, // 1 additional digit\n /^([+-]\\d{6})/ // 2 additional digits\n]\n\n// date tokens\nvar parseTokenMM = /^-(\\d{2})$/\nvar parseTokenDDD = /^-?(\\d{3})$/\nvar parseTokenMMDD = /^-?(\\d{2})-?(\\d{2})$/\nvar parseTokenWww = /^-?W(\\d{2})$/\nvar parseTokenWwwD = /^-?W(\\d{2})-?(\\d{1})$/\n\n// time tokens\nvar parseTokenHH = /^(\\d{2}([.,]\\d*)?)$/\nvar parseTokenHHMM = /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/\nvar parseTokenHHMMSS = /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/\n\n// timezone tokens\nvar parseTokenTimezone = /([Z+-].*)$/\nvar parseTokenTimezoneZ = /^(Z)$/\nvar parseTokenTimezoneHH = /^([+-])(\\d{2})$/\nvar parseTokenTimezoneHHMM = /^([+-])(\\d{2}):?(\\d{2})$/\n\n/**\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If all above fails, the function passes the given argument to Date constructor.\n *\n * @param {Date|String|Number} argument - the value to convert\n * @param {Object} [options] - the object with options\n * @param {0 | 1 | 2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parse('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Parse string '+02014101',\n * // if the additional number of digits in the extended year format is 1:\n * var result = parse('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nfunction parse (argument, dirtyOptions) {\n if (isDate(argument)) {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime())\n } else if (typeof argument !== 'string') {\n return new Date(argument)\n }\n\n var options = dirtyOptions || {}\n var additionalDigits = options.additionalDigits\n if (additionalDigits == null) {\n additionalDigits = DEFAULT_ADDITIONAL_DIGITS\n } else {\n additionalDigits = Number(additionalDigits)\n }\n\n var dateStrings = splitDateString(argument)\n\n var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n var year = parseYearResult.year\n var restDateString = parseYearResult.restDateString\n\n var date = parseDate(restDateString, year)\n\n if (date) {\n var timestamp = date.getTime()\n var time = 0\n var offset\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time)\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone)\n } else {\n // get offset accurate to hour in timezones that change offset\n offset = new Date(timestamp + time).getTimezoneOffset()\n offset = new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE).getTimezoneOffset()\n }\n\n return new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE)\n } else {\n return new Date(argument)\n }\n}\n\nfunction splitDateString (dateString) {\n var dateStrings = {}\n var array = dateString.split(parseTokenDateTimeDelimeter)\n var timeString\n\n if (parseTokenPlainTime.test(array[0])) {\n dateStrings.date = null\n timeString = array[0]\n } else {\n dateStrings.date = array[0]\n timeString = array[1]\n }\n\n if (timeString) {\n var token = parseTokenTimezone.exec(timeString)\n if (token) {\n dateStrings.time = timeString.replace(token[1], '')\n dateStrings.timezone = token[1]\n } else {\n dateStrings.time = timeString\n }\n }\n\n return dateStrings\n}\n\nfunction parseYear (dateString, additionalDigits) {\n var parseTokenYYY = parseTokensYYY[additionalDigits]\n var parseTokenYYYYY = parseTokensYYYYY[additionalDigits]\n\n var token\n\n // YYYY or ±YYYYY\n token = parseTokenYYYY.exec(dateString) || parseTokenYYYYY.exec(dateString)\n if (token) {\n var yearString = token[1]\n return {\n year: parseInt(yearString, 10),\n restDateString: dateString.slice(yearString.length)\n }\n }\n\n // YY or ±YYY\n token = parseTokenYY.exec(dateString) || parseTokenYYY.exec(dateString)\n if (token) {\n var centuryString = token[1]\n return {\n year: parseInt(centuryString, 10) * 100,\n restDateString: dateString.slice(centuryString.length)\n }\n }\n\n // Invalid ISO-formatted year\n return {\n year: null\n }\n}\n\nfunction parseDate (dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) {\n return null\n }\n\n var token\n var date\n var month\n var week\n\n // YYYY\n if (dateString.length === 0) {\n date = new Date(0)\n date.setUTCFullYear(year)\n return date\n }\n\n // YYYY-MM\n token = parseTokenMM.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n date.setUTCFullYear(year, month)\n return date\n }\n\n // YYYY-DDD or YYYYDDD\n token = parseTokenDDD.exec(dateString)\n if (token) {\n date = new Date(0)\n var dayOfYear = parseInt(token[1], 10)\n date.setUTCFullYear(year, 0, dayOfYear)\n return date\n }\n\n // YYYY-MM-DD or YYYYMMDD\n token = parseTokenMMDD.exec(dateString)\n if (token) {\n date = new Date(0)\n month = parseInt(token[1], 10) - 1\n var day = parseInt(token[2], 10)\n date.setUTCFullYear(year, month, day)\n return date\n }\n\n // YYYY-Www or YYYYWww\n token = parseTokenWww.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n return dayOfISOYear(year, week)\n }\n\n // YYYY-Www-D or YYYYWwwD\n token = parseTokenWwwD.exec(dateString)\n if (token) {\n week = parseInt(token[1], 10) - 1\n var dayOfWeek = parseInt(token[2], 10) - 1\n return dayOfISOYear(year, week, dayOfWeek)\n }\n\n // Invalid ISO-formatted date\n return null\n}\n\nfunction parseTime (timeString) {\n var token\n var hours\n var minutes\n\n // hh\n token = parseTokenHH.exec(timeString)\n if (token) {\n hours = parseFloat(token[1].replace(',', '.'))\n return (hours % 24) * MILLISECONDS_IN_HOUR\n }\n\n // hh:mm or hhmm\n token = parseTokenHHMM.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseFloat(token[2].replace(',', '.'))\n return (hours % 24) * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE\n }\n\n // hh:mm:ss or hhmmss\n token = parseTokenHHMMSS.exec(timeString)\n if (token) {\n hours = parseInt(token[1], 10)\n minutes = parseInt(token[2], 10)\n var seconds = parseFloat(token[3].replace(',', '.'))\n return (hours % 24) * MILLISECONDS_IN_HOUR +\n minutes * MILLISECONDS_IN_MINUTE +\n seconds * 1000\n }\n\n // Invalid ISO-formatted time\n return null\n}\n\nfunction parseTimezone (timezoneString) {\n var token\n var absoluteOffset\n\n // Z\n token = parseTokenTimezoneZ.exec(timezoneString)\n if (token) {\n return 0\n }\n\n // ±hh\n token = parseTokenTimezoneHH.exec(timezoneString)\n if (token) {\n absoluteOffset = parseInt(token[2], 10) * 60\n return (token[1] === '+') ? -absoluteOffset : absoluteOffset\n }\n\n // ±hh:mm or ±hhmm\n token = parseTokenTimezoneHHMM.exec(timezoneString)\n if (token) {\n absoluteOffset = parseInt(token[2], 10) * 60 + parseInt(token[3], 10)\n return (token[1] === '+') ? -absoluteOffset : absoluteOffset\n }\n\n return 0\n}\n\nfunction dayOfISOYear (isoYear, week, day) {\n week = week || 0\n day = day || 0\n var date = new Date(0)\n date.setUTCFullYear(isoYear, 0, 4)\n var fourthOfJanuaryDay = date.getUTCDay() || 7\n var diff = week * 7 + day + 1 - fourthOfJanuaryDay\n date.setUTCDate(date.getUTCDate() + diff)\n return date\n}\n\nmodule.exports = parse\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/parse/index.js\n// module id = ./node_modules/date-fns/parse/index.js\n// module chunks = socialstream map wingtagsmap","var parse = require('../parse/index.js')\n\n/**\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nfunction startOfDay (dirtyDate) {\n var date = parse(dirtyDate)\n date.setHours(0, 0, 0, 0)\n return date\n}\n\nmodule.exports = startOfDay\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/start_of_day/index.js\n// module id = ./node_modules/date-fns/start_of_day/index.js\n// module chunks = socialstream map wingtagsmap","var startOfWeek = require('../start_of_week/index.js')\n\n/**\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * var result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nfunction startOfISOWeek (dirtyDate) {\n return startOfWeek(dirtyDate, {weekStartsOn: 1})\n}\n\nmodule.exports = startOfISOWeek\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/start_of_iso_week/index.js\n// module id = ./node_modules/date-fns/start_of_iso_week/index.js\n// module chunks = socialstream map wingtagsmap","var getISOYear = require('../get_iso_year/index.js')\nvar startOfISOWeek = require('../start_of_iso_week/index.js')\n\n/**\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of an ISO year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * var result = startOfISOYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nfunction startOfISOYear (dirtyDate) {\n var year = getISOYear(dirtyDate)\n var fourthOfJanuary = new Date(0)\n fourthOfJanuary.setFullYear(year, 0, 4)\n fourthOfJanuary.setHours(0, 0, 0, 0)\n var date = startOfISOWeek(fourthOfJanuary)\n return date\n}\n\nmodule.exports = startOfISOYear\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/start_of_iso_year/index.js\n// module id = ./node_modules/date-fns/start_of_iso_year/index.js\n// module chunks = socialstream map wingtagsmap","var parse = require('../parse/index.js')\n\n/**\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @param {Object} [options] - the object with options\n * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), {weekStartsOn: 1})\n * //=> Mon Sep 01 2014 00:00:00\n */\nfunction startOfWeek (dirtyDate, dirtyOptions) {\n var weekStartsOn = dirtyOptions ? (Number(dirtyOptions.weekStartsOn) || 0) : 0\n\n var date = parse(dirtyDate)\n var day = date.getDay()\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n date.setDate(date.getDate() - diff)\n date.setHours(0, 0, 0, 0)\n return date\n}\n\nmodule.exports = startOfWeek\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/start_of_week/index.js\n// module id = ./node_modules/date-fns/start_of_week/index.js\n// module chunks = socialstream map wingtagsmap","var parse = require('../parse/index.js')\n\n/**\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|String|Number} date - the original date\n * @returns {Date} the start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * var result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nfunction startOfYear (dirtyDate) {\n var cleanDate = parse(dirtyDate)\n var date = new Date(0)\n date.setFullYear(cleanDate.getFullYear(), 0, 1)\n date.setHours(0, 0, 0, 0)\n return date\n}\n\nmodule.exports = startOfYear\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/date-fns/start_of_year/index.js\n// module id = ./node_modules/date-fns/start_of_year/index.js\n// module chunks = socialstream map wingtagsmap","// Generated by CoffeeScript 1.9.3\n(function() {\n var Instafeed;\n\n Instafeed = (function() {\n function Instafeed(params, context) {\n var option, value;\n this.options = {\n target: 'instafeed',\n get: 'popular',\n resolution: 'thumbnail',\n sortBy: 'none',\n links: true,\n mock: false,\n useHttp: false\n };\n if (typeof params === 'object') {\n for (option in params) {\n value = params[option];\n this.options[option] = value;\n }\n }\n this.context = context != null ? context : this;\n this.unique = this._genKey();\n }\n\n Instafeed.prototype.hasNext = function() {\n return typeof this.context.nextUrl === 'string' && this.context.nextUrl.length > 0;\n };\n\n Instafeed.prototype.next = function() {\n if (!this.hasNext()) {\n return false;\n }\n return this.run(this.context.nextUrl);\n };\n\n Instafeed.prototype.run = function(url) {\n var header, instanceName, script;\n if (typeof this.options.clientId !== 'string') {\n if (typeof this.options.accessToken !== 'string') {\n throw new Error(\"Missing clientId or accessToken.\");\n }\n }\n if (typeof this.options.accessToken !== 'string') {\n if (typeof this.options.clientId !== 'string') {\n throw new Error(\"Missing clientId or accessToken.\");\n }\n }\n if ((this.options.before != null) && typeof this.options.before === 'function') {\n this.options.before.call(this);\n }\n if (typeof document !== \"undefined\" && document !== null) {\n script = document.createElement('script');\n script.id = 'instafeed-fetcher';\n script.src = url || this._buildUrl();\n header = document.getElementsByTagName('head');\n header[0].appendChild(script);\n instanceName = \"instafeedCache\" + this.unique;\n window[instanceName] = new Instafeed(this.options, this);\n window[instanceName].unique = this.unique;\n }\n return true;\n };\n\n Instafeed.prototype.parse = function(response) {\n var anchor, childNodeCount, childNodeIndex, childNodesArr, e, eMsg, fragment, header, htmlString, httpProtocol, i, image, imageObj, imageString, imageUrl, images, img, imgHeight, imgOrient, imgUrl, imgWidth, instanceName, j, k, len, len1, len2, node, parsedLimit, reverse, sortSettings, targetEl, tmpEl;\n if (typeof response !== 'object') {\n if ((this.options.error != null) && typeof this.options.error === 'function') {\n this.options.error.call(this, 'Invalid JSON data');\n return false;\n } else {\n throw new Error('Invalid JSON response');\n }\n }\n if (response.meta.code !== 200) {\n if ((this.options.error != null) && typeof this.options.error === 'function') {\n this.options.error.call(this, response.meta.error_message);\n return false;\n } else {\n throw new Error(\"Error from Instagram: \" + response.meta.error_message);\n }\n }\n if (response.data.length === 0) {\n if ((this.options.error != null) && typeof this.options.error === 'function') {\n this.options.error.call(this, 'No images were returned from Instagram');\n return false;\n } else {\n throw new Error('No images were returned from Instagram');\n }\n }\n if ((this.options.success != null) && typeof this.options.success === 'function') {\n this.options.success.call(this, response);\n }\n this.context.nextUrl = '';\n if (response.pagination != null) {\n this.context.nextUrl = response.pagination.next_url;\n }\n if (this.options.sortBy !== 'none') {\n if (this.options.sortBy === 'random') {\n sortSettings = ['', 'random'];\n } else {\n sortSettings = this.options.sortBy.split('-');\n }\n reverse = sortSettings[0] === 'least' ? true : false;\n switch (sortSettings[1]) {\n case 'random':\n response.data.sort(function() {\n return 0.5 - Math.random();\n });\n break;\n case 'recent':\n response.data = this._sortBy(response.data, 'created_time', reverse);\n break;\n case 'liked':\n response.data = this._sortBy(response.data, 'likes.count', reverse);\n break;\n case 'commented':\n response.data = this._sortBy(response.data, 'comments.count', reverse);\n break;\n default:\n throw new Error(\"Invalid option for sortBy: '\" + this.options.sortBy + \"'.\");\n }\n }\n if ((typeof document !== \"undefined\" && document !== null) && this.options.mock === false) {\n images = response.data;\n parsedLimit = parseInt(this.options.limit, 10);\n if ((this.options.limit != null) && images.length > parsedLimit) {\n images = images.slice(0, parsedLimit);\n }\n fragment = document.createDocumentFragment();\n if ((this.options.filter != null) && typeof this.options.filter === 'function') {\n images = this._filter(images, this.options.filter);\n }\n if ((this.options.template != null) && typeof this.options.template === 'string') {\n htmlString = '';\n imageString = '';\n imgUrl = '';\n tmpEl = document.createElement('div');\n for (i = 0, len = images.length; i < len; i++) {\n image = images[i];\n imageObj = image.images[this.options.resolution];\n if (typeof imageObj !== 'object') {\n eMsg = \"No image found for resolution: \" + this.options.resolution + \".\";\n throw new Error(eMsg);\n }\n imgWidth = imageObj.width;\n imgHeight = imageObj.height;\n imgOrient = \"square\";\n if (imgWidth > imgHeight) {\n imgOrient = \"landscape\";\n }\n if (imgWidth < imgHeight) {\n imgOrient = \"portrait\";\n }\n imageUrl = imageObj.url;\n httpProtocol = window.location.protocol.indexOf(\"http\") >= 0;\n if (httpProtocol && !this.options.useHttp) {\n imageUrl = imageUrl.replace(/https?:\\/\\//, '//');\n }\n imageString = this._makeTemplate(this.options.template, {\n model: image,\n id: image.id,\n link: image.link,\n type: image.type,\n image: imageUrl,\n width: imgWidth,\n height: imgHeight,\n orientation: imgOrient,\n caption: this._getObjectProperty(image, 'caption.text'),\n likes: image.likes.count,\n comments: image.comments.count,\n location: this._getObjectProperty(image, 'location.name')\n });\n htmlString += imageString;\n }\n tmpEl.innerHTML = htmlString;\n childNodesArr = [];\n childNodeIndex = 0;\n childNodeCount = tmpEl.childNodes.length;\n while (childNodeIndex < childNodeCount) {\n childNodesArr.push(tmpEl.childNodes[childNodeIndex]);\n childNodeIndex += 1;\n }\n for (j = 0, len1 = childNodesArr.length; j < len1; j++) {\n node = childNodesArr[j];\n fragment.appendChild(node);\n }\n } else {\n for (k = 0, len2 = images.length; k < len2; k++) {\n image = images[k];\n img = document.createElement('img');\n imageObj = image.images[this.options.resolution];\n if (typeof imageObj !== 'object') {\n eMsg = \"No image found for resolution: \" + this.options.resolution + \".\";\n throw new Error(eMsg);\n }\n imageUrl = imageObj.url;\n httpProtocol = window.location.protocol.indexOf(\"http\") >= 0;\n if (httpProtocol && !this.options.useHttp) {\n imageUrl = imageUrl.replace(/https?:\\/\\//, '//');\n }\n img.src = imageUrl;\n if (this.options.links === true) {\n anchor = document.createElement('a');\n anchor.href = image.link;\n anchor.appendChild(img);\n fragment.appendChild(anchor);\n } else {\n fragment.appendChild(img);\n }\n }\n }\n targetEl = this.options.target;\n if (typeof targetEl === 'string') {\n targetEl = document.getElementById(targetEl);\n }\n if (targetEl == null) {\n eMsg = \"No element with id=\\\"\" + this.options.target + \"\\\" on page.\";\n throw new Error(eMsg);\n }\n targetEl.appendChild(fragment);\n header = document.getElementsByTagName('head')[0];\n header.removeChild(document.getElementById('instafeed-fetcher'));\n instanceName = \"instafeedCache\" + this.unique;\n window[instanceName] = void 0;\n try {\n delete window[instanceName];\n } catch (_error) {\n e = _error;\n }\n }\n if ((this.options.after != null) && typeof this.options.after === 'function') {\n this.options.after.call(this);\n }\n return true;\n };\n\n Instafeed.prototype._buildUrl = function() {\n var base, endpoint, final;\n base = \"https://api.instagram.com/v1\";\n switch (this.options.get) {\n case \"popular\":\n endpoint = \"media/popular\";\n break;\n case \"tagged\":\n if (!this.options.tagName) {\n throw new Error(\"No tag name specified. Use the 'tagName' option.\");\n }\n endpoint = \"tags/\" + this.options.tagName + \"/media/recent\";\n break;\n case \"location\":\n if (!this.options.locationId) {\n throw new Error(\"No location specified. Use the 'locationId' option.\");\n }\n endpoint = \"locations/\" + this.options.locationId + \"/media/recent\";\n break;\n case \"user\":\n if (!this.options.userId) {\n throw new Error(\"No user specified. Use the 'userId' option.\");\n }\n endpoint = \"users/\" + this.options.userId + \"/media/recent\";\n break;\n default:\n throw new Error(\"Invalid option for get: '\" + this.options.get + \"'.\");\n }\n final = base + \"/\" + endpoint;\n if (this.options.accessToken != null) {\n final += \"?access_token=\" + this.options.accessToken;\n } else {\n final += \"?client_id=\" + this.options.clientId;\n }\n if (this.options.limit != null) {\n final += \"&count=\" + this.options.limit;\n }\n final += \"&callback=instafeedCache\" + this.unique + \".parse\";\n return final;\n };\n\n Instafeed.prototype._genKey = function() {\n var S4;\n S4 = function() {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n };\n return \"\" + (S4()) + (S4()) + (S4()) + (S4());\n };\n\n Instafeed.prototype._makeTemplate = function(template, data) {\n var output, pattern, ref, varName, varValue;\n pattern = /(?:\\{{2})([\\w\\[\\]\\.]+)(?:\\}{2})/;\n output = template;\n while (pattern.test(output)) {\n varName = output.match(pattern)[1];\n varValue = (ref = this._getObjectProperty(data, varName)) != null ? ref : '';\n output = output.replace(pattern, function() {\n return \"\" + varValue;\n });\n }\n return output;\n };\n\n Instafeed.prototype._getObjectProperty = function(object, property) {\n var piece, pieces;\n property = property.replace(/\\[(\\w+)\\]/g, '.$1');\n pieces = property.split('.');\n while (pieces.length) {\n piece = pieces.shift();\n if ((object != null) && piece in object) {\n object = object[piece];\n } else {\n return null;\n }\n }\n return object;\n };\n\n Instafeed.prototype._sortBy = function(data, property, reverse) {\n var sorter;\n sorter = function(a, b) {\n var valueA, valueB;\n valueA = this._getObjectProperty(a, property);\n valueB = this._getObjectProperty(b, property);\n if (reverse) {\n if (valueA > valueB) {\n return 1;\n } else {\n return -1;\n }\n }\n if (valueA < valueB) {\n return 1;\n } else {\n return -1;\n }\n };\n data.sort(sorter.bind(this));\n return data;\n };\n\n Instafeed.prototype._filter = function(images, filter) {\n var filteredImages, fn, i, image, len;\n filteredImages = [];\n fn = function(image) {\n if (filter(image)) {\n return filteredImages.push(image);\n }\n };\n for (i = 0, len = images.length; i < len; i++) {\n image = images[i];\n fn(image);\n }\n return filteredImages;\n };\n\n return Instafeed;\n\n })();\n\n (function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n return define([], factory);\n } else if (typeof module === 'object' && module.exports) {\n return module.exports = factory();\n } else {\n return root.Instafeed = factory();\n }\n })(this, function() {\n return Instafeed;\n });\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/instafeed.js/instafeed.js\n// module id = ./node_modules/instafeed.js/instafeed.js\n// module chunks = socialstream","/*********************************************************************\r\n* #### Twitter Post Fetcher v17.0.0 ####\r\n* Coded by Jason Mayes 2015. A present to all the developers out there.\r\n* www.jasonmayes.com\r\n* Please keep this disclaimer with my code if you use it. Thanks. :-)\r\n* Got feedback or questions, ask here:\r\n* http://www.jasonmayes.com/projects/twitterApi/\r\n* Github: https://github.com/jasonmayes/Twitter-Post-Fetcher\r\n* Updates will be posted to this site.\r\n*********************************************************************/\r\n(function(root,factory){if(typeof define==='function'&&define.amd){define([],factory);}else if(typeof exports==='object'){module.exports=factory();}else{factory();}}(this,function(){var domNode='';var maxTweets=20;var parseLinks=true;var queue=[];var inProgress=false;var printTime=true;var printUser=true;var formatterFunction=null;var supportsClassName=true;var showRts=true;var customCallbackFunction=null;var showInteractionLinks=true;var showImages=false;var targetBlank=true;var lang='en';var permalinks=true;var dataOnly=false;var script=null;var scriptAdded=false;function handleTweets(tweets){if(customCallbackFunction===null){var x=tweets.length;var n=0;var element=document.getElementById(domNode);var html='';element.innerHTML=html;}else{customCallbackFunction(tweets);}}\r\nfunction strip(data){return data.replace(/]*>(.*?)<\\/b>/gi,function(a,s){return s;}).replace(/class=\"(?!(tco-hidden|tco-display|tco-ellipsis))+.*?\"|data-query-source=\".*?\"|dir=\".*?\"|rel=\".*?\"/gi,'');}\r\nfunction targetLinksToNewWindow(el){var links=el.getElementsByTagName('a');for(var i=links.length-1;i>=0;i--){links[i].setAttribute('target','_blank');}}\r\nfunction getElementsByClassName(node,classname){var a=[];var regex=new RegExp('(^| )'+classname+'( |$)');var elems=node.getElementsByTagName('*');for(var i=0,j=elems.length;i=0){var data_src=image_data.innerHTML.match(/data-srcset=\"([A-z0-9%_\\.-]+)/i)[0];return decodeURIComponent(data_src).split('\"')[1];}}\r\nvar twitterFetcher={fetch:function(config){if(config.maxTweets===undefined){config.maxTweets=20;}\r\nif(config.enableLinks===undefined){config.enableLinks=true;}\r\nif(config.showUser===undefined){config.showUser=true;}\r\nif(config.showTime===undefined){config.showTime=true;}\r\nif(config.dateFunction===undefined){config.dateFunction='default';}\r\nif(config.showRetweet===undefined){config.showRetweet=true;}\r\nif(config.customCallback===undefined){config.customCallback=null;}\r\nif(config.showInteraction===undefined){config.showInteraction=true;}\r\nif(config.showImages===undefined){config.showImages=false;}\r\nif(config.linksInNewWindow===undefined){config.linksInNewWindow=true;}\r\nif(config.showPermalinks===undefined){config.showPermalinks=true;}\r\nif(config.dataOnly===undefined){config.dataOnly=false;}\r\nif(inProgress){queue.push(config);}else{inProgress=true;domNode=config.domId;maxTweets=config.maxTweets;parseLinks=config.enableLinks;printUser=config.showUser;printTime=config.showTime;showRts=config.showRetweet;formatterFunction=config.dateFunction;customCallbackFunction=config.customCallback;showInteractionLinks=config.showInteraction;showImages=config.showImages;targetBlank=config.linksInNewWindow;permalinks=config.showPermalinks;dataOnly=config.dataOnly;var head=document.getElementsByTagName('head')[0];if(script!==null){head.removeChild(script);}\r\nscript=document.createElement('script');script.type='text/javascript';if(config.list!==undefined){script.src='https://syndication.twitter.com/timeline/list?'+'callback=__twttrf.callback&dnt=false&list_slug='+\r\nconfig.list.listSlug+'&screen_name='+config.list.screenName+'&suppress_response_codes=true&lang='+(config.lang||lang)+'&rnd='+Math.random();}else if(config.profile!==undefined){script.src='https://syndication.twitter.com/timeline/profile?'+'callback=__twttrf.callback&dnt=false'+'&screen_name='+config.profile.screenName+'&suppress_response_codes=true&lang='+(config.lang||lang)+'&rnd='+Math.random();}else if(config.likes!==undefined){script.src='https://syndication.twitter.com/timeline/likes?'+'callback=__twttrf.callback&dnt=false'+'&screen_name='+config.likes.screenName+'&suppress_response_codes=true&lang='+(config.lang||lang)+'&rnd='+Math.random();}else{script.src='https://cdn.syndication.twimg.com/widgets/timelines/'+\r\nconfig.id+'?&lang='+(config.lang||lang)+'&callback=__twttrf.callback&'+'suppress_response_codes=true&rnd='+Math.random();}\r\nhead.appendChild(script);}},callback:function(data){if(data===undefined||data.body===undefined){inProgress=false;if(queue.length>0){twitterFetcher.fetch(queue[0]);queue.splice(0,1);}\r\nreturn;}\r\ndata.body=data.body.replace(/(]*>)|(]*>)/g,'');if(!showImages){data.body=data.body.replace(/(]*>|(]*>))/g,'');}\r\nif(!printUser){data.body=data.body.replace(/(]*>)/g,'');}\r\nvar div=document.createElement('div');div.innerHTML=data.body;if(typeof(div.getElementsByClassName)==='undefined'){supportsClassName=false;}\r\nfunction swapDataSrc(element){var avatarImg=element.getElementsByTagName('img')[0];avatarImg.src=avatarImg.getAttribute('data-src-2x');return element;}\r\nvar tweets=[];var authors=[];var times=[];var images=[];var rts=[];var tids=[];var permalinksURL=[];var x=0;if(supportsClassName){var tmp=div.getElementsByClassName('timeline-Tweet');while(x0){rts.push(true);}else{rts.push(false);}\r\nif(!rts[x]||rts[x]&&showRts){tweets.push(tmp[x].getElementsByClassName('timeline-Tweet-text')[0]);tids.push(tmp[x].getAttribute('data-tweet-id'));if(printUser){authors.push(swapDataSrc(tmp[x].getElementsByClassName('timeline-Tweet-author')[0]));}\r\ntimes.push(tmp[x].getElementsByClassName('dt-updated')[0]);permalinksURL.push(tmp[x].getElementsByClassName('timeline-Tweet-timestamp')[0]);if(tmp[x].getElementsByClassName('timeline-Tweet-media')[0]!==undefined){images.push(tmp[x].getElementsByClassName('timeline-Tweet-media')[0]);}else{images.push(undefined);}}\r\nx++;}}else{var tmp=getElementsByClassName(div,'timeline-Tweet');while(x0){rts.push(true);}else{rts.push(false);}\r\nif(!rts[x]||rts[x]&&showRts){tweets.push(getElementsByClassName(tmp[x],'timeline-Tweet-text')[0]);tids.push(tmp[x].getAttribute('data-tweet-id'));if(printUser){authors.push(swapDataSrc(getElementsByClassName(tmp[x],'timeline-Tweet-author')[0]));}\r\ntimes.push(getElementsByClassName(tmp[x],'dt-updated')[0]);permalinksURL.push(getElementsByClassName(tmp[x],'timeline-Tweet-timestamp')[0]);if(getElementsByClassName(tmp[x],'timeline-Tweet-media')[0]!==undefined){images.push(getElementsByClassName(tmp[x],'timeline-Tweet-media')[0]);}else{images.push(undefined);}}\r\nx++;}}\r\nif(tweets.length>maxTweets){tweets.splice(maxTweets,(tweets.length-maxTweets));authors.splice(maxTweets,(authors.length-maxTweets));times.splice(maxTweets,(times.length-maxTweets));rts.splice(maxTweets,(rts.length-maxTweets));images.splice(maxTweets,(images.length-maxTweets));permalinksURL.splice(maxTweets,(permalinksURL.length-maxTweets));}\r\nvar arrayTweets=[];var x=tweets.length;var n=0;if(dataOnly){while(n';}\r\nop+='

'+strip(tweets[n].innerHTML)+'

';if(printTime){if(permalinks){op+='

'+times[n].getAttribute('aria-label')+'

';}else{op+='

'+\r\ntimes[n].getAttribute('aria-label')+'

';}}}else{if(tweets[n].textContent){if(printUser){op+='

'+authors[n].textContent+'

';}\r\nop+='

'+tweets[n].textContent+'

';if(printTime){op+='

'+times[n].textContent+'

';}}else{if(printUser){op+='

'+authors[n].textContent+'

';}\r\nop+='

'+tweets[n].textContent+'

';if(printTime){op+='

'+times[n].textContent+'

';}}}\r\nif(showInteractionLinks){op+='

':'>')+'Reply':'>')+'Retweet'+'':'>')+'Favorite

';}\r\nif(showImages&&images[n]!==undefined&&extractImageUrl(images[n])!==undefined){op+='
'+'\"Image'+'
';}\r\nif(showImages){arrayTweets.push(op);}else if(!showImages&&tweets[n].textContent.length){arrayTweets.push(op);}\r\nn++;}}\r\nhandleTweets(arrayTweets);inProgress=false;if(queue.length>0){twitterFetcher.fetch(queue[0]);queue.splice(0,1);}}};window.__twttrf=twitterFetcher;window.twitterFetcher=twitterFetcher;return twitterFetcher;}));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/twitter-fetcher/js/twitterFetcher_min.js\n// module id = ./node_modules/twitter-fetcher/js/twitterFetcher_min.js\n// module chunks = socialstream","'use strict';\r\nimport JSON5 from 'json5';\r\nimport Instafeed from 'instafeed.js';\r\nimport TwitterFetcher from 'twitter-fetcher';\r\nimport formatDate from 'date-fns/format';\r\nimport $clamp from 'clamp-js-main';\r\nimport filterizr from './filterizr';\r\n\r\nexport default class SocialStream{\r\n\tconstructor($el){\r\n\t\tthis.feeds = [];\r\n\t\tthis.$el = $el;\r\n\t\tthis.options = {\r\n\t\t\tfacebook:{\r\n\t\t\t\tpage: '',\r\n\t\t\t\taccessToken: '',\r\n\t\t\t\tmaxPerFeed: 8,\r\n\t\t\t\tfeederFn: this.getFacebookFeeds.bind(this),\r\n\t\t\t\tgetHtmlFn: this.getFacebookHtml.bind(this),\r\n\t\t\t},\r\n\t\t\ttwitter:{\r\n\t\t\t\tpageName: '',\r\n\t\t\t\tmaxPerFeed: 8,\r\n\t\t\t\tfeederFn: this.getTwitterFeeds.bind(this),\r\n\t\t\t\tgetHtmlFn: this.getTwitterHtml.bind(this),\r\n\t\t\t},\r\n\t\t\tinstagram:{\r\n\t\t\t\tuserId: '',\r\n\t\t\t\taccessToken: '',\r\n\t\t\t\tmaxPerFeed: 8,\r\n\t\t\t\tfeederFn: this.getInstagramFeeds.bind(this),\r\n\t\t\t\tgetHtmlFn: this.getInstagramHtml.bind(this),\r\n\t\t\t\tisLazyLoad: true, // require vanilla-lazyload\r\n\t\t\t},\r\n\t\t\tyoutube:{\r\n\t\t\t\tapiKey: '',\r\n\t\t\t\tplaylistId: '',\r\n\t\t\t\tmaxPerFeed: 8,\r\n\t\t\t\tfeederFn: this.getYoutubeFeeds.bind(this),\r\n\t\t\t\tgetHtmlFn: this.getYoutubeHtml.bind(this),\r\n\t\t\t\tisLazyLoad: true, // require vanilla-lazyload\r\n\t\t\t},\r\n\t\t\tfilterizr:{\r\n\t\t\t\tanimationDuration: 0.5,\r\n\t\t\t\tcallbacks: {\r\n\t\t\t\t\tonFilteringStart: function() { },\r\n\t\t\t\t\tonFilteringEnd: function() { },\r\n\t\t\t\t\tonShufflingStart: function() { },\r\n\t\t\t\t\tonShufflingEnd: function() { },\r\n\t\t\t\t\tonSortingStart: function() { },\r\n\t\t\t\t\tonSortingEnd: function() { }\r\n\t\t\t\t},\r\n\t\t\t\tdelay: 0,\r\n\t\t\t\tdelayMode: 'progressive',\r\n\t\t\t\teasing: 'ease-out',\r\n\t\t\t\tfilter: 'all',\r\n\t\t\t\tfilterOutCss: {\r\n\t\t\t\t\topacity: 0,\r\n\t\t\t\t\ttransform: 'scale(0.5)'\r\n\t\t\t\t},\r\n\t\t\t\tfilterInCss: {\r\n\t\t\t\t\topacity: 1,\r\n\t\t\t\t\ttransform: 'scale(1)'\r\n\t\t\t\t},\r\n\t\t\t\tlayout: 'packed',\r\n\t\t\t\tselector: '.filter-container',\r\n\t\t\t\tsetupControls: true\r\n\t\t\t},\r\n\t\t\tinstafeed:{\r\n\t\t\t\tget: 'user',\r\n\t\t\t\tsortBy: 'most-recent',\r\n\t\t\t\ttarget: 'social-stream'\r\n\t\t\t},\r\n\t\t\tclamp: {\r\n\t\t\t\tclamp: 4\r\n\t\t\t},\r\n\t\t\torder: 'instagram, twitter, youtube', //name of the social should match with the option keys\r\n\t\t\torderNumberShownAtStartup: 0, // if 0, means it shows all. Index starts from 1\r\n\t\t};\r\n\r\n\t\tlet attr = $el.attr('data-socialstream');\r\n\t\tif(attr){\r\n\t\t\tlet options = JSON5.parse(attr);\r\n\t\t\tif(!options.order){\r\n\t\t\t\toptions.order = Object.keys(options).filter(key => ['instagram','twitter','facebook','youtube'].includes(key)).join(', ');\r\n\t\t\t}\r\n\t\t\tthis.options = $.extend(true, this.options, options);\r\n\t\t}\r\n\r\n\t\tthis.promise = this.init();\r\n\r\n\t}\r\n\r\n\tinit(){\r\n\t\treturn this.render();\r\n\t}\r\n\r\n\trender(){\r\n\t\t// check order\r\n\t\tthis.orderArray = this.options.order.split(\",\").map(x=>x.trim());\r\n\t\tconst feederFns = this.orderArray.map(x => this.options[x].feederFn());\r\n\r\n\t\treturn Promise.all(feederFns).then((results) =>{\r\n\t\t\tlet content = '';\r\n\t\t\tresults.forEach((result,i)=>{\r\n\t\t\t\tconst key = this.orderArray[i];\r\n\t\t\t\tcontent += this.options[key].getHtmlFn(result[key], i);\r\n\t\t\t});\r\n\t\t\tconst socialStreamHtml = this.getSocialStreamHtml(content);\r\n\t\t\tthis.$el.html(socialStreamHtml);\r\n\t\t\tthis.applyClamp();\r\n\t\t\tthis.applyFilter();\r\n\t\t});\r\n\t}\r\n\r\n\tapplyClamp(){\r\n\t\tconst that = this;\r\n\t\t$('.o-socialstream__item-text').each(function(){\r\n\t\t\t$clamp(this, that.options.clamp);\r\n\t\t});\r\n\t}\r\n\r\n\tapplyFilter(){\r\n\t\tconst $filterContainer = this.$el.find(this.options.filterizr.selector).filterizr(this.options.filterizr);\r\n\t\tconst $filterBtns = this.$el.find('.o-socialstream__filter-btn');\r\n\r\n\t\t$filterBtns.click(function(){\r\n\t\t\t$filterBtns.removeClass('active');\r\n\t\t\t$(this).addClass('active');\r\n\t\t});\r\n\r\n\t\tif(this.options.orderNumberShownAtStartup){\r\n\t\t\t $filterContainer.filterizr('filter', this.options.orderNumberShownAtStartup);\r\n\t\t}\r\n\t}\r\n\r\n\tgetFilterHtml(){\r\n\t\treturn `
\r\n\t\t\t${this.orderArray.map((x, i)=>{\r\n\t\t\t\treturn `
\r\n\t\t\t\t\t\r\n\t\t\t\t
`;\r\n\t\t\t}).join('')}\r\n\t\t
`;\r\n\t}\r\n\r\n\tgetSocialStreamHtml(contentHtml){\r\n\t\treturn `
${this.getFilterHtml()}
${contentHtml}
`;\r\n\t}\r\n\r\n\tgetYoutubeFeeds() {\r\n\t\tconst url = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=' + this.options.youtube.playlistId + '&key=' + this.options.youtube.apiKey + '&pageToken=&maxResults=' + this.options.youtube.maxPerFeed;\r\n\t\treturn new Promise((resolve, reject) =>{\r\n\t\t\t$.ajax({\r\n\t\t\t\turl: url,\r\n\t\t\t\tcache: true,\r\n\t\t\t\tdataType: 'jsonp',\r\n\t\t\t\tsuccess: (response) => {\r\n\t\t\t\t\tif (!!response.items) {\r\n\t\t\t\t\t\tthis.feeds.youtube = response.items.map(function(item) {\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tid: item.snippet.resourceId.videoId,\r\n\t\t\t\t\t\t\t\ttime: formatDate(item.snippet.publishedAt, 'X'),\r\n\t\t\t\t\t\t\t\tthumbnail: item.snippet.thumbnails.standard || item.snippet.thumbnails.high || item.snippet.thumbnails.maxres || item.snippet.thumbnails.default,\r\n\t\t\t\t\t\t\t\ttitle: item.snippet.title,\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tresolve({youtube: this.feeds.youtube});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tgetTwitterFeeds(){\r\n\t\treturn new Promise((resolve, reject) =>{\r\n\t\t\tconst dateFormatter = (date) => formatDate(date);\r\n\t\t\tconst handleTweets = (tweets) => {\r\n\t\t\t\tthis.feeds.twitter = tweets.map(function(tweet, idx) {\r\n\t\t\t\t\tconst div = document.createElement('div');\r\n\t\t\t\t\tdiv.innerHTML = tweet;\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tid: idx,\r\n\t\t\t\t\t\tcontent: div.querySelector('.tweet').innerHTML,\r\n\t\t\t\t\t\ttime: formatDate(div.querySelector('.timePosted a').textContent, 'X')\r\n\t\t\t\t\t};\r\n\t\t\t\t});\r\n\t\t\t\tresolve({twitter: this.feeds.twitter});\r\n\t\t\t};\r\n\t\t\tconst configProfile = {\r\n\t\t\t\tprofile: {\"screenName\": this.options.twitter.pageName},\r\n\t\t\t\tdomId: '',\r\n\t\t\t\tmaxTweets: this.options.twitter.maxPerFeed,\r\n\t\t\t\tenableLinks: true,\r\n\t\t\t\tshowUser: false,\r\n\t\t\t\tshowTime: true,\r\n\t\t\t\tdateFunction: dateFormatter,\r\n\t\t\t\tshowImages: false,\r\n\t\t\t\tlang: 'en',\r\n\t\t\t\tshowInteraction: false,\r\n\t\t\t\tcustomCallback : handleTweets.bind(this)\r\n\t\t\t};\r\n\r\n\t\t\tTwitterFetcher.fetch(configProfile);\r\n\t\t});\r\n\t}\r\n\r\n\tgetInstagramFeeds(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tlet opts = {\r\n\t\t\t\tget: 'user',\r\n\t\t\t\tuserId: this.options.instagram.userId,\r\n\t\t\t\taccessToken: this.options.instagram.accessToken,\r\n\t\t\t\tsortBy: 'most-recent',\r\n\t\t\t\tlimit: this.options.instagram.maxPerFeed,\r\n\t\t\t\ttarget: 'social-stream',\r\n\t\t\t\tsuccess: (data) => {\r\n\t\t\t\t\tif (!!data.data) {\r\n\t\t\t\t\t\tthis.feeds.instagram = data.data.map(function(image) {\r\n\t\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\t\tlink: image.link,\r\n\t\t\t\t\t\t\t\ttitle: !!image.caption ? image.caption.text : '',\r\n\t\t\t\t\t\t\t\timages: image.images.standard_resolution,\r\n\t\t\t\t\t\t\t\ttime: image.created_time\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tresolve({instagram: this.feeds.instagram});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\topts = $.extend(true, opts, this.options.instafeed);\r\n\t\t\tconst userFeed = new Instafeed(opts);\r\n\t\t\tuserFeed.run();\r\n\t\t});\r\n\t}\r\n\r\n\tgetFacebookFeeds(){\r\n\t\t(function(d, s, id){\r\n\t\t\tvar js, fjs = d.getElementsByTagName(s)[0];\r\n\t\t\tif (d.getElementById(id)) {return;}\r\n\t\t\tjs = d.createElement(s); js.id = id;\r\n\t\t\tjs.src = \"//connect.facebook.net/en_US/sdk.js\";\r\n\t\t\tfjs.parentNode.insertBefore(js, fjs);\r\n\t\t}(document, 'script', 'facebook-jssdk'));\r\n\r\n\t\twindow.fbAsyncInit = function() {\r\n\t\t\tvar opts = this.options.facebook;\r\n\r\n\t\t\twindow.FB.init({\r\n\t\t\t\tappId : '136092296943780',\r\n\t\t\t\tautoLogAppEvents : true,\r\n\t\t\t\txfbml : true,\r\n\t\t\t\tversion : 'v2.9'\r\n\t\t\t});\r\n\t\t\twindow.FB.AppEvents.logPageView();\r\n\t\t\twindow.FB.api('/' + opts.page + '/feed?access_token=' + opts.accessToken, function(response) {\r\n\t\t\t\tif (response && !response.error) {\r\n\t\t\t\t\tthis.feeds.facebook = response.data.slice(0, opts.maxPerFeed).map(function(feed) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tid: feed.id,\r\n\t\t\t\t\t\t\tcontent: feed.message,\r\n\t\t\t\t\t\t\ttime: feed.created_time\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tconsole.error('Cannot get facebook feed: ', response.error);\r\n\t\t\t\t}\r\n\t\t\t}.bind(this));\r\n\t\t}.bind(this);\r\n\t}\r\n\r\n\tgetFacebookHtml(items, orderNumber){\r\n\t\treturn items && items.map(item=>{\r\n\t\t\treturn `
\r\n\t\t\t\t
${item.content}
\r\n\t\t\t\t
Posted ${formatDate(item.time * 1000, 'D MMMM [at] H:mma')}
\r\n\t\t\t
`;\r\n\t\t}).join('');\r\n\t}\r\n\r\n\tgetInstagramHtml(items, orderNumber){\r\n\t\tconst lazyLoad = (item) => `data-original=\"${item.images.url}\"`;\r\n\t\tconst standardBgimg = (item) => `style=\"background-image: url(${this.images.url})\"`;\r\n\r\n\t\treturn items ? items.map(item=>{\r\n\t\t\treturn ``;\r\n\t\t}).join('') : '';\r\n\t}\r\n\r\n\tgetTwitterHtml(items, orderNumber){\r\n\t\treturn items ? items.map(item=>{\r\n\t\t\treturn `
\r\n\t\t\t\t
${item.content}
\r\n\t\t\t\t
Posted ${formatDate(item.time * 1000, 'D MMMM [at] H:mma')}
\r\n\t\t\t
`;\r\n\t\t}).join('') : '';\r\n\t}\r\n\r\n\tgetYoutubeHtml(items, orderNumber){\r\n\t\tconst lazyLoad = (item) => `data-original=\"${item.thumbnail.url}\"`;\r\n\t\tconst standardBgimg = (item) => `style=\"background-image: url(${this.thumbnail.url})\"`;\r\n\r\n\t\treturn items ? items.map(item=>{\r\n\t\t\treturn ``;\r\n\t\t}).join('') : '';\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/_js/partials/SocialStream.js","/**\r\n* Filterizr is a jQuery plugin that sorts, shuffles and applies stunning filters over\r\n* responsive galleries using CSS3 transitions and custom CSS effects.\r\n*\r\n* @author Yiotis Kaltsikis\r\n* @see {@link http://yiotis.net/filterizr}\r\n* @version 1.2.5\r\n* @license MIT License\r\n*/\r\n\r\n(function(global, $) {\r\n\r\n 'use strict';\r\n\r\n //Make sure jQuery exists\r\n if (!$) throw new Error('Filterizr requires jQuery to work.');\r\n\r\n /**\r\n * Modified version of Jake Gordon's Bin Packing algorithm used for Filterizr's 'packed' layout\r\n * @see {@link https://github.com/jakesgordon/bin-packing}\r\n */\r\n var Packer = function(w) {\r\n this.init(w);\r\n };\r\n\r\n Packer.prototype = {\r\n init: function(w) {\r\n this.root = { x: 0, y: 0, w: w };\r\n },\r\n fit: function(blocks) {\r\n var n, node, block, len = blocks.length;\r\n var h = len > 0 ? blocks[0].h : 0;\r\n this.root.h = h;\r\n for (n = 0; n < len ; n++) {\r\n block = blocks[n];\r\n if ((node = this.findNode(this.root, block.w, block.h)))\r\n block.fit = this.splitNode(node, block.w, block.h);\r\n else\r\n block.fit = this.growDown(block.w, block.h);\r\n }\r\n },\r\n findNode: function(root, w, h) {\r\n if (root.used)\r\n return this.findNode(root.right, w, h) || this.findNode(root.down, w, h);\r\n else if ((w <= root.w) && (h <= root.h))\r\n return root;\r\n else\r\n return null;\r\n },\r\n splitNode: function(node, w, h) {\r\n node.used = true;\r\n node.down = { x: node.x, y: node.y + h, w: node.w, h: node.h - h };\r\n node.right = { x: node.x + w, y: node.y, w: node.w - w, h: h };\r\n return node;\r\n },\r\n growDown: function(w, h) {\r\n var node;\r\n this.root = {\r\n used: true,\r\n x: 0,\r\n y: 0,\r\n w: this.root.w,\r\n h: this.root.h + h,\r\n down: { x: 0, y: this.root.h, w: this.root.w, h: h },\r\n right: this.root\r\n };\r\n if ((node = this.findNode(this.root, w, h)))\r\n return this.splitNode(node, w, h);\r\n else\r\n return null;\r\n }\r\n };\r\n\r\n /**\r\n * Only Filterizr method extracted on jQuery.fn.\r\n * Instantiates a new Filterizr or calls any of the public Filterizr methods.\r\n * @return {jQuery} this - to facilitate jQuery method chaining.\r\n */\r\n $.fn.filterizr = function() {\r\n var self = this, args = arguments;\r\n //Create the Filterizr obj as an internal private property on the current object\r\n //to serve as a private namespace\r\n if (!self._fltr) {\r\n self._fltr = $.fn.filterizr.prototype.init(self, (typeof args[0] === 'object' ? args[0] : undefined));\r\n }\r\n //Call all public Filterizr methods through the private Filterizr object\r\n if (typeof args[0] === 'string') {\r\n if (args[0].lastIndexOf('_') > -1) throw new Error('Filterizr error: You cannot call private methods');\r\n if (typeof self._fltr[args[0]] === 'function') {\r\n self._fltr[args[0]](args[1], args[2]);\r\n }\r\n else throw new Error('Filterizr error: There is no such function');\r\n }\r\n return self;\r\n };\r\n\r\n /**\r\n * Filterizr prototype\r\n */\r\n $.fn.filterizr.prototype = {\r\n\r\n /**\r\n * Filterizr constructor.\r\n * @param {Object} [container] - your container.\r\n * @param {Object} [options] - user options to override defaults.\r\n * @constructor\r\n */\r\n init: function(container, options) {\r\n var self = $(container).extend($.fn.filterizr.prototype);\r\n //Default options\r\n self.options = {\r\n animationDuration: 0.5,\r\n callbacks: {\r\n onFilteringStart: function() { },\r\n onFilteringEnd: function() { },\r\n onShufflingStart: function() { },\r\n onShufflingEnd: function() { },\r\n onSortingStart: function() { },\r\n onSortingEnd: function() { }\r\n },\r\n delay: 0,\r\n delayMode: 'progressive',\r\n easing: 'ease-out',\r\n filter: 'all',\r\n filterOutCss: {\r\n 'opacity': 0,\r\n 'transform': 'scale(0.5)'\r\n },\r\n filterInCss: {\r\n 'opacity': 1,\r\n 'transform': 'scale(1)'\r\n },\r\n layout: 'sameSize',\r\n setupControls: true\r\n };\r\n //No arguments constructor\r\n if (arguments.length === 0) {\r\n options = self.options;\r\n }\r\n //One argument constructor (only options)\r\n if (arguments.length === 1 && typeof arguments[0] === 'object') options = arguments[0];\r\n //If options argument provided, override defaults\r\n if (options) {\r\n self.setOptions(options);\r\n }\r\n //Private properties\r\n self.css({ //Cache reference to container as jQuery obj and init its CSS\r\n 'padding' : 0,\r\n 'position': 'relative'\r\n });\r\n self._lastCategory = 0; //Highest value in data-category of .filtr-items\r\n self._isAnimating = false;\r\n self._isShuffling = false;\r\n self._isSorting = false;\r\n //.filtr-item collections\r\n self._mainArray = self._getFiltrItems();\r\n self._subArrays = self._makeSubarrays();\r\n self._activeArray = self._getCollectionByFilter(self.options.filter);\r\n //Used for multiple category filtering\r\n self._toggledCategories = { };\r\n //Used for search feature\r\n self._typedText = $('input[data-search]').val() || '';\r\n //Generate unique ID for resize events\r\n self._uID = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\r\n return v.toString(16);\r\n });\r\n //Set up Filterizr events\r\n self._setupEvents();\r\n //Set up standard Filterizr controls (for multiple Filterizrs in your scene, set to false)\r\n if (self.options.setupControls) self._setupControls();\r\n //Start Filterizr!\r\n self.filter(self.options.filter);\r\n return self;\r\n },\r\n\r\n /***********************************\r\n * Public methods\r\n ***********************************/\r\n /**\r\n * Filters the items\r\n * @param {number} targetFilter - the applied filter towards which items transition\r\n */\r\n filter: function(targetFilter) {\r\n var self = this,\r\n target = self._getCollectionByFilter(targetFilter);\r\n\r\n self.options.filter = targetFilter;\r\n self.trigger('filteringStart');\r\n //Filter items\r\n self._handleFiltering(target);\r\n //Apply search filter on top if activated\r\n if (self._isSearchActivated()) self.search(self._typedText);\r\n },\r\n\r\n /**\r\n * Toggles filters on/off and renders the new collection\r\n * @param {number} toggledFilter - the filter to toggle\r\n */\r\n toggleFilter: function(toggledFilter) {\r\n var self = this,\r\n target = [], i = 0;\r\n\r\n self.trigger('filteringStart');\r\n //Toggle the toggledFilter in the active categories\r\n //If undefined (in case of window resize) ignore\r\n if (toggledFilter) {\r\n if (!self._toggledCategories[toggledFilter])\r\n self._toggledCategories[toggledFilter] = true;\r\n else\r\n delete self._toggledCategories[toggledFilter];\r\n }\r\n\r\n //If a filter is toggled on then display only items belonging to that category\r\n if (self._multifilterModeOn()) {\r\n target = self._makeMultifilterArray();\r\n //Filter items\r\n self._handleFiltering(target);\r\n //Apply search filter on top if activated\r\n if (self._isSearchActivated()) self.search(self._typedText);\r\n }\r\n //If all filters toggled off then display unfiltered gallery\r\n else {\r\n //Filter items\r\n self.filter('all');\r\n //Apply search filter on top if activated\r\n if (self._isSearchActivated()) self.search(self._typedText);\r\n }\r\n },\r\n\r\n /**\r\n * Searches the contents of .filtr-item elements, filters them and renders the results\r\n * @param {string} text to search in contents of .filtr-item elements\r\n */\r\n search: function(text) {\r\n var self = this,\r\n //get active category\r\n array = self._multifilterModeOn() ?\r\n self._makeMultifilterArray() :\r\n self._getCollectionByFilter(self.options.filter),\r\n target = [], i = 0;\r\n\r\n if (self._isSearchActivated()) {\r\n for (i = 0; i < array.length; i++) {\r\n //Check if the text typed in the textbox is contained in the .filtr-item element\r\n //and add it to the target array\r\n var containsText = array[i].text().toLowerCase().indexOf(text.toLowerCase()) > -1;\r\n if (containsText) {\r\n target.push(array[i]);\r\n }\r\n }\r\n }\r\n //Show the results\r\n if (target.length > 0) {\r\n self._handleFiltering(target);\r\n }\r\n //If there are no results\r\n else {\r\n //and search is activated, show blank\r\n if (self._isSearchActivated()) {\r\n for (i = 0; i < self._activeArray.length; i++) {\r\n self._activeArray[i]._filterOut();\r\n }\r\n }\r\n //if search is not activated display gallery with last applied filter\r\n else {\r\n self._handleFiltering(array);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Shuffles the active collection and rearranges it on screen\r\n */\r\n shuffle: function() {\r\n var self = this;\r\n\r\n //ShufflingStart callback\r\n self._isAnimating = true;\r\n self._isShuffling = true;\r\n self.trigger('shufflingStart');\r\n\r\n self._mainArray = self._fisherYatesShuffle(self._mainArray);\r\n self._subArrays = self._makeSubarrays();\r\n\r\n var target = self._multifilterModeOn() ?\r\n self._makeMultifilterArray() :\r\n self._getCollectionByFilter(self.options.filter);\r\n\r\n if (self._isSearchActivated())\r\n self.search(self._typedText);\r\n else\r\n self._placeItems(target);\r\n },\r\n\r\n /**\r\n * Sorts the active collection and rearranges it on screen.\r\n * @param {string} [attr] - attr based on which to sort (default: 'domIndex' / possible: 'domIndex', 'sortData', 'w', 'h').\r\n * @param {string} [sortOrder] - asc/desc (default: 'asc').\r\n */\r\n sort: function(attr, sortOrder) {\r\n var self = this;\r\n //Set defaults\r\n attr \t = attr || 'domIndex';\r\n sortOrder = sortOrder || 'asc';\r\n\r\n //SortingStart callback\r\n self._isAnimating = true;\r\n self._isSorting = true;\r\n self.trigger('sortingStart');\r\n\r\n //Register sort attr on all elements if it is a user-defined data-attribute\r\n var isUserAttr = attr !== 'domIndex' && attr !== 'sortData' && attr !== 'w' && attr!== 'h';\r\n if (isUserAttr) {\r\n for (var i = 0; i < self._mainArray.length; i++) {\r\n self._mainArray[i][attr] = self._mainArray[i].data(attr);\r\n }\r\n }\r\n //Sort items\r\n self._mainArray.sort(self._comparator(attr, sortOrder));\r\n self._subArrays = self._makeSubarrays();\r\n //Place sorted collection to new positions\r\n var target = self._multifilterModeOn() ?\r\n self._makeMultifilterArray() :\r\n self._getCollectionByFilter(self.options.filter);\r\n\r\n if (self._isSearchActivated())\r\n self.search(self._typedText);\r\n else\r\n self._placeItems(target);\r\n },\r\n\r\n /**\r\n * Overrides the default options with the user-provided ones.\r\n * @param {object} options - the user-provided options to override defaults.\r\n */\r\n setOptions: function(options) {\r\n var self = this, i = 0;\r\n //Override options\r\n for (var prop in options) {\r\n self.options[prop] = options[prop];\r\n }\r\n //If the user tries to override animationDuration, easing, delay or delayMode\r\n if (self._mainArray && (options.animationDuration || options.delay || options.easing || options.delayMode)) {\r\n for (i = 0; i < self._mainArray.length; i++) {\r\n self._mainArray[i].css('transition', 'all ' + self.options.animationDuration + 's ' + self.options.easing + ' ' + self._mainArray[i]._calcDelay() + 'ms');\r\n }\r\n }\r\n //If the user tries to override a callback, make sure undefined callbacks are set to empty functions\r\n if (options.callbacks) {\r\n if (!options.callbacks.onFilteringStart)\r\n self.options.callbacks.onFilteringStart = function() { };\r\n if (!options.callbacks.onFilteringEnd)\r\n self.options.callbacks.onFilteringEnd = function() { };\r\n if (!options.callbacks.onShufflingStart)\r\n self.options.callbacks.onShufflingStart = function() { };\r\n if (!options.callbacks.onShufflingEnd)\r\n self.options.callbacks.onShufflingEnd = function() { };\r\n if (!options.callbacks.onSortingStart)\r\n self.options.callbacks.onSortingStart = function() { };\r\n if (!options.callbacks.onSortingEnd)\r\n self.options.callbacks.onSortingEnd = function() { };\r\n }\r\n //If the user has not defined a transform property in their CSS, add it\r\n //while overriding, including translates for movement\r\n if (!self.options.filterInCss.transform) self.options.filterInCss.transform = 'translate3d(0,0,0)';\r\n if (!self.options.filterOutCss.transform) self.options.filterOutCss.transform = 'translate3d(0,0,0)';\r\n },\r\n\r\n /***********************************\r\n * Private & helper methods\r\n ***********************************/\r\n /**\r\n * Finds all .filtr-item elements in the .filtr-container and sets them up before returning them in an array.\r\n * @return {Object[]} all .filtr-item elements contained in Filterizr's container.\r\n * @private\r\n */\r\n _getFiltrItems: function() {\r\n var self = this,\r\n filtrItems = $(self.find('.filtr-item')),\r\n itemsArray = [];\r\n\r\n $.each(filtrItems, function(i, e) {\r\n //Set item up as Filtr object & push to array\r\n var item = $(e).extend(FiltrItemProto)._init(i, self);\r\n itemsArray.push(item);\r\n });\r\n return itemsArray;\r\n },\r\n\r\n /**\r\n * Divide .filtr-item elements into sub-arrays based on data-category attribute.\r\n * @return {Object[Object[self._lastCategory]]} Array of arrays including items grouped by data-category.\r\n * @private\r\n */\r\n _makeSubarrays: function() {\r\n var self = this,\r\n subArrays = [];\r\n\r\n for (var i = 0; i < self._lastCategory; i++) subArrays.push([]);\r\n\r\n //Populate the sub-arrays\r\n for (i = 0; i < self._mainArray.length; i++) {\r\n //Multiple categories scenario\r\n if (typeof self._mainArray[i]._category === 'object') {\r\n var length = self._mainArray[i]._category.length;\r\n for (var x = 0; x < length; x++) {\r\n subArrays[self._mainArray[i]._category[x] - 1].push(self._mainArray[i]);\r\n }\r\n }\r\n //Single category\r\n else subArrays[self._mainArray[i]._category - 1].push(self._mainArray[i]);\r\n }\r\n return subArrays;\r\n },\r\n\r\n /**\r\n * Make a .filtr-item array based on the activated filters\r\n * @return {Object[]} array consisting of the .filtr-item elements belonging to active filters\r\n * @private\r\n */\r\n _makeMultifilterArray: function() {\r\n var self = this,\r\n target = [], addedMap = {};\r\n\r\n for (var i = 0; i < self._mainArray.length; i++) {\r\n //If the item belongs to multiple categories\r\n var item = self._mainArray[i],\r\n belongsToCategory = false,\r\n isUnique = item.domIndex in addedMap === false;\r\n //Check if item belongs to categories whose filters are toggled on\r\n if (Array.isArray(item._category)) {\r\n for (var x = 0; x < item._category.length; x++) {\r\n if (item._category[x] in self._toggledCategories) {\r\n belongsToCategory = true;\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n if (item._category in self._toggledCategories) belongsToCategory = true;\r\n }\r\n //If the item is not already visible and belongs to a category\r\n //of the toggled on filters push it to target collection\r\n if (isUnique && belongsToCategory) {\r\n addedMap[item.domIndex] = true;\r\n target.push(item);\r\n }\r\n }\r\n return target;\r\n },\r\n\r\n /**\r\n * Detect and set up preset controls.\r\n * @private\r\n */\r\n _setupControls: function() {\r\n var self = this;\r\n //Filter controls\r\n $('*[data-filter]').click(function() {\r\n var targetFilter = $(this).data('filter');\r\n //Exit case\r\n if (self.options.filter === targetFilter) return;\r\n self.filter(targetFilter);\r\n });\r\n //Multiple filter controls\r\n $('*[data-multifilter]').click(function() {\r\n var targetFilter = $(this).data('multifilter');\r\n if (targetFilter === 'all') {\r\n self._toggledCategories = { };\r\n self.filter('all');\r\n }\r\n else {\r\n self.toggleFilter(targetFilter);\r\n }\r\n });\r\n //Shuffle control\r\n $('*[data-shuffle]').click(function() {\r\n self.shuffle();\r\n });\r\n //Sort controls\r\n $('*[data-sortAsc]').click(function() {\r\n var sortAttr = $('*[data-sortOrder]').val();\r\n self.sort(sortAttr, 'asc');\r\n });\r\n $('*[data-sortDesc]').click(function() {\r\n var sortAttr = $('*[data-sortOrder]').val();\r\n self.sort(sortAttr, 'desc');\r\n });\r\n //Search control\r\n $('input[data-search]').keyup(function() {\r\n self._typedText = $(this).val();\r\n self._delayEvent(function() {\r\n self.search(self._typedText);\r\n }, 250, self._uID);\r\n });\r\n },\r\n\r\n /**\r\n * Set up window and Filterizr events.\r\n * @private\r\n */\r\n _setupEvents: function() {\r\n var self = this;\r\n //Window resize event\r\n $(global).resize(function() {\r\n self._delayEvent(function() {\r\n self.trigger('resizeFiltrContainer');\r\n }, 250, self._uID);\r\n });\r\n //Filterizr events\r\n self\r\n //Container resize event\r\n .on('resizeFiltrContainer', function() {\r\n if (self._multifilterModeOn())\r\n self.toggleFilter();\r\n else\r\n self.filter(self.options.filter);\r\n })\r\n //onFilteringStart event\r\n .on('filteringStart', function() {\r\n self.options.callbacks.onFilteringStart();\r\n })\r\n //onFilteringEnd event\r\n .on('filteringEnd', function() {\r\n self.options.callbacks.onFilteringEnd();\r\n })\r\n //onShufflingStart event\r\n .on('shufflingStart', function() {\r\n self._isShuffling = true;\r\n self.options.callbacks.onShufflingStart();\r\n })\r\n //onFilteringEnd event\r\n .on('shufflingEnd', function() {\r\n self.options.callbacks.onShufflingEnd();\r\n self._isShuffling = false;\r\n })\r\n //onSortingStart event\r\n .on('sortingStart', function() {\r\n self._isSorting = true;\r\n self.options.callbacks.onSortingStart();\r\n })\r\n //onSortingEnd event\r\n .on('sortingEnd', function() {\r\n self.options.callbacks.onSortingEnd();\r\n self._isSorting = false;\r\n });\r\n },\r\n\r\n /**\r\n * Calculates the final positions of items being filtered in, updates the height of .filtr-container.\r\n * @return {Object[]} array of future item positions.\r\n * @private\r\n */\r\n _calcItemPositions: function() {\r\n var self = this,\r\n array = self._activeArray,\r\n //Container data\r\n containerHeight = 0,\r\n cols = Math.round(self.width() / self.find('.filtr-item').outerWidth()),\r\n rows = 0,\r\n //Item data\r\n itemWidth = array[0].outerWidth(),\r\n itemHeight = 0,\r\n //Position calculation vars\r\n left = 0, top = 0,\r\n //Loop vars\r\n i = 0, x = 0,\r\n //Array of positions to return\r\n posArray = [];\r\n\r\n //Layout for items of varying sizes\r\n if (self.options.layout === 'packed') {\r\n //Cache current item width/height\r\n $.each(self._activeArray, function(i, e) {\r\n e._updateDimensions();\r\n });\r\n //Instantiate new Packer, set up grid\r\n var packer = new Packer(self.outerWidth());\r\n packer.fit(self._activeArray);\r\n for (i = 0; i < array.length; i++) {\r\n posArray.push({\r\n left: array[i].fit.x,\r\n top: array[i].fit.y\r\n });\r\n }\r\n containerHeight = packer.root.h;\r\n }\r\n //Horizontal layout\r\n if (self.options.layout === 'horizontal') {\r\n rows = 1;\r\n for (i = 1; i <= array.length; i++) {\r\n itemWidth = array[i - 1].outerWidth();\r\n itemHeight = array[i - 1].outerHeight();\r\n posArray.push({\r\n left: left,\r\n top: top\r\n });\r\n left += itemWidth;\r\n if (containerHeight < itemHeight) containerHeight = itemHeight;\r\n }\r\n }\r\n //Vertical layout\r\n else if (self.options.layout === 'vertical') {\r\n for (i = 1; i <= array.length; i++) {\r\n itemHeight = array[i - 1].outerHeight();\r\n posArray.push({\r\n left: left,\r\n top: top\r\n });\r\n top += itemHeight;\r\n }\r\n containerHeight = top;\r\n }\r\n //Layout of items for same height and varying width\r\n else if (self.options.layout === 'sameHeight') {\r\n rows = 1;\r\n var rowWidth = self.outerWidth();\r\n for (i = 1; i <= array.length; i++) {\r\n itemWidth = array[i - 1].width();\r\n var itemOuterWidth = array[i - 1].outerWidth(),\r\n nextItemWidth = 0;\r\n if (array[i]) nextItemWidth = array[i].width();\r\n posArray.push({\r\n left: left,\r\n top: top\r\n });\r\n x = left + itemWidth + nextItemWidth;\r\n if (x > rowWidth) {\r\n x \t = 0;\r\n left = 0;\r\n top += array[0].outerHeight();\r\n rows++;\r\n }\r\n else left += itemOuterWidth;\r\n }\r\n containerHeight = rows * array[0].outerHeight();\r\n }\r\n //Layout for items of same width and varying height\r\n else if (self.options.layout === 'sameWidth') {\r\n //Get positions\r\n for (i = 1; i <= array.length; i++) {\r\n posArray.push({\r\n left: left,\r\n top: top\r\n });\r\n if (i % cols === 0) rows++;\r\n left += itemWidth;\r\n top = 0;\r\n if (rows > 0) {\r\n x = rows;\r\n while (x > 0) {\r\n top += array[i - (cols * x)].outerHeight();\r\n x--;\r\n }\r\n }\r\n if (i % cols === 0) left = 0;\r\n }\r\n //Calculate containerHeight\r\n for (i = 0; i < cols; i++) {\r\n var columnHeight = 0, index = i;\r\n while(array[index]) {\r\n columnHeight += array[index].outerHeight();\r\n index += cols;\r\n }\r\n if (columnHeight > containerHeight) {\r\n containerHeight = columnHeight;\r\n columnHeight = 0;\r\n }\r\n else\r\n columnHeight = 0;\r\n }\r\n }\r\n //Layout for items of exactly same size\r\n else if (self.options.layout === 'sameSize') {\r\n for (i = 1; i <= array.length; i++) {\r\n //Push first point at (left: 0, top: 0)\r\n posArray.push({\r\n left: left,\r\n top: top\r\n });\r\n //Set left and top properties for next point before next iteration\r\n left += itemWidth;\r\n //On row change calc new top and reset left\r\n if (i % cols === 0) {\r\n top += array[0].outerHeight();\r\n left = 0;\r\n }\r\n }\r\n rows = Math.ceil(array.length / cols);\r\n containerHeight = rows * array[0].outerHeight();\r\n }\r\n //Update the height of .filtr-container based on new positions\r\n self.css('height', containerHeight);\r\n return posArray;\r\n },\r\n\r\n /**\r\n * Handles filtering in/out and reposition items when transition between categories\r\n * @param {Object[]} the target array towards which to filter\r\n * @private\r\n */\r\n _handleFiltering: function(target) {\r\n var self = this,\r\n toFilterOut = self._getArrayOfUniqueItems(self._activeArray, target);\r\n //Minimize all .filtr-item elements that are not the same between categories\r\n for (var i = 0; i < toFilterOut.length; i++) {\r\n toFilterOut[i]._filterOut();\r\n }\r\n self._activeArray = target;\r\n //Reposition same items and filter in new\r\n self._placeItems(target);\r\n },\r\n\r\n /**\r\n * Determines if the user is using data-multifilter controls or simple data-filter controls\r\n * @return {boolean} indicating whether multiple filter mode is on\r\n * @private\r\n */\r\n _multifilterModeOn: function() {\r\n var self = this;\r\n return Object.keys(self._toggledCategories).length > 0;\r\n },\r\n\r\n /**\r\n * Determines if the user has something typed in the search box\r\n * @return {boolean} indicating whether the user has searched\r\n * @private\r\n */\r\n _isSearchActivated: function() {\r\n var self = this;\r\n return self._typedText.length > 0;\r\n },\r\n\r\n /**\r\n * Places .filtr-item elements on the grid positions\r\n * @param {Object[]} arr - an array consisting of .filtr-item elements\r\n * @private\r\n */\r\n _placeItems: function(arr) {\r\n var self = this;\r\n //Tag gallery state as animating\r\n self._isAnimating = true;\r\n //Recalculate positions and filter in items\r\n self._itemPositions = self._calcItemPositions();\r\n for (var i = 0; i < arr.length; i++) {\r\n arr[i]._filterIn(self._itemPositions[i]);\r\n }\r\n },\r\n\r\n /**\r\n * Returns item collection based on a certain filter\r\n * @param {string|number} filter of category to return\r\n * @return {Object[]} one of the item collections based on filter\r\n * @private\r\n */\r\n _getCollectionByFilter: function(filter) {\r\n var self = this;\r\n return filter === 'all' ? self._mainArray : self._subArrays[filter - 1];\r\n },\r\n\r\n /**\r\n * Used to make deep copies of the predefined filters\r\n * in the options for the filterIn/Out methods of items.\r\n * @see _filterIn and _filterOut methods in FiltrItemProto.\r\n * @param {Object} obj - is the source object to make a deep copy from.\r\n * @return {Object} Deep copy of the obj param.\r\n * @private\r\n */\r\n _makeDeepCopy: function(obj) {\r\n var r = {};\r\n for (var p in obj) r[p] = obj[p];\r\n return r;\r\n },\r\n\r\n /**\r\n * Comparator factory used to produce camparers for sorting.\r\n * @see Filterizr.prototype.sort.\r\n * @param {string} prop - property based on which to sort ('domIndex', 'sortData', 'w', 'h')\r\n * @param {string} sortOrder - 'asc'/'desc'\r\n * @return {function} comparer which takes arguments\r\n * @private\r\n */\r\n _comparator: function(prop, sortOrder) {\r\n return function(a, b) {\r\n if (sortOrder === 'asc') {\r\n if (a[prop] < b[prop])\r\n return -1;\r\n else if (a[prop] > b[prop])\r\n return 1;\r\n else\r\n return 0;\r\n }\r\n else if (sortOrder === 'desc') {\r\n if (b[prop] < a[prop])\r\n return -1;\r\n else if (b[prop] > a[prop])\r\n return 1;\r\n else\r\n return 0;\r\n }\r\n };\r\n },\r\n\r\n /**\r\n * Modified version of Jeffery To's array intersection method\r\n * @see {@link http://www.falsepositives.com/index.php/2009/12/01/javascript-function-to-get-the-intersect-of-2-arrays/}\r\n * @return {Object[]} a disjoint array containing the elements of the first array not found in the second\r\n * @private\r\n */\r\n _getArrayOfUniqueItems: function(arr1, arr2) {\r\n var r = [], o = {}, l = arr2.length, i, v;\r\n for (i = 0; i < l; i++) {\r\n o[arr2[i].domIndex] = true;\r\n }\r\n l = arr1.length;\r\n for (i = 0; i < l; i++) {\r\n v = arr1[i];\r\n if (!(v.domIndex in o)) {\r\n r.push(v);\r\n }\r\n }\r\n return r;\r\n },\r\n\r\n /**\r\n * Brahn's take on CMS's solution to calling the window.resize event at set\r\n * intervals in multiple places in the code using a Java-like UUID with a regexp\r\n * @see {@link http://stackoverflow.com/questions/2854407/javascript-jquery-window-resize-how-to-fire-after-the-resize-is-completed}\r\n * @return {function} which calls the callback or just clears the timer\r\n * @private\r\n */\r\n _delayEvent: (function () {\r\n var self = this, timers = {};\r\n return function (callback, ms, uniqueId) {\r\n if (uniqueId === null) {\r\n throw Error(\"UniqueID needed\");\r\n }\r\n if (timers[uniqueId]) {\r\n clearTimeout (timers[uniqueId]);\r\n }\r\n timers[uniqueId] = setTimeout(callback, ms);\r\n };\r\n })(),\r\n\r\n /**\r\n * Fisher-Yates array shuffling algorithm implemented for JavaScript.\r\n * @return {Object[]} shuffled array.\r\n * @private\r\n */\r\n _fisherYatesShuffle: function shuffle(array) {\r\n var m = array.length, t, i;\r\n // While there remain elements to shuffle…\r\n while (m) {\r\n // Pick a remaining element…\r\n i = Math.floor(Math.random() * m--);\r\n // And swap it with the current element.\r\n t = array[m];\r\n array[m] = array[i];\r\n array[i] = t;\r\n }\r\n return array;\r\n }\r\n };\r\n\r\n /**\r\n * FiltrItem Prototype\r\n */\r\n var FiltrItemProto = {\r\n\r\n /**\r\n * Transforms a jQuery item with .filtr-item class into a FiltrItem.\r\n * @param {number} index - initial item order based on position in DOM.\r\n * @param {Filterizr} parent - reference to Filterizr container containing this Filtr Item.\r\n * @return {jQuery} this - to facilitate method chaining.\r\n * @constructor\r\n */\r\n _init: function(index, parent) {\r\n var self = this, delay = 0;\r\n //Private item properties\r\n self._parent = parent;\t\t\t //Ref to parent Filterizr object\r\n self._category = self._getCategory(); //data-category values\r\n self._lastPos = {};\t\t\t\t //Used for animations\r\n //Public properties - used for sorting\r\n self.domIndex = index;\r\n self.sortData = self.data('sort');\r\n //Item Dimensions used for Bin Packing algorithm (packed layout) and sorting.\r\n self.w = 0;\r\n self.h = 0;\r\n //self states\r\n self._isFilteredOut = true;\r\n self._filteringOut = false;\r\n self._filteringIn = false;\r\n //Determine delay & set initial item styles\r\n self.css(parent.options.filterOutCss)\r\n .css({\r\n '-webkit-backface-visibility': 'hidden',\r\n 'perspective': '1000px',\r\n '-webkit-perspective': '1000px',\r\n '-webkit-transform-style': 'preserve-3d',\r\n 'position': 'absolute',\r\n 'transition': 'all ' + parent.options.animationDuration + 's ' + parent.options.easing + ' ' + self._calcDelay() + 'ms'\r\n });\r\n //Events\r\n self.on(\"transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd\", function(){\r\n self._onTransitionEnd();\r\n });\r\n return self;\r\n },\r\n\r\n /**\r\n * Updates the dimensions (width/height) of the item.\r\n * @private\r\n */\r\n _updateDimensions: function() {\r\n var self = this;\r\n self.w = self.outerWidth();\r\n self.h = self.outerHeight();\r\n },\r\n\r\n /**\r\n * Calculates and returns the value of delay to apply to transition-delay in ms, depending on delayMode\r\n * @return {number} value to apply to transition-delay in ms.\r\n * @private\r\n */\r\n _calcDelay: function() {\r\n var self = this, r = 0;\r\n if (self._parent.options.delayMode === 'progressive')\r\n r = self._parent.options.delay * self.domIndex;\r\n else\r\n if (self.domIndex % 2 === 0) r = self._parent.options.delay;\r\n return r;\r\n },\r\n\r\n /**\r\n * Determines which categories this items belongs to and updates the _lastCategory prop of Filterizr.\r\n * @throws {InvalidArgumentException} data-category of .filtr-item elements must be integer or string of integers delimited by ', '\r\n * @return {Object[]|number} the categories this item belongs to.\r\n * @private\r\n */\r\n _getCategory: function() {\r\n var self = this,\r\n ret = self.data('category');\r\n //If more than one category provided\r\n if (typeof ret === 'string') {\r\n ret = ret.split(', ');\r\n for (var i = 0; i < ret.length; i++) {\r\n //Error checking: make sure data-category has an integer as its value\r\n if (isNaN(parseInt(ret[i]))) {\r\n throw new Error('Filterizr: the value of data-category must be a number, starting from value 1 and increasing.');\r\n }\r\n if (parseInt(ret[i]) > self._parent._lastCategory) {\r\n self._parent._lastCategory = parseInt(ret[i]);\r\n }\r\n }\r\n }\r\n else {\r\n if (ret > self._parent._lastCategory)\r\n self._parent._lastCategory = ret;\r\n }\r\n return ret;\r\n },\r\n\r\n /**\r\n * Handles the transitionEnd event.\r\n * @private\r\n */\r\n _onTransitionEnd: function() {\r\n var self = this;\r\n //finished filtering out\r\n if (self._filteringOut) {\r\n $(self).addClass('filteredOut');\r\n self._isFilteredOut = true;\r\n self._filteringOut = false;\r\n }\r\n //finished filtering in\r\n else if (self._filteringIn) {\r\n self._isFilteredOut = false;\r\n self._filteringIn \t= false;\r\n }\r\n //if animating trigger filteringEnd event once on parent\r\n if (self._parent._isAnimating) {\r\n if (self._parent._isShuffling)\r\n self._parent.trigger('shufflingEnd');\r\n else if (self._parent._isSorting)\r\n self._parent.trigger('sortingEnd');\r\n else\r\n self._parent.trigger('filteringEnd');\r\n self._parent._isAnimating = false;\r\n }\r\n },\r\n\r\n /**\r\n * Filters out the item.\r\n * @private\r\n */\r\n _filterOut: function() {\r\n var self = this,\r\n filterOutCss = self._parent._makeDeepCopy(self._parent.options.filterOutCss);\r\n //Auto add translate to transform over user-defined filterOut styles\r\n filterOutCss.transform += ' translate3d(' + self._lastPos.left + 'px,' + self._lastPos.top + 'px, 0)';\r\n //Play animation\r\n self.css(filterOutCss);\r\n //Make unclickable\r\n self.css('pointer-events', 'none');\r\n //Tag as filteringOut for transitionend event\r\n self._filteringOut = true;\r\n },\r\n\r\n /**\r\n * Filters in the item.\r\n * @param {Object} targetPos - is the position to move to with transform-translate\r\n * @private\r\n */\r\n _filterIn: function(targetPos) {\r\n var self = this,\r\n filterInCss = self._parent._makeDeepCopy(self._parent.options.filterInCss);\r\n //Remove the filteredOut class\r\n $(self).removeClass('filteredOut');\r\n //Tag as filtering in for transitionend event\r\n self._filteringIn = true;\r\n self._lastPos = targetPos;\r\n //Make clickable\r\n self.css('pointer-events', 'auto');\r\n //Auto add translate to transform over user-defined filterIn styles\r\n filterInCss.transform += ' translate3d(' + targetPos.left + 'px,' + targetPos.top + 'px, 0)';\r\n //Play animation\r\n self.css(filterInCss);\r\n }\r\n };\r\n\r\n})(window, jQuery);\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/_js/partials/filterizr.js"],"sourceRoot":""}