diff --git a/bundle/Controller/Configuration.php b/bundle/Controller/Configuration.php index 4aede3d2..73a3346c 100644 --- a/bundle/Controller/Configuration.php +++ b/bundle/Controller/Configuration.php @@ -117,6 +117,10 @@ private function resolveTranslations(): array 'preview_alternate_text_info' => $this->translator->trans('ngrm.edit.vue.preview.alternate_text_info', [], 'ngremotemedia'), 'preview_caption' => $this->translator->trans('ngrm.edit.vue.preview.caption', [], 'ngremotemedia'), 'preview_caption_info' => $this->translator->trans('ngrm.edit.vue.preview.caption_info', [], 'ngremotemedia'), + 'preview_alternate_text_override' => $this->translator->trans('ngrm.edit.vue.preview.alternate_text_override', [], 'ngremotemedia'), + 'preview_alternate_text_override_info' => $this->translator->trans('ngrm.edit.vue.preview.alternate_text_override_info', [], 'ngremotemedia'), + 'preview_caption_override' => $this->translator->trans('ngrm.edit.vue.preview.caption_override', [], 'ngremotemedia'), + 'preview_caption_override_info' => $this->translator->trans('ngrm.edit.vue.preview.caption_override_info', [], 'ngremotemedia'), 'preview_tags' => $this->translator->trans('ngrm.edit.vue.preview.tags', [], 'ngremotemedia'), 'preview_tags_info' => $this->translator->trans('ngrm.edit.vue.preview.tags_info', [], 'ngremotemedia'), 'preview_watermark_text' => $this->translator->trans('ngrm.edit.vue.preview.watermark_text', [], 'ngremotemedia'), diff --git a/bundle/Controller/Location/SelectedImage.php b/bundle/Controller/Location/SelectedImage.php index 34209029..2c91e4fc 100644 --- a/bundle/Controller/Location/SelectedImage.php +++ b/bundle/Controller/Location/SelectedImage.php @@ -54,6 +54,8 @@ public function __invoke(int $locationId): JsonResponse 'alternateText' => $remoteResource->getAltText(), 'caption' => $remoteResource->getCaption(), 'watermarkText' => $remoteResourceLocation->getWatermarkText(), + 'altTextOverride' => $remoteResourceLocation->getAltTextOverride(), + 'captionOverride' => $remoteResourceLocation->getCaptionOverride(), 'tags' => $remoteResource->getTags(), 'size' => $remoteResource->getSize(), 'variations' => $this->service->resolveCropSettingsJson($remoteResourceLocation), diff --git a/bundle/DependencyInjection/Configuration.php b/bundle/DependencyInjection/Configuration.php index 0af8837d..8b93cd5a 100644 --- a/bundle/DependencyInjection/Configuration.php +++ b/bundle/DependencyInjection/Configuration.php @@ -237,6 +237,14 @@ private function addNamedObjectsConfiguration(ArrayNodeDefinition $rootNode): vo ->scalarNode('watermark_text') ->defaultValue(null) ->end() + ->scalarNode('alt_text') + ->info('Alt text override local to the location') + ->defaultValue(null) + ->end() + ->scalarNode('caption') + ->info('Caption override local to the location') + ->defaultValue(null) + ->end() ->end() ->end() ->end() diff --git a/bundle/Resources/config/doctrine/RemoteResourceLocation.orm.xml b/bundle/Resources/config/doctrine/RemoteResourceLocation.orm.xml index 1618f71e..5fd69a5e 100644 --- a/bundle/Resources/config/doctrine/RemoteResourceLocation.orm.xml +++ b/bundle/Resources/config/doctrine/RemoteResourceLocation.orm.xml @@ -16,6 +16,8 @@ + + diff --git a/bundle/Resources/public/css/remotemedia.css b/bundle/Resources/public/css/remotemedia.css index c74a78f8..485d8f81 100644 --- a/bundle/Resources/public/css/remotemedia.css +++ b/bundle/Resources/public/css/remotemedia.css @@ -1 +1 @@ -@import url(https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css);@font-face{font-family:ngri;src:url("data:application/x-font-ttf;charset=utf-8;base64,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AQECAgQCAQQCAQIBAQMBAgQDCRUMDBkODR0ODx4PAwgEAQQCAgMCBAcEAwgDAgMCAgMCBAYEAwcDAgMBAQIBAgEDBgMCAgIBAwIDBQMDBQIBASUaAQEDBgICAgIBBAECBAIFCQUFCwUDBgMCBgQBAwIBAwIDBwMBAgECAQEEAQQHAwQHAwIDAgIDAgQHBAMHBAIDAgIDAgQHBA4cDQ0ZCwwUCgkPBwEDAgEBAQICAgEBAwEBAQEBAgECAQEBAQEBARslAQEBAQEBAQECAQEBAQEBAQEBAQEBAgEBAQEBAQEDAQEDAgEBAQECAgQCAQQCAQIBAQMBAgQDCRUMDBkODR0ODx4PAwgEAQQCAgMCBAcEAwgDAgMCAgMCBAYEAwcDAgMBAQIBAgEDBgMCAgIBAwIDBQMDBQIBAQEmGgEBAwUDAQMCAQMCAgQCBAoFBQoGAwUDAwYDAgMCAQMCAwcDAQEBAQIBAQQBBAYEAwcEAgMCAgMCBAcDBAcEAgMCAgMCBAcDDxsODRkLDBQJCRAHAQMCAgECAQMBAQIBAQEBAQECAQEBAQEBAQEBARokSgIBAQEBAQEBAgEBAQEBAQECAQEDAgIBAgIDAgEEAgEBAQECAQIEAggTCgsWDAwZDQwaDQQGAwIDAgEDAgMGBAMGAwIDAQIDAQMGAwMFAwICAgEBAQIDBQMBAwEBAwECBQMCBAMECAQEBgMBAwECAwECAwEDBQIBARcjAwEBAgUDAgYCAgICAQMBAwYCAQIBAQECAwEDBgMDBgMCAwECAwEDBwMDBgMCAwECAwIDBgMMGAwLFQoKEQgIDQUCAgEBAQECAQIBAQIBAQEBAgEBAQEBAQEBAQEBHhYBAQEBAQEBAQEBAgEBAQEBAQMBAQMBAQEBAQEBAgMBAgQBAQIBAQIBAgQCCBMKCxYMDBkMDRoNAwcDAgMBAgMCAwYDBAYDAQMCAQMCAwYDAwUDAgICAgEBAQMFAwEDAQEDAQIFAgMEAwQIBAMHAwEDAQIDAQIDAQIFAwEBFyIEAgUDAgYCAgICAQMBAwYCAQIBAQECAwEDBgMDBgMCAwECAwEDBwMDBgMCAwECAwIDBgMMGAwLFQoKEQgIDQUCAgEBAQECAQIBAQIBAQEBAgEBAQEBAQEBAQEBHxYBvgMFAwICAgEDAgIEAgUJBQUKBgMGAgMGAwIDAgEDAgMHAwEBAQECAQEEAQQHAwMHBAIDAgIDAgQHAwQHBAIDAgIDAgQHBA4cDQ0ZCwwUCgkPBwEDAgIBAgICAQECAQEBAQEBAgEBAQEBAQEBAQEaJQEBAQEBAQEBAgEBAQEBAQEBAQEBAQIBAQEBAQEBAwEBAwIBAQEBAgIEAgEEAgECAQEDAQIEAwkVDAwZDg0dDg8eDwMIBAEEAgIDAgQHBAMIAwIDAgIDAgQGBAMHAwIDAQECAQIBAwYDAgICAQMCAwUDAwUCAQEmGgEBAwUDAgICAQMCAgQCBQkFBQoGAwYCAwYDAgMCAQMCAwcDAQEBAQIBAQQBBAcDAwcEAgMCAgMCBAcDBAcEAgMCAgMCBAcEDhwNDRkLDBQKCQ8HAQMCAgECAgIBAQIBAQEBAQECAQEBAQEBAQEBARolAQEBAQEBAQECAQEBAQEBAQEBAQEBAgEBAQEBAQEDAQEDAgEBAQECAgQCAQQCAQIBAQMBAgQDCRUMDBkODR0ODx4PAwgEAQQCAgMCBAcEAwgDAgMCAgMCBAYEAwcDAgMBAQIBAgEDBgMCAgIBAwIDBQMDBQIBAQElGgEBQQECBQMCBgICAgIBAwEDBgIBAgEBAQIDAQMGAwMGAwIDAQIDAQMHAwMGAwIDAQIDAgMGAwwYDAsVCgoRCAgNBQICAQEBAQIBAgEBAgEBAQECAQEBAQEBAQEBAQEeFwEBAQEBAQEBAQECAQEBAQECAgEBAwEBAgEBAQIDAgEEAgIBAQIBAgQCCBMKCxYMDBkNDBoNBAYDAgMCAQMCAwYEAwYDAQMCAQMCAwYDAwUDAgICAgECAwUDAQMBAQMBAgUDAgQDBAgEAwcDAQMBAgMBAgMBAgUDAQEXIgQBAgUDAgYCAgICAQMBAwYCAQIBAQECAwEDBgMDBgMCAwECAwEDBwMDBgMCAwECAwIDBgMMGAwLFQoKEQgIDQUCAgEBAQECAQIBAQIBAQEBAgEBAQEBAQEBAQEBHhYBAQEBAQEBAQECAQEBAQECAgEBAwEBAgEBAQIDAgEEAgIBAQIBAgQCCBMKCxYMDBkNDBoNBAYDAgMCAQMCAwYDBAYDAQMCAQMCAwYDAwUDAgICAgECAwUDAQMBAQMBAgUDAgQDBAgEAwcDAQMBAgMBAgMBAgUDAQEXIwMAAAAAAQAC/8ID/gO+AFMAACU4ATEJATgBMT4BNzYmLwEuAQcOAQc4ATEJATgBMS4BJyYGDwEOARceARc4ATEJATgBMQ4BBwYWHwEeATc+ATc4ATEJATgBMR4BFxY2PwE+AScuAQP3/skBNwIEAQMDB5MHEgkDBgL+yf7JAgYDCRIHkwcDAwEEAgE3/skCBAEDAweTBxIJAwYCATcBNwIGAwkSB5MHAwMBBIkBNwE3AgYDCRIHkwcDAwEEAv7JATcCBAEDAweTBxIJAwYC/sn+yQIGAwkSB5MHAwMBBAIBN/7JAgQBAwMHkwcSCQMGAAABAAAAgAQAAsAAKgAAATQmJyYnLgEnJiMiBgcuASMiBhUUFhUuASMiBw4BBwYVFBceARcWMyEyNgQATDkBExNBKyoxOWEhEjcgOE4BCBEJKCQjNQ8PDw81IyQoApBIZgEuPl4OMCorPxISMSoYHE43BQoEAQIQDzQkIygoJCM1Dw9mAAAEAAAAQAQAA0AACwAXACsALwAAATQ2MzIWFRQGIyImJTQ2MzIWFRQGIyImBTU0JiMhIgYVERQWMyEyNj0BBREBITUhAYBeQkJeXkJCXv6AXkJCXl5CQl4DACYa/YAaJiYaAoAaJgEA/oD+AAIAAqBCXl5CQl5eQkJeXkJCXl7+YBomJhr+wBomJhpgoAHA/sDAAAAAAgBA/8ADwAPAABQAJgAAAREhIiY1NDYzIREhIgYVERQWMyERATE4ATEiBhUUFjM4ATkBITUhA4D9YCg4OCgCYP2ANUtLNQMA/SANExMNAmD9oANA/MA4KCg4AwBLNf0ANUsDgP1AEw0NE0AAAQAAAAEAACKXau1fDzz1AAsEAAAAAADWNiSXAAAAANY2JJcAAP/ABAADwAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAAEAAABAAAAAAAAAAAAAAAAAAAACgQAAAAAAAAAAAAAAAIAAAAEAAAOBAAAAAQAAAIEAAAABAAAAAQAAEAAAAAAAAoAFAAeAGoGPga0BvYHQAd2AAAAAQAAAAoEhwAEAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAQAAAABAAAAAAACAAcARQABAAAAAAADAAQALQABAAAAAAAEAAQAWgABAAAAAAAFAAsADAABAAAAAAAGAAQAOQABAAAAAAAKABoAZgADAAEECQABAAgABAADAAEECQACAA4ATAADAAEECQADAAgAMQADAAEECQAEAAgAXgADAAEECQAFABYAFwADAAEECQAGAAgAPQADAAEECQAKADQAgG5ncmkAbgBnAHIAaVZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMG5ncmkAbgBnAHIAaW5ncmkAbgBnAHIAaVJlZ3VsYXIAUgBlAGcAdQBsAGEAcm5ncmkAbgBnAHIAaUZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:fa-ngrm;src:url(../fonts/fa-ngrm.eot);src:url(../fonts/fa-ngrm.eot#iefix) format("embedded-opentype"),url(data:font/woff2;base64,d09GMgABAAAAAAxoAA8AAAAAGXwAAAwQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGVgCDYgggCZZwEQgKi3CKGAsUAAE2AiQDJAQgBYVBB2UMgQYbhRezEVWnNik52X99YBtLG6/vIiEFBu6tyFCpG78GWUGg3hQaRaMoPorfM0/ppjMup7c+Tyf20VwOLDoYzAhJZuH5smm9/7t7QJIJl8ZAPMssH0oGmVdewOiQoqsLOUeMIEiBQqUbXuSBPLNpnRRKcnRx7E04spcJyuZ289F4Tm4nNijAnKlVMwLPAP+ftleaPgRqrvIMpB8gw4b0KWE7KAW1pqJOUWa2q442vLjtorFtuwKpqoQKhYBvpi3tewAKa+QHbVGHdtIDd4aka1KA+X+/ltr3XnbnNuFrXIEDssKSrBS3P9lbDOyFNogoVMFFKIQCS1R1kans1BHaOlfnu4o38XSRfBHPg6owZIf0VyJAgn6z9NCRU5co3szeukY9CwAIZGvK5tpKliCZicWGMQj3EHua6/IWDvSBfg+81nz38h8DKSjOUNryXO7wEnGBh034zjqPlBjeVscigkMwGN3OiZEbSHUT0CXpb0jYLbEa9AcpFNybsod3CCjQjgEHK+XKufhzLgf/5xGAeMQ8UnhtUxRAgXQAAgUB5QsChi8IWL4g4PiCgOdVKBPwvR6emCBqOMraMpsOWPSIAgQfaZylZ/8Ynn+G9/YxMbyj/accq7ucUG3/B65NObB95z38AG3U42GJAQFRPA4odCh+3mDDx77dJw6OD8avPyVv3nVpcW43eeLsxHi7aPwnq1Kkt4e0P6U+B0X9Wj8T/FxGx+peaQ9IqOWlRWgt0aZRGD0EJefsEMvZ4Dkd5Rww0FhYbQ+F427CScST6LzPSAxYmDevw+pyVC5UM6tbSIzpmJOHXgjVRf8fz1rtb7Rgw14qu659nZNlL+I3CTHnIsnoWgEHfK73VP4CnuLL+zeBxBbNx0hBIu4U8CELl0ny4J91WeAbxyUfI6WMwpsF6P0eHMc179MQtvd5I6FgfzEDYrVo3DUlHYLkYgdkKdGOGBoLo6Qxkj+UJK9J8w+isxikmGteUJ/smsPJO/N5zQeKULU6zFI7ChQDiRIpPo2KW4HETFEfvmJR5UAJRKl/vHL9s650TYliFnUZUSzRAqV49jZV+zvKCxT92fdAGZ7tpWdvRpjOR7eK4OWojA6+U0rmnZEUKbEMRDXWVAyL6iJLE0Z3OcznKmM1dq9IZ42TNyR1DUcCFceQXNlMilOKpAh0EExdCbxdK67CRgjhthcv2UNQgZlKdfhtokSixiQlkhAkRhUk/S4dzzLkMXaZWt7s4sa6u5IDlajM1gNVqNKEalKoIQO1ZKGOHNSTB7vIh90UwB4Krb2YkSNtVuA+vMCIRaCBFBrJQBNZaCYHLeRBK/nQRgG0U5jZATXTEnRWKJRGDfXrQ7gzJNIxQX0wXaDT6DwFuiFN5dcZ1m7acqrrxFrO50AP/I1lSfcJWVxzmdELSKejM/ug205U++lJ5ElyAmIaO0f9eFj+wgGH7ttm7fNVa4EBqNHUiRbQv0eBQQwuNIEhukgEFLlvbBhV3XJRA01BIqpPulemNrVWad/5jEjsh7xUnV0LjACWWMUqfmlCrh91vSI13TgGozxRGiQLhJXIkCAyM3LdeC/91Kv5yM27hPn6HKOJgOqaGBdpk4LlPFJUhNhSfAllOTQM20MvXszWGa0sXDpkt1qT384Gm7Sbzgg4QXUJMTBpUUyzsGqgVmC/tdMWpzAdG1qrqwWCltDFVxszSm5gTGDpsDEueN+yZvPLbfwSAomSJkwTG1PaBCrEegnMzXhPAzXmHTpijnD+bXp66/dktRoaSJ1OtdJY0WTS1SaLDGhn7paFKB5nnMFYMAXTALAlJ6+TmjyoXb5y/cs2fdmubYZed06+/SwYMYll58CoddGLTSiTdePRclgO6OJFxFMXBWnySzM18mGbstL2b9QgjXScDP+J6ZTHbGfLlBsb23R+XMf47DztgE84vU4HY7zFJ7BN9+IhYzFjunrmQeUMJAycruVw3pGNir+YDJr0oxsML3BsI5Zj00CTrilB5Dq+MSmaHDvKndjoxWgcjhRMHsGZgsVOiysFG4/gloKdnYx7Cg4ewSMFJzsVzxRcPIJXCm52OrxT8PAIPil42Sn4puDjEfxSuT8w+LH27zEJDsGtxwiDi1WHMcEYAYwwcQAzB7AYkILVhrBxCDuHcHAIp43g4ghujuDhqMa78Zm3ulV03yu7PnbLH5vm0FMfS5VTD4LsEJRQ8ggxytPuch1+CQmrlSc+X12wCNLcyh2IUk34YsQFZrH0UDZfrcK0OnhJHBmtQqIKJ2JxFDsRp4aVagzmkPWVHIC9GaLgifhzyxWT5INsVaEBAFIhAC+COOoCvTUAHguCqmiYJAaF1HGbqR65Kq0cxFMPwMqYirOXxNuiVcgO6W47HYAy3SWBqlmT5XPgjhlIPSdhtqxqerEypxhE6hYiAN5kr5yac8qMijxL5keCXGMBNPwhWosEZ9rkIF6YnR9fkFOEtZgTiV8OL7KGEkZ4kWOGY37BmngQ/NbFMjNBVanEkr0Kzh6KzgUYeB58OObSVopHBJIiNBysf8s9UFQsAkaLN5MuRYMg9VJV2DbShEaejQUAPC4NS2qy5VgN+sppyZipg4g2IEAn1WVlB7E6znQCRFYnqg4ixzRyzV1rTGboJbMlX2d8vzEbvJOTvJoOvUEeoyubPNob30FfaRHwhNyONmNcyUxg7mU0MCoZSYfW+K0sOkfQoIoGe3iEhmIfk5J1yu3CcAQhHj/WQQfDWqlWn3/2/gOHU2eseLAB80g5fDTNI2pTSdgiXwXXIyAwkqT4jy/wWLhTFhJgvxs4KtsdELBXdnCr7bHAQJ4U/cNTcP7oVQI+PvUJS8KxFI+jR1ekLF0oIG65+vm55tVIj6pM4Un7rOiAEVcx4Wx6+NHp2xBX8VlgGlZ12utmFUIgCvQxzd9nqKYVs7xngY1qkP81Ydf07v3huT65p6XuPVRCOsEkQW/D93ZaEfQiqVef58417Nvqi+nGYbeYCUyrJGUmussYoDs2xg6MBLnzH4PlbssrQt3ehY9a310gd/WwHrd2XcERKcSWKLZZd7UplKv0NSnfppSko5LeBWBHq9N6HcB8pO/ErrGu1LeoHDWiaF4EcpW7Kyutq5XEwV2dTY02sHK0SKwngR4h4YsNEjZDgPECk8FD8OQJp0oYciHzthOmCQlPxTPjIzWtQ2UVU2VlpUm3RxIblAgiR1HRPILkgVxlTaVxNZJ4UacY12Ks1uhRrBFjZQtRI7qBw1hnMijoJVRJg3KqY6SmqabZc/WSWIyo5FFUon/TyFAFjxHxvZBZlEcx9MJ8IJ7v5fGNn8ei9pITI4IaMliradTqqZnppqGmxsGWidryhNsj+cyq9Ehi5ckJDbwO87qyUDxBj5LC91J+JiEBXnCpKKmeVUU8Ms6ohKFcimoCBcgO8+nLF86ePnrkYNzaWNFa+nNNxW6PBAEEQvPr5+8T099BpgDw+/+3NpHInUJAMPLjBGgmAke2FKpIACEg7UtaiDRNWYvzYYVm2LthrswdeeiQx3AAKLt1uwmsJbdJpZT7R63AiNQNEHxGUPlpNPxBtPyJAEeS8wEePo8FJOiyuH+SCm9gEBsC67zXDRCKJYnK16Hh29DyIwGO6g6qHsTPByS4Iis3JGnth/8WTzhoH33hr3zwXToJrcWXfbMTEewAbfVctufazhtbz2WX8lJBOiGbPNDbn2p3gV3FmydWBm8dy51VDTuizvnWHelcVjszr5mD5NnmPjdYY4VVbhFpd5AOkUH9BkyILHCfSJ5h9zWukWWTSJbb3GIVqd6s52IiufrXuMUym2zKv6HXInm2yJGlxzVWuMEWF1hmhdtskuVGsmMmvMIU62sqFxcZ0KufDEfFist61mjEknPjb3JHq4OA/RY5NSeZQxaKHHFiYmQbra6/Cha5RS8Qos/fZlJf3yUvRSuZ60jwdUJRMWLFiSe+BBJKAu9Pv3f1cpv57e37mt8wi4t3vdwxe8M7bq7Z4+AP6W7dyN5cBU5+zW8XLp+IvDGP7NtkbH+C27p10dkq+iyhEsQ9i6nvHfhWf0YIPfhexEtLDn3SDLx0Pn0c/0h7WKLWMt8GTyH2mbD4No1X57udP0uppDrr+c417OufKIcAGxU=) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(../fonts/fa-ngrm.ttf) format("truetype"),url(../img/fa-ngrm.svg#fa-ngrm) format("svg");font-weight:400;font-style:normal}[class*=" ngrm-icon-"]:before,[class^=ngrm-icon-]:before{font-family:fa-ngrm;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ngrm-icon-cancel:before{content:"\E800"}.ngrm-icon-floppy:before{content:"\E801"}.ngrm-icon-ok:before{content:"\E802"}.ngrm-icon-ccw:before{content:"\E803"}.ngrm-icon-folder:before{content:"\E804"}.ngrm-icon-upload:before{content:"\E805"}.ngrm-icon-play:before{content:"\E811"}.ngrm-icon-trash:before{content:"\F1F8"}.ngrm-icon-file-archive-o:before{content:"\F1C6"}.v-select{position:relative;font-family:inherit}.v-select,.v-select *{-webkit-box-sizing:border-box;box-sizing:border-box}@-webkit-keyframes vSelectSpinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes vSelectSpinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.vs__fade-enter-active,.vs__fade-leave-active{-webkit-transition:opacity .15s cubic-bezier(1,.5,.8,1);transition:opacity .15s cubic-bezier(1,.5,.8,1)}.vs__fade-enter,.vs__fade-leave-to{opacity:0}.vs--disabled .vs__clear,.vs--disabled .vs__dropdown-toggle,.vs--disabled .vs__open-indicator,.vs--disabled .vs__search,.vs--disabled .vs__selected{cursor:not-allowed;background-color:#f8f8f8}.v-select[dir=rtl] .vs__actions{padding:0 3px 0 6px}.v-select[dir=rtl] .vs__clear{margin-left:6px;margin-right:0}.v-select[dir=rtl] .vs__deselect{margin-left:0;margin-right:2px}.v-select[dir=rtl] .vs__dropdown-menu{text-align:right}.vs__dropdown-toggle{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0 0 4px 0;background:none;border:1px solid rgba(60,60,60,.26);border-radius:4px;white-space:normal}.vs__dropdown-toggle,.vs__selected-options{display:-webkit-box;display:-ms-flexbox;display:flex}.vs__selected-options{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 2px;position:relative}.vs__actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:4px 6px 0 3px}.vs--searchable .vs__dropdown-toggle{cursor:text}.vs--unsearchable .vs__dropdown-toggle{cursor:pointer}.vs--open .vs__dropdown-toggle{border-bottom-color:transparent;border-bottom-left-radius:0;border-bottom-right-radius:0}.vs__open-indicator{fill:rgba(60,60,60,.5);-webkit-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .15s cubic-bezier(1,-.115,.975,.855);transition:-webkit-transform .15s cubic-bezier(1,-.115,.975,.855);transition:transform .15s cubic-bezier(1,-.115,.975,.855);transition:transform .15s cubic-bezier(1,-.115,.975,.855),-webkit-transform .15s cubic-bezier(1,-.115,.975,.855);-webkit-transition-timing-function:cubic-bezier(1,-.115,.975,.855);transition-timing-function:cubic-bezier(1,-.115,.975,.855)}.vs--open .vs__open-indicator{-webkit-transform:rotate(180deg) scale(1);transform:rotate(180deg) scale(1)}.vs--loading .vs__open-indicator{opacity:0}.vs__clear{fill:rgba(60,60,60,.5);padding:0;border:0;background-color:transparent;cursor:pointer;margin-right:8px}.vs__dropdown-menu{display:block;position:absolute;top:calc(100% - 1px);left:0;z-index:1000;padding:5px 0;margin:0;width:100%;max-height:350px;min-width:160px;overflow-y:auto;-webkit-box-shadow:0 3px 6px 0 rgba(0,0,0,.15);box-shadow:0 3px 6px 0 rgba(0,0,0,.15);border:1px solid rgba(60,60,60,.26);border-top-style:none;border-radius:0 0 4px 4px;text-align:left;list-style:none;background:#fff}.vs__no-options{text-align:center}.vs__dropdown-option{line-height:1.42857143;display:block;padding:3px 20px;clear:both;color:#333;white-space:nowrap}.vs__dropdown-option:hover{cursor:pointer}.vs__dropdown-option--highlight{background:#5897fb;color:#fff}.vs__selected{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#f0f0f0;border:1px solid rgba(60,60,60,.26);border-radius:4px;color:#333;line-height:1.4;margin:4px 2px 0 2px;padding:0 .25em}.vs__deselect{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;appearance:none;margin-left:4px;padding:0;border:0;cursor:pointer;background:none;fill:rgba(60,60,60,.5);text-shadow:0 1px 0 #fff}.vs--single .vs__selected{background-color:transparent;border-color:transparent}.vs--single.vs--open .vs__selected{position:absolute;opacity:.4}.vs--single.vs--searching .vs__selected{display:none}.vs__search::-ms-clear,.vs__search::-webkit-search-cancel-button,.vs__search::-webkit-search-decoration,.vs__search::-webkit-search-results-button,.vs__search::-webkit-search-results-decoration{display:none}.vs__search,.vs__search:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:1.4;font-size:1em;border:1px solid transparent;border-left:none;outline:none;margin:4px 0 0 0;padding:0 7px;background:none;-webkit-box-shadow:none;box-shadow:none;width:0;max-width:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vs__search::-webkit-input-placeholder{color:inherit}.vs__search::-moz-placeholder{color:inherit}.vs__search:-ms-input-placeholder{color:inherit}.vs__search::-ms-input-placeholder{color:inherit}.vs__search::placeholder{color:inherit}.vs--unsearchable .vs__search{opacity:1}.vs--unsearchable .vs__search:hover{cursor:pointer}.vs--single.vs--searching:not(.vs--open):not(.vs--loading) .vs__search{opacity:.2}.vs__spinner{-ms-flex-item-align:center;align-self:center;opacity:0;font-size:5px;text-indent:-9999em;overflow:hidden;border-top:.9em solid hsla(0,0%,39.2%,.1);border-right:.9em solid hsla(0,0%,39.2%,.1);border-bottom:.9em solid hsla(0,0%,39.2%,.1);border-left:.9em solid rgba(60,60,60,.45);-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:vSelectSpinner 1.1s linear infinite;animation:vSelectSpinner 1.1s linear infinite;-webkit-transition:opacity .1s;transition:opacity .1s}.vs__spinner,.vs__spinner:after{border-radius:50%;width:5em;height:5em}.vs--loading .vs__spinner{opacity:1}.ngremotemedia-select-folder-container,.ngrm-model-portal+form,.ngrm-model-portal .ngrm-overlay{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:Roboto,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#333}.ngremotemedia-select-folder-container *,.ngremotemedia-select-folder-container :after,.ngremotemedia-select-folder-container :before,.ngrm-model-portal+form *,.ngrm-model-portal+form :after,.ngrm-model-portal+form :before,.ngrm-model-portal .ngrm-overlay *,.ngrm-model-portal .ngrm-overlay :after,.ngrm-model-portal .ngrm-overlay :before{-webkit-box-sizing:inherit;box-sizing:inherit}.ngremotemedia-select-folder-container .btn,.ngrm-model-portal+form .btn,.ngrm-model-portal .ngrm-overlay .btn{border-radius:4px;text-align:center;font-size:14px;line-height:18px;color:#fff;padding:8px 16px;border:1px solid #e4e4e4;background:#fff;color:#333}.ngremotemedia-select-folder-container .btn:active,.ngrm-model-portal+form .btn:active,.ngrm-model-portal .ngrm-overlay .btn:active{background:#d7d7d7}.ngremotemedia-select-folder-container .btn.btn-blue,.ngrm-model-portal+form .btn.btn-blue,.ngrm-model-portal .ngrm-overlay .btn.btn-blue{background:#009ac7;border:0;color:#fff}.ngremotemedia-select-folder-container .btn.btn-blue:active,.ngrm-model-portal+form .btn.btn-blue:active,.ngrm-model-portal .ngrm-overlay .btn.btn-blue:active{background:#007394}.ngremotemedia-select-folder-container .v-select,.ngrm-model-portal+form .v-select,.ngrm-model-portal .ngrm-overlay .v-select{font-size:14px;line-height:16px;background-color:#fff}.ngremotemedia-select-folder-container .v-select .vs__dropdown-toggle,.ngrm-model-portal+form .v-select .vs__dropdown-toggle,.ngrm-model-portal .ngrm-overlay .v-select .vs__dropdown-toggle{border-radius:0;border:1px solid #e4e4e4;padding:3px 5px 6px}.ngremotemedia-select-folder-container .v-select input::-webkit-input-placeholder,.ngrm-model-portal+form .v-select input::-webkit-input-placeholder,.ngrm-model-portal .ngrm-overlay .v-select input::-webkit-input-placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container .v-select input::-moz-placeholder,.ngrm-model-portal+form .v-select input::-moz-placeholder,.ngrm-model-portal .ngrm-overlay .v-select input::-moz-placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container .v-select input:-ms-input-placeholder,.ngrm-model-portal+form .v-select input:-ms-input-placeholder,.ngrm-model-portal .ngrm-overlay .v-select input:-ms-input-placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container .v-select input::-ms-input-placeholder,.ngrm-model-portal+form .v-select input::-ms-input-placeholder,.ngrm-model-portal .ngrm-overlay .v-select input::-ms-input-placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container .v-select input::placeholder,.ngrm-model-portal+form .v-select input::placeholder,.ngrm-model-portal .ngrm-overlay .v-select input::placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container ::-webkit-input-placeholder,.ngrm-model-portal+form ::-webkit-input-placeholder,.ngrm-model-portal .ngrm-overlay ::-webkit-input-placeholder{color:#999}.ngremotemedia-select-folder-container :-ms-input-placeholder,.ngrm-model-portal+form :-ms-input-placeholder,.ngrm-model-portal .ngrm-overlay :-ms-input-placeholder{color:#999}.ngremotemedia-select-folder-container ::-moz-placeholder,.ngrm-model-portal+form ::-moz-placeholder,.ngrm-model-portal .ngrm-overlay ::-moz-placeholder{color:#999}.ngremotemedia-select-folder-container ::-ms-input-placeholder,.ngrm-model-portal+form ::-ms-input-placeholder,.ngrm-model-portal .ngrm-overlay ::-ms-input-placeholder{color:#999}.ngremotemedia-select-folder-container ::placeholder,.ngrm-model-portal+form ::placeholder,.ngrm-model-portal .ngrm-overlay ::placeholder{color:#999}.ngremotemedia-container{text-align:start}.ngrm-model-portal .ngrm-overlay .ng-icon{font-size:4.5em;font-family:ngri;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-align:center;line-height:80px;display:block;color:#333}.ngrm-model-portal .ngrm-overlay .ng-icon.big{font-size:64px;color:#333}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-warning:before{content:"\E900"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-spinner:before{content:"\E901"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-close:before{content:"\E902"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-cloud:before{content:"\E903"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-video:before{content:"\E904"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-book:before{content:"\E905"}.ngrm-model-portal .ngrm-overlay .image-meta{overflow:visible}.ngrm-model-portal .ngrm-overlay .image-meta h3{font-weight:700}.ngrm-model-portal .ngrm-overlay .image-meta p{color:#737373}.ngrm-model-portal .ngrm-overlay .image-meta input.media-alttext,.ngrm-model-portal .ngrm-overlay .image-meta input.media-caption,.ngrm-model-portal .ngrm-overlay .image-meta input.media-css-class,.ngrm-model-portal .ngrm-overlay .image-meta input.media-watermarktext{width:100%;border-radius:0;border:1px solid #e4e4e4;padding:7px 10px 7px 10px;margin-bottom:10px}.ngrm-model-portal .ngrm-overlay .image-meta .image-meta-data{margin-top:20px}.ngrm-model-portal .ngrm-overlay .image-wrap:has(.icon-doc){position:relative;height:200px;max-width:400px;display:block;margin-bottom:4px}.ngrm-model-portal .ngrm-overlay .image-wrap:has(.icon-doc):before{position:absolute;content:""}.ngrm-model-portal .ngrm-overlay .image-wrap:has(.icon-doc):before{background-color:rgba(0,0,0,.7);top:0;bottom:0;left:0;right:0}.ngrm-model-portal .ngrm-overlay .image-wrap .icon-doc{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-size:70px}.ngrm-model-portal .ngrm-overlay .image-wrap img{max-width:100%}.ngrm-model-portal .ngrm-overlay .vue-treeselect{font-size:14px;line-height:16px}.ngrm-model-portal .ngrm-overlay .vue-treeselect .vue-treeselect__control{border-radius:0;border:1px solid #e4e4e4}.ngrm-model-portal .ngrm-overlay .vue-treeselect .vue-treeselect__placeholder{color:#333;font-style:italic}@-webkit-keyframes spinning{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinning{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ngremotemedia-buttons{margin-top:20px}.ngremotemedia-buttons .ngremotemedia-local-file-container{margin:10px 0 10px 0}.ngremotemedia-buttons .ngremotemedia-local-file.btn.upload-from-disk,.ngremotemedia-buttons input[type=button]{border-radius:4px;text-align:center;font-size:14px!important;line-height:18px;padding:8px 16px;border:1px solid #e4e4e4;background:#f1f4fa;cursor:pointer;color:#333;font-weight:400;font-family:Arial,Helvetica,sans-serif}.ngremotemedia-buttons .ngremotemedia-local-file.btn.upload-from-disk{background:#fff}.o2k7Skin .mceIcon.mce_ngremotemedia img{width:2rem}.ngremotemedia-image .image-wrap .file-placeholder[data-v-68b77256]{position:relative;max-width:500px;height:280px;display:block;margin-bottom:4px}.ngremotemedia-image .image-wrap .file-placeholder .icon-doc[data-v-68b77256]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-size:40px}.ngremotemedia-image .image-wrap .file-placeholder[data-v-68b77256]:before{position:absolute;content:"";background-color:rgba(0,0,0,.7);top:0;bottom:0;left:0;right:0}.mediaFacets[data-v-278bb214]{width:362px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-shadow:inset -1px 0 0 0 #e4e4e4;box-shadow:inset -1px 0 0 0 #e4e4e4}.mediaFacets .body[data-v-278bb214]{-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4,inset 0 1px 0 0 #e4e4e4,inset -1px 0 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4,inset 0 1px 0 0 #e4e4e4,inset -1px 0 0 0 #e4e4e4;background:#fff;padding:30px 15px}.mediaFacets .body .form-field+.form-field[data-v-278bb214]{margin-top:15px}.mediaFacets .body .form-field label[data-v-278bb214],.mediaFacets .body .search-wrapper .search-label[data-v-278bb214]{font-size:12px;font-weight:700;line-height:18px;color:#757575;margin-bottom:3px;display:block}.mediaFacets .body .search-wrapper[data-v-278bb214]{margin:30px 0 0}.mediaFacets .body .search-wrapper .search[data-v-278bb214]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:5px 0}.mediaFacets .body .search-wrapper .search input[data-v-278bb214],.mediaFacets .body .search-wrapper .search ul[data-v-278bb214]{font-size:14px;line-height:16px}.mediaFacets .body .search-wrapper .search ul[data-v-278bb214]{margin:0;padding:5px;list-style:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:1px solid #e4e4e4;min-width:75px;display:none}.mediaFacets .body .search-wrapper .search ul li[data-v-278bb214]{cursor:auto;margin-right:10px;padding:4px 10px;min-width:45px}.mediaFacets .body .search-wrapper .search ul li[data-v-278bb214]:last-child,.mediaFacets .body .search-wrapper .search ul li[data-v-278bb214]:only-child{margin:0}.mediaFacets .body .search-wrapper .search ul li.active[data-v-278bb214]{background:#009ac7;color:#fff;border-radius:4px;-webkit-box-shadow:inset -1px 0 0 0 #d7d7d7,inset 1px 0 0 0 #d7d7d7,inset 0 1px 0 0 #d7d7d7,inset 0 -1px 0 0 #d7d7d7;box-shadow:inset -1px 0 0 0 #d7d7d7,inset 1px 0 0 0 #d7d7d7,inset 0 1px 0 0 #d7d7d7,inset 0 -1px 0 0 #d7d7d7}.mediaFacets .body .search-wrapper .search input[data-v-278bb214]{border:1px solid #e4e4e4;padding:9px 10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.mediaFacets .ng-spinner[data-v-278bb214]{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.mediaFacets .ng-spinner[data-v-278bb214]:before{display:inline-block;-webkit-animation:spinning 1.5s linear infinite;animation:spinning 1.5s linear infinite}.media-gallery[data-v-5aa52c90]{position:relative;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.media-gallery .items[data-v-5aa52c90]{padding:15px;overflow-y:auto;height:calc(100% - 50px)}.media-gallery .items.loading[data-v-5aa52c90]{opacity:.5}.media-gallery .items .media[data-v-5aa52c90]{width:190px;min-height:182px;max-height:190px;padding:8px;margin:0 15px 15px 0;background-color:#fff;display:inline-block}.media-gallery .items .media .media-container[data-v-5aa52c90]{width:100%}.media-gallery .items .media .img[data-v-5aa52c90]{display:block;margin-bottom:4px;-o-object-fit:cover;object-fit:cover;height:100px;width:100%;overflow:hidden;text-overflow:ellipsis}.media-gallery .items .media .file-placeholder[data-v-5aa52c90]{position:relative;height:95px;display:block;margin-bottom:4px}.media-gallery .items .media .file-placeholder .icon-doc[data-v-5aa52c90]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-size:40px}.media-gallery .items .media .file-placeholder[data-v-5aa52c90]:before{position:absolute;content:"";background-color:rgba(0,0,0,.7);top:0;bottom:0;left:0;right:0}.media-gallery .items .media .filename[data-v-5aa52c90]{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap;width:100%;text-align:center;font-size:16px;line-height:20px;margin-top:4px;margin-bottom:0}.media-gallery .items .media .size-description[data-v-5aa52c90]{font-size:12px;line-height:14px;text-align:center;color:#999}.media-gallery .items .media .size-description .format[data-v-5aa52c90]{text-transform:uppercase}.media-gallery .items .media.selected[data-v-5aa52c90]{border:1px solid #009ac7}.media-gallery .items .media .select-btn[data-v-5aa52c90]{margin-top:8px;padding:3px;width:100%}.media-gallery .folder-empty[data-v-5aa52c90]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.media-gallery .folder-empty span[data-v-5aa52c90]{display:block;text-align:center;font-size:14px;line-height:16px}.media-gallery .folder-empty span.ngrm-icon-folder[data-v-5aa52c90]{color:#999;font-size:33px}.media-gallery .folder-empty span strong[data-v-5aa52c90]{display:block;margin:5px 0;font-size:16px;line-height:19px}.media-gallery .load-more-wrapper[data-v-5aa52c90]{padding:8px 15px;background-color:#fff;text-align:right;-webkit-box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;position:absolute;bottom:0;left:0;right:0}.ngrm-overlay[data-v-03fd1c54]{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.8);z-index:9999}.ngrm-overlay .media-modal[data-v-03fd1c54]{background-color:#f5f5f5;-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,.5);box-shadow:0 5px 15px 0 rgba(0,0,0,.5);margin:32px;height:calc(100vh - 64px)}.ngrm-overlay .media-modal .title[data-v-03fd1c54]{padding:15px;font-size:16px;font-weight:700;line-height:20px;color:#333;background:#fff;text-transform:uppercase;-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4}.ngrm-overlay .media-modal .title .close[data-v-03fd1c54]{float:right;cursor:pointer;padding:2px 10px}.ngrm-overlay .media-modal .body[data-v-03fd1c54]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;position:relative;height:calc(100% - 50px)}.ngrm-overlay .img-placeholder img[data-v-03fd1c54]{height:100%}.ngremotemedia-buttons input[type=button]{margin-bottom:4px;margin-right:4px}.help-block.description{margin-right:6px}.btn,.sidebar-crop .buttons{font-size:14px!important;font-family:Arial,Helvetica,sans-serif}.ngremotemedia-selected-variation .vs__selected-options input[type=search].vs__search,.ngremotemedia-tags .vs__selected-options input[type=search].vs__search{border:none}.ngremotemedia-selected-variation select[hidden=hidden],.ngremotemedia-tags select[hidden=hidden]{display:none}.ngremotemedia-image h3.title{word-break:break-word}.ngremotemedia-image .image-wrap img{max-width:100%}.input-file-name-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-file-name-wrapper .v-select,.input-file-name-wrapper input[type=text]{margin-right:16px}.input-file-name-wrapper .v-select.vs--single.vs--searchable{margin-right:10px}.input-file-name-wrapper .v-select.vs--single.vs--searchable input.vs__search{background:transparent}.input-file-name-wrapper button.btn{margin-left:40%;font-size:14px!important;font-family:Arial}.input-file-name-wrapper .vs__dropdown-toggle{height:37px}.media-gallery .items .media{line-height:normal}.ng-spinner[data-v-751395c8]{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ng-spinner[data-v-751395c8]:before{display:inline-block;-webkit-animation:spinning 1.5s linear infinite;animation:spinning 1.5s linear infinite}.sidebar-crop[data-v-ad171770]{width:264px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-shadow:inset -1px 0 0 0 #e4e4e4;box-shadow:inset -1px 0 0 0 #e4e4e4}.sidebar-crop .buttons[data-v-ad171770]{background:#fff;padding:15px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4;margin-right:1px}.sidebar-crop .buttons button[data-v-ad171770]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.sidebar-crop .buttons button.crop-btn-add[data-v-ad171770]{margin-left:10px}.sidebar-crop .buttons button[data-v-ad171770]:only-child{width:100%}.sidebar-crop-label span[data-v-ad171770]{color:#999;font-size:14px;line-height:18px;display:inline-block;padding:31px 15px 15px;width:100%;-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4}.unselectedVariations[data-v-ad171770]{position:absolute;top:0;left:0;width:264px;height:100%;-webkit-transform:translateX(264px);transform:translateX(264px);background:#fff;-webkit-box-shadow:inset -1px 0 0 0 #e4e4e4;box-shadow:inset -1px 0 0 0 #e4e4e4;z-index:10}.unselectedVariations>div[data-v-ad171770]{padding:15px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;background-color:#fff;-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4,inset -1px 0 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4,inset -1px 0 0 0 #e4e4e4}.unselectedVariations>div input[data-v-ad171770],.unselectedVariations>div label[data-v-ad171770]{cursor:pointer}.unselectedVariations>div input[data-v-ad171770]{margin-right:11px}.unselectedVariations>div label[data-v-ad171770]{width:100%}.unselectedVariations>div .name[data-v-ad171770]{color:#333;font-size:14px;line-height:18px}.unselectedVariations>div .formatted-size[data-v-ad171770]{color:#999;font-size:12px;line-height:18px;display:block}.unselectedVariations>div.disabled[data-v-ad171770]{-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:#f5f5f5;cursor:auto;color:#ddd;padding:15px 15px 5px}.unselectedVariations>div.disabled input[data-v-ad171770],.unselectedVariations>div.disabled label[data-v-ad171770],.unselectedVariations>div.disabled span[data-v-ad171770]{cursor:auto}.unselectedVariations>div.disabled label[data-v-ad171770]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto;color:#999}.unselectedVariations .legend-not-selectable[data-v-ad171770]{width:100%;font-size:.75rem;color:#a41034;display:inline-block;text-align:right}.selectedVariations ul[data-v-ad171770]{list-style:none;padding:0;margin:0}.selectedVariations ul li[data-v-ad171770]{padding:15px 0 15px 15px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-shadow:inset -1px 0 0 0 #e4e4e4,inset 0 -1px 0 0 #e4e4e4;box-shadow:inset -1px 0 0 0 #e4e4e4,inset 0 -1px 0 0 #e4e4e4;background-color:#fff;cursor:pointer}.selectedVariations ul li.disabled[data-v-ad171770]{background-color:#f5f5f5;cursor:auto}.selectedVariations ul li.selected.set[data-v-ad171770]{color:#90ee90}.selectedVariations ul li span[data-v-ad171770]{display:block;color:#333;font-size:14px;line-height:18px}.selectedVariations ul li a[data-v-ad171770]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.selectedVariations ul li a span[data-v-ad171770]{padding:5px}.selectedVariations ul li a .ngrm-icon-trash[data-v-ad171770]{color:#009ac7;padding:10px}.selectedVariations ul li .formatted-size[data-v-ad171770]{color:#999;font-size:12px;line-height:18px}.selectedVariations ul li .circle-orange[data-v-ad171770]{width:8px;height:8px;background-color:orange;border-radius:50%}.selectedVariations .set .circle-orange[data-v-ad171770]{display:none}.crop .cropper[data-v-5f73791e]{position:relative;margin:0 auto}.crop .cropper button[data-v-5f73791e]{margin-left:8px}.crop .cropper .buttons[data-v-5f73791e]{position:absolute}.crop .preview[data-v-5f73791e]{width:100%;height:500px;overflow:hidden}.crop-container[data-v-45497070]{overflow-y:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:30px 30px 80px}.crop-container[data-v-45497070]:empty{display:none}.img-placeholder[data-v-45497070]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:60px 60px 110px}.img-placeholder img[data-v-45497070]{max-width:100%;height:auto;margin:0 auto;display:block}.action-strip[data-v-45497070]{padding:8px 15px;background-color:#fff;text-align:right;-webkit-box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;position:absolute;bottom:0;left:264px;right:0}.action-strip button[data-v-45497070]{margin-left:10px}.action-strip .ngrm-icon-floppy[data-v-45497070]{margin-right:5px}.folder-gallery[data-v-c53732c8]{position:relative;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;height:calc(100% - 50px);overflow-y:auto}.folder-gallery .items[data-v-c53732c8]{padding:15px}.folder-gallery .items.loading[data-v-c53732c8]{opacity:.5}.folder-gallery .items .breadcrumbs[data-v-c53732c8]{background-color:#fff;width:100%;margin-bottom:20px;padding:10px}.folder-gallery .items .breadcrumbs a[data-v-c53732c8]{color:#009ac7}.folder-gallery .items .info[data-v-c53732c8]{font-style:italic;margin-bottom:10px;margin-left:10px}.folder-gallery .items .media[data-v-c53732c8]{width:177px;min-height:182px;max-height:190px;padding:8px;margin:0 15px 15px 0;background-color:#fff;display:inline-block}.folder-gallery .items .media .media-container[data-v-c53732c8]{width:100%}.folder-gallery .items .media .img[data-v-c53732c8]{display:block;margin-bottom:4px;-o-object-fit:cover;object-fit:cover;height:92px;width:100%;overflow:hidden;text-overflow:ellipsis}.folder-gallery .items .media .file-placeholder[data-v-c53732c8]{position:relative;height:92px;display:block;margin-bottom:4px}.folder-gallery .items .media .file-placeholder .icon-doc[data-v-c53732c8]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-size:40px}.folder-gallery .items .media .file-placeholder[data-v-c53732c8]:before{position:absolute;content:"";background-color:rgba(0,0,0,.7);top:0;bottom:0;left:0;right:0}.folder-gallery .items .media.new-folder input[data-v-c53732c8]{width:100%;margin-top:5px}.folder-gallery .items .media.new-folder .select-btn[data-v-c53732c8]{background:#2e8b57}.folder-gallery .items .media.new-folder .file-placeholder[data-v-c53732c8]:before{background-color:rgba(0,0,0,.2);top:0;bottom:0;left:0;right:0}.folder-gallery .items .media .filename[data-v-c53732c8]{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap;width:100%;text-align:center;font-size:16px;line-height:20px;margin-top:4px;margin-bottom:0}.folder-gallery .items .media .size-description[data-v-c53732c8]{font-size:12px;line-height:14px;text-align:center;color:#999}.folder-gallery .items .media .size-description .format[data-v-c53732c8]{text-transform:uppercase}.folder-gallery .items .media.selected[data-v-c53732c8]{border:1px solid #009ac7}.folder-gallery .items .media .select-btn[data-v-c53732c8]{margin-top:10px;padding:3px;width:100%}.folder-gallery .folder-empty[data-v-c53732c8]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.folder-gallery .folder-empty span[data-v-c53732c8]{display:block;text-align:center;font-size:14px;line-height:16px}.folder-gallery .folder-empty span.ngrm-icon-folder[data-v-c53732c8]{color:#999;font-size:33px}.folder-gallery .folder-empty span strong[data-v-c53732c8]{display:block;margin:5px 0;font-size:16px;line-height:19px}.folder-gallery .load-more-wrapper[data-v-c53732c8]{padding:8px 15px;background-color:#fff;text-align:right;-webkit-box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;position:absolute;bottom:0;left:0;right:0}.ng-spinner[data-v-c53732c8]{position:fixed;vertical-align:center;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ng-spinner[data-v-c53732c8]:before{display:inline-block;-webkit-animation:spinning 1.5s linear infinite;animation:spinning 1.5s linear infinite}.loading[data-v-97dbe76a]{opacity:.5}.input-file-name-wrapper[data-v-97dbe76a]{padding:8px 15px;background-color:#fff;-webkit-box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;position:absolute;bottom:0;left:0;right:0}.input-file-name-wrapper input[type=text][data-v-97dbe76a]{width:40%;min-width:300px;border:1px solid #e4e4e4;padding:10px 10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:10px}.input-file-name-wrapper input[type=text].error[data-v-97dbe76a]{border:1px solid red}.input-file-name-wrapper .v-select[data-v-97dbe76a]{width:15%;min-width:150px}.input-file-name-wrapper button[data-v-97dbe76a]{float:right}.input-file-name-wrapper div.error[data-v-97dbe76a]{color:red;margin-bottom:5px}.ng-spinner[data-v-97dbe76a]{position:fixed;vertical-align:middle;margin-top:15%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ng-spinner[data-v-97dbe76a]:before{display:inline-block;-webkit-animation:spinning 1.5s linear infinite;animation:spinning 1.5s linear infinite} \ No newline at end of file +@import url(https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css);@font-face{font-family:ngri;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBeYAAAC8AAAAYGNtYXAXVtKMAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZizrtTkAAAF4AAAO7GhlYWQPi42rAAAQZAAAADZoaGVhB8IDywAAEJwAAAAkaG10eB4AAFAAABDAAAAAKGxvY2EU0g5yAAAQ6AAAABZtYXhwAA8EiQAAEQAAAAAgbmFtZXBI7ewAABEgAAABYnBvc3QAAwAAAAAShAAAACAAAwO3AZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBQPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QX//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAAEAA7/wAPyA8AAAwAVACEALwAACQEhATUiBgcBBhYzITI2JzEBLgEjMRMUBiMiJjU0NjMyFiciJj0BNDYzMhYdARQGAgABrfymAa0RHw3+SxklMwNmMyUZ/ksNHxFAJRsbJSUbGyVAGyUlGxslJQNj/KkDV10WF/yZLEBALANnFxb8wBslJRsbJSVlJRvAGyUlG8AbJQAAAAIAAP/ABAADwAJEBIYAABMxOAExFBYVFhQVFBYVFBYVHgEXHgEXHgEXHgEXFhQXFBYXHgEXFBYVFBYVHgEXHgEXHgEXHgEXHgEVHgEXHgEXHgEXHgEXHgEXHgEXHgEXHgEXHgEXHgEXMhYXMhYzHgEXHgEXHgEzHgEzHgEzHgEXMhYzMhYzMDIzHgEzMhYzOgEzFjIzFjIzMjAxHgEzMDIzMTgBMTI2MzYyMzI2MzI2Mz4BNz4BNz4BNz4BNzYyNzI2Nz4BNzI2MTI2Mz4BNz4BNz4BNz4BNz4BMz4BNz4BNz4BNz4BNz4BNz4BNz4BNz4BNz4BNz4BNz4BNzQ2NT4BNz4BNzQ2NzQ2NT4BNzQ2NTQ2NTY0NTA0NT4BNTQ2NTwBNTY0NTY0NTwBMTI2NTA0NTE4ATE0JjUmNDU0JjU0JjUuAScuAScuAScuAScmNCc0JicuASc0JjU0JjUuAScuAScuAScuAScuATUuAScuAScuAScuAScuAScuAScuAScuAScuAScuASciJiciJiMuAScuAScuASMuASMuASMuASciJiMiJiMwIiMuASMiJiMqASMmIiMmIiMqASM0JiMwIiMxOAExIgYjBiIjIgYjIgYjDgEHDgEHDgEHDgEHBiIHIgYHDgEHIgYjIgYjDgEHDgEHDgEHDgEHDgEjDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHFAYHFAYVDgEHDgEHDgEVDgEVDgEVDgEHFAYVFAYVMBQVDgEVFAYVHAEVBhQVBhQVHAExDgEVMBQVNzA0MTQ2NT4BNzQ2NzQ2NT4BNzQ2MTQ2NT4BNz4BNz4BNzQ2NT4BNT4BNz4BNz4BNz4BNz4BNz4BNz4BNz4BNz4BNz4BNz4BNzI2Mz4BNz4BNzI2MzYyNzI2Mz4BMzYyMzYyMzAyMTYyNzoBMzoBNzoBMzI2MzoBMzoBMzoBMxYyMzoBMxYyMzAyMTIwOQE+ATcyMBcyFhceARcyFhcyFjMeARcyFjEyFjMeATMeARceARceATMeARceARceARcyFhceARceARceARceARceARceARceARceARcUFhUeARceARcUFhUWFBcUFhUeARUWFBUyFDEcATEWFBccARUcARccARUUFhUcARUcARUcARUGFBUcARUGFBUwFDEwFDkBHgEXMBQxDgEHDgEHFAYVDgEVDgEHFAYxFAYVDgEVDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHDgEHIgYjDgEHDgEHIgYjBiIHIgYjDgEjBiIjFCIxKgEjBiIHKgEjKgEHKgEjIgYjKgEjKgEjKgEjJiIjKgEjJiIjMCIxMCI5AQ4BByImJy4BJyImJyImIy4BJyImMSImIy4BIy4BJy4BJy4BIy4BJy4BJy4BJyImJy4BJy4BJy4BJy4BJy4BJy4BJy4BJy4BJzQmNS4BJy4BJzQmNSY0JzQmNS4BNSY0NSI0MTwBMSY0JzwBNTwBJzwBNTQmNTwBNTwBNTwBNTY0NTwBNTY0NTA0MTA0OQEuAScAAQEBAQEBAQECAQEBAQEBAQEBAQEBAgEBAQEBAQEDAQEDAgEBAQECAgQCAQQCAQIBAQMBAgQDCRUMDBkODR0ODx4PAwgEAQQCAgMCBAcEAwgDAgMCAgMCBAYEAwcDAgMBAQIBAgEDBgMCAgIBAwIDBQMDBQIBASUaAQEDBgICAgIBBAECBAIFCQUFCwUDBgMCBgQBAwIBAwIDBwMBAgECAQEEAQQHAwQHAwIDAgIDAgQHBAMHBAIDAgIDAgQHBA4cDQ0ZCwwUCgkPBwEDAgEBAQICAgEBAwEBAQEBAgECAQEBAQEBARslAQEBAQEBAQECAQEBAQEBAQEBAQEBAgEBAQEBAQEDAQEDAgEBAQECAgQCAQQCAQIBAQMBAgQDCRUMDBkODR0ODx4PAwgEAQQCAgMCBAcEAwgDAgMCAgMCBAYEAwcDAgMBAQIBAgEDBgMCAgIBAwIDBQMDBQIBAQEmGgEBAwUDAQMCAQMCAgQCBAoFBQoGAwUDAwYDAgMCAQMCAwcDAQEBAQIBAQQBBAYEAwcEAgMCAgMCBAcDBAcEAgMCAgMCBAcDDxsODRkLDBQJCRAHAQMCAgECAQMBAQIBAQEBAQECAQEBAQEBAQEBARokSgIBAQEBAQEBAgEBAQEBAQECAQEDAgIBAgIDAgEEAgEBAQECAQIEAggTCgsWDAwZDQwaDQQGAwIDAgEDAgMGBAMGAwIDAQIDAQMGAwMFAwICAgEBAQIDBQMBAwEBAwECBQMCBAMECAQEBgMBAwECAwECAwEDBQIBARcjAwEBAgUDAgYCAgICAQMBAwYCAQIBAQECAwEDBgMDBgMCAwECAwEDBwMDBgMCAwECAwIDBgMMGAwLFQoKEQgIDQUCAgEBAQECAQIBAQIBAQEBAgEBAQEBAQEBAQEBHhYBAQEBAQEBAQEBAgEBAQEBAQMBAQMBAQEBAQEBAgMBAgQBAQIBAQIBAgQCCBMKCxYMDBkMDRoNAwcDAgMBAgMCAwYDBAYDAQMCAQMCAwYDAwUDAgICAgEBAQMFAwEDAQEDAQIFAgMEAwQIBAMHAwEDAQIDAQIDAQIFAwEBFyIEAgUDAgYCAgICAQMBAwYCAQIBAQECAwEDBgMDBgMCAwECAwEDBwMDBgMCAwECAwIDBgMMGAwLFQoKEQgIDQUCAgEBAQECAQIBAQIBAQEBAgEBAQEBAQEBAQEBHxYBvgMFAwICAgEDAgIEAgUJBQUKBgMGAgMGAwIDAgEDAgMHAwEBAQECAQEEAQQHAwMHBAIDAgIDAgQHAwQHBAIDAgIDAgQHBA4cDQ0ZCwwUCgkPBwEDAgIBAgICAQECAQEBAQEBAgEBAQEBAQEBAQEaJQEBAQEBAQEBAgEBAQEBAQEBAQEBAQIBAQEBAQEBAwEBAwIBAQEBAgIEAgEEAgECAQEDAQIEAwkVDAwZDg0dDg8eDwMIBAEEAgIDAgQHBAMIAwIDAgIDAgQGBAMHAwIDAQECAQIBAwYDAgICAQMCAwUDAwUCAQEmGgEBAwUDAgICAQMCAgQCBQkFBQoGAwYCAwYDAgMCAQMCAwcDAQEBAQIBAQQBBAcDAwcEAgMCAgMCBAcDBAcEAgMCAgMCBAcEDhwNDRkLDBQKCQ8HAQMCAgECAgIBAQIBAQEBAQECAQEBAQEBAQEBARolAQEBAQEBAQECAQEBAQEBAQEBAQEBAgEBAQEBAQEDAQEDAgEBAQECAgQCAQQCAQIBAQMBAgQDCRUMDBkODR0ODx4PAwgEAQQCAgMCBAcEAwgDAgMCAgMCBAYEAwcDAgMBAQIBAgEDBgMCAgIBAwIDBQMDBQIBAQElGgEBQQECBQMCBgICAgIBAwEDBgIBAgEBAQIDAQMGAwMGAwIDAQIDAQMHAwMGAwIDAQIDAgMGAwwYDAsVCgoRCAgNBQICAQEBAQIBAgEBAgEBAQECAQEBAQEBAQEBAQEeFwEBAQEBAQEBAQECAQEBAQECAgEBAwEBAgEBAQIDAgEEAgIBAQIBAgQCCBMKCxYMDBkNDBoNBAYDAgMCAQMCAwYEAwYDAQMCAQMCAwYDAwUDAgICAgECAwUDAQMBAQMBAgUDAgQDBAgEAwcDAQMBAgMBAgMBAgUDAQEXIgQBAgUDAgYCAgICAQMBAwYCAQIBAQECAwEDBgMDBgMCAwECAwEDBwMDBgMCAwECAwIDBgMMGAwLFQoKEQgIDQUCAgEBAQECAQIBAQIBAQEBAgEBAQEBAQEBAQEBHhYBAQEBAQEBAQECAQEBAQECAgEBAwEBAgEBAQIDAgEEAgIBAQIBAgQCCBMKCxYMDBkNDBoNBAYDAgMCAQMCAwYDBAYDAQMCAQMCAwYDAwUDAgICAgECAwUDAQMBAQMBAgUDAgQDBAgEAwcDAQMBAgMBAgMBAgUDAQEXIwMAAAAAAQAC/8ID/gO+AFMAACU4ATEJATgBMT4BNzYmLwEuAQcOAQc4ATEJATgBMS4BJyYGDwEOARceARc4ATEJATgBMQ4BBwYWHwEeATc+ATc4ATEJATgBMR4BFxY2PwE+AScuAQP3/skBNwIEAQMDB5MHEgkDBgL+yf7JAgYDCRIHkwcDAwEEAgE3/skCBAEDAweTBxIJAwYCATcBNwIGAwkSB5MHAwMBBIkBNwE3AgYDCRIHkwcDAwEEAv7JATcCBAEDAweTBxIJAwYC/sn+yQIGAwkSB5MHAwMBBAIBN/7JAgQBAwMHkwcSCQMGAAABAAAAgAQAAsAAKgAAATQmJyYnLgEnJiMiBgcuASMiBhUUFhUuASMiBw4BBwYVFBceARcWMyEyNgQATDkBExNBKyoxOWEhEjcgOE4BCBEJKCQjNQ8PDw81IyQoApBIZgEuPl4OMCorPxISMSoYHE43BQoEAQIQDzQkIygoJCM1Dw9mAAAEAAAAQAQAA0AACwAXACsALwAAATQ2MzIWFRQGIyImJTQ2MzIWFRQGIyImBTU0JiMhIgYVERQWMyEyNj0BBREBITUhAYBeQkJeXkJCXv6AXkJCXl5CQl4DACYa/YAaJiYaAoAaJgEA/oD+AAIAAqBCXl5CQl5eQkJeXkJCXl7+YBomJhr+wBomJhpgoAHA/sDAAAAAAgBA/8ADwAPAABQAJgAAAREhIiY1NDYzIREhIgYVERQWMyERATE4ATEiBhUUFjM4ATkBITUhA4D9YCg4OCgCYP2ANUtLNQMA/SANExMNAmD9oANA/MA4KCg4AwBLNf0ANUsDgP1AEw0NE0AAAQAAAAEAACKXau1fDzz1AAsEAAAAAADWNiSXAAAAANY2JJcAAP/ABAADwAAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAAEAAABAAAAAAAAAAAAAAAAAAAACgQAAAAAAAAAAAAAAAIAAAAEAAAOBAAAAAQAAAIEAAAABAAAAAQAAEAAAAAAAAoAFAAeAGoGPga0BvYHQAd2AAAAAQAAAAoEhwAEAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAQAAAABAAAAAAACAAcARQABAAAAAAADAAQALQABAAAAAAAEAAQAWgABAAAAAAAFAAsADAABAAAAAAAGAAQAOQABAAAAAAAKABoAZgADAAEECQABAAgABAADAAEECQACAA4ATAADAAEECQADAAgAMQADAAEECQAEAAgAXgADAAEECQAFABYAFwADAAEECQAGAAgAPQADAAEECQAKADQAgG5ncmkAbgBnAHIAaVZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMG5ncmkAbgBnAHIAaW5ncmkAbgBnAHIAaVJlZ3VsYXIAUgBlAGcAdQBsAGEAcm5ncmkAbgBnAHIAaUZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:fa-ngrm;src:url(../fonts/fa-ngrm.eot);src:url(../fonts/fa-ngrm.eot#iefix) format("embedded-opentype"),url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff"),url(../fonts/fa-ngrm.ttf) format("truetype"),url(../img/fa-ngrm.svg#fa-ngrm) format("svg");font-weight:400;font-style:normal}[class*=" ngrm-icon-"]:before,[class^=ngrm-icon-]:before{font-family:fa-ngrm;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ngrm-icon-cancel:before{content:"\E800"}.ngrm-icon-floppy:before{content:"\E801"}.ngrm-icon-ok:before{content:"\E802"}.ngrm-icon-ccw:before{content:"\E803"}.ngrm-icon-folder:before{content:"\E804"}.ngrm-icon-upload:before{content:"\E805"}.ngrm-icon-play:before{content:"\E811"}.ngrm-icon-trash:before{content:"\F1F8"}.ngrm-icon-file-archive-o:before{content:"\F1C6"}.v-select{position:relative;font-family:inherit}.v-select,.v-select *{-webkit-box-sizing:border-box;box-sizing:border-box}@-webkit-keyframes vSelectSpinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes vSelectSpinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.vs__fade-enter-active,.vs__fade-leave-active{-webkit-transition:opacity .15s cubic-bezier(1,.5,.8,1);transition:opacity .15s cubic-bezier(1,.5,.8,1)}.vs__fade-enter,.vs__fade-leave-to{opacity:0}.vs--disabled .vs__clear,.vs--disabled .vs__dropdown-toggle,.vs--disabled .vs__open-indicator,.vs--disabled .vs__search,.vs--disabled .vs__selected{cursor:not-allowed;background-color:#f8f8f8}.v-select[dir=rtl] .vs__actions{padding:0 3px 0 6px}.v-select[dir=rtl] .vs__clear{margin-left:6px;margin-right:0}.v-select[dir=rtl] .vs__deselect{margin-left:0;margin-right:2px}.v-select[dir=rtl] .vs__dropdown-menu{text-align:right}.vs__dropdown-toggle{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0 0 4px 0;background:none;border:1px solid rgba(60,60,60,.26);border-radius:4px;white-space:normal}.vs__dropdown-toggle,.vs__selected-options{display:-webkit-box;display:-ms-flexbox;display:flex}.vs__selected-options{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 2px;position:relative}.vs__actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:4px 6px 0 3px}.vs--searchable .vs__dropdown-toggle{cursor:text}.vs--unsearchable .vs__dropdown-toggle{cursor:pointer}.vs--open .vs__dropdown-toggle{border-bottom-color:transparent;border-bottom-left-radius:0;border-bottom-right-radius:0}.vs__open-indicator{fill:rgba(60,60,60,.5);-webkit-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .15s cubic-bezier(1,-.115,.975,.855);transition:-webkit-transform .15s cubic-bezier(1,-.115,.975,.855);transition:transform .15s cubic-bezier(1,-.115,.975,.855);transition:transform .15s cubic-bezier(1,-.115,.975,.855),-webkit-transform .15s cubic-bezier(1,-.115,.975,.855);-webkit-transition-timing-function:cubic-bezier(1,-.115,.975,.855);transition-timing-function:cubic-bezier(1,-.115,.975,.855)}.vs--open .vs__open-indicator{-webkit-transform:rotate(180deg) scale(1);transform:rotate(180deg) scale(1)}.vs--loading .vs__open-indicator{opacity:0}.vs__clear{fill:rgba(60,60,60,.5);padding:0;border:0;background-color:transparent;cursor:pointer;margin-right:8px}.vs__dropdown-menu{display:block;position:absolute;top:calc(100% - 1px);left:0;z-index:1000;padding:5px 0;margin:0;width:100%;max-height:350px;min-width:160px;overflow-y:auto;-webkit-box-shadow:0 3px 6px 0 rgba(0,0,0,.15);box-shadow:0 3px 6px 0 rgba(0,0,0,.15);border:1px solid rgba(60,60,60,.26);border-top-style:none;border-radius:0 0 4px 4px;text-align:left;list-style:none;background:#fff}.vs__no-options{text-align:center}.vs__dropdown-option{line-height:1.42857143;display:block;padding:3px 20px;clear:both;color:#333;white-space:nowrap}.vs__dropdown-option:hover{cursor:pointer}.vs__dropdown-option--highlight{background:#5897fb;color:#fff}.vs__selected{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#f0f0f0;border:1px solid rgba(60,60,60,.26);border-radius:4px;color:#333;line-height:1.4;margin:4px 2px 0 2px;padding:0 .25em}.vs__deselect{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;appearance:none;margin-left:4px;padding:0;border:0;cursor:pointer;background:none;fill:rgba(60,60,60,.5);text-shadow:0 1px 0 #fff}.vs--single .vs__selected{background-color:transparent;border-color:transparent}.vs--single.vs--open .vs__selected{position:absolute;opacity:.4}.vs--single.vs--searching .vs__selected{display:none}.vs__search::-ms-clear,.vs__search::-webkit-search-cancel-button,.vs__search::-webkit-search-decoration,.vs__search::-webkit-search-results-button,.vs__search::-webkit-search-results-decoration{display:none}.vs__search,.vs__search:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:1.4;font-size:1em;border:1px solid transparent;border-left:none;outline:none;margin:4px 0 0 0;padding:0 7px;background:none;-webkit-box-shadow:none;box-shadow:none;width:0;max-width:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.vs__search::-webkit-input-placeholder{color:inherit}.vs__search::-moz-placeholder{color:inherit}.vs__search:-ms-input-placeholder{color:inherit}.vs__search::-ms-input-placeholder{color:inherit}.vs__search::placeholder{color:inherit}.vs--unsearchable .vs__search{opacity:1}.vs--unsearchable .vs__search:hover{cursor:pointer}.vs--single.vs--searching:not(.vs--open):not(.vs--loading) .vs__search{opacity:.2}.vs__spinner{-ms-flex-item-align:center;align-self:center;opacity:0;font-size:5px;text-indent:-9999em;overflow:hidden;border-top:.9em solid hsla(0,0%,39.2%,.1);border-right:.9em solid hsla(0,0%,39.2%,.1);border-bottom:.9em solid hsla(0,0%,39.2%,.1);border-left:.9em solid rgba(60,60,60,.45);-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:vSelectSpinner 1.1s linear infinite;animation:vSelectSpinner 1.1s linear infinite;-webkit-transition:opacity .1s;transition:opacity .1s}.vs__spinner,.vs__spinner:after{border-radius:50%;width:5em;height:5em}.vs--loading .vs__spinner{opacity:1}.ngremotemedia-select-folder-container,.ngrm-model-portal+form,.ngrm-model-portal .ngrm-overlay{-webkit-box-sizing:border-box;box-sizing:border-box;font-family:Roboto,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#333}.ngremotemedia-select-folder-container *,.ngremotemedia-select-folder-container :after,.ngremotemedia-select-folder-container :before,.ngrm-model-portal+form *,.ngrm-model-portal+form :after,.ngrm-model-portal+form :before,.ngrm-model-portal .ngrm-overlay *,.ngrm-model-portal .ngrm-overlay :after,.ngrm-model-portal .ngrm-overlay :before{-webkit-box-sizing:inherit;box-sizing:inherit}.ngremotemedia-select-folder-container .btn,.ngrm-model-portal+form .btn,.ngrm-model-portal .ngrm-overlay .btn{border-radius:4px;text-align:center;font-size:14px;line-height:18px;color:#fff;padding:8px 16px;border:1px solid #e4e4e4;background:#fff;color:#333}.ngremotemedia-select-folder-container .btn:active,.ngrm-model-portal+form .btn:active,.ngrm-model-portal .ngrm-overlay .btn:active{background:#d7d7d7}.ngremotemedia-select-folder-container .btn.btn-blue,.ngrm-model-portal+form .btn.btn-blue,.ngrm-model-portal .ngrm-overlay .btn.btn-blue{background:#009ac7;border:0;color:#fff}.ngremotemedia-select-folder-container .btn.btn-blue:active,.ngrm-model-portal+form .btn.btn-blue:active,.ngrm-model-portal .ngrm-overlay .btn.btn-blue:active{background:#007394}.ngremotemedia-select-folder-container .v-select,.ngrm-model-portal+form .v-select,.ngrm-model-portal .ngrm-overlay .v-select{font-size:14px;line-height:16px;background-color:#fff}.ngremotemedia-select-folder-container .v-select .vs__dropdown-toggle,.ngrm-model-portal+form .v-select .vs__dropdown-toggle,.ngrm-model-portal .ngrm-overlay .v-select .vs__dropdown-toggle{border-radius:0;border:1px solid #e4e4e4;padding:3px 5px 6px}.ngremotemedia-select-folder-container .v-select input::-webkit-input-placeholder,.ngrm-model-portal+form .v-select input::-webkit-input-placeholder,.ngrm-model-portal .ngrm-overlay .v-select input::-webkit-input-placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container .v-select input::-moz-placeholder,.ngrm-model-portal+form .v-select input::-moz-placeholder,.ngrm-model-portal .ngrm-overlay .v-select input::-moz-placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container .v-select input:-ms-input-placeholder,.ngrm-model-portal+form .v-select input:-ms-input-placeholder,.ngrm-model-portal .ngrm-overlay .v-select input:-ms-input-placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container .v-select input::-ms-input-placeholder,.ngrm-model-portal+form .v-select input::-ms-input-placeholder,.ngrm-model-portal .ngrm-overlay .v-select input::-ms-input-placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container .v-select input::placeholder,.ngrm-model-portal+form .v-select input::placeholder,.ngrm-model-portal .ngrm-overlay .v-select input::placeholder{color:#333;font-style:italic}.ngremotemedia-select-folder-container ::-webkit-input-placeholder,.ngrm-model-portal+form ::-webkit-input-placeholder,.ngrm-model-portal .ngrm-overlay ::-webkit-input-placeholder{color:#999}.ngremotemedia-select-folder-container :-ms-input-placeholder,.ngrm-model-portal+form :-ms-input-placeholder,.ngrm-model-portal .ngrm-overlay :-ms-input-placeholder{color:#999}.ngremotemedia-select-folder-container ::-moz-placeholder,.ngrm-model-portal+form ::-moz-placeholder,.ngrm-model-portal .ngrm-overlay ::-moz-placeholder{color:#999}.ngremotemedia-select-folder-container ::-ms-input-placeholder,.ngrm-model-portal+form ::-ms-input-placeholder,.ngrm-model-portal .ngrm-overlay ::-ms-input-placeholder{color:#999}.ngremotemedia-select-folder-container ::placeholder,.ngrm-model-portal+form ::placeholder,.ngrm-model-portal .ngrm-overlay ::placeholder{color:#999}.ngremotemedia-container{text-align:start}.ngrm-model-portal .ngrm-overlay .ng-icon{font-size:4.5em;font-family:ngri;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;text-align:center;line-height:80px;display:block;color:#333}.ngrm-model-portal .ngrm-overlay .ng-icon.big{font-size:64px;color:#333}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-warning:before{content:"\E900"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-spinner:before{content:"\E901"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-close:before{content:"\E902"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-cloud:before{content:"\E903"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-video:before{content:"\E904"}.ngrm-model-portal .ngrm-overlay .ng-icon.ng-book:before{content:"\E905"}.ngrm-model-portal .ngrm-overlay .image-meta{overflow:visible}.ngrm-model-portal .ngrm-overlay .image-meta h3{font-weight:700}.ngrm-model-portal .ngrm-overlay .image-meta p{color:#737373}.ngrm-model-portal .ngrm-overlay .image-meta input.media-alttext,.ngrm-model-portal .ngrm-overlay .image-meta input.media-alttext-override,.ngrm-model-portal .ngrm-overlay .image-meta input.media-caption,.ngrm-model-portal .ngrm-overlay .image-meta input.media-caption-override,.ngrm-model-portal .ngrm-overlay .image-meta input.media-css-class,.ngrm-model-portal .ngrm-overlay .image-meta input.media-watermarktext{width:100%;border-radius:0;border:1px solid #e4e4e4;padding:7px 10px 7px 10px;margin-bottom:10px}.ngrm-model-portal .ngrm-overlay .image-meta .image-meta-data{margin-top:20px}.ngrm-model-portal .ngrm-overlay .image-wrap:has(.icon-doc){position:relative;height:200px;max-width:400px;display:block;margin-bottom:4px}.ngrm-model-portal .ngrm-overlay .image-wrap:has(.icon-doc):before{position:absolute;content:""}.ngrm-model-portal .ngrm-overlay .image-wrap:has(.icon-doc):before{background-color:rgba(0,0,0,.7);top:0;bottom:0;left:0;right:0}.ngrm-model-portal .ngrm-overlay .image-wrap .icon-doc{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-size:70px}.ngrm-model-portal .ngrm-overlay .image-wrap img{max-width:100%}.ngrm-model-portal .ngrm-overlay .vue-treeselect{font-size:14px;line-height:16px}.ngrm-model-portal .ngrm-overlay .vue-treeselect .vue-treeselect__control{border-radius:0;border:1px solid #e4e4e4}.ngrm-model-portal .ngrm-overlay .vue-treeselect .vue-treeselect__placeholder{color:#333;font-style:italic}@-webkit-keyframes spinning{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinning{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.ngremotemedia-buttons{margin-top:20px}.ngremotemedia-buttons .ngremotemedia-local-file-container{margin:10px 0 10px 0}.ngremotemedia-buttons .ngremotemedia-local-file.btn.upload-from-disk,.ngremotemedia-buttons input[type=button]{border-radius:4px;text-align:center;font-size:14px!important;line-height:18px;padding:8px 16px;border:1px solid #e4e4e4;background:#f1f4fa;cursor:pointer;color:#333;font-weight:400;font-family:Arial,Helvetica,sans-serif}.ngremotemedia-buttons .ngremotemedia-local-file.btn.upload-from-disk{background:#fff}.o2k7Skin .mceIcon.mce_ngremotemedia img{width:2rem}.ngremotemedia-image .image-wrap .file-placeholder[data-v-cd63af0a]{position:relative;max-width:500px;height:280px;display:block;margin-bottom:4px}.ngremotemedia-image .image-wrap .file-placeholder .icon-doc[data-v-cd63af0a]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-size:40px}.ngremotemedia-image .image-wrap .file-placeholder[data-v-cd63af0a]:before{position:absolute;content:"";background-color:rgba(0,0,0,.7);top:0;bottom:0;left:0;right:0}.mediaFacets[data-v-278bb214]{width:362px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-shadow:inset -1px 0 0 0 #e4e4e4;box-shadow:inset -1px 0 0 0 #e4e4e4}.mediaFacets .body[data-v-278bb214]{-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4,inset 0 1px 0 0 #e4e4e4,inset -1px 0 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4,inset 0 1px 0 0 #e4e4e4,inset -1px 0 0 0 #e4e4e4;background:#fff;padding:30px 15px}.mediaFacets .body .form-field+.form-field[data-v-278bb214]{margin-top:15px}.mediaFacets .body .form-field label[data-v-278bb214],.mediaFacets .body .search-wrapper .search-label[data-v-278bb214]{font-size:12px;font-weight:700;line-height:18px;color:#757575;margin-bottom:3px;display:block}.mediaFacets .body .search-wrapper[data-v-278bb214]{margin:30px 0 0}.mediaFacets .body .search-wrapper .search[data-v-278bb214]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:5px 0}.mediaFacets .body .search-wrapper .search input[data-v-278bb214],.mediaFacets .body .search-wrapper .search ul[data-v-278bb214]{font-size:14px;line-height:16px}.mediaFacets .body .search-wrapper .search ul[data-v-278bb214]{margin:0;padding:5px;list-style:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border:1px solid #e4e4e4;min-width:75px;display:none}.mediaFacets .body .search-wrapper .search ul li[data-v-278bb214]{cursor:auto;margin-right:10px;padding:4px 10px;min-width:45px}.mediaFacets .body .search-wrapper .search ul li[data-v-278bb214]:last-child,.mediaFacets .body .search-wrapper .search ul li[data-v-278bb214]:only-child{margin:0}.mediaFacets .body .search-wrapper .search ul li.active[data-v-278bb214]{background:#009ac7;color:#fff;border-radius:4px;-webkit-box-shadow:inset -1px 0 0 0 #d7d7d7,inset 1px 0 0 0 #d7d7d7,inset 0 1px 0 0 #d7d7d7,inset 0 -1px 0 0 #d7d7d7;box-shadow:inset -1px 0 0 0 #d7d7d7,inset 1px 0 0 0 #d7d7d7,inset 0 1px 0 0 #d7d7d7,inset 0 -1px 0 0 #d7d7d7}.mediaFacets .body .search-wrapper .search input[data-v-278bb214]{border:1px solid #e4e4e4;padding:9px 10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.mediaFacets .ng-spinner[data-v-278bb214]{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.mediaFacets .ng-spinner[data-v-278bb214]:before{display:inline-block;-webkit-animation:spinning 1.5s linear infinite;animation:spinning 1.5s linear infinite}.media-gallery[data-v-5aa52c90]{position:relative;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.media-gallery .items[data-v-5aa52c90]{padding:15px;overflow-y:auto;height:calc(100% - 50px)}.media-gallery .items.loading[data-v-5aa52c90]{opacity:.5}.media-gallery .items .media[data-v-5aa52c90]{width:190px;min-height:182px;max-height:190px;padding:8px;margin:0 15px 15px 0;background-color:#fff;display:inline-block}.media-gallery .items .media .media-container[data-v-5aa52c90]{width:100%}.media-gallery .items .media .img[data-v-5aa52c90]{display:block;margin-bottom:4px;-o-object-fit:cover;object-fit:cover;height:100px;width:100%;overflow:hidden;text-overflow:ellipsis}.media-gallery .items .media .file-placeholder[data-v-5aa52c90]{position:relative;height:95px;display:block;margin-bottom:4px}.media-gallery .items .media .file-placeholder .icon-doc[data-v-5aa52c90]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-size:40px}.media-gallery .items .media .file-placeholder[data-v-5aa52c90]:before{position:absolute;content:"";background-color:rgba(0,0,0,.7);top:0;bottom:0;left:0;right:0}.media-gallery .items .media .filename[data-v-5aa52c90]{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap;width:100%;text-align:center;font-size:16px;line-height:20px;margin-top:4px;margin-bottom:0}.media-gallery .items .media .size-description[data-v-5aa52c90]{font-size:12px;line-height:14px;text-align:center;color:#999}.media-gallery .items .media .size-description .format[data-v-5aa52c90]{text-transform:uppercase}.media-gallery .items .media.selected[data-v-5aa52c90]{border:1px solid #009ac7}.media-gallery .items .media .select-btn[data-v-5aa52c90]{margin-top:8px;padding:3px;width:100%}.media-gallery .folder-empty[data-v-5aa52c90]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.media-gallery .folder-empty span[data-v-5aa52c90]{display:block;text-align:center;font-size:14px;line-height:16px}.media-gallery .folder-empty span.ngrm-icon-folder[data-v-5aa52c90]{color:#999;font-size:33px}.media-gallery .folder-empty span strong[data-v-5aa52c90]{display:block;margin:5px 0;font-size:16px;line-height:19px}.media-gallery .load-more-wrapper[data-v-5aa52c90]{padding:8px 15px;background-color:#fff;text-align:right;-webkit-box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;position:absolute;bottom:0;left:0;right:0}.ngrm-overlay[data-v-03fd1c54]{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.8);z-index:9999}.ngrm-overlay .media-modal[data-v-03fd1c54]{background-color:#f5f5f5;-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,.5);box-shadow:0 5px 15px 0 rgba(0,0,0,.5);margin:32px;height:calc(100vh - 64px)}.ngrm-overlay .media-modal .title[data-v-03fd1c54]{padding:15px;font-size:16px;font-weight:700;line-height:20px;color:#333;background:#fff;text-transform:uppercase;-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4}.ngrm-overlay .media-modal .title .close[data-v-03fd1c54]{float:right;cursor:pointer;padding:2px 10px}.ngrm-overlay .media-modal .body[data-v-03fd1c54]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;position:relative;height:calc(100% - 50px)}.ngrm-overlay .img-placeholder img[data-v-03fd1c54]{height:100%}.ngremotemedia-buttons input[type=button]{margin-bottom:4px;margin-right:4px}.help-block.description{margin-right:6px}.btn,.sidebar-crop .buttons{font-size:14px!important;font-family:Arial,Helvetica,sans-serif}.ngremotemedia-selected-variation .vs__selected-options input[type=search].vs__search,.ngremotemedia-tags .vs__selected-options input[type=search].vs__search{border:none}.ngremotemedia-selected-variation select[hidden=hidden],.ngremotemedia-tags select[hidden=hidden]{display:none}.ngremotemedia-image h3.title{word-break:break-word}.ngremotemedia-image .image-wrap img{max-width:100%}.input-file-name-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-file-name-wrapper .v-select,.input-file-name-wrapper input[type=text]{margin-right:16px}.input-file-name-wrapper .v-select.vs--single.vs--searchable{margin-right:10px}.input-file-name-wrapper .v-select.vs--single.vs--searchable input.vs__search{background:transparent}.input-file-name-wrapper button.btn{margin-left:40%;font-size:14px!important;font-family:Arial}.input-file-name-wrapper .vs__dropdown-toggle{height:37px}.media-gallery .items .media{line-height:normal}.ng-spinner[data-v-751395c8]{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ng-spinner[data-v-751395c8]:before{display:inline-block;-webkit-animation:spinning 1.5s linear infinite;animation:spinning 1.5s linear infinite}.sidebar-crop[data-v-ad171770]{width:264px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-shadow:inset -1px 0 0 0 #e4e4e4;box-shadow:inset -1px 0 0 0 #e4e4e4}.sidebar-crop .buttons[data-v-ad171770]{background:#fff;padding:15px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4;margin-right:1px}.sidebar-crop .buttons button[data-v-ad171770]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.sidebar-crop .buttons button.crop-btn-add[data-v-ad171770]{margin-left:10px}.sidebar-crop .buttons button[data-v-ad171770]:only-child{width:100%}.sidebar-crop-label span[data-v-ad171770]{color:#999;font-size:14px;line-height:18px;display:inline-block;padding:31px 15px 15px;width:100%;-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4}.unselectedVariations[data-v-ad171770]{position:absolute;top:0;left:0;width:264px;height:100%;-webkit-transform:translateX(264px);transform:translateX(264px);background:#fff;-webkit-box-shadow:inset -1px 0 0 0 #e4e4e4;box-shadow:inset -1px 0 0 0 #e4e4e4;z-index:10}.unselectedVariations>div[data-v-ad171770]{padding:15px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;background-color:#fff;-webkit-box-shadow:inset 0 -1px 0 0 #e4e4e4,inset -1px 0 0 0 #e4e4e4;box-shadow:inset 0 -1px 0 0 #e4e4e4,inset -1px 0 0 0 #e4e4e4}.unselectedVariations>div input[data-v-ad171770],.unselectedVariations>div label[data-v-ad171770]{cursor:pointer}.unselectedVariations>div input[data-v-ad171770]{margin-right:11px}.unselectedVariations>div label[data-v-ad171770]{width:100%}.unselectedVariations>div .name[data-v-ad171770]{color:#333;font-size:14px;line-height:18px}.unselectedVariations>div .formatted-size[data-v-ad171770]{color:#999;font-size:12px;line-height:18px;display:block}.unselectedVariations>div.disabled[data-v-ad171770]{-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:#f5f5f5;cursor:auto;color:#ddd;padding:15px 15px 5px}.unselectedVariations>div.disabled input[data-v-ad171770],.unselectedVariations>div.disabled label[data-v-ad171770],.unselectedVariations>div.disabled span[data-v-ad171770]{cursor:auto}.unselectedVariations>div.disabled label[data-v-ad171770]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:auto;color:#999}.unselectedVariations .legend-not-selectable[data-v-ad171770]{width:100%;font-size:.75rem;color:#a41034;display:inline-block;text-align:right}.selectedVariations ul[data-v-ad171770]{list-style:none;padding:0;margin:0}.selectedVariations ul li[data-v-ad171770]{padding:15px 0 15px 15px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-shadow:inset -1px 0 0 0 #e4e4e4,inset 0 -1px 0 0 #e4e4e4;box-shadow:inset -1px 0 0 0 #e4e4e4,inset 0 -1px 0 0 #e4e4e4;background-color:#fff;cursor:pointer}.selectedVariations ul li.disabled[data-v-ad171770]{background-color:#f5f5f5;cursor:auto}.selectedVariations ul li.selected.set[data-v-ad171770]{color:#90ee90}.selectedVariations ul li span[data-v-ad171770]{display:block;color:#333;font-size:14px;line-height:18px}.selectedVariations ul li a[data-v-ad171770]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.selectedVariations ul li a span[data-v-ad171770]{padding:5px}.selectedVariations ul li a .ngrm-icon-trash[data-v-ad171770]{color:#009ac7;padding:10px}.selectedVariations ul li .formatted-size[data-v-ad171770]{color:#999;font-size:12px;line-height:18px}.selectedVariations ul li .circle-orange[data-v-ad171770]{width:8px;height:8px;background-color:orange;border-radius:50%}.selectedVariations .set .circle-orange[data-v-ad171770]{display:none}.crop .cropper[data-v-5f73791e]{position:relative;margin:0 auto}.crop .cropper button[data-v-5f73791e]{margin-left:8px}.crop .cropper .buttons[data-v-5f73791e]{position:absolute}.crop .preview[data-v-5f73791e]{width:100%;height:500px;overflow:hidden}.crop-container[data-v-45497070]{overflow-y:auto;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:30px 30px 80px}.crop-container[data-v-45497070]:empty{display:none}.img-placeholder[data-v-45497070]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding:60px 60px 110px}.img-placeholder img[data-v-45497070]{max-width:100%;height:auto;margin:0 auto;display:block}.action-strip[data-v-45497070]{padding:8px 15px;background-color:#fff;text-align:right;-webkit-box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;position:absolute;bottom:0;left:264px;right:0}.action-strip button[data-v-45497070]{margin-left:10px}.action-strip .ngrm-icon-floppy[data-v-45497070]{margin-right:5px}.folder-gallery[data-v-c53732c8]{position:relative;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;height:calc(100% - 50px);overflow-y:auto}.folder-gallery .items[data-v-c53732c8]{padding:15px}.folder-gallery .items.loading[data-v-c53732c8]{opacity:.5}.folder-gallery .items .breadcrumbs[data-v-c53732c8]{background-color:#fff;width:100%;margin-bottom:20px;padding:10px}.folder-gallery .items .breadcrumbs a[data-v-c53732c8]{color:#009ac7}.folder-gallery .items .info[data-v-c53732c8]{font-style:italic;margin-bottom:10px;margin-left:10px}.folder-gallery .items .media[data-v-c53732c8]{width:177px;min-height:182px;max-height:190px;padding:8px;margin:0 15px 15px 0;background-color:#fff;display:inline-block}.folder-gallery .items .media .media-container[data-v-c53732c8]{width:100%}.folder-gallery .items .media .img[data-v-c53732c8]{display:block;margin-bottom:4px;-o-object-fit:cover;object-fit:cover;height:92px;width:100%;overflow:hidden;text-overflow:ellipsis}.folder-gallery .items .media .file-placeholder[data-v-c53732c8]{position:relative;height:92px;display:block;margin-bottom:4px}.folder-gallery .items .media .file-placeholder .icon-doc[data-v-c53732c8]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#fff;font-size:40px}.folder-gallery .items .media .file-placeholder[data-v-c53732c8]:before{position:absolute;content:"";background-color:rgba(0,0,0,.7);top:0;bottom:0;left:0;right:0}.folder-gallery .items .media.new-folder input[data-v-c53732c8]{width:100%;margin-top:5px}.folder-gallery .items .media.new-folder .select-btn[data-v-c53732c8]{background:#2e8b57}.folder-gallery .items .media.new-folder .file-placeholder[data-v-c53732c8]:before{background-color:rgba(0,0,0,.2);top:0;bottom:0;left:0;right:0}.folder-gallery .items .media .filename[data-v-c53732c8]{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap;width:100%;text-align:center;font-size:16px;line-height:20px;margin-top:4px;margin-bottom:0}.folder-gallery .items .media .size-description[data-v-c53732c8]{font-size:12px;line-height:14px;text-align:center;color:#999}.folder-gallery .items .media .size-description .format[data-v-c53732c8]{text-transform:uppercase}.folder-gallery .items .media.selected[data-v-c53732c8]{border:1px solid #009ac7}.folder-gallery .items .media .select-btn[data-v-c53732c8]{margin-top:10px;padding:3px;width:100%}.folder-gallery .folder-empty[data-v-c53732c8]{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.folder-gallery .folder-empty span[data-v-c53732c8]{display:block;text-align:center;font-size:14px;line-height:16px}.folder-gallery .folder-empty span.ngrm-icon-folder[data-v-c53732c8]{color:#999;font-size:33px}.folder-gallery .folder-empty span strong[data-v-c53732c8]{display:block;margin:5px 0;font-size:16px;line-height:19px}.folder-gallery .load-more-wrapper[data-v-c53732c8]{padding:8px 15px;background-color:#fff;text-align:right;-webkit-box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;position:absolute;bottom:0;left:0;right:0}.ng-spinner[data-v-c53732c8]{position:fixed;vertical-align:center;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ng-spinner[data-v-c53732c8]:before{display:inline-block;-webkit-animation:spinning 1.5s linear infinite;animation:spinning 1.5s linear infinite}.loading[data-v-97dbe76a]{opacity:.5}.input-file-name-wrapper[data-v-97dbe76a]{padding:8px 15px;background-color:#fff;-webkit-box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;box-shadow:inset 1px 0 0 0 #e4e4e4,0 -1px 0 0 #e4e4e4;position:absolute;bottom:0;left:0;right:0}.input-file-name-wrapper input[type=text][data-v-97dbe76a]{width:40%;min-width:300px;border:1px solid #e4e4e4;padding:10px 10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin-right:10px}.input-file-name-wrapper input[type=text].error[data-v-97dbe76a]{border:1px solid red}.input-file-name-wrapper .v-select[data-v-97dbe76a]{width:15%;min-width:150px}.input-file-name-wrapper button[data-v-97dbe76a]{float:right}.input-file-name-wrapper div.error[data-v-97dbe76a]{color:red;margin-bottom:5px}.ng-spinner[data-v-97dbe76a]{position:fixed;vertical-align:middle;margin-top:15%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ng-spinner[data-v-97dbe76a]:before{display:inline-block;-webkit-animation:spinning 1.5s linear infinite;animation:spinning 1.5s linear infinite} \ No newline at end of file diff --git a/bundle/Resources/public/js/ckeditor-plugin/constants.js b/bundle/Resources/public/js/ckeditor-plugin/constants.js index 8f825a89..f505d2b4 100644 --- a/bundle/Resources/public/js/ckeditor-plugin/constants.js +++ b/bundle/Resources/public/js/ckeditor-plugin/constants.js @@ -126,6 +126,10 @@ export const defaultValue = { 'preview_alternate_text_info': 'preview_alternate_text_info', 'preview_caption': 'preview_caption', 'preview_caption_info': 'preview_caption_info', + 'preview_alternate_text_override': 'preview_alternate_text_override', + 'preview_alternate_text_override_info': 'preview_alternate_text_override_info', + 'preview_caption_override': 'preview_caption_override', + 'preview_caption_override_info': 'preview_caption_override_info', 'preview_tags': 'preview_tags', 'preview_tags_info': 'preview_tags_info', 'preview_watermark_text': 'preview_watermark_text', @@ -150,6 +154,8 @@ export const defaultValue = { type: 'type', altText: 'altText', caption: 'caption', + altTextOverride: 'altTextOverride', + captionOverride: 'captionOverride', tags: 'tags[]', cropSettings: 'cropSettings', source: 'source', @@ -178,6 +184,8 @@ export const defaultValue = { alternateText: '', caption: '', watermarkText: '', + altTextOverride: '', + captionOverride: '', tags: [], size: '', variations: {}, diff --git a/bundle/Resources/public/js/remotemedia.js b/bundle/Resources/public/js/remotemedia.js index 83cbfcdf..fde5f029 100644 --- a/bundle/Resources/public/js/remotemedia.js +++ b/bundle/Resources/public/js/remotemedia.js @@ -1,2 +1,2 @@ -(function(e){function t(t){for(var i,o,l=t[0],r=t[1],c=t[2],f=0,u=[];f dispatchChangeEvent(this.config.inputFields.altText)",arg:"500ms"}],staticClass:"media-alttext data",attrs:{type:"text",name:this.config.inputFields.altText},domProps:{value:t.selectedImage.alternateText},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"alternateText",e.target.value)}}})]),i("div",{staticClass:"ngremotemedia-caption"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_caption)+"\n "),i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_caption_info}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.caption,expression:"selectedImage.caption"},{name:"debounce",rawName:"v-debounce:500ms",value:function(){return t.dispatchChangeEvent(e.config.inputFields.caption)},expression:"() => dispatchChangeEvent(this.config.inputFields.caption)",arg:"500ms"}],staticClass:"media-caption data",attrs:{type:"text",name:this.config.inputFields.caption},domProps:{value:t.selectedImage.caption},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"caption",e.target.value)}}})]),i("div",{staticClass:"ngremotemedia-tags"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_tags)+"\n "),i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_tags_info}})]),i("v-select",{attrs:{options:t.config.allowedTags.length>0?t.config.allowedTags:t.allTags,multiple:"",taggable:0===t.config.allowedTags.length},on:{input:t.handleTagsInput},model:{value:t.selectedImage.tags,callback:function(e){t.$set(t.selectedImage,"tags",e)},expression:"selectedImage.tags"}}),i("select",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.tags,expression:"selectedImage.tags"}],staticClass:"ngremotemedia-newtags",attrs:{hidden:"",name:this.config.inputFields.tags,multiple:"multiple"},on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));t.$set(t.selectedImage,"tags",e.target.multiple?a:a[0])}}},t._l(t.allTags,(function(e){return i("option",{key:e},[t._v(t._s(e))])})),0)],1),i("div",{staticClass:"ngremotemedia-watermark-text"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_watermark_text)+"\n "),i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_watermark_text_info}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.watermarkText,expression:"selectedImage.watermarkText"},{name:"debounce",rawName:"v-debounce:500ms",value:function(){return t.dispatchChangeEvent(e.config.inputFields.watermarkText)},expression:"() => dispatchChangeEvent(this.config.inputFields.watermarkText)",arg:"500ms"}],staticClass:"media-watermarktext data",attrs:{type:"text",name:this.config.inputFields.watermarkText},domProps:{value:t.selectedImage.watermarkText},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"watermarkText",e.target.value)}}})]),this.isEmbed?i("div",{staticClass:"ngremotemedia-css-class"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_css_class)+"\n "),this.config.translations.preview_css_class_info?i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_css_class_info}}):t._e()]),i("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.cssClass,expression:"selectedImage.cssClass"},{name:"debounce",rawName:"v-debounce:500ms",value:function(){return t.dispatchChangeEvent(e.config.inputFields.cssClass)},expression:"() => dispatchChangeEvent(this.config.inputFields.cssClass)",arg:"500ms"}],staticClass:"media-css-class data",attrs:{type:"text",name:this.config.inputFields.cssClass},domProps:{value:t.selectedImage.cssClass},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"cssClass",e.target.value)}}})]):t._e(),this.isEmbed&&this.hasVariations?i("div",{staticClass:"ngremotemedia-selected-variation"},[i("input",{attrs:{type:"hidden",name:this.config.inputFields.selectedVariation},domProps:{value:t.selectedImage.selectedVariation}}),i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_selected_variation)+"\n "),this.config.translations.preview_selected_variation_info?i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_selected_variation_info}}):t._e()]),i("v-select",{attrs:{options:this.variationOptions},on:{input:function(){return t.dispatchChangeEvent(e.config.inputFields.selectedVariation)}},model:{value:t.selectedImage.selectedVariation,callback:function(e){t.$set(t.selectedImage,"selectedVariation",e)},expression:"selectedImage.selectedVariation"}})],1):t._e()])])]):i("div",[i("i",[t._v(t._s(this.config.translations.interactions_no_media_selected))])])}),p=[],h=(a("5df3"),a("4f7f"),a("75fc")),g=(a("28a5"),a("01c8")),m=function(e){var t=[];for(var a in e)t.push(encodeURIComponent(a)+"="+encodeURIComponent(e[a]));return t.join("&")},v=function(e){return e[0].toUpperCase()+e.slice(1)},b=function(e){var t=e.split("-"),a=Object(g["a"])(t),i=a[0],s=a.slice(1);return[i].concat(Object(h["a"])(s.map(v))).join("")},_=function(e,t){var a=Math.pow(10,t);return parseFloat(Math.round(e*a)/a).toFixed(t)},w={B:"KB",KB:"MB",MB:"GB",GB:"TB"},y=function e(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"B",i=w[a];return!i||t<1024?"".concat(_(t,2)," ").concat(a):e(t/1024,i)},C=a("4a7a"),x=a.n(C),F={name:"Preview",props:["config","fieldId","selectedImage"],data:function(){return{allTags:[]}},components:{"v-select":x.a},computed:{nonImagePreviewClass:function(){return"video"===this.selectedImage.type?"ng-video":"ng-book"},formattedSize:function(){return y(this.selectedImage.size)},isEmbed:function(){return"embed"===this.config.mode},hasVariations:function(){return this.config.allVariations.length>0},variationOptions:function(){return this.config.allVariations.map((function(e){return{label:e,value:e}}))}},methods:{handleTagsInput:function(e){this.allTags=Object(h["a"])(new Set([].concat(Object(h["a"])(this.allTags),Object(h["a"])(e)))),this.dispatchChangeEvent(this.config.inputFields.tags)},dispatchChangeEvent:function(e){this.$emit("preview-change",e)}},mounted:function(){this.allTags=Object(h["a"])(this.selectedImage.tags)},watch:{selectedImage:function(){this.allTags=Object(h["a"])(this.selectedImage.tags)}}},O=F,I=(a("d51a"),a("2877")),V=Object(I["a"])(O,u,p,!1,null,"68b77256",null),k=V.exports,j=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("modal",{attrs:{title:this.config.translations.browse_title},on:{close:function(t){return e.$emit("close")}}},[a("media-facets",{attrs:{config:e.config,tags:e.tags,types:e.types,visibilities:e.visibilities,facets:e.facets,"facets-loading":e.facetsLoading},on:{change:e.handleFacetsChange}}),a("media-gallery",{attrs:{translations:e.config.translations,media:e.media,canLoadMore:e.canLoadMore,selectedMediaId:e.selectedMediaId,loading:e.loading},on:{loadMore:e.handleLoadMore,"media-selected":function(t){return e.$emit("media-selected",t)}}}),e.loading?a("i",{staticClass:"ng-icon ng-spinner"}):e._e()],1)},S=[],M=a("768b"),T=(a("ffc1"),function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"mediaFacets"},[a("div",{staticClass:"body"},[e.types.length>1?a("div",{staticClass:"form-field"},[a("label",{attrs:{for:"type"}},[e._v(e._s(this.config.translations.browse_select_type))]),a("v-select",{attrs:{options:e.types,label:"name",reduce:function(e){return e.id},placeholder:e.facetsLoading?this.config.translations.browse_loading_types:this.config.translations.browse_all_types},on:{input:e.handleTypeChange},model:{value:e.selectedType,callback:function(t){e.selectedType=t},expression:"selectedType"}})],1):e._e(),e.folders&&!this.config.folder?a("div",{staticClass:"form-field"},[a("label",{attrs:{for:"folder"}},[e._v(e._s(this.config.translations.browse_select_folder))]),a("treeselect",{attrs:{multiple:!1,options:e.folders,"load-options":e.loadSubFolders,value:this.config.parentFolder?this.config.parentFolder.id:"",placeholder:e.facetsLoading?this.config.translations.browse_loading_folders:this.config.translations.browse_all_folders,disabled:e.facetsLoading,clearable:!0,beforeClearAll:e.clearFolderField,defaultExpandLevel:1},on:{input:e.handleFolderChange},model:{value:e.selectedFolder,callback:function(t){e.selectedFolder=t},expression:"selectedFolder"}})],1):e._e(),e.tags.length>1?a("div",{staticClass:"form-field"},[a("label",{attrs:{for:"tag"}},[e._v(e._s(this.config.translations.browse_select_tag))]),a("v-select",{attrs:{options:e.tags,label:"name",reduce:function(e){return e.id},placeholder:e.facetsLoading?this.config.translations.browse_loading_tags:this.config.translations.browse_all_tags,disabled:e.facetsLoading},on:{input:e.handleTagChange},model:{value:e.tag,callback:function(t){e.tag=t},expression:"tag"}})],1):e._e(),e.visibilities.length>1?a("div",{staticClass:"form-field"},[a("label",{attrs:{for:"visibilities"}},[e._v(e._s(this.config.translations.browse_select_visibility))]),a("v-select",{attrs:{options:e.visibilities,label:"name",reduce:function(e){return e.id},placeholder:e.facetsLoading?this.config.translations.browse_loading_visibilities:this.config.translations.browse_all_visibilities,disabled:e.facetsLoading},on:{input:e.handleVisibilityChange},model:{value:e.visibility,callback:function(t){e.visibility=t},expression:"visibility"}})],1):e._e(),a("div",{staticClass:"search-wrapper"},[a("span",{staticClass:"search-label"},[e._v(e._s(this.config.translations.search))]),a("div",{staticClass:"search"},[a("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],attrs:{type:"text",placeholder:this.config.translations.search_placeholder},domProps:{value:e.query},on:{keyup:e.handleQueryChange,keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),null(t))},input:function(t){t.target.composing||(e.query=t.target.value)}}})])])])])}),E=[],$="all",P="image",z="video",R="raw",L="(all)",A="(root)",U="all",D=a("ca17"),N=a.n(D),B=(a("542c"),{name:"MediaFacets",props:["config","tags","types","visibilities","facets","facetsLoading"],data:function(){return{TYPE_ALL:$,TYPE_IMAGE:P,TYPE_VIDEO:z,TYPE_RAW:R,FOLDER_ALL:L,FOLDER_ROOT:A,TAG_ALL:U,folders:[{id:this.config.parentFolder?this.config.parentFolder.id:A,label:this.config.parentFolder?this.config.parentFolder.label:A,children:null}],selectedFolder:this.facets.folder,selectedType:this.facets.type,query:this.facets.query,tag:this.facets.tag,visibility:this.facets.visibility}},methods:{clearFolderField:function(){return!this.config.parentFolder||(this.selectedFolder=this.config.parentFolder.id,!1)},handleTypeChange:function(e){this.$emit("change",{type:e})},handleFolderChange:function(e){this.selectedFolder=e,"undefined"!==typeof e&&e||(this.selectedFolder=this.config.parentFolder?this.config.parentFolder.id:e),this.$emit("change",{folder:this.selectedFolder})},handleQueryChange:function(){this.$emit("change",{query:this.query})},handleTagChange:function(){this.$emit("change",{tag:this.tag})},handleVisibilityChange:function(){this.$emit("change",{visibility:this.visibility})},loadSubFolders:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(t){var a,i,s;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return a=t.parentNode,i={folder:"(root)"===a.id?"":a.id},e.next=4,fetch(this.config.paths.load_folders+"?"+m(i));case 4:return s=e.sent,e.next=7,s.json();case 7:a.children=e.sent,t.callback();case 9:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}()},components:{"v-select":x.a,treeselect:N.a}}),q=B,G=(a("c345"),Object(I["a"])(q,T,E,!1,null,"278bb214",null)),W=G.exports,Y=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"media-gallery"},[a("div",{class:e.loading?"items loading":"items"},[e.media.length?e._e():a("div",{staticClass:"folder-empty"},[a("span",{staticClass:"ngrm-icon-folder"}),a("span",[a("strong",[e._v(e._s(this.translations.media_gallery_empty_folder))]),e._v(e._s(this.translations.media_gallery_upload_media))])]),e._l(e.media,(function(t){return a("div",{key:t.id,staticClass:"media",class:{selected:t.remoteId===e.selectedMediaId}},["image"===t.type||"video"===t.type&&""!==t.browseUrl?a("div",{staticClass:"media-container"},[a("img",{staticClass:"img",attrs:{src:t.browseUrl,alt:t.filename}}),a("Label",{staticClass:"filename"},[e._v(e._s(t.filename))]),a("div",{staticClass:"size-description"},["public"===t.visibility?a("i",{staticClass:"fa fa-solid fa-globe"},[e._v("  ")]):e._e(),"private"===t.visibility?a("i",{staticClass:"fa fa-eye-slash"},[e._v("  ")]):e._e(),"protected"===t.visibility?a("i",{staticClass:"fa fa-lock"},[e._v("  ")]):e._e(),a("span",{staticClass:"format"},[e._v(e._s(t.format))]),e._v(" - "+e._s(t.width)+" x "+e._s(t.height)+" - "+e._s(e.showFilesize(t))+"\n ")])],1):a("div",{staticClass:"media-container"},[a("span",{staticClass:"file-placeholder"},[a("span",{staticClass:"icon-doc"},["pdf"===t.format?a("i",{staticClass:"fa fa-file-pdf-o"}):"zip"===t.format||"rar"===t.format?a("i",{staticClass:"fa fa-file-archive-o"}):"ppt"===t.format||"pptx"===t.format?a("i",{staticClass:"fa fa-file-powerpoint-o"}):"doc"===t.format||"docx"===t.format?a("i",{staticClass:"fa fa-file-word-o"}):"xls"===t.format||"xlsx"===t.format?a("i",{staticClass:"fa fa-file-excel-o"}):"aac"===t.format||"aiff"===t.format||"amr"===t.format||"flac"===t.format||"m4a"===t.format||"mp3"===t.format||"ogg"===t.format||"opus"===t.format||"wav"===t.format?a("i",{staticClass:"fa fa-file-audio-o"}):"txt"===t.format?a("i",{staticClass:"fa fa-lg fa-file-text"}):a("i",{staticClass:"fa fa-file"})])]),a("Label",{staticClass:"filename"},[e._v(e._s(t.filename))]),a("div",{staticClass:"size-description"},["public"===t.visibility?a("i",{staticClass:"fa fa-solid fa-globe"},[e._v("  ")]):e._e(),"private"===t.visibility?a("i",{staticClass:"fa fa-eye-slash"},[e._v("  ")]):e._e(),"protected"===t.visibility?a("i",{staticClass:"fa fa-lock"},[e._v("  ")]):e._e(),a("span",{staticClass:"format"},[e._v(e._s(t.format))]),e._v(" - "+e._s(e.showFilesize(t))+"\n ")])],1),a("button",{staticClass:"btn btn-blue select-btn",attrs:{type:"button"},on:{click:function(a){return e.$emit("media-selected",t)}}},[e._v(e._s(e._self.translations.media_gallery_select))])])}))],2),e.canLoadMore?a("div",{staticClass:"load-more-wrapper"},[a("button",{staticClass:"btn btn-blue",attrs:{type:"button"},on:{click:function(t){return e.$emit("loadMore")}}},[e._v(e._s(this.translations.media_gallery_load_more))])]):e._e()])},J=[],K=a("94df"),Q=a.n(K),H={name:"MediaGallery",props:["translations","media","canLoadMore","onLoadMore","selectedMediaId","loading"],methods:{showFilesize:function(e){return Q()(e.size)}}},X=H,Z=(a("bdf2"),Object(I["a"])(X,Y,J,!1,null,"5aa52c90",null)),ee=Z.exports,te=a("b012"),ae=a.n(te),ie=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"ngrm-overlay"},[a("div",{staticClass:"media-modal"},[a("div",{staticClass:"title"},[e._v("\n "+e._s(e.title)+"\n "),a("span",{staticClass:"close",on:{click:e.close}},[a("span",{staticClass:"ngrm-icon-cancel"})])]),a("div",{staticClass:"body"},[e._t("default")],2)])])},se=[],ne={name:"Modal",props:["title"],methods:{close:function(){this.$emit("close")}}},oe=ne,le=(a("7397"),a("a301"),Object(I["a"])(oe,ie,se,!1,null,"03fd1c54",null)),re=le.exports;function ce(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function de(e){for(var t=1;t0&&void 0!==p[0]?p[0]:{patch:!1},a=t.patch,this.loading=!0,this.abortController&&this.abortController.abort(),this.abortController=new AbortController,i={limit:fe,offset:a?this.media.length:0},this.facets.query&&(i["query"]=this.facets.query),this.config.allowedTypes.length>0&&(i["type"]=this.config.allowedTypes),this.facets.type&&(i["type"]=this.facets.type),this.facets.folder&&(i["folder"]=this.facets.folder===A?"":this.facets.folder),this.config.allowedTags.length>0&&(i["tag"]=this.config.allowedTags),this.facets.tag&&(i["tag"]=this.facets.tag),this.config.allowedVisibilities.length>0&&(i["visibility"]=this.config.allowedVisibilities),this.facets.visibility&&(i["visibility"]=this.facets.visibility),a&&this.nextCursor&&(i["next_cursor"]=this.nextCursor),s="",n=0,o=Object.entries(i);n-1:e.newSelection},on:{change:function(a){var i=e.newSelection,s=a.target,n=!!s.checked;if(Array.isArray(i)){var o=t,l=e._i(i,o);s.checked?l<0&&(e.newSelection=i.concat([o])):l>-1&&(e.newSelection=i.slice(0,l).concat(i.slice(l+1)))}else e.newSelection=n}}}),a("label",{attrs:{for:t}},[a("span",{staticClass:"name"},[e._v(e._s(t))]),a("span",{staticClass:"formatted-size"},[e._v(e._s(e.formattedSize(t)))])]),e.isVariationSelectable(t)?e._e():a("div",{staticClass:"legend-not-selectable"},[a("span",[e._v(e._s(e._self.translations.crop_media_too_small))])])])})),0),a("div",{staticClass:"selectedVariations"},[a("ul",e._l(e.selectedVariations,(function(t){return a("li",{key:t,class:{set:!!e.allVariationValues[t],selected:e.selectedVariation===t,disabled:!e.isVariationSelectable(t)},on:{click:function(a){return e.handleVariationClicked(t)}}},[a("div",[a("span",{staticClass:"name"},[e._v(e._s(t))]),a("span",{staticClass:"formatted-size"},[e._v(e._s(e.formattedSize(t)))])]),e.addingVariations?e._e():a("a",[a("span",{staticClass:"circle-orange"}),a("span",{staticClass:"ngrm-icon-trash",on:{click:function(a){return e.removeItem(t)}}})])])})),0)])])},_e=[],we=(a("7f7f"),{name:"CropSizes",props:["translations","availableVariations","allVariationValues","imageSize","selectedVariation"],data:function(){return{newSelection:[],addingVariations:!1}},computed:{unselectedVariations:function(){var e=Object.keys(this.availableVariations),t=Object.keys(this.allVariationValues);return e.difference(t)},selectedVariations:function(){return Object.getOwnPropertyNames(this.allVariationValues)}},methods:{handleAddCropSize:function(){this.addingVariations=!0},handleCancel:function(){this.addingVariations=!1,this.newSelection=[]},handleAdd:function(){this.$emit("addedVariations",this.newSelection),this.newSelection=[],this.addingVariations=!1},removeItem:function(e){this.$emit("removedVariation",e)},formattedSize:function(e){return"".concat(this.availableVariations[e][0]," x ").concat(this.availableVariations[e][1])},isVariationSelectable:function(e){var t=Object(M["a"])(this.availableVariations[e],2),a=t[0],i=t[1];return this.imageSize.width>=a&&this.imageSize.height>=i},handleVariationClicked:function(e){this.isVariationSelectable(e)&&this.$emit("selected",e)}}}),ye=we,Ce=(a("bdd7"),Object(I["a"])(ye,be,_e,!1,null,"ad171770",null)),xe=Ce.exports,Fe=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"crop"},[a("div",{ref:"cropper",staticClass:"cropper",style:e.cropperStyle},[a("img",{ref:"image",attrs:{src:e.src}}),a("div",{ref:"buttons",staticClass:"buttons",style:e.applyButtonStyle},[a("button",{staticClass:"btn btn-blue",attrs:{type:"button"},on:{click:e.handleReset}},[a("span",{staticClass:"ngrm-icon-ccw"}),a("span",[e._v(e._s(this.translations.crop_reset))])]),a("button",{staticClass:"btn btn-blue",attrs:{type:"button"},on:{click:e.handleApply}},[a("span",{staticClass:"ngrm-icon-ok"}),a("span",[e._v(e._s(this.translations.crop_apply))])])])]),a("div",[a("h4",[e._v(e._s(this.translations.crop_preview))]),a("div",{ref:"preview",staticClass:"preview"})])])},Oe=[],Ie=a("5435"),Ve={name:"Crop",props:["translations","value","variation","src","imageSize"],mounted:function(){this.setCropper()},beforeDestroy:function(){this.destroyCropper()},data:function(){return{crop:{},cropper:null}},methods:{setCropper:function(){var e,t=this.value||{},a=t.x,i=t.y,s=t.w,n=t.h,o={x:a,y:i,width:s,height:n},l=Object(M["a"])(this.variation,2),r=l[0],c=l[1],d=r>0&&c>0?r/c:void 0;this.destroyCropper();this.$refs.cropper.clientWidth,this.imageSize.width;this.cropper=new Ie["a"](this.$refs.image,(e={viewMode:2,dragMode:"none",autoCrop:!0,data:o,aspectRatio:d,guides:!0,movable:!1,rotatable:!1},Object(f["a"])(e,"guides",!1),Object(f["a"])(e,"center",!1),Object(f["a"])(e,"zoomable",!1),Object(f["a"])(e,"scalable",!0),Object(f["a"])(e,"minCropBoxWidth",50),Object(f["a"])(e,"minCropBoxHeight",50),Object(f["a"])(e,"crop",this.handleCrop),Object(f["a"])(e,"preview",this.$refs.preview),e)),this.cropper.setData(o)},handleCrop:function(e){this.crop=this.cropper.getData(!0)},destroyCropper:function(){this.cropper&&this.cropper.destroy()},handleReset:function(){this.cropper.reset()},handleApply:function(){var e=this.cropper.getData(!0),t=e.x,a=e.y,i=e.width,s=e.height;this.$emit("change",{x:t,y:a,w:i,h:s})}},computed:{applyButtonStyle:function(){var e=this.crop,t=e.x,a=e.y,i=e.width,s=e.height,n=this.$refs.buttons?this.$refs.buttons.clientWidth:0,o=this.$refs.cropper?this.$refs.cropper.clientWidth/this.imageSize.width:1;return{top:"".concat((a+s)*o+10,"px"),left:"".concat((t+i)*o-n-1,"px")}},cropperStyle:function(){var e=this.imageSize.height/this.imageSize.width*100;return{"padding-bottom":"".concat(e,"%"),height:"0px",width:"100%"}}}},ke=Ve,je=(a("c66d"),Object(I["a"])(ke,Fe,Oe,!1,null,"5f73791e",null)),Se=je.exports,Me=function(e){return function(t){return Object.keys(t).reduce((function(a,i){return e(t[i],i)&&(a[i]=t[i]),a}),{})}},Te=function(e){return function(t){return!e(t)}},Ee=function(e){return function(t){return e===t}},$e=function(e){return!!e},Pe=Te(Ee(void 0));function ze(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function Re(e){for(var t=1;t1?a("v-select",{attrs:{options:e.visibilities,label:"name",reduce:function(e){return e.id},clearable:!1},model:{value:e.visibility,callback:function(t){e.visibility=t},expression:"visibility"}}):e._e(),a("input",{directives:[{name:"model",rawName:"v-model",value:e.overwrite,expression:"overwrite"}],attrs:{type:"checkbox",id:"ngrm-upload-overwrite"},domProps:{checked:Array.isArray(e.overwrite)?e._i(e.overwrite,null)>-1:e.overwrite},on:{change:function(t){var a=e.overwrite,i=t.target,s=!!i.checked;if(Array.isArray(a)){var n=null,o=e._i(a,n);i.checked?o<0&&(e.overwrite=a.concat([n])):o>-1&&(e.overwrite=a.slice(0,o).concat(a.slice(o+1)))}else e.overwrite=s}}}),a("label",{attrs:{for:"ngrm-upload-overwrite"}},[e._v(e._s(this.config.translations.upload_checkbox_overwrite))]),a("button",{staticClass:"btn btn-blue",attrs:{type:"button",disabled:""===e.filename||""===e.visibility},on:{click:e.upload}},[e._v("\n "+e._s(this.config.translations.upload_button_upload)+"\n ")])],1)],1),e.loading?a("i",{staticClass:"ng-icon ng-spinner"}):e._e()])},Be=[],qe=(a("a481"),function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"folder-gallery"},[a("div",{class:e.loading?"items loading":"items"},[a("div",{staticClass:"breadcrumbs"},[a("span",[e._v(e._s(this.config.translations.upload_breadcrumbs_info)+" ")]),e._l(e.breadcrumbs,(function(t,i){return a("span",{key:i},[0!==i?a("span",[e._v(" / ")]):e._e(),i!==e.breadcrumbs.length-1?a("a",{attrs:{href:"javascript:void(0);"},on:{click:function(a){return e.openFolder(t.id)}}},[e._v("\n "+e._s(t.label)+"\n ")]):a("span",[e._v(e._s(t.label))])])}))],2),e.folders.length>0||e.allowCreate?a("div",{staticClass:"info"},[a("i",{staticClass:"fa fa-info-circle"}),e._v("\n "+e._s(this.config.translations.upload_info_text)+"\n ")]):e._e(),e._l(e.folders,(function(t){return a("div",{key:t.id,staticClass:"media",class:{selected:t.id===e._self.folder}},[a("div",{staticClass:"media-container",on:{dblclick:function(a){return e.openFolder(t.id)}}},[e._m(0,!0),a("Label",{staticClass:"filename"},[e._v(e._s(t.label))])],1),a("button",{staticClass:"btn btn-blue select-btn",attrs:{type:"button"},on:{click:function(a){return e.$emit("select",t.id)}}},[e._v("\n "+e._s(e._self.config.translations.upload_button_select)+"\n ")])])})),e.allowCreate?a("div",{staticClass:"media new-folder"},[a("div",{staticClass:"media-container"},[e._m(1),a("input",{directives:[{name:"model",rawName:"v-model",value:e.newFolder,expression:"newFolder"}],attrs:{type:"text",placeholder:this.config.translations.upload_placeholder_new_folder},domProps:{value:e.newFolder},on:{input:function(t){t.target.composing||(e.newFolder=t.target.value)}}})]),a("button",{staticClass:"btn btn-blue select-btn",attrs:{type:"button",disabled:null===e.newFolder},on:{click:e.createNewFolder}},[e._v("\n "+e._s(this.config.translations.upload_button_create)+"\n ")])]):e._e()],2),e.loading?a("i",{staticClass:"ng-icon ng-spinner"}):e._e()])}),Ge=[function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("span",{staticClass:"file-placeholder"},[a("span",{staticClass:"icon-doc"},[a("i",{staticClass:"fa fa-folder"})])])},function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("span",{staticClass:"file-placeholder"},[a("span",{staticClass:"icon-doc"},[a("i",{staticClass:"fa fa-folder"})])])}],We=a("bc3a"),Ye=a.n(We),Je={name:"SelectFolder",props:["config","selectedFolder"],data:function(){return{folders:[],newFolder:null,breadcrumbs:[],loading:!1,allowCreate:!0,folder:this.selectedFolder}},methods:{openFolder:function(e){this.folder=e,this.$emit("change",this.folder),this.loadSubFolders(e)},loadSubFolders:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(t){var a,i,s;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.loading=!0,a=this.config.paths.load_folders,t&&(i={folder:t===A?"":t},a+="?"+m(i)),e.next=5,fetch(a);case 5:return s=e.sent,e.next=8,s.json();case 8:this.folders=e.sent,this.generateBreadcrumbs(t),this.newFolder=null,this.loading=!1;case 12:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),generateBreadcrumbs:function(e){var t=this;this.breadcrumbs=[];var a={id:null,label:this.config.translations.upload_root_folder};if(null!==e){var i=e.split("/"),s=[],n=[];this.config.parentFolder&&(n=this.config.parentFolder.id.split("/"),a={id:this.config.parentFolder.id,label:this.config.parentFolder.label}),this.config.folder&&(n=this.config.folder.id.split("/"),a={id:this.config.folder.id,label:this.config.folder.label}),this.breadcrumbs.push(a),i.forEach((function(e,a){s.push(e),n.indexOf(e)<0&&t.breadcrumbs.push({id:s.join("/"),label:e})}))}else this.breadcrumbs.push(a)},createNewFolder:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.loading=!0,t=new FormData,this.folder&&t.append("parent",this.folder),t.append("folder",this.newFolder),e.next=6,Ye.a.post(this.config.paths.create_folder,t);case 6:this.folders.push({id:null!==this.folder?this.folder+"/"+this.newFolder:this.newFolder,label:this.newFolder}),this.newFolder=null,this.loading=!1;case 9:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()},created:function(){if(this.config.folder)return e=this.config.folder.id,this.allowCreate=!1,this.folder=e,this.$emit("change",this.folder),void this.generateBreadcrumbs(e);var e=null;this.config.parentFolder&&(e=this.config.parentFolder.id),this.openFolder(e)}},Ke=Je,Qe=(a("85ab"),Object(I["a"])(Ke,qe,Ge,!1,null,"c53732c8",null)),He=Qe.exports,Xe={name:"UploadModal",props:["config","file","visibilities"],data:function(){return{loading:!1,selectedFolder:"",filename:this.file.name,visibility:this.visibilities.length>0?this.visibilities[0].id:"",overwrite:!1,error:"",existingResourceButton:!1,existingResource:null}},components:{"select-folder":He,modal:re,"v-select":x.a},methods:{handleFolderChange:function(e){this.selectedFolder=e},upload:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(){var t,a,i,s,n,o,l=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:for(this.loading=!0,t=new FormData,t.append("file",this.file),t.append("filename",this.filename),t.append("folder",this.selectedFolder),t.append("overwrite",this.overwrite),t.append("visibility",this.visibility),t.append("hide_filename",this.config.hideFilename),a=0,i=Object.entries(this.config.uploadContext);a0&&-1===l.config.allowedTypes.indexOf(e.data.type)?(l.error=l.config.translations.upload_error_unsupported_resource_type+l.config.allowedTypes.join(", "),l.loading=!1):l.$emit("uploaded",e.data)})).catch((function(e){409===e.response.status?(l.error=l.config.folderScopedUploads&&l.selectedFolder?l.config.translations.upload_error_existing_resource_in_folder.replace("%folder%",l.selectedFolder):l.config.translations.upload_error_existing_resource,l.existingResourceButton=!0,l.existingResource=e.response.data,l.loading=!1):(l.error=e.response.data.detail?e.response.data.detail:"Error "+e.response.status+" - "+e.response.statusText,l.loading=!1)}));case 11:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()},watch:{visibilities:function(){this.visibility=this.visibilities.length>0?this.visibilities[0].id:""}}},Ze=Xe,et=(a("9be0"),Object(I["a"])(Ze,Ne,Be,!1,null,"97dbe76a",null)),tt=et.exports;function at(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function it(e){for(var t=1;t0},stringifiedVariations:function(){return JSON.stringify(Me($e)(this.selectedImage.variations))}},data:function(){return{mediaModalOpen:!1,cropModalOpen:!1,uploadModalOpen:!1,types:[],folders:[],tags:[],visibilities:[],facetsLoading:!0,newFile:null}},methods:{dispatchVanillaChangeEvent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"modal";this.$nextTick((function(){this.$el.dispatchEvent(new CustomEvent("ngrm-change",{detail:{inputFields:this.config.inputFields,selectedImage:this.selectedImage,fieldId:this.fieldId,changedField:e},bubbles:!0}))}))},prepareDomForModal:function(){var e=document.querySelector(".ez-page-builder-wrapper");e&&(e.style.transform="none")},resetDomAfterModal:function(){var e=document.querySelector(".ez-page-builder-wrapper");e&&e.removeAttribute("style")},handleMediaModalClose:function(){this.mediaModalOpen=!1,this.resetDomAfterModal(),this.dispatchVanillaChangeEvent()},handleCropModalClose:function(){this.cropModalOpen=!1,this.resetDomAfterModal(),this.dispatchVanillaChangeEvent()},handleUploadModalClose:function(){this.uploadModalOpen=!1,this.dispatchVanillaChangeEvent()},handleMediaSelected:function(e){this.selectedImage={id:e.remoteId,name:e.filename,type:e.type,format:e.format,url:e.url,previewUrl:e.previewUrl,browseUrl:e.browseUrl,alternateText:e.altText,caption:e.caption,watermarkText:this.selectedImage.watermarkText,tags:e.tags,size:e.size,variations:{},height:e.height,width:e.width,selectedVariation:null,cssClass:""},this.mediaModalOpen=!1,this.dispatchVanillaChangeEvent()},handleVariationCropChange:function(e){this.selectedImage=it({},this.selectedImage,{variations:it({},this.selectedImage.variations,{},e)}),this.dispatchVanillaChangeEvent()},handleResourceUploaded:function(e){this.selectedImage={id:e.remoteId,name:e.filename,type:e.type,format:e.format,url:e.url,previewUrl:e.previewUrl,browseUrl:e.browseUrl,alternateText:e.altText,caption:e.caption,watermarkText:this.selectedImage.watermarkText,tags:e.tags,size:e.size,variations:{},height:e.height,width:e.width,selectedVariation:null,cssClass:""},this.uploadModalOpen=!1,this.dispatchVanillaChangeEvent()},handleCropClicked:function(){this.cropModalOpen=!0,this.prepareDomForModal()},handleRemoveMediaClicked:function(){this.selectedImage={id:"",name:"",type:"image",format:"",url:"",previewUrl:"",browseUrl:"",alternateText:"",caption:"",watermarkText:this.selectedImage.watermarkText,tags:[],size:0,variations:{},height:0,width:0,selectedVariation:null,cssClass:""},this.config.disableUpload||(this.$refs.fileUploadInput.value=null),this.dispatchVanillaChangeEvent()},fetchFacets:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(){var t,a,i=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,fetch(this.config.paths.load_facets);case 2:return t=e.sent,e.next=5,t.json();case 5:a=e.sent,this.types=[],this.tags=[],this.visibilities=[],a.types.forEach((function(e){-1===i.config.allowedTypes.indexOf(e.id)&&0!==i.config.allowedTypes.length||i.types.push(e)})),a.tags.forEach((function(e){-1===i.config.allowedTags.indexOf(e.id)&&0!==i.config.allowedTags.length||i.tags.push(e)})),a.visibilities.forEach((function(e){-1===i.config.allowedVisibilities.indexOf(e.id)&&0!==i.config.allowedVisibilities.length||i.visibilities.push(e)})),this.facetsLoading=!1;case 13:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),handleBrowseMediaClicked:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:this.mediaModalOpen=!0,this.prepareDomForModal(),this.fetchFacets();case 3:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),handleFileInputChange:function(){this.fetchFacets(),this.uploadModalOpen=!0,this.newFile=this.$refs.fileUploadInput.files.item(0)}},watch:{selectedImage:function(){this.$emit("selectedImageChanged",this.selectedImage)}},mounted:function(){this.$nextTick((function(){var e=document.querySelector(".ngrm-model-portal-".concat(this.fieldId));document.body.prepend(e)}))}},nt=st,ot=Object(I["a"])(nt,r,c,!1,null,null,null),lt=ot.exports,rt={bind:function(e,t,a){var i=b(t.arg);a.context[i]=t.value}},ct=(a("b39d"),function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("input",{directives:[{name:"model",rawName:"v-model",value:e.selectedFolder,expression:"selectedFolder"}],attrs:{type:"hidden",name:e.config.inputFields.folder},domProps:{value:e.selectedFolder},on:{input:function(t){t.target.composing||(e.selectedFolder=t.target.value)}}}),e.selectedFolder?a("span",[a("i",{staticClass:"fa fa-folder"}),e._v(" "+e._s(this.selectedFolder))]):a("span",[a("i",[e._v(e._s(this.config.translations.select_folder_interaction_empty))])]),a("div",{staticClass:"ngremotemedia-buttons"},[e.selectedFolder?a("input",{attrs:{type:"button",value:"Remove folder"},on:{click:e.handleFolderRemove}}):e._e(),a("input",{attrs:{type:"button",value:this.config.translations.select_folder_interaction_button},on:{click:e.handleSelectFolderModalOpen}})]),e.selectFolderModalOpen?a("modal",{attrs:{title:"Select folder"},on:{close:e.handleSelectFolderModalClose}},[a("select-folder",{attrs:{config:e.config,"selected-folder":e.selectedFolder},on:{select:e.handleFolderSelect}})],1):e._e()],1)}),dt=[],ft={name:"SelectFolderInteraction",props:["config","selectedFolder"],components:{"select-folder":He,modal:re},data:function(){return{selectFolderModalOpen:!1}},methods:{handleSelectFolderModalOpen:function(){this.selectFolderModalOpen=!0},handleSelectFolderModalClose:function(){this.selectFolderModalOpen=!1},handleFolderSelect:function(e){this.selectedFolder=e,this.handleSelectFolderModalClose()},handleFolderRemove:function(){this.selectedFolder=null}}},ut=ft,pt=Object(I["a"])(ut,ct,dt,!1,null,null,null),ht=pt.exports;i["default"].config.productionTip=!1,i["default"].use(n.a),i["default"].use(l.a);var gt=function(e){window["ngrm_interactions_vue_".concat(e.dataset.id)]=new i["default"]({el:e,directives:{init:rt},data:{config:{mode:"field",paths:{browse_resources:"/resource/browse",upload_resources:"/resource/upload",load_facets:"/facets/load",load_folders:"/folder/load",create_folder:"/folder/create"},translations:{},inputFields:{locationId:"locationId",remoteId:"remoteId",type:"type",altText:"altText",caption:"caption",tags:"tags[]",cropSettings:"cropSettings",source:"source",watermarkText:"watermarkText",cssClass:"cssClass",selectedVariation:"selectedVariation"},availableVariations:[],allowedVisibilities:[],allowedTypes:[],allowedTags:[],parentFolder:null,folder:null,uploadContext:{},disableUpload:!1,hideFilename:!1},selectedImage:{id:"",name:"",type:"image",format:"",url:"",browse_url:"",previewUrl:"",alternateText:"",caption:"",watermarkText:"",tags:[],size:"",variations:{},height:0,width:0,selectedVariation:null,cssClass:""}},components:{interactions:lt}})},mt=function(e){window["ngrm_select_folder_vue_".concat(e.dataset.id)]=new i["default"]({el:e,directives:{init:rt},data:{config:{paths:{load_folders:"/folder/load",create_folder:"/folder/create"},translations:{},inputFields:{folder:"folder"}},selectedFolder:null},components:{"select-folder-interaction":ht}})},vt=function(){for(var e=document.getElementsByClassName("ngremotemedia-container"),t=0;t dispatchChangeEvent(this.config.inputFields.altText)",arg:"500ms"}],staticClass:"media-alttext data",attrs:{type:"text",name:this.config.inputFields.altText},domProps:{value:t.selectedImage.alternateText},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"alternateText",e.target.value)}}})]),i("div",{staticClass:"ngremotemedia-caption"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_caption)+"\n "),i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_caption_info}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.caption,expression:"selectedImage.caption"},{name:"debounce",rawName:"v-debounce:500ms",value:function(){return t.dispatchChangeEvent(e.config.inputFields.caption)},expression:"() => dispatchChangeEvent(this.config.inputFields.caption)",arg:"500ms"}],staticClass:"media-caption data",attrs:{type:"text",name:this.config.inputFields.caption},domProps:{value:t.selectedImage.caption},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"caption",e.target.value)}}})]),i("div",{staticClass:"ngremotemedia-alttext-override"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_alternate_text_override)+"\n "),i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_alternate_text_override_info}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.altTextOverride,expression:"selectedImage.altTextOverride"},{name:"debounce",rawName:"v-debounce:500ms",value:function(){return t.dispatchChangeEvent(e.config.inputFields.altTextOverride)},expression:"() => dispatchChangeEvent(this.config.inputFields.altTextOverride)",arg:"500ms"}],staticClass:"media-alttext-override data",attrs:{type:"text",name:this.config.inputFields.altTextOverride,placeholder:t.selectedImage.alternateText},domProps:{value:t.selectedImage.altTextOverride},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"altTextOverride",e.target.value)}}})]),i("div",{staticClass:"ngremotemedia-caption-override"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_caption_override)+"\n "),i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_caption_override_info}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.captionOverride,expression:"selectedImage.captionOverride"},{name:"debounce",rawName:"v-debounce:500ms",value:function(){return t.dispatchChangeEvent(e.config.inputFields.captionOverride)},expression:"() => dispatchChangeEvent(this.config.inputFields.captionOverride)",arg:"500ms"}],staticClass:"media-caption-override data",attrs:{type:"text",name:this.config.inputFields.captionOverride,placeholder:t.selectedImage.caption},domProps:{value:t.selectedImage.captionOverride},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"captionOverride",e.target.value)}}})]),i("div",{staticClass:"ngremotemedia-tags"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_tags)+"\n "),i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_tags_info}})]),i("v-select",{attrs:{options:t.config.allowedTags.length>0?t.config.allowedTags:t.allTags,multiple:"",taggable:0===t.config.allowedTags.length},on:{input:t.handleTagsInput},model:{value:t.selectedImage.tags,callback:function(e){t.$set(t.selectedImage,"tags",e)},expression:"selectedImage.tags"}}),i("select",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.tags,expression:"selectedImage.tags"}],staticClass:"ngremotemedia-newtags",attrs:{hidden:"",name:this.config.inputFields.tags,multiple:"multiple"},on:{change:function(e){var a=Array.prototype.filter.call(e.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));t.$set(t.selectedImage,"tags",e.target.multiple?a:a[0])}}},t._l(t.allTags,(function(e){return i("option",{key:e},[t._v(t._s(e))])})),0)],1),i("div",{staticClass:"ngremotemedia-watermark-text"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_watermark_text)+"\n "),i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_watermark_text_info}})]),i("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.watermarkText,expression:"selectedImage.watermarkText"},{name:"debounce",rawName:"v-debounce:500ms",value:function(){return t.dispatchChangeEvent(e.config.inputFields.watermarkText)},expression:"() => dispatchChangeEvent(this.config.inputFields.watermarkText)",arg:"500ms"}],staticClass:"media-watermarktext data",attrs:{type:"text",name:this.config.inputFields.watermarkText},domProps:{value:t.selectedImage.watermarkText},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"watermarkText",e.target.value)}}})]),this.isEmbed?i("div",{staticClass:"ngremotemedia-css-class"},[i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_css_class)+"\n "),this.config.translations.preview_css_class_info?i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_css_class_info}}):t._e()]),i("input",{directives:[{name:"model",rawName:"v-model",value:t.selectedImage.cssClass,expression:"selectedImage.cssClass"},{name:"debounce",rawName:"v-debounce:500ms",value:function(){return t.dispatchChangeEvent(e.config.inputFields.cssClass)},expression:"() => dispatchChangeEvent(this.config.inputFields.cssClass)",arg:"500ms"}],staticClass:"media-css-class data",attrs:{type:"text",name:this.config.inputFields.cssClass},domProps:{value:t.selectedImage.cssClass},on:{input:function(e){e.target.composing||t.$set(t.selectedImage,"cssClass",e.target.value)}}})]):t._e(),this.isEmbed&&this.hasVariations?i("div",{staticClass:"ngremotemedia-selected-variation"},[i("input",{attrs:{type:"hidden",name:this.config.inputFields.selectedVariation},domProps:{value:t.selectedImage.selectedVariation}}),i("span",{staticClass:"help-block description"},[t._v("\n "+t._s(this.config.translations.preview_selected_variation)+"\n "),this.config.translations.preview_selected_variation_info?i("i",{staticClass:"fa fa-info-circle",attrs:{"data-toggle":"tooltip","data-placement":"right",title:this.config.translations.preview_selected_variation_info}}):t._e()]),i("v-select",{attrs:{options:this.variationOptions},on:{input:function(){return t.dispatchChangeEvent(e.config.inputFields.selectedVariation)}},model:{value:t.selectedImage.selectedVariation,callback:function(e){t.$set(t.selectedImage,"selectedVariation",e)},expression:"selectedImage.selectedVariation"}})],1):t._e()])])]):i("div",[i("i",[t._v(t._s(this.config.translations.interactions_no_media_selected))])])}),p=[],h=(a("5df3"),a("4f7f"),a("75fc")),g=(a("28a5"),a("01c8")),m=function(e){var t=[];for(var a in e)t.push(encodeURIComponent(a)+"="+encodeURIComponent(e[a]));return t.join("&")},v=function(e){return e[0].toUpperCase()+e.slice(1)},b=function(e){var t=e.split("-"),a=Object(g["a"])(t),i=a[0],s=a.slice(1);return[i].concat(Object(h["a"])(s.map(v))).join("")},_=function(e,t){var a=Math.pow(10,t);return parseFloat(Math.round(e*a)/a).toFixed(t)},w={B:"KB",KB:"MB",MB:"GB",GB:"TB"},C=function e(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"B",i=w[a];return!i||t<1024?"".concat(_(t,2)," ").concat(a):e(t/1024,i)},y=a("4a7a"),x=a.n(y),O={name:"Preview",props:["config","fieldId","selectedImage"],data:function(){return{allTags:[]}},components:{"v-select":x.a},computed:{nonImagePreviewClass:function(){return"video"===this.selectedImage.type?"ng-video":"ng-book"},formattedSize:function(){return C(this.selectedImage.size)},isEmbed:function(){return"embed"===this.config.mode},hasVariations:function(){return this.config.allVariations.length>0},variationOptions:function(){return this.config.allVariations.map((function(e){return{label:e,value:e}}))}},methods:{handleTagsInput:function(e){this.allTags=Object(h["a"])(new Set([].concat(Object(h["a"])(this.allTags),Object(h["a"])(e)))),this.dispatchChangeEvent(this.config.inputFields.tags)},dispatchChangeEvent:function(e){this.$emit("preview-change",e)}},mounted:function(){this.allTags=Object(h["a"])(this.selectedImage.tags)},watch:{selectedImage:function(){this.allTags=Object(h["a"])(this.selectedImage.tags)}}},F=O,I=(a("1cd1"),a("2877")),V=Object(I["a"])(F,u,p,!1,null,"cd63af0a",null),k=V.exports,j=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("modal",{attrs:{title:this.config.translations.browse_title},on:{close:function(t){return e.$emit("close")}}},[a("media-facets",{attrs:{config:e.config,tags:e.tags,types:e.types,visibilities:e.visibilities,facets:e.facets,"facets-loading":e.facetsLoading},on:{change:e.handleFacetsChange}}),a("media-gallery",{attrs:{translations:e.config.translations,media:e.media,canLoadMore:e.canLoadMore,selectedMediaId:e.selectedMediaId,loading:e.loading},on:{loadMore:e.handleLoadMore,"media-selected":function(t){return e.$emit("media-selected",t)}}}),e.loading?a("i",{staticClass:"ng-icon ng-spinner"}):e._e()],1)},T=[],S=a("768b"),M=(a("ffc1"),function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"mediaFacets"},[a("div",{staticClass:"body"},[e.types.length>1?a("div",{staticClass:"form-field"},[a("label",{attrs:{for:"type"}},[e._v(e._s(this.config.translations.browse_select_type))]),a("v-select",{attrs:{options:e.types,label:"name",reduce:function(e){return e.id},placeholder:e.facetsLoading?this.config.translations.browse_loading_types:this.config.translations.browse_all_types},on:{input:e.handleTypeChange},model:{value:e.selectedType,callback:function(t){e.selectedType=t},expression:"selectedType"}})],1):e._e(),e.folders&&!this.config.folder?a("div",{staticClass:"form-field"},[a("label",{attrs:{for:"folder"}},[e._v(e._s(this.config.translations.browse_select_folder))]),a("treeselect",{attrs:{multiple:!1,options:e.folders,"load-options":e.loadSubFolders,value:this.config.parentFolder?this.config.parentFolder.id:"",placeholder:e.facetsLoading?this.config.translations.browse_loading_folders:this.config.translations.browse_all_folders,disabled:e.facetsLoading,clearable:!0,beforeClearAll:e.clearFolderField,defaultExpandLevel:1},on:{input:e.handleFolderChange},model:{value:e.selectedFolder,callback:function(t){e.selectedFolder=t},expression:"selectedFolder"}})],1):e._e(),e.tags.length>1?a("div",{staticClass:"form-field"},[a("label",{attrs:{for:"tag"}},[e._v(e._s(this.config.translations.browse_select_tag))]),a("v-select",{attrs:{options:e.tags,label:"name",reduce:function(e){return e.id},placeholder:e.facetsLoading?this.config.translations.browse_loading_tags:this.config.translations.browse_all_tags,disabled:e.facetsLoading},on:{input:e.handleTagChange},model:{value:e.tag,callback:function(t){e.tag=t},expression:"tag"}})],1):e._e(),e.visibilities.length>1?a("div",{staticClass:"form-field"},[a("label",{attrs:{for:"visibilities"}},[e._v(e._s(this.config.translations.browse_select_visibility))]),a("v-select",{attrs:{options:e.visibilities,label:"name",reduce:function(e){return e.id},placeholder:e.facetsLoading?this.config.translations.browse_loading_visibilities:this.config.translations.browse_all_visibilities,disabled:e.facetsLoading},on:{input:e.handleVisibilityChange},model:{value:e.visibility,callback:function(t){e.visibility=t},expression:"visibility"}})],1):e._e(),a("div",{staticClass:"search-wrapper"},[a("span",{staticClass:"search-label"},[e._v(e._s(this.config.translations.search))]),a("div",{staticClass:"search"},[a("input",{directives:[{name:"model",rawName:"v-model",value:e.query,expression:"query"}],attrs:{type:"text",placeholder:this.config.translations.search_placeholder},domProps:{value:e.query},on:{keyup:e.handleQueryChange,keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:(t.preventDefault(),null(t))},input:function(t){t.target.composing||(e.query=t.target.value)}}})])])])])}),E=[],$="all",P="image",z="video",R="raw",L="(all)",A="(root)",U="all",N=a("ca17"),D=a.n(N),B=(a("542c"),{name:"MediaFacets",props:["config","tags","types","visibilities","facets","facetsLoading"],data:function(){return{TYPE_ALL:$,TYPE_IMAGE:P,TYPE_VIDEO:z,TYPE_RAW:R,FOLDER_ALL:L,FOLDER_ROOT:A,TAG_ALL:U,folders:[{id:this.config.parentFolder?this.config.parentFolder.id:A,label:this.config.parentFolder?this.config.parentFolder.label:A,children:null}],selectedFolder:this.facets.folder,selectedType:this.facets.type,query:this.facets.query,tag:this.facets.tag,visibility:this.facets.visibility}},methods:{clearFolderField:function(){return!this.config.parentFolder||(this.selectedFolder=this.config.parentFolder.id,!1)},handleTypeChange:function(e){this.$emit("change",{type:e})},handleFolderChange:function(e){this.selectedFolder=e,"undefined"!==typeof e&&e||(this.selectedFolder=this.config.parentFolder?this.config.parentFolder.id:e),this.$emit("change",{folder:this.selectedFolder})},handleQueryChange:function(){this.$emit("change",{query:this.query})},handleTagChange:function(){this.$emit("change",{tag:this.tag})},handleVisibilityChange:function(){this.$emit("change",{visibility:this.visibility})},loadSubFolders:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(t){var a,i,s;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return a=t.parentNode,i={folder:"(root)"===a.id?"":a.id},e.next=4,fetch(this.config.paths.load_folders+"?"+m(i));case 4:return s=e.sent,e.next=7,s.json();case 7:a.children=e.sent,t.callback();case 9:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}()},components:{"v-select":x.a,treeselect:D.a}}),q=B,G=(a("c345"),Object(I["a"])(q,M,E,!1,null,"278bb214",null)),W=G.exports,Y=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"media-gallery"},[a("div",{class:e.loading?"items loading":"items"},[e.media.length?e._e():a("div",{staticClass:"folder-empty"},[a("span",{staticClass:"ngrm-icon-folder"}),a("span",[a("strong",[e._v(e._s(this.translations.media_gallery_empty_folder))]),e._v(e._s(this.translations.media_gallery_upload_media))])]),e._l(e.media,(function(t){return a("div",{key:t.id,staticClass:"media",class:{selected:t.remoteId===e.selectedMediaId}},["image"===t.type||"video"===t.type&&""!==t.browseUrl?a("div",{staticClass:"media-container"},[a("img",{staticClass:"img",attrs:{src:t.browseUrl,alt:t.filename}}),a("Label",{staticClass:"filename"},[e._v(e._s(t.filename))]),a("div",{staticClass:"size-description"},["public"===t.visibility?a("i",{staticClass:"fa fa-solid fa-globe"},[e._v("  ")]):e._e(),"private"===t.visibility?a("i",{staticClass:"fa fa-eye-slash"},[e._v("  ")]):e._e(),"protected"===t.visibility?a("i",{staticClass:"fa fa-lock"},[e._v("  ")]):e._e(),a("span",{staticClass:"format"},[e._v(e._s(t.format))]),e._v(" - "+e._s(t.width)+" x "+e._s(t.height)+" - "+e._s(e.showFilesize(t))+"\n ")])],1):a("div",{staticClass:"media-container"},[a("span",{staticClass:"file-placeholder"},[a("span",{staticClass:"icon-doc"},["pdf"===t.format?a("i",{staticClass:"fa fa-file-pdf-o"}):"zip"===t.format||"rar"===t.format?a("i",{staticClass:"fa fa-file-archive-o"}):"ppt"===t.format||"pptx"===t.format?a("i",{staticClass:"fa fa-file-powerpoint-o"}):"doc"===t.format||"docx"===t.format?a("i",{staticClass:"fa fa-file-word-o"}):"xls"===t.format||"xlsx"===t.format?a("i",{staticClass:"fa fa-file-excel-o"}):"aac"===t.format||"aiff"===t.format||"amr"===t.format||"flac"===t.format||"m4a"===t.format||"mp3"===t.format||"ogg"===t.format||"opus"===t.format||"wav"===t.format?a("i",{staticClass:"fa fa-file-audio-o"}):"txt"===t.format?a("i",{staticClass:"fa fa-lg fa-file-text"}):a("i",{staticClass:"fa fa-file"})])]),a("Label",{staticClass:"filename"},[e._v(e._s(t.filename))]),a("div",{staticClass:"size-description"},["public"===t.visibility?a("i",{staticClass:"fa fa-solid fa-globe"},[e._v("  ")]):e._e(),"private"===t.visibility?a("i",{staticClass:"fa fa-eye-slash"},[e._v("  ")]):e._e(),"protected"===t.visibility?a("i",{staticClass:"fa fa-lock"},[e._v("  ")]):e._e(),a("span",{staticClass:"format"},[e._v(e._s(t.format))]),e._v(" - "+e._s(e.showFilesize(t))+"\n ")])],1),a("button",{staticClass:"btn btn-blue select-btn",attrs:{type:"button"},on:{click:function(a){return e.$emit("media-selected",t)}}},[e._v(e._s(e._self.translations.media_gallery_select))])])}))],2),e.canLoadMore?a("div",{staticClass:"load-more-wrapper"},[a("button",{staticClass:"btn btn-blue",attrs:{type:"button"},on:{click:function(t){return e.$emit("loadMore")}}},[e._v(e._s(this.translations.media_gallery_load_more))])]):e._e()])},J=[],K=a("94df"),Q=a.n(K),H={name:"MediaGallery",props:["translations","media","canLoadMore","onLoadMore","selectedMediaId","loading"],methods:{showFilesize:function(e){return Q()(e.size)}}},X=H,Z=(a("bdf2"),Object(I["a"])(X,Y,J,!1,null,"5aa52c90",null)),ee=Z.exports,te=a("b012"),ae=a.n(te),ie=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"ngrm-overlay"},[a("div",{staticClass:"media-modal"},[a("div",{staticClass:"title"},[e._v("\n "+e._s(e.title)+"\n "),a("span",{staticClass:"close",on:{click:e.close}},[a("span",{staticClass:"ngrm-icon-cancel"})])]),a("div",{staticClass:"body"},[e._t("default")],2)])])},se=[],ne={name:"Modal",props:["title"],methods:{close:function(){this.$emit("close")}}},oe=ne,re=(a("7397"),a("a301"),Object(I["a"])(oe,ie,se,!1,null,"03fd1c54",null)),le=re.exports;function ce(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function de(e){for(var t=1;t0&&void 0!==p[0]?p[0]:{patch:!1},a=t.patch,this.loading=!0,this.abortController&&this.abortController.abort(),this.abortController=new AbortController,i={limit:fe,offset:a?this.media.length:0},this.facets.query&&(i["query"]=this.facets.query),this.config.allowedTypes.length>0&&(i["type"]=this.config.allowedTypes),this.facets.type&&(i["type"]=this.facets.type),this.facets.folder&&(i["folder"]=this.facets.folder===A?"":this.facets.folder),this.config.allowedTags.length>0&&(i["tag"]=this.config.allowedTags),this.facets.tag&&(i["tag"]=this.facets.tag),this.config.allowedVisibilities.length>0&&(i["visibility"]=this.config.allowedVisibilities),this.facets.visibility&&(i["visibility"]=this.facets.visibility),a&&this.nextCursor&&(i["next_cursor"]=this.nextCursor),s="",n=0,o=Object.entries(i);n-1:e.newSelection},on:{change:function(a){var i=e.newSelection,s=a.target,n=!!s.checked;if(Array.isArray(i)){var o=t,r=e._i(i,o);s.checked?r<0&&(e.newSelection=i.concat([o])):r>-1&&(e.newSelection=i.slice(0,r).concat(i.slice(r+1)))}else e.newSelection=n}}}),a("label",{attrs:{for:t}},[a("span",{staticClass:"name"},[e._v(e._s(t))]),a("span",{staticClass:"formatted-size"},[e._v(e._s(e.formattedSize(t)))])]),e.isVariationSelectable(t)?e._e():a("div",{staticClass:"legend-not-selectable"},[a("span",[e._v(e._s(e._self.translations.crop_media_too_small))])])])})),0),a("div",{staticClass:"selectedVariations"},[a("ul",e._l(e.selectedVariations,(function(t){return a("li",{key:t,class:{set:!!e.allVariationValues[t],selected:e.selectedVariation===t,disabled:!e.isVariationSelectable(t)},on:{click:function(a){return e.handleVariationClicked(t)}}},[a("div",[a("span",{staticClass:"name"},[e._v(e._s(t))]),a("span",{staticClass:"formatted-size"},[e._v(e._s(e.formattedSize(t)))])]),e.addingVariations?e._e():a("a",[a("span",{staticClass:"circle-orange"}),a("span",{staticClass:"ngrm-icon-trash",on:{click:function(a){return e.removeItem(t)}}})])])})),0)])])},_e=[],we=(a("7f7f"),{name:"CropSizes",props:["translations","availableVariations","allVariationValues","imageSize","selectedVariation"],data:function(){return{newSelection:[],addingVariations:!1}},computed:{unselectedVariations:function(){var e=Object.keys(this.availableVariations),t=Object.keys(this.allVariationValues);return e.difference(t)},selectedVariations:function(){return Object.getOwnPropertyNames(this.allVariationValues)}},methods:{handleAddCropSize:function(){this.addingVariations=!0},handleCancel:function(){this.addingVariations=!1,this.newSelection=[]},handleAdd:function(){this.$emit("addedVariations",this.newSelection),this.newSelection=[],this.addingVariations=!1},removeItem:function(e){this.$emit("removedVariation",e)},formattedSize:function(e){return"".concat(this.availableVariations[e][0]," x ").concat(this.availableVariations[e][1])},isVariationSelectable:function(e){var t=Object(S["a"])(this.availableVariations[e],2),a=t[0],i=t[1];return this.imageSize.width>=a&&this.imageSize.height>=i},handleVariationClicked:function(e){this.isVariationSelectable(e)&&this.$emit("selected",e)}}}),Ce=we,ye=(a("bdd7"),Object(I["a"])(Ce,be,_e,!1,null,"ad171770",null)),xe=ye.exports,Oe=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"crop"},[a("div",{ref:"cropper",staticClass:"cropper",style:e.cropperStyle},[a("img",{ref:"image",attrs:{src:e.src}}),a("div",{ref:"buttons",staticClass:"buttons",style:e.applyButtonStyle},[a("button",{staticClass:"btn btn-blue",attrs:{type:"button"},on:{click:e.handleReset}},[a("span",{staticClass:"ngrm-icon-ccw"}),a("span",[e._v(e._s(this.translations.crop_reset))])]),a("button",{staticClass:"btn btn-blue",attrs:{type:"button"},on:{click:e.handleApply}},[a("span",{staticClass:"ngrm-icon-ok"}),a("span",[e._v(e._s(this.translations.crop_apply))])])])]),a("div",[a("h4",[e._v(e._s(this.translations.crop_preview))]),a("div",{ref:"preview",staticClass:"preview"})])])},Fe=[],Ie=a("5435"),Ve={name:"Crop",props:["translations","value","variation","src","imageSize"],mounted:function(){this.setCropper()},beforeDestroy:function(){this.destroyCropper()},data:function(){return{crop:{},cropper:null}},methods:{setCropper:function(){var e,t=this.value||{},a=t.x,i=t.y,s=t.w,n=t.h,o={x:a,y:i,width:s,height:n},r=Object(S["a"])(this.variation,2),l=r[0],c=r[1],d=l>0&&c>0?l/c:void 0;this.destroyCropper();this.$refs.cropper.clientWidth,this.imageSize.width;this.cropper=new Ie["a"](this.$refs.image,(e={viewMode:2,dragMode:"none",autoCrop:!0,data:o,aspectRatio:d,guides:!0,movable:!1,rotatable:!1},Object(f["a"])(e,"guides",!1),Object(f["a"])(e,"center",!1),Object(f["a"])(e,"zoomable",!1),Object(f["a"])(e,"scalable",!0),Object(f["a"])(e,"minCropBoxWidth",50),Object(f["a"])(e,"minCropBoxHeight",50),Object(f["a"])(e,"crop",this.handleCrop),Object(f["a"])(e,"preview",this.$refs.preview),e)),this.cropper.setData(o)},handleCrop:function(e){this.crop=this.cropper.getData(!0)},destroyCropper:function(){this.cropper&&this.cropper.destroy()},handleReset:function(){this.cropper.reset()},handleApply:function(){var e=this.cropper.getData(!0),t=e.x,a=e.y,i=e.width,s=e.height;this.$emit("change",{x:t,y:a,w:i,h:s})}},computed:{applyButtonStyle:function(){var e=this.crop,t=e.x,a=e.y,i=e.width,s=e.height,n=this.$refs.buttons?this.$refs.buttons.clientWidth:0,o=this.$refs.cropper?this.$refs.cropper.clientWidth/this.imageSize.width:1;return{top:"".concat((a+s)*o+10,"px"),left:"".concat((t+i)*o-n-1,"px")}},cropperStyle:function(){var e=this.imageSize.height/this.imageSize.width*100;return{"padding-bottom":"".concat(e,"%"),height:"0px",width:"100%"}}}},ke=Ve,je=(a("c66d"),Object(I["a"])(ke,Oe,Fe,!1,null,"5f73791e",null)),Te=je.exports,Se=function(e){return function(t){return Object.keys(t).reduce((function(a,i){return e(t[i],i)&&(a[i]=t[i]),a}),{})}},Me=function(e){return function(t){return!e(t)}},Ee=function(e){return function(t){return e===t}},$e=function(e){return!!e},Pe=Me(Ee(void 0));function ze(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function Re(e){for(var t=1;t1?a("v-select",{attrs:{options:e.visibilities,label:"name",reduce:function(e){return e.id},clearable:!1},model:{value:e.visibility,callback:function(t){e.visibility=t},expression:"visibility"}}):e._e(),a("input",{directives:[{name:"model",rawName:"v-model",value:e.overwrite,expression:"overwrite"}],attrs:{type:"checkbox",id:"ngrm-upload-overwrite"},domProps:{checked:Array.isArray(e.overwrite)?e._i(e.overwrite,null)>-1:e.overwrite},on:{change:function(t){var a=e.overwrite,i=t.target,s=!!i.checked;if(Array.isArray(a)){var n=null,o=e._i(a,n);i.checked?o<0&&(e.overwrite=a.concat([n])):o>-1&&(e.overwrite=a.slice(0,o).concat(a.slice(o+1)))}else e.overwrite=s}}}),a("label",{attrs:{for:"ngrm-upload-overwrite"}},[e._v(e._s(this.config.translations.upload_checkbox_overwrite))]),a("button",{staticClass:"btn btn-blue",attrs:{type:"button",disabled:""===e.filename||""===e.visibility},on:{click:e.upload}},[e._v("\n "+e._s(this.config.translations.upload_button_upload)+"\n ")])],1)],1),e.loading?a("i",{staticClass:"ng-icon ng-spinner"}):e._e()])},Be=[],qe=(a("a481"),function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"folder-gallery"},[a("div",{class:e.loading?"items loading":"items"},[a("div",{staticClass:"breadcrumbs"},[a("span",[e._v(e._s(this.config.translations.upload_breadcrumbs_info)+" ")]),e._l(e.breadcrumbs,(function(t,i){return a("span",{key:i},[0!==i?a("span",[e._v(" / ")]):e._e(),i!==e.breadcrumbs.length-1?a("a",{attrs:{href:"javascript:void(0);"},on:{click:function(a){return e.openFolder(t.id)}}},[e._v("\n "+e._s(t.label)+"\n ")]):a("span",[e._v(e._s(t.label))])])}))],2),e.folders.length>0||e.allowCreate?a("div",{staticClass:"info"},[a("i",{staticClass:"fa fa-info-circle"}),e._v("\n "+e._s(this.config.translations.upload_info_text)+"\n ")]):e._e(),e._l(e.folders,(function(t){return a("div",{key:t.id,staticClass:"media",class:{selected:t.id===e._self.folder}},[a("div",{staticClass:"media-container",on:{dblclick:function(a){return e.openFolder(t.id)}}},[e._m(0,!0),a("Label",{staticClass:"filename"},[e._v(e._s(t.label))])],1),a("button",{staticClass:"btn btn-blue select-btn",attrs:{type:"button"},on:{click:function(a){return e.$emit("select",t.id)}}},[e._v("\n "+e._s(e._self.config.translations.upload_button_select)+"\n ")])])})),e.allowCreate?a("div",{staticClass:"media new-folder"},[a("div",{staticClass:"media-container"},[e._m(1),a("input",{directives:[{name:"model",rawName:"v-model",value:e.newFolder,expression:"newFolder"}],attrs:{type:"text",placeholder:this.config.translations.upload_placeholder_new_folder},domProps:{value:e.newFolder},on:{input:function(t){t.target.composing||(e.newFolder=t.target.value)}}})]),a("button",{staticClass:"btn btn-blue select-btn",attrs:{type:"button",disabled:null===e.newFolder},on:{click:e.createNewFolder}},[e._v("\n "+e._s(this.config.translations.upload_button_create)+"\n ")])]):e._e()],2),e.loading?a("i",{staticClass:"ng-icon ng-spinner"}):e._e()])}),Ge=[function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("span",{staticClass:"file-placeholder"},[a("span",{staticClass:"icon-doc"},[a("i",{staticClass:"fa fa-folder"})])])},function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("span",{staticClass:"file-placeholder"},[a("span",{staticClass:"icon-doc"},[a("i",{staticClass:"fa fa-folder"})])])}],We=a("bc3a"),Ye=a.n(We),Je={name:"SelectFolder",props:["config","selectedFolder"],data:function(){return{folders:[],newFolder:null,breadcrumbs:[],loading:!1,allowCreate:!0,folder:this.selectedFolder}},methods:{openFolder:function(e){this.folder=e,this.$emit("change",this.folder),this.loadSubFolders(e)},loadSubFolders:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(t){var a,i,s;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.loading=!0,a=this.config.paths.load_folders,t&&(i={folder:t===A?"":t},a+="?"+m(i)),e.next=5,fetch(a);case 5:return s=e.sent,e.next=8,s.json();case 8:this.folders=e.sent,this.generateBreadcrumbs(t),this.newFolder=null,this.loading=!1;case 12:case"end":return e.stop()}}),e,this)})));function t(t){return e.apply(this,arguments)}return t}(),generateBreadcrumbs:function(e){var t=this;this.breadcrumbs=[];var a={id:null,label:this.config.translations.upload_root_folder};if(null!==e){var i=e.split("/"),s=[],n=[];this.config.parentFolder&&(n=this.config.parentFolder.id.split("/"),a={id:this.config.parentFolder.id,label:this.config.parentFolder.label}),this.config.folder&&(n=this.config.folder.id.split("/"),a={id:this.config.folder.id,label:this.config.folder.label}),this.breadcrumbs.push(a),i.forEach((function(e,a){s.push(e),n.indexOf(e)<0&&t.breadcrumbs.push({id:s.join("/"),label:e})}))}else this.breadcrumbs.push(a)},createNewFolder:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(){var t;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return this.loading=!0,t=new FormData,this.folder&&t.append("parent",this.folder),t.append("folder",this.newFolder),e.next=6,Ye.a.post(this.config.paths.create_folder,t);case 6:this.folders.push({id:null!==this.folder?this.folder+"/"+this.newFolder:this.newFolder,label:this.newFolder}),this.newFolder=null,this.loading=!1;case 9:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()},created:function(){if(this.config.folder)return e=this.config.folder.id,this.allowCreate=!1,this.folder=e,this.$emit("change",this.folder),void this.generateBreadcrumbs(e);var e=null;this.config.parentFolder&&(e=this.config.parentFolder.id),this.openFolder(e)}},Ke=Je,Qe=(a("85ab"),Object(I["a"])(Ke,qe,Ge,!1,null,"c53732c8",null)),He=Qe.exports,Xe={name:"UploadModal",props:["config","file","visibilities"],data:function(){return{loading:!1,selectedFolder:"",filename:this.file.name,visibility:this.visibilities.length>0?this.visibilities[0].id:"",overwrite:!1,error:"",existingResourceButton:!1,existingResource:null}},components:{"select-folder":He,modal:le,"v-select":x.a},methods:{handleFolderChange:function(e){this.selectedFolder=e},upload:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(){var t,a,i,s,n,o,r=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:for(this.loading=!0,t=new FormData,t.append("file",this.file),t.append("filename",this.filename),t.append("folder",this.selectedFolder),t.append("overwrite",this.overwrite),t.append("visibility",this.visibility),t.append("hide_filename",this.config.hideFilename),a=0,i=Object.entries(this.config.uploadContext);a0&&-1===r.config.allowedTypes.indexOf(e.data.type)?(r.error=r.config.translations.upload_error_unsupported_resource_type+r.config.allowedTypes.join(", "),r.loading=!1):r.$emit("uploaded",e.data)})).catch((function(e){409===e.response.status?(r.error=r.config.folderScopedUploads&&r.selectedFolder?r.config.translations.upload_error_existing_resource_in_folder.replace("%folder%",r.selectedFolder):r.config.translations.upload_error_existing_resource,r.existingResourceButton=!0,r.existingResource=e.response.data,r.loading=!1):(r.error=e.response.data.detail?e.response.data.detail:"Error "+e.response.status+" - "+e.response.statusText,r.loading=!1)}));case 11:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}()},watch:{visibilities:function(){this.visibility=this.visibilities.length>0?this.visibilities[0].id:""}}},Ze=Xe,et=(a("9be0"),Object(I["a"])(Ze,De,Be,!1,null,"97dbe76a",null)),tt=et.exports;function at(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,i)}return a}function it(e){for(var t=1;t0},stringifiedVariations:function(){return JSON.stringify(Se($e)(this.selectedImage.variations))}},data:function(){return{mediaModalOpen:!1,cropModalOpen:!1,uploadModalOpen:!1,types:[],folders:[],tags:[],visibilities:[],facetsLoading:!0,newFile:null}},methods:{dispatchVanillaChangeEvent:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"modal";this.$nextTick((function(){this.$el.dispatchEvent(new CustomEvent("ngrm-change",{detail:{inputFields:this.config.inputFields,selectedImage:this.selectedImage,fieldId:this.fieldId,changedField:e},bubbles:!0}))}))},prepareDomForModal:function(){var e=document.querySelector(".ez-page-builder-wrapper");e&&(e.style.transform="none")},resetDomAfterModal:function(){var e=document.querySelector(".ez-page-builder-wrapper");e&&e.removeAttribute("style")},handleMediaModalClose:function(){this.mediaModalOpen=!1,this.resetDomAfterModal(),this.dispatchVanillaChangeEvent()},handleCropModalClose:function(){this.cropModalOpen=!1,this.resetDomAfterModal(),this.dispatchVanillaChangeEvent()},handleUploadModalClose:function(){this.uploadModalOpen=!1,this.dispatchVanillaChangeEvent()},handleMediaSelected:function(e){this.selectedImage={id:e.remoteId,name:e.filename,type:e.type,format:e.format,url:e.url,previewUrl:e.previewUrl,browseUrl:e.browseUrl,alternateText:e.altText,caption:e.caption,watermarkText:this.selectedImage.watermarkText,altTextOverride:"",captionOverride:"",tags:e.tags,size:e.size,variations:{},height:e.height,width:e.width,selectedVariation:null,cssClass:""},this.mediaModalOpen=!1,this.dispatchVanillaChangeEvent()},handleVariationCropChange:function(e){this.selectedImage=it({},this.selectedImage,{variations:it({},this.selectedImage.variations,{},e)}),this.dispatchVanillaChangeEvent()},handleResourceUploaded:function(e){this.selectedImage={id:e.remoteId,name:e.filename,type:e.type,format:e.format,url:e.url,previewUrl:e.previewUrl,browseUrl:e.browseUrl,alternateText:e.altText,caption:e.caption,watermarkText:this.selectedImage.watermarkText,altTextOverride:"",captionOverride:"",tags:e.tags,size:e.size,variations:{},height:e.height,width:e.width,selectedVariation:null,cssClass:""},this.uploadModalOpen=!1,this.dispatchVanillaChangeEvent()},handleCropClicked:function(){this.cropModalOpen=!0,this.prepareDomForModal()},handleRemoveMediaClicked:function(){this.selectedImage={id:"",name:"",type:"image",format:"",url:"",previewUrl:"",browseUrl:"",alternateText:"",caption:"",watermarkText:this.selectedImage.watermarkText,altTextOverride:"",captionOverride:"",tags:[],size:0,variations:{},height:0,width:0,selectedVariation:null,cssClass:""},this.config.disableUpload||(this.$refs.fileUploadInput.value=null),this.dispatchVanillaChangeEvent()},fetchFacets:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(){var t,a,i=this;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,fetch(this.config.paths.load_facets);case 2:return t=e.sent,e.next=5,t.json();case 5:a=e.sent,this.types=[],this.tags=[],this.visibilities=[],a.types.forEach((function(e){-1===i.config.allowedTypes.indexOf(e.id)&&0!==i.config.allowedTypes.length||i.types.push(e)})),a.tags.forEach((function(e){-1===i.config.allowedTags.indexOf(e.id)&&0!==i.config.allowedTags.length||i.tags.push(e)})),a.visibilities.forEach((function(e){-1===i.config.allowedVisibilities.indexOf(e.id)&&0!==i.config.allowedVisibilities.length||i.visibilities.push(e)})),this.facetsLoading=!1;case 13:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),handleBrowseMediaClicked:function(){var e=Object(d["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:this.mediaModalOpen=!0,this.prepareDomForModal(),this.fetchFacets();case 3:case"end":return e.stop()}}),e,this)})));function t(){return e.apply(this,arguments)}return t}(),handleFileInputChange:function(){this.fetchFacets(),this.uploadModalOpen=!0,this.newFile=this.$refs.fileUploadInput.files.item(0)}},watch:{selectedImage:function(){this.$emit("selectedImageChanged",this.selectedImage)}},mounted:function(){this.$nextTick((function(){var e=document.querySelector(".ngrm-model-portal-".concat(this.fieldId));document.body.prepend(e)}))}},nt=st,ot=Object(I["a"])(nt,l,c,!1,null,null,null),rt=ot.exports,lt={bind:function(e,t,a){var i=b(t.arg);a.context[i]=t.value}},ct=(a("b39d"),function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",[a("input",{directives:[{name:"model",rawName:"v-model",value:e.selectedFolder,expression:"selectedFolder"}],attrs:{type:"hidden",name:e.config.inputFields.folder},domProps:{value:e.selectedFolder},on:{input:function(t){t.target.composing||(e.selectedFolder=t.target.value)}}}),e.selectedFolder?a("span",[a("i",{staticClass:"fa fa-folder"}),e._v(" "+e._s(this.selectedFolder))]):a("span",[a("i",[e._v(e._s(this.config.translations.select_folder_interaction_empty))])]),a("div",{staticClass:"ngremotemedia-buttons"},[e.selectedFolder?a("input",{attrs:{type:"button",value:"Remove folder"},on:{click:e.handleFolderRemove}}):e._e(),a("input",{attrs:{type:"button",value:this.config.translations.select_folder_interaction_button},on:{click:e.handleSelectFolderModalOpen}})]),e.selectFolderModalOpen?a("modal",{attrs:{title:"Select folder"},on:{close:e.handleSelectFolderModalClose}},[a("select-folder",{attrs:{config:e.config,"selected-folder":e.selectedFolder},on:{select:e.handleFolderSelect}})],1):e._e()],1)}),dt=[],ft={name:"SelectFolderInteraction",props:["config","selectedFolder"],components:{"select-folder":He,modal:le},data:function(){return{selectFolderModalOpen:!1}},methods:{handleSelectFolderModalOpen:function(){this.selectFolderModalOpen=!0},handleSelectFolderModalClose:function(){this.selectFolderModalOpen=!1},handleFolderSelect:function(e){this.selectedFolder=e,this.handleSelectFolderModalClose()},handleFolderRemove:function(){this.selectedFolder=null}}},ut=ft,pt=Object(I["a"])(ut,ct,dt,!1,null,null,null),ht=pt.exports;i["default"].config.productionTip=!1,i["default"].use(n.a),i["default"].use(r.a);var gt=function(e){window["ngrm_interactions_vue_".concat(e.dataset.id)]=new i["default"]({el:e,directives:{init:lt},data:{config:{mode:"field",paths:{browse_resources:"/resource/browse",upload_resources:"/resource/upload",load_facets:"/facets/load",load_folders:"/folder/load",create_folder:"/folder/create"},translations:{},inputFields:{locationId:"locationId",remoteId:"remoteId",type:"type",altText:"altText",caption:"caption",altTextOverride:"altTextOverride",captionOverride:"captionOverride",tags:"tags[]",cropSettings:"cropSettings",source:"source",watermarkText:"watermarkText",cssClass:"cssClass",selectedVariation:"selectedVariation"},availableVariations:[],allowedVisibilities:[],allowedTypes:[],allowedTags:[],parentFolder:null,folder:null,uploadContext:{},disableUpload:!1,hideFilename:!1},selectedImage:{id:"",name:"",type:"image",format:"",url:"",browse_url:"",previewUrl:"",alternateText:"",caption:"",watermarkText:"",altTextOverride:"",captionOverride:"",tags:[],size:"",variations:{},height:0,width:0,selectedVariation:null,cssClass:""}},components:{interactions:rt}})},mt=function(e){window["ngrm_select_folder_vue_".concat(e.dataset.id)]=new i["default"]({el:e,directives:{init:lt},data:{config:{paths:{load_folders:"/folder/load",create_folder:"/folder/create"},translations:{},inputFields:{folder:"folder"}},selectedFolder:null},components:{"select-folder-interaction":ht}})},vt=function(){for(var e=document.getElementsByClassName("ngremotemedia-container"),t=0;t {% else %} diff --git a/bundle/Templating/Twig/Extension/RemoteMediaExtension.php b/bundle/Templating/Twig/Extension/RemoteMediaExtension.php index 600a0c1d..34839846 100644 --- a/bundle/Templating/Twig/Extension/RemoteMediaExtension.php +++ b/bundle/Templating/Twig/Extension/RemoteMediaExtension.php @@ -57,6 +57,10 @@ public function getFunctions(): array 'ngrm_remote_resource_html_tag', [RemoteMediaRuntime::class, 'getRemoteResourceHtmlTag'], ), + new TwigFunction( + 'ngrm_remote_resource_location_html_tag', + [RemoteMediaRuntime::class, 'getRemoteResourceLocationHtmlTag'], + ), new TwigFunction( 'ngrm_remote_resource_variation_html_tag', [RemoteMediaRuntime::class, 'getRemoteResourceVariationHtmlTag'], diff --git a/bundle/Templating/Twig/Runtime/RemoteMediaRuntime.php b/bundle/Templating/Twig/Runtime/RemoteMediaRuntime.php index 962ef9f3..8abe768c 100644 --- a/bundle/Templating/Twig/Runtime/RemoteMediaRuntime.php +++ b/bundle/Templating/Twig/Runtime/RemoteMediaRuntime.php @@ -19,6 +19,10 @@ use Twig\Extension\AbstractExtension; use function count; +use function get_debug_type; +use function in_array; +use function method_exists; +use function trigger_deprecation; final class RemoteMediaRuntime extends AbstractExtension { @@ -107,6 +111,36 @@ public function getRemoteResourceHtmlTag(RemoteResource $resource, array $htmlAt return $this->provider->generateHtmlTag($resource, $htmlAttributes, $forceVideo, $useThumbnail); } + public function getRemoteResourceLocationHtmlTag(RemoteResourceLocation $location, array $htmlAttributes = [], bool $forceVideo = false, bool $useThumbnail = false): string + { + // The check and the fallback below will be removed in 4.0, when generateLocationHtmlTag() is added to ProviderInterface. + if (method_exists($this->provider, 'generateLocationHtmlTag')) { + return $this->provider->generateLocationHtmlTag($location, $htmlAttributes, $forceVideo, $useThumbnail); + } + + trigger_deprecation( + 'netgen/remote-media-bundle', + '3.1', + 'Not implementing the "%s::generateLocationHtmlTag()" method in "%s" is deprecated, the method will be added to the interface in 4.0.', + ProviderInterface::class, + get_debug_type($this->provider), + ); + + $type = $location->getRemoteResource()->getType(); + $isRenderedAsImage = $type === RemoteResource::TYPE_IMAGE + || ($useThumbnail && in_array($type, [RemoteResource::TYPE_VIDEO, RemoteResource::TYPE_AUDIO], true)); + + if ($isRenderedAsImage && !($htmlAttributes['alt'] ?? null) && $location->getAltTextOverride() !== null) { + $htmlAttributes['alt'] = $location->getAltTextOverride(); + } + + if ($isRenderedAsImage && !($htmlAttributes['title'] ?? null) && $location->getCaptionOverride() !== null) { + $htmlAttributes['title'] = $location->getCaptionOverride(); + } + + return $this->provider->generateHtmlTag($location->getRemoteResource(), $htmlAttributes, $forceVideo, $useThumbnail); + } + public function getRemoteResourceVariationHtmlTag( RemoteResourceLocation $location, string $variationGroup, diff --git a/composer.json b/composer.json index 4dba01a8..2104aac5 100644 --- a/composer.json +++ b/composer.json @@ -35,6 +35,7 @@ "symfony/form": "^5.4 || ^6.2", "symfony/serializer": "^5.4 || ^6.2", "symfony/translation": "^5.4 || ^6.2", + "symfony/deprecation-contracts": "^2.5 || ^3.0", "doctrine/doctrine-bundle": "^2.4", "doctrine/doctrine-migrations-bundle": "^3.2", "doctrine/orm": "^2.10" diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index f699300b..53c6bb14 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,19 @@ # Netgen Remote Media Bundle changelog +## 3.1.0 + +### Added + +* alt text and caption overrides on `RemoteResourceLocation` (`alt_text_override` and `caption_override` columns), stored only on the location and never sent to the cloud, they take precedence over the values stored on the cloud +* the overrides are editable in the interface (form and CKEditor 5 plugin) next to the cloud values, and configurable for named locations (`alt_text` and `caption`), see [form documentation](FORM.md#alt-text-and-caption-overrides) and [named objects](NAMED_OBJECTS.md) +* `RemoteResourceLocation::getAltText()` and `RemoteResourceLocation::getCaption()` which return the override when it's set and the value from the cloud otherwise +* `ngrm_remote_resource_location_html_tag` TWIG function and `ProviderInterface::generateLocationHtmlTag()` which render the resource of a location with its overrides +* Doctrine migration `Version030100` which adds the two columns + +### Deprecated + +* not implementing `generateLocationHtmlTag()` in custom providers which don't extend `AbstractProvider` is deprecated, the method is declared with `@method` on `ProviderInterface` and will be added to the interface in 4.0, until then the TWIG runtime applies the overrides itself and calls `generateHtmlTag()` for such providers + ## 3.0.3 ### Added diff --git a/docs/FORM.md b/docs/FORM.md index a15fd718..385c3c9c 100644 --- a/docs/FORM.md +++ b/docs/FORM.md @@ -49,6 +49,23 @@ The above example will make sure that, when you select a new resource in the for The reason why we're using `OneToOne` relation here is because the idea is that every usage of a remote resource has it's own location. Things such as cropping settings or watermark text are stored in a location, and you want to have different cropping settings for the same eg. image used on different places. +## Alt text and caption overrides + +Alt text and caption entered in the interface are stored on the resource in the cloud, so changing them updates every location which uses that resource. Each location can additionally have its own alt text and caption override (`altTextOverride` and `captionOverride` fields of the form), stored only on that location and never sent to the cloud. An empty override means that the value from the cloud is used. + +`RemoteResourceLocation::getAltText()` and `RemoteResourceLocation::getCaption()` return the override when it's set and the value from the cloud otherwise, so use them (eg. `location.caption` in TWIG) instead of the ones on the resource when rendering a location: + +```twig +{{ ngrm_remote_resource_variation_html_tag(location, 'default', 'wide') }} +{{ ngrm_remote_resource_location_html_tag(location) }} + +{% if location.caption is not empty %} +
{{ location.caption }}
+{% endif %} +``` + +Both TWIG functions render the overrides as `alt` and `title` attributes of images and video thumbnails, unless those attributes are explicitly provided. `ngrm_remote_resource_html_tag` receives only the resource, so it always uses the values from the cloud. + ## Add field to your form Now when we have the entity configured properly, it's time to add the form field: diff --git a/docs/NAMED_OBJECTS.md b/docs/NAMED_OBJECTS.md index 2e8e3c6d..a0b4bbb0 100644 --- a/docs/NAMED_OBJECTS.md +++ b/docs/NAMED_OBJECTS.md @@ -19,11 +19,13 @@ netgen_remote_media: ### Remote resource location -If you also need a location for that resource, it's possible by using configuration for locations. Configuration consists of key, value pairs, where key is the desired name (eg. `my_resource_location`) and value is another array which accepts three keys: +If you also need a location for that resource, it's possible by using configuration for locations. Configuration consists of key, value pairs, where key is the desired name (eg. `my_resource_location`) and value is another array which accepts the following keys: - `resource_remote_id` - remote ID of the resource on the cloud - `source` (optional) - text that will be used for the location source (eg. `named_my_resource_location`) - `watermark_text` (optional) - watermark text which can be used if a watermaked variation gets built from that location +- `alt_text` (optional) - alt text override for the location, used instead of the alt text stored on the cloud +- `caption` (optional) - caption override for the location, used instead of the caption stored on the cloud Example: @@ -35,6 +37,7 @@ netgen_remote_media: resource_remote_id: 'upload|image|folder/my_resource' source: 'named_my_resource_location' watermark_text: 'Netgen.io' + alt_text: 'Netgen logo' ``` ## Usage diff --git a/docs/UPGRADE.md b/docs/UPGRADE.md index 298f604f..d11850bd 100644 --- a/docs/UPGRADE.md +++ b/docs/UPGRADE.md @@ -1,6 +1,33 @@ Netgen Remote Media Bundle upgrade instructions =============================================== +Upgrade from 3.0.3 to 3.1.0 +--------------------------- + +### Database + +* Version 3.1.0 ships the `Version030100` migration. Run it with: + + ``` + php bin/console doctrine:migrations:migrate --configuration=vendor/netgen/remote-media-bundle/migrations/doctrine.yaml + ``` + +* The migration adds the nullable `alt_text_override` and `caption_override` columns to `ngrm_remote_resource_location`. Existing locations have no overrides, so they keep using the alt text and caption stored on the cloud. +* If the columns already exist (for example, added with `doctrine:schema:update` while testing an untagged version), the migration fails. Mark it as executed instead: + + ``` + php bin/console doctrine:migrations:version 'Netgen\RemoteMedia\Migrations\Doctrine\Version030100' --add --configuration=vendor/netgen/remote-media-bundle/migrations/doctrine.yaml + ``` + +* The `down()` method drops both columns together with the stored overrides. +* If the Doctrine metadata cache is stored outside of the Symfony cache directory (for example in Redis), clear it after the upgrade with `php bin/console doctrine:cache:clear-metadata`. Otherwise Doctrine keeps using the old mapping and loading a location fails with `Typed property Netgen\RemoteMedia\API\Values\RemoteResourceLocation::$altTextOverride must not be accessed before initialization`. + +### Code changes + +* `ProviderInterface` declares the new method `generateLocationHtmlTag()` with `@method`, it will be added to the interface in 4.0. `AbstractProvider` implements it. Custom providers which don't extend `AbstractProvider` keep working, but `ngrm_remote_resource_location_html_tag` triggers a deprecation for them. Implement the method before upgrading to 4.0. +* The overrides are used only where a location is rendered through `ngrm_remote_resource_location_html_tag`, `ngrm_remote_resource_variation_html_tag`, `location.altText` or `location.caption`. Templates which read the values from `location.remoteResource` keep showing the values from the cloud, see [form documentation](FORM.md#alt-text-and-caption-overrides). +* Projects which build the form data of a remote media field manually (outside of the `RemoteMediaType` form, for example in import scripts) must send the current `altTextOverride` and `captionOverride` of the location. A missing key is saved as an empty override, as for the other location fields. + Upgrade from 3.0.1 to 3.0.2 --------------------------- diff --git a/frontend/src/components/Interactions.vue b/frontend/src/components/Interactions.vue index 78f6c6c6..d932eac3 100644 --- a/frontend/src/components/Interactions.vue +++ b/frontend/src/components/Interactions.vue @@ -152,6 +152,8 @@ export default { alternateText: item.altText, caption: item.caption, watermarkText: this.selectedImage.watermarkText, + altTextOverride: '', + captionOverride: '', tags: item.tags, size: item.size, variations: {}, @@ -187,6 +189,8 @@ export default { alternateText: item.altText, caption: item.caption, watermarkText: this.selectedImage.watermarkText, + altTextOverride: '', + captionOverride: '', tags: item.tags, size: item.size, variations: {}, @@ -215,6 +219,8 @@ export default { alternateText: '', caption: '', watermarkText: this.selectedImage.watermarkText, + altTextOverride: '', + captionOverride: '', tags: [], size: 0, variations: {}, diff --git a/frontend/src/components/Preview.vue b/frontend/src/components/Preview.vue index 25247317..5c870432 100644 --- a/frontend/src/components/Preview.vue +++ b/frontend/src/components/Preview.vue @@ -58,6 +58,36 @@ > +
+ + {{this.config.translations.preview_alternate_text_override}} + + + + +
+ +
+ + {{this.config.translations.preview_caption_override}} + + + + +
+
{{this.config.translations.preview_tags}} diff --git a/frontend/src/main.js b/frontend/src/main.js index b547cbb9..ad96f5b8 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -35,6 +35,8 @@ const initInteractionsVue = (el) => { 'type': 'type', 'altText': 'altText', 'caption': 'caption', + 'altTextOverride': 'altTextOverride', + 'captionOverride': 'captionOverride', 'tags': 'tags[]', 'cropSettings': 'cropSettings', 'source': 'source', @@ -63,6 +65,8 @@ const initInteractionsVue = (el) => { alternateText: '', caption: '', watermarkText: '', + altTextOverride: '', + captionOverride: '', tags: [], size: '', variations: {}, diff --git a/frontend/src/scss/ngremotemedia.scss b/frontend/src/scss/ngremotemedia.scss index 04193443..b0210a07 100644 --- a/frontend/src/scss/ngremotemedia.scss +++ b/frontend/src/scss/ngremotemedia.scss @@ -143,7 +143,7 @@ color: #737373; } - input.media-alttext, input.media-caption, input.media-watermarktext, input.media-css-class { + input.media-alttext, input.media-caption, input.media-alttext-override, input.media-caption-override, input.media-watermarktext, input.media-css-class { width: 100%; border-radius: 0; border: 1px solid #e4e4e4; diff --git a/lib/API/ProviderInterface.php b/lib/API/ProviderInterface.php index 96e5beb6..e3d91d04 100644 --- a/lib/API/ProviderInterface.php +++ b/lib/API/ProviderInterface.php @@ -21,6 +21,9 @@ use Netgen\RemoteMedia\Exception\RemoteResourceLocationNotFoundException; use Netgen\RemoteMedia\Exception\RemoteResourceNotFoundException; +/** + * @method string generateLocationHtmlTag(RemoteResourceLocation $location, array $htmlAttributes = [], bool $forceVideo = false, bool $useThumbnail = false) Generates the HTML tag for the resource of the location, using alt text and caption overrides of the location. Not implementing it is deprecated since 3.1, it will be added to the interface in 4.0. + */ interface ProviderInterface { public function getIdentifier(): string; @@ -155,6 +158,14 @@ public function buildVideoThumbnailRawVariation(RemoteResource $resource, array public function generateHtmlTag(RemoteResource $resource, array $htmlAttributes = [], bool $forceVideo = false, bool $useThumbnail = false): string; + /* + * Generates the HTML tag for the resource of the location, using alt text and caption overrides of the location. + * + * Will be added to the interface in 4.0, see the @method annotation of the interface. + * + * public function generateLocationHtmlTag(RemoteResourceLocation $location, array $htmlAttributes = [], bool $forceVideo = false, bool $useThumbnail = false): string; + */ + public function generateVariationHtmlTag( RemoteResourceLocation $location, string $variationGroup, diff --git a/lib/API/Values/RemoteResourceLocation.php b/lib/API/Values/RemoteResourceLocation.php index 201068c1..d51fc8e3 100644 --- a/lib/API/Values/RemoteResourceLocation.php +++ b/lib/API/Values/RemoteResourceLocation.php @@ -6,6 +6,8 @@ use Netgen\RemoteMedia\Exception\CropSettingsNotFoundException; +use function trim; + class RemoteResourceLocation { use TimestampableTrait; @@ -16,7 +18,12 @@ public function __construct( private array $cropSettings = [], private ?string $watermarkText = null, private ?int $id = null, - ) {} + private ?string $altTextOverride = null, + private ?string $captionOverride = null, + ) { + $this->setAltTextOverride($altTextOverride); + $this->setCaptionOverride($captionOverride); + } public function getId(): ?int { @@ -84,12 +91,71 @@ public function setWatermarkText(?string $waterMarkText): self return $this; } + /** + * Alt text local to this location which takes precedence over the alt text of the remote resource. + */ + public function getAltTextOverride(): ?string + { + return $this->altTextOverride; + } + + /** + * Empty (or whitespace only) value removes the override, so the alt text of the remote resource is used. + */ + public function setAltTextOverride(?string $altTextOverride): self + { + $this->altTextOverride = self::normalizeOverride($altTextOverride); + + return $this; + } + + /** + * Caption local to this location which takes precedence over the caption of the remote resource. + */ + public function getCaptionOverride(): ?string + { + return $this->captionOverride; + } + + /** + * Empty (or whitespace only) value removes the override, so the caption of the remote resource is used. + */ + public function setCaptionOverride(?string $captionOverride): self + { + $this->captionOverride = self::normalizeOverride($captionOverride); + + return $this; + } + + /** + * Alt text for this location: local override if set, otherwise the alt text of the remote resource. + */ + public function getAltText(): ?string + { + return $this->altTextOverride ?? $this->remoteResource->getAltText(); + } + + /** + * Caption for this location: local override if set, otherwise the caption of the remote resource. + */ + public function getCaption(): ?string + { + return $this->captionOverride ?? $this->remoteResource->getCaption(); + } + public function refresh(self $remoteResourceLocation): self { $this->setSource($remoteResourceLocation->getSource()); $this->setCropSettings($remoteResourceLocation->getCropSettings()); $this->setWatermarkText($remoteResourceLocation->getWatermarkText()); + $this->setAltTextOverride($remoteResourceLocation->getAltTextOverride()); + $this->setCaptionOverride($remoteResourceLocation->getCaptionOverride()); return $this; } + + private static function normalizeOverride(?string $value): ?string + { + return $value === null || trim($value) === '' ? null : $value; + } } diff --git a/lib/Core/AbstractProvider.php b/lib/Core/AbstractProvider.php index 79cb17ae..78897c80 100644 --- a/lib/Core/AbstractProvider.php +++ b/lib/Core/AbstractProvider.php @@ -23,6 +23,8 @@ use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; +use function in_array; + abstract class AbstractProvider implements ProviderInterface { protected ObjectRepository $resourceRepository; @@ -239,13 +241,20 @@ public function loadNamedRemoteResourceLocation(string $name): RemoteResourceLoc $source = $this->namedRemoteResourceLocations[$name]['source'] ?? 'named_remote_resource_location_' . $name; $watermarkText = $this->namedRemoteResourceLocations[$name]['watermark_text'] ?? null; + $altTextOverride = $this->namedRemoteResourceLocations[$name]['alt_text'] ?? null; + $captionOverride = $this->namedRemoteResourceLocations[$name]['caption'] ?? null; try { $location = $this->loadLocationBySource($source); - if ($location->getWatermarkText() !== $watermarkText) { - $location->setWatermarkText($watermarkText); + $originalValues = [$location->getWatermarkText(), $location->getAltTextOverride(), $location->getCaptionOverride()]; + + $location + ->setWatermarkText($watermarkText) + ->setAltTextOverride($altTextOverride) + ->setCaptionOverride($captionOverride); + if ($originalValues !== [$location->getWatermarkText(), $location->getAltTextOverride(), $location->getCaptionOverride()]) { $this->storeLocation($location); } @@ -263,7 +272,13 @@ public function loadNamedRemoteResourceLocation(string $name): RemoteResourceLoc $this->store($resource); } - $location = new RemoteResourceLocation($resource, $source, [], $watermarkText); + $location = new RemoteResourceLocation( + remoteResource: $resource, + source: $source, + watermarkText: $watermarkText, + altTextOverride: $altTextOverride, + captionOverride: $captionOverride, + ); $this->storeLocation($location); return $location; @@ -324,6 +339,17 @@ public function generateHtmlTag(RemoteResource $resource, array $htmlAttributes return $this->generateRawVariationHtmlTag($resource, [], $htmlAttributes, $forceVideo, $useThumbnail); } + public function generateLocationHtmlTag(RemoteResourceLocation $location, array $htmlAttributes = [], bool $forceVideo = false, bool $useThumbnail = false): string + { + return $this->generateRawVariationHtmlTag( + $location->getRemoteResource(), + [], + $this->applyLocationOverrides($location, $htmlAttributes, $useThumbnail), + $forceVideo, + $useThumbnail, + ); + } + public function generateVariationHtmlTag( RemoteResourceLocation $location, string $variationGroup, @@ -339,7 +365,13 @@ public function generateVariationHtmlTag( $variationName, ); - return $this->generateRawVariationHtmlTag($location->getRemoteResource(), $transformations, $htmlAttributes, $forceVideo, $useThumbnail); + return $this->generateRawVariationHtmlTag( + $location->getRemoteResource(), + $transformations, + $this->applyLocationOverrides($location, $htmlAttributes, $useThumbnail), + $forceVideo, + $useThumbnail, + ); } public function generateRawVariationHtmlTag( @@ -420,4 +452,30 @@ private function loadLocationBySource(string $source): RemoteResourceLocation throw new RemoteResourceLocationNotFoundException(0); } + + /** + * Location overrides take precedence over alt text and caption of the remote resource, but not over explicitly + * provided attributes. Only tags rendered as an image (images and thumbnails) get them, as in generatePictureTag() + * and generateVideoThumbnailTag(). + */ + private function applyLocationOverrides(RemoteResourceLocation $location, array $htmlAttributes, bool $useThumbnail): array + { + $type = $location->getRemoteResource()->getType(); + $isRenderedAsImage = $type === RemoteResource::TYPE_IMAGE + || ($useThumbnail && in_array($type, [RemoteResource::TYPE_VIDEO, RemoteResource::TYPE_AUDIO], true)); + + if (!$isRenderedAsImage) { + return $htmlAttributes; + } + + if (!($htmlAttributes['alt'] ?? null) && $location->getAltTextOverride() !== null) { + $htmlAttributes['alt'] = $location->getAltTextOverride(); + } + + if (!($htmlAttributes['title'] ?? null) && $location->getCaptionOverride() !== null) { + $htmlAttributes['title'] = $location->getCaptionOverride(); + } + + return $htmlAttributes; + } } diff --git a/lib/Core/Provider/Cloudinary/CloudinaryProvider.php b/lib/Core/Provider/Cloudinary/CloudinaryProvider.php index 54bc892f..c9867b28 100644 --- a/lib/Core/Provider/Cloudinary/CloudinaryProvider.php +++ b/lib/Core/Provider/Cloudinary/CloudinaryProvider.php @@ -239,6 +239,8 @@ public function authenticateRemoteResourceLocation(RemoteResourceLocation $locat cropSettings: $location->getCropSettings(), watermarkText: $location->getWatermarkText(), id: $location->getId(), + altTextOverride: $location->getAltTextOverride(), + captionOverride: $location->getCaptionOverride(), ); } diff --git a/lib/Form/DataTransformer/RemoteMediaTransformer.php b/lib/Form/DataTransformer/RemoteMediaTransformer.php index 20f431a1..0eb8f729 100644 --- a/lib/Form/DataTransformer/RemoteMediaTransformer.php +++ b/lib/Form/DataTransformer/RemoteMediaTransformer.php @@ -34,6 +34,8 @@ public function transform($value) 'cropSettings' => $this->service->resolveCropSettingsString($value), 'source' => $value->getSource(), 'watermarkText' => $value->getWatermarkText(), + 'altTextOverride' => $value->getAltTextOverride(), + 'captionOverride' => $value->getCaptionOverride(), ]; } @@ -83,6 +85,8 @@ public function reverseTransform($value) $remoteResourceLocation->setSource($value['source'] ?? null); $remoteResourceLocation->setWatermarkText($value['watermarkText'] ?? null); + $remoteResourceLocation->setAltTextOverride($value['altTextOverride'] ?? null); + $remoteResourceLocation->setCaptionOverride($value['captionOverride'] ?? null); $remoteResourceLocation->setCropSettings( $this->service->resolveCropSettings($value['cropSettings'] ?? null), diff --git a/lib/Form/Type/RemoteMediaType.php b/lib/Form/Type/RemoteMediaType.php index f29279f5..2c8c09ae 100644 --- a/lib/Form/Type/RemoteMediaType.php +++ b/lib/Form/Type/RemoteMediaType.php @@ -52,6 +52,8 @@ public function buildForm(FormBuilderInterface $builder, array $options): void ->add('type', HiddenType::class) ->add('altText', HiddenType::class, ['required' => false]) ->add('caption', HiddenType::class, ['required' => false]) + ->add('altTextOverride', HiddenType::class, ['required' => false]) + ->add('captionOverride', HiddenType::class, ['required' => false]) ->add('watermarkText', HiddenType::class, ['required' => false]) ->add( 'tags', diff --git a/lib/Service/RemoteResourceService.php b/lib/Service/RemoteResourceService.php index f89923c5..2d084048 100644 --- a/lib/Service/RemoteResourceService.php +++ b/lib/Service/RemoteResourceService.php @@ -23,6 +23,8 @@ public function handleLocationUpdate(RemoteResourceLocation $remoteResourceLocat { $remoteResourceLocation->setSource($data['source'] ?? null); $remoteResourceLocation->setWatermarkText($data['watermarkText'] ?? null); + $remoteResourceLocation->setAltTextOverride($data['altTextOverride'] ?? null); + $remoteResourceLocation->setCaptionOverride($data['captionOverride'] ?? null); $remoteResourceLocation->setCropSettings( $this->resolveCropSettings($data['cropSettings'] ?? null), ); diff --git a/migrations/Doctrine/Version030100.php b/migrations/Doctrine/Version030100.php new file mode 100644 index 00000000..a69c0d6f --- /dev/null +++ b/migrations/Doctrine/Version030100.php @@ -0,0 +1,36 @@ +abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on MySQL.'); + + $this->addSql( + <<<'EOT' + ALTER TABLE ngrm_remote_resource_location ADD alt_text_override TEXT DEFAULT NULL, ADD caption_override TEXT DEFAULT NULL + EOT + ); + } + + /** + * Drops the overrides stored in the columns. + */ + public function down(Schema $schema): void + { + $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on MySQL.'); + + $this->addSql( + <<<'EOT' + ALTER TABLE ngrm_remote_resource_location DROP alt_text_override, DROP caption_override + EOT + ); + } +} diff --git a/tests/bundle/Controller/Location/SelectedImageTest.php b/tests/bundle/Controller/Location/SelectedImageTest.php index 4a2c363f..8e2e1ade 100644 --- a/tests/bundle/Controller/Location/SelectedImageTest.php +++ b/tests/bundle/Controller/Location/SelectedImageTest.php @@ -168,6 +168,7 @@ private function getRemoteResourceLocation(RemoteResource $remoteResource): Remo cropSettings: [new CropSettings('testVariation')], watermarkText: 'watermarkText', id: 1, + altTextOverride: 'altTextOverride', ); } @@ -209,6 +210,8 @@ private function getExpectedJsonResponse(?string $type = 'type', ?string $browse 'alternateText' => 'altText', 'caption' => 'caption', 'watermarkText' => 'watermarkText', + 'altTextOverride' => 'altTextOverride', + 'captionOverride' => null, 'tags' => ['test'], 'size' => 0, 'variations' => [ diff --git a/tests/bundle/DependencyInjection/ConfigurationTest.php b/tests/bundle/DependencyInjection/ConfigurationTest.php index 6ae28c92..2b17abce 100644 --- a/tests/bundle/DependencyInjection/ConfigurationTest.php +++ b/tests/bundle/DependencyInjection/ConfigurationTest.php @@ -85,6 +85,8 @@ public function testCompleteConfigurationIsOkAndValid(): void 'resource_remote_id' => 'upload|image|folder/test_resource', 'source' => 'test_resource', 'watermark_text' => 'Netgen', + 'alt_text' => 'Netgen logo', + 'caption' => 'Netgen caption', ], 'test_location2' => [ 'resource_remote_id' => 'upload|image|folder/test_resource2', diff --git a/tests/bundle/DependencyInjection/NetgenRemoteMediaExtensionTest.php b/tests/bundle/DependencyInjection/NetgenRemoteMediaExtensionTest.php index b2e2925b..9237b246 100644 --- a/tests/bundle/DependencyInjection/NetgenRemoteMediaExtensionTest.php +++ b/tests/bundle/DependencyInjection/NetgenRemoteMediaExtensionTest.php @@ -43,6 +43,8 @@ public function testItSetsValidContainerParameters(): void 'resource_remote_id' => 'my_resource_id', 'source' => 'named_my_resource_location', 'watermark_text' => 'Netgen.io', + 'alt_text' => 'Netgen logo', + 'caption' => null, ], ], ); @@ -152,6 +154,7 @@ protected function getMinimalConfiguration(): array 'resource_remote_id' => 'my_resource_id', 'source' => 'named_my_resource_location', 'watermark_text' => 'Netgen.io', + 'alt_text' => 'Netgen logo', ], ], ], diff --git a/tests/bundle/Templating/Twig/Runtime/RemoteMediaRuntimeTest.php b/tests/bundle/Templating/Twig/Runtime/RemoteMediaRuntimeTest.php index 1e271388..1e2fa431 100644 --- a/tests/bundle/Templating/Twig/Runtime/RemoteMediaRuntimeTest.php +++ b/tests/bundle/Templating/Twig/Runtime/RemoteMediaRuntimeTest.php @@ -11,6 +11,7 @@ use Netgen\RemoteMedia\API\Values\RemoteResource; use Netgen\RemoteMedia\API\Values\RemoteResourceLocation; use Netgen\RemoteMedia\API\Values\RemoteResourceVariation; +use Netgen\RemoteMedia\Core\AbstractProvider; use Netgen\RemoteMedia\Core\Provider\Cloudinary\CloudinaryProvider; use Netgen\RemoteMedia\Core\Resolver\Variation as VariationResolver; use Netgen\RemoteMedia\Core\Transformation\Registry; @@ -23,6 +24,12 @@ use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\NullLogger; +use function json_encode; +use function restore_error_handler; +use function set_error_handler; + +use const E_USER_DEPRECATED; + #[CoversClass(RemoteMediaRuntime::class)] final class RemoteMediaRuntimeTest extends AbstractTestCase { @@ -765,4 +772,107 @@ public function testHasFolderScopedUploads(): void self::assertTrue((new RemoteMediaRuntime($provider, $variationResolver, CloudinaryProvider::FOLDER_MODE_DYNAMIC, true))->hasFolderScopedUploads()); self::assertFalse((new RemoteMediaRuntime($provider, $variationResolver, CloudinaryProvider::FOLDER_MODE_DYNAMIC, false))->hasFolderScopedUploads()); } + + public function testGetRemoteResourceLocationHtmlTag(): void + { + $location = new RemoteResourceLocation( + remoteResource: new RemoteResource( + remoteId: 'upload|image|test_image.jpg', + type: 'image', + url: 'https://cloudinary.com/test/upload/image/test_image.jpg', + md5: 'e522f43cf89aa0afd03387c37e2b6e12', + ), + altTextOverride: 'Local alt text', + ); + + $provider = $this->createMock(AbstractProvider::class); + $provider + ->expects(self::once()) + ->method('generateLocationHtmlTag') + ->with($location, ['class' => 'test'], false, false) + ->willReturn('Local alt text'); + + $runtime = new RemoteMediaRuntime($provider, new VariationResolver(new Registry(), null, [])); + + self::assertSame( + 'Local alt text', + $runtime->getRemoteResourceLocationHtmlTag($location, ['class' => 'test']), + ); + } + + public function testGetRemoteResourceLocationHtmlTagWithProviderWithoutMethod(): void + { + $resource = new RemoteResource( + remoteId: 'upload|image|test_image.jpg', + type: 'image', + url: 'https://cloudinary.com/test/upload/image/test_image.jpg', + md5: 'e522f43cf89aa0afd03387c37e2b6e12', + altText: 'Cloud alt text', + caption: 'Cloud caption', + ); + + $location = new RemoteResourceLocation( + remoteResource: $resource, + altTextOverride: 'Local alt text', + captionOverride: 'Local caption', + ); + + $this->providerMock + ->expects(self::once()) + ->method('generateHtmlTag') + ->with($resource, ['class' => 'test', 'alt' => 'Local alt text', 'title' => 'Local caption'], false, false) + ->willReturn('Local alt text'); + + $deprecations = []; + set_error_handler(static function (int $level, string $message) use (&$deprecations): bool { + $deprecations[] = $message; + + return true; + }, E_USER_DEPRECATED); + + try { + $tag = $this->runtime->getRemoteResourceLocationHtmlTag($location, ['class' => 'test']); + } finally { + restore_error_handler(); + } + + self::assertSame('Local alt text', $tag); + self::assertCount(1, $deprecations); + self::assertStringContainsString('generateLocationHtmlTag()', $deprecations[0]); + } + + public function testGetRemoteResourceLocationHtmlTagWithProviderWithoutMethodKeepsExplicitAttributes(): void + { + $resource = new RemoteResource( + remoteId: 'upload|video|test_video', + type: 'video', + url: 'https://cloudinary.com/test/upload/video/test_video', + md5: 'e522f43cf89aa0afd03387c37e2b6e12', + ); + + $location = new RemoteResourceLocation( + remoteResource: $resource, + altTextOverride: 'Local alt text', + captionOverride: 'Local caption', + ); + + $this->providerMock + ->expects(self::exactly(2)) + ->method('generateHtmlTag') + ->willReturnCallback(static fn (RemoteResource $resource, array $htmlAttributes): string => json_encode($htmlAttributes)); + + set_error_handler(static fn (): bool => true, E_USER_DEPRECATED); + + try { + // video without thumbnail is not rendered as an image, so the overrides are not used + self::assertSame('[]', $this->runtime->getRemoteResourceLocationHtmlTag($location)); + // explicit attributes win over the overrides + self::assertSame( + '{"alt":"Explicit alt","title":"Local caption"}', + $this->runtime->getRemoteResourceLocationHtmlTag($location, ['alt' => 'Explicit alt'], false, true), + ); + } finally { + restore_error_handler(); + } + } } diff --git a/tests/lib/API/Values/RemoteResourceLocationTest.php b/tests/lib/API/Values/RemoteResourceLocationTest.php index b66b604b..6522e6d1 100644 --- a/tests/lib/API/Values/RemoteResourceLocationTest.php +++ b/tests/lib/API/Values/RemoteResourceLocationTest.php @@ -210,6 +210,8 @@ public function testRefresh(): void ], 'My watermark', 324, + 'My alt text', + 'My caption', ); $new = new RemoteResourceLocation( @@ -220,6 +222,7 @@ public function testRefresh(): void ], 'My new watermark', 56453, + 'My new alt text', ); $expected = new RemoteResourceLocation( @@ -229,8 +232,67 @@ public function testRefresh(): void new CropSettings('medium', 112, 97, 1200, 800), ], 'My new watermark', + altTextOverride: 'My new alt text', ); self::assertRemoteResourceLocationSame($expected, $original->refresh($new)); } + + public function testOverridesTakePrecedenceOverResourceValues(): void + { + $resource = new RemoteResource( + remoteId: 'test_remote_id', + type: 'image', + url: 'https://cloudinary.com/test/upload/image/test_remote_id', + md5: 'e522f43cf89aa0afd03387c37e2b6e29', + altText: 'Cloud alt text', + caption: 'Cloud caption', + ); + + $location = new RemoteResourceLocation($resource); + + self::assertNull($location->getAltTextOverride()); + self::assertNull($location->getCaptionOverride()); + self::assertSame('Cloud alt text', $location->getAltText()); + self::assertSame('Cloud caption', $location->getCaption()); + + $location + ->setAltTextOverride('Local alt text') + ->setCaptionOverride('Local caption'); + + self::assertSame('Local alt text', $location->getAltText()); + self::assertSame('Local caption', $location->getCaption()); + self::assertSame('Cloud alt text', $resource->getAltText()); + self::assertSame('Cloud caption', $resource->getCaption()); + } + + public function testEmptyOverridesFallBackToResourceValues(): void + { + $resource = new RemoteResource( + remoteId: 'test_remote_id', + type: 'image', + url: 'https://cloudinary.com/test/upload/image/test_remote_id', + md5: 'e522f43cf89aa0afd03387c37e2b6e29', + altText: 'Cloud alt text', + caption: 'Cloud caption', + ); + + $location = new RemoteResourceLocation( + remoteResource: $resource, + altTextOverride: '', + captionOverride: " \n ", + ); + + self::assertNull($location->getAltTextOverride()); + self::assertNull($location->getCaptionOverride()); + self::assertSame('Cloud alt text', $location->getAltText()); + self::assertSame('Cloud caption', $location->getCaption()); + + $location + ->setAltTextOverride('Local alt text') + ->setAltTextOverride(' '); + + self::assertNull($location->getAltTextOverride()); + self::assertSame('Cloud alt text', $location->getAltText()); + } } diff --git a/tests/lib/AbstractTestCase.php b/tests/lib/AbstractTestCase.php index 9732da12..0740655c 100644 --- a/tests/lib/AbstractTestCase.php +++ b/tests/lib/AbstractTestCase.php @@ -197,6 +197,16 @@ public static function assertRemoteResourceLocationSame(RemoteResourceLocation $ $expected->getWatermarkText(), $actual->getWatermarkText(), ); + + self::assertSame( + $expected->getAltTextOverride(), + $actual->getAltTextOverride(), + ); + + self::assertSame( + $expected->getCaptionOverride(), + $actual->getCaptionOverride(), + ); } public static function assertRemoteResourceVariationSame(RemoteResourceVariation $expected, RemoteResourceVariation $actual): void diff --git a/tests/lib/Core/AbstractProviderTest.php b/tests/lib/Core/AbstractProviderTest.php index e68724cb..5598b459 100644 --- a/tests/lib/Core/AbstractProviderTest.php +++ b/tests/lib/Core/AbstractProviderTest.php @@ -120,6 +120,8 @@ protected function setUp(): void 'test_image_location2' => [ 'resource_remote_id' => 'upload|image|media/images/test_image2.jpg', 'watermark_text' => 'This is some watermark', + 'alt_text' => 'Named alt text', + 'caption' => '', ], ]; @@ -933,6 +935,73 @@ public function testLoadExistingNamedRemoteResourceLocationWithNewWatermark(): v ); } + public function testLoadExistingNamedRemoteResourceLocationWithNewAltText(): void + { + $resource = new RemoteResource( + remoteId: 'upload|image|media/images/test_image2.jpg', + type: 'image', + url: 'https://cloudinary.com/upload/image/media/images/test_image2.jpg', + md5: 'e522f43cf89aa0afd03387c37e2b6e29', + altText: 'Cloud alt text', + ); + + $location = new RemoteResourceLocation( + remoteResource: $resource, + source: 'named_remote_resource_location_test_image_location2', + watermarkText: 'This is some watermark', + captionOverride: 'Caption removed from config', + ); + + $this->locationRepository + ->expects(self::once()) + ->method('findOneBy') + ->with(['source' => 'named_remote_resource_location_test_image_location2']) + ->willReturn($location); + + $this->entityManager + ->expects(self::once()) + ->method('persist') + ->with($location); + + $this->entityManager + ->expects(self::once()) + ->method('flush'); + + $loadedLocation = $this->provider->loadNamedRemoteResourceLocation('test_image_location2'); + + self::assertSame('Named alt text', $loadedLocation->getAltText()); + self::assertNull($loadedLocation->getCaptionOverride()); + } + + public function testLoadExistingNamedRemoteResourceLocationWithUnchangedConfig(): void + { + $resource = new RemoteResource( + remoteId: 'upload|image|media/images/test_image2.jpg', + type: 'image', + url: 'https://cloudinary.com/upload/image/media/images/test_image2.jpg', + md5: 'e522f43cf89aa0afd03387c37e2b6e29', + ); + + $location = new RemoteResourceLocation( + remoteResource: $resource, + source: 'named_remote_resource_location_test_image_location2', + watermarkText: 'This is some watermark', + altTextOverride: 'Named alt text', + ); + + $this->locationRepository + ->expects(self::once()) + ->method('findOneBy') + ->with(['source' => 'named_remote_resource_location_test_image_location2']) + ->willReturn($location); + + $this->entityManager + ->expects(self::never()) + ->method('persist'); + + self::assertSame($location, $this->provider->loadNamedRemoteResourceLocation('test_image_location2')); + } + public function testLoadNewNamedRemoteResourceLocationWithExistingResource(): void { $resource = new RemoteResource( @@ -957,7 +1026,12 @@ public function testLoadNewNamedRemoteResourceLocationWithExistingResource(): vo ->with(['remoteId' => 'upload|image|media/images/test_image2.jpg']) ->willReturn($resource); - $location = new RemoteResourceLocation($resource, 'named_remote_resource_location_test_image_location2', [], 'This is some watermark'); + $location = new RemoteResourceLocation( + remoteResource: $resource, + source: 'named_remote_resource_location_test_image_location2', + watermarkText: 'This is some watermark', + altTextOverride: 'Named alt text', + ); $this->entityManager ->expects(self::once()) @@ -1423,6 +1497,134 @@ public function testGenerateVariationHtmlTagThumbnail(): void ); } + public function testGenerateLocationHtmlTagUsesOverrides(): void + { + $resource = new RemoteResource( + remoteId: 'image.jpg', + type: 'image', + url: 'https://cloudinary.com/upload/image/image.jpg', + md5: 'e522f43cf89aa0afd03387c37e2b6e12', + altText: 'Cloud alt text', + caption: 'Cloud caption', + ); + + $location = new RemoteResourceLocation( + remoteResource: $resource, + altTextOverride: 'Local alt text', + captionOverride: 'Local caption', + ); + + $tag = ''; + + $this->provider + ->expects(self::once()) + ->method('generatePictureTag') + ->with($resource, [], ['width' => 200, 'alt' => 'Local alt text', 'title' => 'Local caption']) + ->willReturn($tag); + + self::assertSame( + $tag, + $this->provider->generateLocationHtmlTag($location, ['width' => 200]), + ); + } + + public function testGenerateLocationHtmlTagExplicitAttributesWinOverOverrides(): void + { + $resource = new RemoteResource( + remoteId: 'image.jpg', + type: 'image', + url: 'https://cloudinary.com/upload/image/image.jpg', + md5: 'e522f43cf89aa0afd03387c37e2b6e12', + ); + + $location = new RemoteResourceLocation( + remoteResource: $resource, + altTextOverride: 'Local alt text', + captionOverride: 'Local caption', + ); + + $tag = ''; + + $this->provider + ->expects(self::once()) + ->method('generatePictureTag') + ->with($resource, [], ['alt' => 'Explicit alt text', 'title' => 'Local caption']) + ->willReturn($tag); + + self::assertSame( + $tag, + $this->provider->generateLocationHtmlTag($location, ['alt' => 'Explicit alt text']), + ); + } + + public function testGenerateLocationHtmlTagVideoIgnoresOverrides(): void + { + $resource = new RemoteResource( + remoteId: 'example.mp4', + type: 'video', + url: 'https://cloudinary.com/upload/video/example.mp4', + md5: 'e522f43cf89aa0afd03387c37e2b6e12', + ); + + $location = new RemoteResourceLocation( + remoteResource: $resource, + altTextOverride: 'Local alt text', + captionOverride: 'Local caption', + ); + + $tag = ''; + + $this->provider + ->expects(self::once()) + ->method('generateVideoTag') + ->with($resource, [], ['width' => '100%']) + ->willReturn($tag); + + self::assertSame( + $tag, + $this->provider->generateLocationHtmlTag($location, ['width' => '100%']), + ); + } + + public function testGenerateVariationHtmlTagThumbnailUsesOverrides(): void + { + $resource = new RemoteResource( + remoteId: 'example.mp4', + type: 'video', + url: 'https://cloudinary.com/upload/video/example.mp4', + md5: 'e522f43cf89aa0afd03387c37e2b6e12', + ); + + $location = new RemoteResourceLocation( + remoteResource: $resource, + altTextOverride: 'Local alt text', + ); + + $tag = ''; + + $this->provider + ->expects(self::once()) + ->method('getIdentifier') + ->willReturn('cloudinary'); + + $this->formatHandler + ->expects(self::once()) + ->method('process') + ->with(['mp4']) + ->willReturn(['fetch_format' => 'mp4']); + + $this->provider + ->expects(self::once()) + ->method('generateVideoThumbnailTag') + ->with($resource, [['fetch_format' => 'mp4']], ['alt' => 'Local alt text']) + ->willReturn($tag); + + self::assertSame( + $tag, + $this->provider->generateVariationHtmlTag($location, 'article', 'mp4', [], false, true), + ); + } + public function testGenerateRawVariationHtmlTagAudio(): void { $resource = new RemoteResource( diff --git a/tests/lib/Form/DataTransformer/RemoteMediaTransformerTest.php b/tests/lib/Form/DataTransformer/RemoteMediaTransformerTest.php index c6c2092e..38868363 100644 --- a/tests/lib/Form/DataTransformer/RemoteMediaTransformerTest.php +++ b/tests/lib/Form/DataTransformer/RemoteMediaTransformerTest.php @@ -212,6 +212,60 @@ public function testReverseTransformWithExistingLocation(): void ); } + public function testReverseTransformWithOverridesDoesNotUpdateRemote(): void + { + $data = [ + 'locationId' => 5, + 'remoteId' => 'upload|image|media/images/example.jpg', + 'type' => 'image', + 'altText' => 'Cloud alt text', + 'caption' => 'Cloud caption', + 'tags' => ['tag1'], + 'cropSettings' => null, + 'altTextOverride' => 'Local alt text', + 'captionOverride' => ' ', + ]; + + $location = new RemoteResourceLocation( + remoteResource: new RemoteResource( + remoteId: 'upload|image|media/images/example.jpg', + type: 'image', + url: 'https://cloudinary.com/test/upload/image/media/images/example.jpg', + md5: 'e522f43cf89aa0afd03387c37e2b6e29', + name: 'example.jpg', + altText: 'Cloud alt text', + caption: 'Cloud caption', + tags: ['tag1'], + ), + id: 5, + captionOverride: 'Old local caption', + ); + + $this->providerMock + ->expects(self::once()) + ->method('loadByRemoteId') + ->with('upload|image|media/images/example.jpg') + ->willReturn($location->getRemoteResource()); + + $this->providerMock + ->expects(self::once()) + ->method('loadLocation') + ->with(5) + ->willReturn($location); + + $this->providerMock + ->expects(self::never()) + ->method('updateOnRemote'); + + $result = $this->dataTransformer->reverseTransform($data); + + self::assertSame('Local alt text', $result->getAltTextOverride()); + self::assertNull($result->getCaptionOverride()); + self::assertSame('Local alt text', $result->getAltText()); + self::assertSame('Cloud caption', $result->getCaption()); + self::assertSame('Cloud alt text', $result->getRemoteResource()->getAltText()); + } + public function testReverseTransformWithResourceNotExistingOnRemoteAnymore(): void { $data = [ @@ -437,6 +491,8 @@ public static function transformDataProvider(): iterable 'cropSettings' => '{"hero_image":{"x":10,"y":20,"w":1920,"h":1080}}', 'source' => null, 'watermarkText' => null, + 'altTextOverride' => null, + 'captionOverride' => null, ], ], [ @@ -450,6 +506,8 @@ public static function transformDataProvider(): iterable ), source: 'my_source', watermarkText: 'This is a watermark', + altTextOverride: 'Local alt text', + captionOverride: 'Local caption', ), [ 'locationId' => null, @@ -461,6 +519,8 @@ public static function transformDataProvider(): iterable 'cropSettings' => '[]', 'source' => 'my_source', 'watermarkText' => 'This is a watermark', + 'altTextOverride' => 'Local alt text', + 'captionOverride' => 'Local caption', ], ], ]; diff --git a/tests/lib/Form/Type/RemoteMediaTypeTest.php b/tests/lib/Form/Type/RemoteMediaTypeTest.php index e77e6bf2..3faee9bb 100644 --- a/tests/lib/Form/Type/RemoteMediaTypeTest.php +++ b/tests/lib/Form/Type/RemoteMediaTypeTest.php @@ -129,6 +129,8 @@ public static function submitDataProvider(): iterable 'cropSettings' => '{"hero_image": {"x": 10, "y": 20, "w": 1920, "h": 1080}}', 'source' => null, 'watermarkText' => 'This is a watermark', + 'altTextOverride' => 'Local alt text', + 'captionOverride' => 'Local caption', ], [], [ @@ -141,6 +143,8 @@ public static function submitDataProvider(): iterable 'cropSettings' => '{"hero_image": {"x": 10, "y": 20, "w": 1920, "h": 1080}}', 'source' => null, 'watermarkText' => 'This is a watermark', + 'altTextOverride' => 'Local alt text', + 'captionOverride' => 'Local caption', ], new RemoteResourceLocation( remoteResource: new RemoteResource( @@ -155,6 +159,8 @@ public static function submitDataProvider(): iterable new CropSettings('hero_image', 10, 20, 1920, 1080), ], watermarkText: 'This is a watermark', + altTextOverride: 'Local alt text', + captionOverride: 'Local caption', ), [ 'locationId' => null, @@ -162,6 +168,8 @@ public static function submitDataProvider(): iterable 'type' => 'image', 'altText' => 'Test alt text', 'caption' => 'Test caption', + 'altTextOverride' => 'Local alt text', + 'captionOverride' => 'Local caption', 'watermarkText' => 'This is a watermark', 'tags' => ['example', 'image', 'test'], 'cropSettings' => '{"hero_image": {"x": 10, "y": 20, "w": 1920, "h": 1080}}', @@ -202,6 +210,8 @@ public static function submitDataProvider(): iterable 'cropSettings' => null, 'source' => 'Test source', 'watermarkText' => null, + 'altTextOverride' => null, + 'captionOverride' => null, ], new RemoteResourceLocation( new RemoteResource( @@ -219,6 +229,8 @@ public static function submitDataProvider(): iterable 'type' => 'image', 'altText' => null, 'caption' => null, + 'altTextOverride' => null, + 'captionOverride' => null, 'watermarkText' => null, 'tags' => [], 'cropSettings' => null, @@ -268,6 +280,8 @@ public static function submitDataProvider(): iterable 'cropSettings' => null, 'source' => 'Test source', 'watermarkText' => null, + 'altTextOverride' => null, + 'captionOverride' => null, ], new RemoteResourceLocation( new RemoteResource( @@ -285,6 +299,8 @@ public static function submitDataProvider(): iterable 'type' => 'image', 'altText' => null, 'caption' => null, + 'altTextOverride' => null, + 'captionOverride' => null, 'watermarkText' => null, 'tags' => [], 'cropSettings' => null,