{"version":3,"sources":["init.js","masongram.js","resouorce.js","tile.js"],"names":["window","masongram","$","fn","options","this","each","Masongram","$element","self","_dependencies","forEach","name","require","_error","configure","setup","_config","_$container","_resource","_inProgress","prototype","result","undefined","console","error","extend","endpoint","loop","count","offset","size","caption","location","attr","class","appendTo","masonry","itemSelector","columnWidth","percentPosition","Resource","on","items","append","scrollTimeout","scroll","setTimeout","imagesLoaded","progress","scrollTop","document","height","load","item","index","tile","Tile","$object","getObject","length","trigger","config","_url","deferred","Deferred","ajax","type","url","data","access_token","dataType","success","response","resolve","pagination","next_url","reject","promise","callback","event","_data","parseLocation","create","_$object","tabindex","src","images","width","$captionContainer","$caption","text","html","parseCaption","indexOf","test","match","replace","latitude","longitude","likes","link"],"mappings":"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","file":"masongram.min.js","sourcesContent":["'use strict';\n\nwindow.masongram = $.fn.masongram = function (options) {\n return this.each(function () {\n new Masongram(this, options);\n });\n};\n","'use strict';\n\nvar Masongram = (function () {\n\n var _dependencies = [\n 'jQuery',\n 'Masonry',\n ];\n\n var _error = false;\n var _config;\n var _$container;\n var _resource;\n var _inProgress;\n\n function Masongram($element, options) {\n var self = this;\n\n _dependencies.forEach(function (name) {\n self.require(name);\n });\n\n if (_error) {\n return;\n }\n\n this.configure(options);\n this.setup($element);\n }\n\n Masongram.prototype = {\n\n require: function (name) {\n var result = window[name] !== undefined;\n if (!result) {\n _error = true;\n console.error('Dependency unavailable: ' + name);\n }\n return result;\n },\n\n configure: function (options) {\n _config = $.extend(true, {\n endpoint: 'users/self',\n loop: false,\n count: 10,\n offset: 10,\n size: 'low_resolution',\n caption: '{caption}',\n location: 'inherit&caption',\n }, options);\n },\n\n setup: function ($element) {\n var self = this;\n _$container = $('
')\n .attr({\n class: 'masongram-container',\n })\n .appendTo($element);\n\n $('
')\n .attr({\n class: 'masongram-image-sizer masongram-image-size-' + _config.size,\n })\n .appendTo(_$container);\n\n _$container.masonry({\n itemSelector: '.masongram-image-container',\n columnWidth: '.masongram-image-sizer',\n percentPosition: true,\n });\n\n _resource = new Resource(_config);\n\n _resource.on('loaded', function (items) {\n self.append(items);\n });\n\n // load images when scrolled close to bottom\n var scrollTimeout;// throttle\n $(window).scroll(function () {\n if (!scrollTimeout) {\n scrollTimeout = setTimeout(function () {\n _$container.imagesLoaded().progress(function () {\n if ($(window).scrollTop() > $(document).height() - ($(window).height() * (1 + _config.offset / 100))) {\n self.load();\n }\n });\n scrollTimeout = null;\n }, 100);\n }\n });\n\n // fill window if there is white space left\n _$container.on('layoutComplete', function () {\n _$container.imagesLoaded().progress(function () {\n if ($('body').height() < $(window).height()) {\n self.load();\n }\n });\n });\n\n self.load();\n },\n\n load: function () {\n if (_inProgress) {\n return;\n }\n _inProgress = true;\n _resource.load();\n },\n\n append: function (items) {\n items.forEach(function (item, index) {\n var tile = new Tile(item, {\n caption: _config.caption,\n size: _config.size,\n location: _config.location\n });\n var $object = tile.getObject();\n setTimeout(function () {\n $object.imagesLoaded().progress(function () {\n _$container.append($object).masonry('appended', $object);\n if (index + 1 === items.length) {\n _inProgress = false;\n $(window).trigger('scroll');\n }\n });\n }, index * 200);\n });\n },\n };\n\n return Masongram;\n\n})();\n","'use strict';\n\nvar Resource = (function () {\n\n var _config;\n var _url;\n\n function Resource(config) {\n _config = config;\n _url = 'https://api.instagram.com/v1/' + _config.endpoint + '/media/recent/';\n }\n\n Resource.prototype = {\n\n load: function () {\n if (!_url) {\n return;\n }\n\n var self = this;\n var deferred = $.Deferred();\n\n $.ajax({\n type: 'POST',\n url: _url,\n data: {\n access_token: _config.access_token,\n count: _config.count,\n },\n dataType: 'jsonp',\n }).success(function (response) {\n $(self).trigger('loaded', [response.data]);\n deferred.resolve(response.data);\n if (!_config.loop) {\n // Used for testing\n _url = response.pagination && response.pagination.next_url ? response.pagination.next_url : false;\n }\n }).error(function () {\n deferred.reject('Error fetching data');\n });\n\n return deferred.promise();\n },\n\n on: function (name, callback) {\n $(this).on(name, function (event, data) {\n callback(data);\n });\n },\n\n };\n\n return Resource;\n\n})();\n","'use strict';\n\nvar Tile = (function () {\n\n var\n _$object,\n _data,\n _config,\n _NO_DATA = 'NO_DATA';\n\n function Tile(data, config) {\n _data = data;\n _config = config;\n this.parseLocation();\n this.create();\n }\n\n Tile.prototype = {\n\n create: function () {\n _$object = $('
').attr({\n tabindex: 0,\n class: 'masongram-image-container masongram-image-size-' + _config.size,\n });\n\n var $img = $('').attr({\n src: _data.images[ _config.size ].url,\n width: _data.images[ _config.size ].width,\n height: _data.images[ _config.size ].height,\n class: 'masongram-image',\n });\n\n $img.appendTo(_$object);\n\n var $captionContainer = $('
', {\n class: 'masongram-image-caption-container',\n });\n\n var $caption = $('
', {\n class: 'masongram-image-caption',\n });\n\n if (_data.caption && _data.caption.text) {\n $caption.html(this.parseCaption());\n }\n\n $caption.appendTo($captionContainer);\n $captionContainer.appendTo(_$object);\n },\n\n getObject: function () {\n return _$object;\n },\n\n parseLocation: function () {\n // Strip location if explicitly not allowed\n if (_config.location.indexOf('inherit') === -1) {\n delete _data.location;\n }\n // get location from caption content, for example \"@12.34,56.78\"\n if (_config.location.indexOf('caption') !== -1 && _data.caption && _data.caption.text && /@[\\d]+\\.[\\d]+,[\\d]+\\.[\\d]+/.test(_data.caption.text)) {\n var location = _data.caption.text.match(/@([\\d]+\\.[\\d]+),([\\d]+\\.[\\d]+)/);\n _data.caption.text = _data.caption.text.replace(/\\s*@([\\d]+\\.[\\d]+),([\\d]+\\.[\\d]+)/, '');\n _data.location = {\n latitude: location[ 1 ],\n longitude: location[ 2 ],\n };\n }\n },\n\n parseCaption: function () {\n var html = _config.caption;\n\n if (/{.*}/.test(html)) {\n var matches = html.match(/{([^}]+)}/g);\n matches.forEach(function (match) {\n switch (match) {\n case '{location}':\n html = html.replace(match, _data.location && _data.location.latitude !== undefined && _data.location.longitude !== undefined ? (_data.location.latitude + ',' + _data.location.longitude) : _NO_DATA);\n break;\n case '{latitude}':\n html = html.replace(match, _data.location && _data.location.latitude !== undefined ? _data.location.latitude : _NO_DATA);\n break;\n case '{longitude}':\n html = html.replace(match, _data.location && _data.location.longitude !== undefined ? _data.location.longitude : _NO_DATA);\n break;\n case '{caption}':\n html = html.replace(match, _data.caption && _data.caption.text !== undefined ? _data.caption.text : _NO_DATA);\n break;\n case '{likes}':\n html = html.replace(match, _data.likes && _data.likes.count !== undefined ? _data.likes.count : _NO_DATA);\n break;\n case '{link}':\n html = html.replace(match, _data.link ? _data.link : _NO_DATA);\n break;\n case '{image}':\n html = html.replace(match, _data.images['standard_resolution'].url ? _data.images['standard_resolution'].url : _NO_DATA);\n break;\n }\n });\n }\n\n return html;\n },\n\n };\n\n return Tile;\n\n})();\n"]}