blob: 10b240d21dc46ea11838417550a7a8ec8ecfaa71 [file] [log] [blame]
var _ = require('lodash')
module.exports = function angularPackeryDirective(PackeryService,
DraggabillyService, $timeout, $parse) {
return {
restrict: 'AE',
link: function(scope, element, attrs) {
var container = element[0]
var parsedAttrs = $parse(attrs.angularPackery)()
if (typeof parsedAttrs !== 'object') {
parsedAttrs = {}
}
var options = angular.extend({
isInitLayout: false,
itemSelector: '.packery-item',
columnWidth: '.packery-item',
transitionDuration: '300ms'
}, parsedAttrs)
var pckry = new PackeryService(container, options)
pckry.on('layoutComplete', onLayoutComplete)
pckry.bindResize()
bindDraggable()
$timeout(function() {
pckry.layout()
}, 0)
$timeout(function() {
pckry.layout()
}, 100)
function bindDraggable() {
if (options.draggable) {
var draggableOptions = {}
if (options.draggableHandle) {
draggableOptions.handle = options.draggableHandle
}
var itemElems = pckry.getItemElements()
for (var i = 0, len = itemElems.length; i < len; ++i) {
var elem = itemElems[i]
var draggie = new DraggabillyService(elem, draggableOptions)
pckry.bindDraggabillyEvents(draggie)
}
}
}
function onLayoutComplete() {
return true
}
function onPanelsResized() {
pckry.layout()
}
scope.$on('panelsResized', _.throttle(onPanelsResized, 300))
scope.$on('$destroy', function() {
pckry.unbindResize()
pckry.off('layoutComplete', onLayoutComplete)
pckry.destroy()
})
}
}
}