{"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', base.options.sortableItem + ' .delete', function(e){\n                if (!!$.sortable){\n                    base.$assets.sortable('destroy');\n                }\n                var $item = $(this).closest(base.options.sortableItem);\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(base.options.sortableItem.substring(1));\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(base.options.sortableItem).each(function(){\n                base._originalOrder.push($(this).attr('data-id'));\n            });\n        }\n\n        base.getOrder = function(){\n            var order = [];\n            base.$assets.find(base.options.sortableItem).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 = $(base.options.sortableItem, 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 = $(base.options.sortableItem, 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","sortableItem","closest","remove","getUploader","pluploader","splice","updateValues","say","connection","hasClass","jQuery","ui","sortableContainer","items","placeholder","sortablePlaceholder","containment","connectWith","start","update","hasOriginalOrder","debug","text","hide","disableSelection","setOrder","uploader","uploadUrl","postParams","uploadComplete","beforeUpload","messagePane","chunkSize","dimensions","mimeTypes","clone","substring","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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"}