text: (function () {
      'use strict';
  
      var defaults = {
          rotate: true,
          rotateLeft: true,
          rotateRight: true,
          flipHorizontal: true,
          flipVertical: true,
      };
  
      var Rotate = function (element) {
          this.core = $(element).data('lightGallery');
  
          this.core.s = $.extend({}, defaults, this.core.s);
  
          if (this.core.s.rotate && this.core.doCss()) {
              this.init();
          }
  
          return this;
      };
  
      Rotate.prototype.buildTemplates = function () {
          var rotateIcons = '';
          if (this.core.s.flipVertical) {
              rotateIcons += '<button aria-label="Flip vertical" class="lg-flip-ver lg-icon"></button>';
          }
          if (this.core.s.flipHorizontal) {
              rotateIcons += '<button aria-label="flip horizontal" class="lg-flip-hor lg-icon"></button>';
          }
          if (this.core.s.rotateLeft) {
              rotateIcons += '<button aria-label="Rotate left" class="lg-rotate-left lg-icon"></button>';
          }
          if (this.core.s.rotateRight) {
              rotateIcons += '<button aria-label="Rotate right" class="lg-rotate-right lg-icon"></button>';
          }
          this.core.$outer.find('.lg-toolbar').append(rotateIcons);
      };
  
      Rotate.prototype.init = function () {
          var _this = this;
          this.buildTemplates();
  
          // Save rotate config for each item to persist its rotate, flip values
          // even after navigating to diferent slides
          this.rotateValuesList = {};
  
  
          // event triggered after appending slide content
          this.core.$el.on('onAferAppendSlide.lg.tm.rotate', function (event, index) {
              // Get the current element
              var $imageWrap = _this.core.$slide.eq(index).find('.lg-img-wrap');
              $imageWrap.wrap('<div class="lg-img-rotate"></div>');
          });
  
          this.core.$outer
              .find('.lg-rotate-left')
              .on('click.lg', this.rotateLeft.bind(this));
  
          this.core.$outer
              .find('.lg-rotate-right')
              .on('click.lg', this.rotateRight.bind(this));
          this.core.$outer
              .find('.lg-flip-hor')
              .on('click.lg', this.flipHorizontal.bind(this));
  
          this.core.$outer
              .find('.lg-flip-ver')
              .on('click.lg', this.flipVertical.bind(this));
  
          // Reset rotate on slide change
          this.core.$el.on('onBeforeSlide.lg.tm.rotate', function (event, prevIndex, index) {
              if (!_this.rotateValuesList[index]) {
                  _this.rotateValuesList[index] = {
                      rotate: 0,
                      flipHorizontal: 1,
                      flipVertical: 1,
                  };
              }
          });
      };
  
      Rotate.prototype.applyStyles = function () {
          var $image = this.core.$slide.eq(this.core.index).find('.lg-img-rotate');
          $image.css(
              'transform',
              'rotate(' + this.rotateValuesList[this.core.index].rotate + 'deg)' +
              ' scale3d(' + this.rotateValuesList[this.core.index].flipHorizontal +
              ', ' + this.rotateValuesList[this.core.index].flipVertical + ', 1)'
          );
      };
  
      Rotate.prototype.getCurrentRotation = function (el) {
          if (!el) {
              return 0;
          }
          var st = window.getComputedStyle(el, null);
          var tm = st.getPropertyValue('-webkit-transform') ||
              st.getPropertyValue('-moz-transform') ||
              st.getPropertyValue('-ms-transform') ||
              st.getPropertyValue('-o-transform') ||
              st.getPropertyValue('transform') ||
              'none';
          if (tm !== 'none') {
              var values = tm.split('(')[1].split(')')[0].split(',');
              if (values) {
                  var angle = Math.round(Math.atan2(values[1], values[0]) * (180 / Math.PI));
                  return (angle < 0 ? angle + 360 : angle);
              }
          }
          return 0;
      };
  
      Rotate.prototype.rotateLeft = function () {
          this.rotateValuesList[this.core.index].rotate -= 90;
          this.applyStyles();
      };
  
      Rotate.prototype.rotateRight = function () {
          this.rotateValuesList[this.core.index].rotate += 90;
          this.applyStyles();
      };
  
      Rotate.prototype.flipHorizontal = function () {
          var $image = this.core.$slide.eq(this.core.index).find('.lg-img-rotate')[0];
          var currentRotation = this.getCurrentRotation($image);
          var rotateAxis = 'flipHorizontal';
          if (currentRotation === 90 || currentRotation === 270) {
              rotateAxis = 'flipVertical';
          }
          this.rotateValuesList[this.core.index][rotateAxis] *= -1;
          this.applyStyles();
      };
  
      Rotate.prototype.flipVertical = function () {
          var $image = this.core.$slide.eq(this.core.index).find('.lg-img-rotate')[0];
          var currentRotation = this.getCurrentRotation($image);
          var rotateAxis = 'flipVertical';
          if (currentRotation === 90 || currentRotation === 270) {
              rotateAxis = 'flipHorizontal';
          }
          this.rotateValuesList[this.core.index][rotateAxis] *= -1;
          this.applyStyles();
      };
  
      Rotate.prototype.destroy = function () {
          // Unbind all events added by lightGallery rotate plugin
          this.core.$el.off('.lg.tm.rotate');
          this.rotateValuesList = {};
      };
  
      $.fn.lightGallery.modules.rotate = Rotate;
  })();
  