{"version":3,"file":"../javascript/jquery.assetManager.js","sources":["jquery.assetManager.js"],"sourcesContent":["/**\n * Core Asset Manager\n *\n * jQuery plugin to control the various functions of the Asset field\n */\n(function($){\n    $.assetManager = function(el, options){\n        // To avoid scope issues, use 'base' instead of 'this'\n        // to reference this class from internal events and functions.\n        var base = this;\n\n        // Access to jQuery and DOM versions of element\n        base.$el = $(el);\n        base.el = el;\n        base.$assets = $('.core-asset-items', base.$el);\n        base.$input = $('.core-asset-input', base.$el);\n        base.$uploader = $('.core-asset-uploader', base.$el);\n        base.$messagePane = $('.core-asset-messages:first', base.$el);\n        base.$itemNode = null;\n\n        //state\n        base._originalOrder = [];\n        //state change messages\n        base._stateMessages =  {\n            'reordered' : 'Media changed - Please save to confirm',\n            'deleted' : 'Media deleted - Please save to confirm deletion',\n        };\n\n        // Add a reverse reference to the DOM object\n        base.$el.data(\"assetManager\", base);\n\n        base.init = function(){\n            base.options = $.extend({},$.assetManager.defaultOptions, options);\n            base.initControls();\n            if (base.options.sortable){\n                base.initSortable();\n            }\n            base.initUploader();\n            $(base.$el).delegate('.modal', 'click', function(e){\n                e.preventDefault();\n                e.stopPropagation();\n                var $this = $(this);\n\n                var $loader = $('<div class=\"assetmodal--loading\">').height(300);\n\n                $.modal($loader, {\n                    onShow: function(dialog) {\n                        if ($(dialog.data).parents('.overlay__container').length) {\n                            $(dialog.data).html('<div class=\"loader loader--large\"></div>');\n                        }\n\n                        $.modal.defaults.onShow(dialog);\n                        $.get($this.attr(\"href\"), \"\", function(data) {\n                            if ($(dialog.data).parents('.overlay__container').length) {\n                                $('#overlay').addClass('overlay--wide');\n                            }\n                            $(dialog.data).attr('id', 'assetmodal-data');\n                            $(dialog.data).addClass('asset-crop');\n                            $(dialog.data).removeClass('assetmodal--loading');\n                            $(dialog.data).html( data );\n                            $.modal.defaults.onShow(dialog);\n                            $.assetManager.setupCrops();\n                        });\n                    }\n                });\n            });\n        }\n\n        base.initControls = function(){\n            $(base.$el).delegate('.core-asset-item .delete', 'click', function(e){\n                if (!!$.sortable){\n                    base.$assets.sortable('destroy');\n                }\n                var $item = $(this).closest('.core-asset-item');\n                $item.remove();\n                if (typeof base.$uploader.getUploader === 'function' && base.$uploader.getUploader().pluploader) {\n                    base.$uploader.getUploader().pluploader.splice();\n                }\n                base.updateValues();\n                base.initSortable();\n                base.$messagePane.removeClass('complete');\n                base.say(base._stateMessages.deleted, 'success');\n                e.preventDefault();\n            });\n        }\n\n        base.initSortable = function(){\n            if (base.$assets.hasClass('sortable') && !!jQuery.ui.sortable){\n                var connection = $(base.options.sortableContainer).length > 1;\n                base.$assets.sortable({\n                    items: base.options.sortableItem,\n                    placeholder: base.options.sortablePlaceholder,\n                    containment: connection ? false : 'parent',\n                    connectWith: connection ? base.options.sortableContainer : false,\n                    start: function(e, ui) {\n                    },\n                    update: function(e,ui){\n                        base.updateValues();\n\n                        //deleting assets and uploading assets take priority\n                        if(!base.hasOriginalOrder()) {\n                            base.debug('Asset order changed');\n                            base.$messagePane.removeClass('complete');\n                            base.say(base._stateMessages.reordered, 'success');\n                        } else {\n                            base.debug('Asset order same as original');\n                            if(base.$messagePane.text() === base._stateMessages.reordered) {\n                                base.$messagePane.hide();\n                            }\n                        }\n                    }\n                }).disableSelection();\n\n                //only call this if not populated before,\n                //initSortable gets called multiple times\n                if(base._originalOrder.length === 0) {\n                    base.setOrder();\n                }\n            }\n        }\n\n        base.initUploader = function(){\n            if (0 < base.$uploader.length && !!jQuery.uploader){\n                base.$uploader.uploader(\n                    base.options.uploadUrl,\n                    base.postParams(),\n                    {\n                        uploadComplete: base.uploadComplete,\n                        beforeUpload: base.beforeUpload,\n                        messagePane: base.$messagePane,\n                        debug: base.options.debug,\n                        chunkSize: base.options.chunkSize,\n                        dimensions: base.options.dimensions,\n                        mimeTypes: base.options.mimeTypes || \"\"\n                    }\n                );\n                base.$itemNode = $('.core-asset-item-template:first', base.$el).clone();\n                base.$itemNode.removeClass('core-asset-item-template').addClass('core-asset-item');\n            }\n            $(base.$el).delegate('.core-asset-continue-upload', 'click', function(e){\n                var uploader = base.$uploader.getUploader();\n                uploader.startUpload();\n                e.preventDefault();\n            });\n        }\n\n        base.hasOriginalOrder = function(){\n            var currentOrder = base.getOrder();\n\n            if (currentOrder.length !== base._originalOrder.length) return false;\n\n            for (var i = 0; i < currentOrder.length; i++) {\n                if(currentOrder[i] !== base._originalOrder[i]) return false;\n            }\n\n            return true;\n        }\n\n        base.setOrder = function(){\n            base.$assets.find('.core-asset-item').each(function(){\n                base._originalOrder.push($(this).attr('data-id'));\n            });\n        }\n\n        base.getOrder = function(){\n            var order = [];\n            base.$assets.find('.core-asset-item').each(function(){\n                order.push($(this).attr('data-id'));\n            });\n\n            return order;\n        }\n\n        base.postParams = function(){\n            params = {}\n            params.model_field = $('.core-asset-model-field', base.$el).val();\n            params.model_class = $('.core-asset-model-class', base.$el).val();\n            params.model_id = $('.core-asset-model-id', base.$el).val();\n            params.model_contained = $('.core-asset-model-contained', base.$el).val();\n            return params;\n        }\n\n        base.updateValues = function(){\n            var $items = $('.core-asset-item', base.$assets);\n            var v = '';\n            if (0 < $items.length) {\n                var ids = new Array();\n                $items.each(function(){\n                    ids.push(parseInt($(this).data('id')));\n                });\n                v = ids.join(base.options.seperator);\n                $('p', base.$assets).remove();\n            }else{\n                base.$assets.append('<p>No media currently associated with this field</p>');\n            }\n            base.$input.val(v);\n        }\n\n        base.beforeUpload = function(numberQueued){\n            var $items = $('.core-asset-item', base.$assets);\n            base.debug('Number of assets is ' + base.$assets.length);\n\n            if (0 < base.options.maxFiles && $items.length + numberQueued > base.options.maxFiles) {\n                // Clear queue\n                base.$uploader.getUploader().pluploader.splice();\n                if (base.options.maxFiles == 1) {\n                    base.say('Only ' + base.options.maxFiles + ' file is allowed here', 'error');\n                } else {\n                    base.say('Only ' + base.options.maxFiles + ' files are allowed here', 'error');\n                }\n                return false;\n            }\n\n            return true;\n        }\n\n        base.uploadComplete = function(data){\n            if (data.error){ return; }\n            var $item = base.$itemNode.clone();\n            $item.data('id', data.assetId);\n            $('a.modal', $item).attr('href', '/cp/assets/crop/'+data.assetId).html(data.tag);\n            base.$assets.append($item);\n            base.updateValues();\n        }\n\n        base.uploadError = function(data){\n            base.debug(data);\n        }\n\n        base.say = function(msg, type, percent){\n            base.debug('MESSAGE : ' + msg);\n\n            if (type == 'success' || type == 'error') {\n                var icon = base.$messagePane.data(type + '-icon');\n                if (icon) {\n                    var cl = \"core-asset-messages__icon core-asset-messages__icon--\" + type;\n                    var svg = '<svg role=\"img\" class=\"symbol-icon ' + cl + '\"><use href=\"' + icon + '\"></use></svg>'\n                    msg = svg + msg;\n                }\n            }\n\n            if (percent && base.$messagePane.data('progress')) {\n                msg = msg + '<div class=\"core-asset-messages__progress\" style=\"width: ' + percent +'%\"></div>';\n            }\n\n            base.$messagePane.html(msg).show();\n        }\n\n        base.debug = function(){\n            if (true === base.options.debug && !!window.console && !!window.console.log){\n                window.console.log.apply(window.console, arguments);\n            }\n        };\n\n        base._save = function(){\n            var data = base.postParams();\n            data.ids = base.$input.val();\n            $.post(\n                base.options.saveUrl,\n                data,\n                function(){\n                    //base.say('Changes saved', true);\n                },\n                'json'\n            );\n        }\n\n        // Run initializer\n        base.init();\n    };\n\n    $.assetManager.defaultOptions = {\n        saveUrl: '/api/assets/save',\n        seperator: ',',\n        sortableContainer: '.core-asset-items',\n        sortableItem: '.core-asset-item',\n        sortablePlaceholder: 'core-asset-item-placeholder',\n        uploadUrl: '/api/assets/upload',\n        maxFiles: 0,\n        chunkSize: 0,\n        keySupport: true,\n        debug: false\n    };\n\n    $.assetManager.setupCrops = function(options) {\n        if (!!$.fn.assetCropper) {\n            $('#crops .cropper').assetCropper(options);\n        };\n        if (!!$.fn.tabs) {\n            var options = {\n                current: 'active',\n                tabs: 'li'\n            };\n\n            $('#assetmodal-data > .modaltabs, #assetmodal-data .overlay__legacy > .modaltabs')\n                .tabs('#assetmodal-data .panel-content > div', options);\n            $('#crops > .tabs').tabs('#crops .pane', options);\n\n            $('.js-crop-form').each(function() {\n                var $form = $(this);\n\n                $form.ajaxForm({\n                    success: function(response, status, xhr) {\n                        var $response = $(response).find('form');\n                        $response.find('header').remove();\n                        $form.html($response.html());\n                        $('body').removeClass('d3r-page-disabled');\n                    }\n                });\n            });\n\n            if ($('#rotate').length > 0) {\n                $('#rotate a').click(function (e) {\n                    e.preventDefault();\n                    $.get($(this).attr('href'), function(data, status, xhr) {\n                        if ('success' == status) {\n                            if ($('#assetmodal-data').length > 0) {\n                                $(\"#assetmodal-data\").fadeOut().load('/cp/assets/crop/'+$('#crops').data('asset'), function(data) {\n                                    $(\"#assetmodal-data\").fadeIn();\n                                    $.assetManager.setupCrops();\n                                });\n                            } else {\n                                window.location.reload();\n                            };\n                        };\n                    }, 'json');\n                });\n            };\n        };\n        if ($('#simplemodal-container').length > 0) {\n            $.modal.defaults.onShow();\n        };\n    };\n\n    $.fn.assetManager = function(options){\n        return this.each(function(){\n            (new $.assetManager(this, options));\n        });\n    };\n\n    $.fn.getAssetManager = function(){\n        return this.data(\"assetManager\");\n    }\n\n})(jQuery);\n"],"names":["$","assetManager","el","options","base","this","$el","$assets","$input","$uploader","$messagePane","$itemNode","_originalOrder","_stateMessages","reordered","deleted","data","init","extend","defaultOptions","initControls","sortable","initSortable","initUploader","delegate","e","preventDefault","stopPropagation","$this","$loader","height","modal","onShow","dialog","parents","length","html","defaults","get","attr","addClass","removeClass","setupCrops","closest","remove","getUploader","pluploader","splice","updateValues","say","connection","hasClass","jQuery","ui","sortableContainer","items","sortableItem","placeholder","sortablePlaceholder","containment","connectWith","start","update","hasOriginalOrder","debug","text","hide","disableSelection","setOrder","uploader","uploadUrl","postParams","uploadComplete","beforeUpload","messagePane","chunkSize","dimensions","mimeTypes","clone","startUpload","currentOrder","getOrder","i","find","each","push","order","params","model_field","val","model_class","model_id","model_contained","ids","$items","v","Array","parseInt","join","seperator","append","numberQueued","maxFiles","$item","error","assetId","tag","uploadError","msg","type","percent","icon","show","window","console","log","apply","arguments","_save","post","saveUrl","keySupport","fn","assetCropper","tabs","current","$form","ajaxForm","success","response","status","xhr","$response","click","fadeOut","load","fadeIn","location","reload","getAssetManager"],"mappings":"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"}