{"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', base.$el).first();\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).on('click', '.modal', 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).on('click', '.core-asset-item .delete', 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', base.$el).first().clone();\n                base.$itemNode.removeClass('core-asset-item-template').addClass('core-asset-item');\n            }\n            $(base.$el).on('click', '.core-asset-continue-upload', 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').on('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","first","$itemNode","_originalOrder","_stateMessages","reordered","deleted","data","init","extend","defaultOptions","initControls","sortable","initSortable","initUploader","on","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","fadeOut","load","fadeIn","location","reload","getAssetManager"],"mappings":"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"}