{"version":3,"file":"jquery.assetManager.js","names":[],"sources":["../resources/javascript/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(\n                    300\n                );\n\n                $.modal($loader, {\n                    onShow: function (dialog) {\n                        if (\n                            $(dialog.data).parents('.overlay__container').length\n                        ) {\n                            $(dialog.data).html(\n                                '<div class=\"loader loader--large\"></div>'\n                            );\n                        }\n\n                        $.modal.defaults.onShow(dialog);\n                        $.get($this.attr('href'), '', function (data) {\n                            if (\n                                $(dialog.data).parents('.overlay__container')\n                                    .length\n                            ) {\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(\n                'click',\n                base.options.sortableItem + ' .delete',\n                function (e) {\n                    if (!!$.sortable) {\n                        base.$assets.sortable('destroy');\n                    }\n                    var $item = $(this).closest(base.options.sortableItem);\n                    $item.remove();\n                    if (\n                        typeof base.$uploader.getUploader === 'function' &&\n                        base.$uploader.getUploader().pluploader\n                    ) {\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\n        base.initSortable = function () {\n            if (base.$assets.hasClass('sortable') && !!jQuery.ui.sortable) {\n                var connection = $(base.options.sortableContainer).length > 1;\n                base.$assets\n                    .sortable({\n                        items: base.options.sortableItem,\n                        placeholder: base.options.sortablePlaceholder,\n                        containment: connection ? false : 'parent',\n                        connectWith: connection\n                            ? base.options.sortableContainer\n                            : false,\n                        start: function (e, ui) {},\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(\n                                    base._stateMessages.reordered,\n                                    'success'\n                                );\n                            } else {\n                                base.debug('Asset order same as original');\n                                if (\n                                    base.$messagePane.text() ===\n                                    base._stateMessages.reordered\n                                ) {\n                                    base.$messagePane.hide();\n                                }\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)\n                    .first()\n                    .clone();\n                base.$itemNode\n                    .removeClass('core-asset-item-template')\n                    .addClass(base.options.sortableItem.substring(1));\n            }\n            $(base.$el).on(\n                'click',\n                '.core-asset-continue-upload',\n                function (e) {\n                    var uploader = base.$uploader.getUploader();\n                    uploader.startUpload();\n                    e.preventDefault();\n                }\n            );\n        };\n\n        base.hasOriginalOrder = function () {\n            var currentOrder = base.getOrder();\n\n            if (currentOrder.length !== base._originalOrder.length)\n                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 = $(\n                '.core-asset-model-contained',\n                base.$el\n            ).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(\n                    '<p>No media currently associated with this field</p>'\n                );\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 (\n                0 < base.options.maxFiles &&\n                $items.length + numberQueued > base.options.maxFiles\n            ) {\n                // Clear queue\n                base.$uploader.getUploader().pluploader.splice();\n                if (base.options.maxFiles == 1) {\n                    base.say(\n                        'Only ' +\n                            base.options.maxFiles +\n                            ' file is allowed here',\n                        'error'\n                    );\n                } else {\n                    base.say(\n                        'Only ' +\n                            base.options.maxFiles +\n                            ' files are allowed here',\n                        'error'\n                    );\n                }\n                return false;\n            }\n\n            return true;\n        };\n\n        base.uploadComplete = function (data) {\n            if (data.error) {\n                return;\n            }\n            var $item = base.$itemNode.clone();\n            $item.data('id', data.assetId);\n            $('a.modal', $item)\n                .attr('href', '/cp/assets/crop/' + data.assetId)\n                .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 =\n                        'core-asset-messages__icon core-asset-messages__icon--' +\n                        type;\n                    var svg =\n                        '<svg role=\"img\" class=\"symbol-icon ' +\n                        cl +\n                        '\"><use href=\"' +\n                        icon +\n                        '\"></use></svg>';\n                    msg = svg + msg;\n                }\n            }\n\n            if (percent && base.$messagePane.data('progress')) {\n                msg =\n                    msg +\n                    '<div class=\"core-asset-messages__progress\" style=\"width: ' +\n                    percent +\n                    '%\"></div>';\n            }\n\n            base.$messagePane.html(msg).show();\n        };\n\n        base.debug = function () {\n            if (\n                true === base.options.debug &&\n                !!window.console &&\n                !!window.console.log\n            ) {\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            $(\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(\n                        $(this).attr('href'),\n                        function (data, status, xhr) {\n                            if ('success' == status) {\n                                if ($('#assetmodal-data').length > 0) {\n                                    $('#assetmodal-data')\n                                        .fadeOut()\n                                        .load(\n                                            '/cp/assets/crop/' +\n                                                $('#crops').data('asset'),\n                                            function (data) {\n                                                $('#assetmodal-data').fadeIn();\n                                                $.assetManager.setupCrops();\n                                            }\n                                        );\n                                } else {\n                                    window.location.reload();\n                                }\n                            }\n                        },\n                        'json'\n                    );\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})(jQuery);\n"],"mappings":"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"}