{"version":3,"names":["window","require","registerSettings","button_text","add_images_prompt","button_icon","image_order","auto_enabled","auto_images_required","auto_allow_empty_line","auto_hide_button","auto_enabled_categories","auto_disabled_categories","define","_exports","_pluginApi","Object","defineProperty","value","default","settings","getObjectForTheme","name","after","initialize","withPluginApi","api","componentName","documentWidth","document","documentElement","clientWidth","mobileView","querySelector","currentCategory","defaultOrder","autoGalleryEnabled","autoImagesRequired","autoAllowEmptyLine","autoHideButton","autoEnabledCategories","toLowerCase","split","autoDisabledCategories","cookedWidth","previwWidth","numberOfColumns","matchMedia","matches","cookedColumnWidth","Math","floor","previewColumnWidth","translations","I18n","currentLocale","js","composer","masonry_gallery_button_text","masonry_gallery_add_images_prompt","observes","modifyClass","dt7948","p","pluginId","storePreviewCategory","model","this","get","categoryName","didInsertElement","_super","arguments","getVerticalOrderHeight","heightsArray","length","max","apply","reduce","a","b","previousHighestColumn","i","columnHeight1","slice","columnHeight2","min","decorateCookedElement","cooked","className","columnWidth","everyCategoryAutoEnabled","currentCategoryAutoEnabled","includes","currentCategoryAutoDisabled","currentCategoryEnabled","nonGalleryDiv","nonThumbnailImg","lightboxImg","previewImg","everyImage","galleryArray","imageCount","endGallery","element","galleryDiv","createElement","setAttribute","parentNode","insertBefore","map","appendChild","querySelectorAll","children","forEach","index","array","push","tagName","childNodes","node","nodeType","textContent","childElementCount","isPreview","autoAddGallery","gallery","images","gridView","horizontalOrder","startsWith","attributeValue","getAttribute","firstChild","remove","imageHeightsWithPaddingGrid","image","style","order","newHeight","insideImage","getElementsByTagName","height","width","highestColumnWithPadding","columnHeightsWithPadding","imageCol","onlyStream","id","onToolbarCreate","toolbar","addButton","trimLeading","group","icon","title","perform","e","applySurround","multiline"],"sourceRoot":"theme-7/","sources":["settings.js","discourse/initializers/theme-field-139-common-html-script-1.js"],"sourcesContent":["(function() {\n  if ('require' in window) {\n    require(\"discourse/lib/theme-settings-store\").registerSettings(7, {\"button_text\":\"Image Gallery\",\"add_images_prompt\":\"Add images\",\"button_icon\":\"table-cells\",\"image_order\":\"horizontal\",\"auto_enabled\":false,\"auto_images_required\":3,\"auto_allow_empty_line\":false,\"auto_hide_button\":false,\"auto_enabled_categories\":\"\",\"auto_disabled_categories\":\"\"});\n  }\n})();\n","if ('define' in window) {\ndefine(\"discourse/theme-7/discourse/initializers/theme-field-139-common-html-script-1\", [\"exports\", \"discourse/lib/plugin-api\"], function (_exports, _pluginApi) {\n  \"use strict\";\n\n  Object.defineProperty(_exports, \"__esModule\", {\n    value: true\n  });\n  _exports.default = void 0;\n  const settings = require(\"discourse/lib/theme-settings-store\").getObjectForTheme(7);\n  const themePrefix = key => `theme_translations.7.${key}`;\n  var _default = _exports.default = {\n    name: \"theme-field-139-common-html-script-1\",\n    after: \"inject-objects\",\n    initialize() {\n      (0, _pluginApi.withPluginApi)(\"0.8.42\", api => {\n        let componentSelector = 'div[data-masonry-gallery]',\n          componentName = 'data-masonry-gallery',\n          padding = 6,\n          documentWidth = document.documentElement.clientWidth,\n          mobileView = !!document.querySelector(\"html.mobile-view\"),\n          currentCategory = \"\",\n          defaultOrder = settings.image_order,\n          autoGalleryEnabled = settings.auto_enabled,\n          autoImagesRequired = settings.auto_images_required,\n          autoAllowEmptyLine = settings.auto_allow_empty_line,\n          autoHideButton = settings.auto_hide_button,\n          autoEnabledCategories = settings.auto_enabled_categories.toLowerCase().split('|'),\n          autoDisabledCategories = settings.auto_disabled_categories.toLowerCase().split('|');\n        let cookedWidth = 690,\n          previwWidth = 690,\n          numberOfColumns = window.matchMedia('(max-width: 774px)').matches ? 2 : 3;\n        if (mobileView && documentWidth > 890) {\n          numberOfColumns = 2;\n          cookedWidth = 550;\n          previwWidth = 550;\n        } else if (mobileView) {\n          cookedWidth = documentWidth - 21;\n          previwWidth = documentWidth - 20;\n        } else if (documentWidth < 758) {\n          cookedWidth = documentWidth - 70;\n          previwWidth = documentWidth - 418;\n        } else if (documentWidth < 774) {\n          cookedWidth = documentWidth - 86;\n          previwWidth = documentWidth * 0.43;\n        } else if (documentWidth < 865) {\n          previwWidth = documentWidth * 0.43;\n        } else if (documentWidth < 1475) {\n          previwWidth = documentWidth * 0.45;\n        }\n        let cookedColumnWidth = Math.floor((cookedWidth - numberOfColumns * padding) / numberOfColumns);\n        let previewColumnWidth = Math.floor((previwWidth - numberOfColumns * padding) / numberOfColumns);\n        let translations = I18n.translations[I18n.currentLocale()].js;\n        if (!translations) {\n          translations = {};\n        }\n        if (!translations.composer) {\n          translations.composer = {};\n        }\n        translations.masonry_gallery_button_text = settings.button_text;\n        translations.composer.masonry_gallery_add_images_prompt = settings.add_images_prompt;\n        if (autoGalleryEnabled) {\n          const {\n            observes\n          } = require('discourse-common/utils/decorators');\n          api.modifyClass(\"controller:composer\", dt7948.p({\n            pluginId: componentName,\n            storePreviewCategory() {\n              let model = this.get(\"model\");\n              if (model) {\n                let categoryName = model.get(\"category.name\");\n                currentCategory = !categoryName ? \"EMPTY\" : categoryName.toLowerCase();\n              }\n            }\n          }, [[\"method\", \"storePreviewCategory\", [observes('model.categoryId')]]]));\n          api.modifyClass(\"component:discourse-topic\", {\n            pluginId: componentName,\n            didInsertElement: function () {\n              this._super(...arguments);\n              let categoryName = this.get(\"topic.category.name\");\n              currentCategory = !categoryName ? \"EMPTY\" : categoryName.toLowerCase();\n            }\n          });\n        }\n        function autoAddGallery(cooked) {\n          let nonGalleryDiv = \"div:not([data-masonry-gallery])\";\n          let nonThumbnailImg = \"img:not(.emoji)\" + \":not(.thumbnail)\" + \":not(.site-icon)\" + \":not(.avatar)\" + \":not(.ytp-thumbnail-image)\" + \":not(.instagram-image)\";\n          let lightboxImg = \".lightbox-wrapper\";\n          let previewImg = \".image-wrapper\";\n          let everyImage = nonGalleryDiv + \">\" + lightboxImg + \",\" + nonGalleryDiv + \"> p >\" + previewImg + \",\" + nonGalleryDiv + \">\" + nonThumbnailImg + \",\" + nonGalleryDiv + \"> p >\" + nonThumbnailImg;\n          let galleryArray = [];\n          let imageCount = 0;\n          let numberOfImages = cooked.querySelectorAll(everyImage).length;\n          if (numberOfImages < autoImagesRequired) return;\n          function endGallery(element) {\n            if (imageCount != 0 && imageCount >= autoImagesRequired) {\n              let galleryDiv = document.createElement('div');\n              galleryDiv.setAttribute(componentName, \"\");\n              galleryArray[0].parentNode.insertBefore(galleryDiv, galleryArray[0]);\n              galleryArray.map(element => galleryDiv.appendChild(element));\n            }\n            galleryArray = [];\n            imageCount = 0;\n          }\n          [...cooked.children].forEach((element, index, array) => {\n            if (element.matches(nonThumbnailImg + \",\" + lightboxImg)) {\n              imageCount++;\n              galleryArray.push(element);\n            } else if (element.tagName == \"BR\") {\n              galleryArray.push(element);\n            } else if (element.tagName == \"P\") {\n              [...element.childNodes].forEach(node => {\n                if (node.nodeType == 1 && node.matches(nonThumbnailImg + \",\" + previewImg)) {\n                  imageCount++;\n                  galleryArray.push(node);\n                } else if (node.tagName == \"BR\" || node.textContent == \"\\n\") {\n                  galleryArray.push(node);\n                } else {\n                  endGallery(element);\n                }\n              });\n              if (!autoAllowEmptyLine && element.childElementCount == 0) {\n                endGallery(element);\n              }\n            } else {\n              endGallery(element);\n            }\n            let isPreview = cooked.className == \"d-editor-preview\";\n            if (index == array.length - 1 || isPreview && !autoAllowEmptyLine) {\n              endGallery(element);\n            }\n          });\n        }\n        function currentCategoryEnabled() {\n          let everyCategoryAutoEnabled = autoEnabledCategories == \"\";\n          let currentCategoryAutoEnabled = autoEnabledCategories.includes(currentCategory);\n          let currentCategoryAutoDisabled = autoDisabledCategories.includes(currentCategory);\n          return (everyCategoryAutoEnabled || currentCategoryAutoEnabled) && !currentCategoryAutoDisabled;\n        }\n        function getVerticalOrderHeight(heightsArray, numberOfColumns) {\n          if (heightsArray.length == 0) return 0;\n          if (heightsArray.length <= numberOfColumns) return Math.max.apply(null, heightsArray);\n          if (numberOfColumns == 1) return heightsArray.reduce((a, b) => a + b, 0);\n          let previousHighestColumn = 0;\n          for (let i = 0; i < heightsArray.length; i++) {\n            let columnHeight1 = getVerticalOrderHeight(heightsArray.slice(0, i + 1), 1);\n            let columnHeight2 = getVerticalOrderHeight(heightsArray.slice(i + 1), numberOfColumns - 1);\n            if (columnHeight1 >= columnHeight2) {\n              return i == 0 ? columnHeight1 : Math.min(previousHighestColumn, columnHeight1);\n            }\n            previousHighestColumn = columnHeight2;\n          }\n        }\n        function componentPrep(cooked) {\n          let className = cooked.className;\n          if (className != \"d-editor-preview\" && className != \"cooked\") return;\n          let isCooked = cooked.className == \"cooked\";\n          let columnWidth = isCooked ? cookedColumnWidth : previewColumnWidth;\n          if (autoGalleryEnabled && currentCategoryEnabled()) {\n            autoAddGallery(cooked);\n          }\n          cooked.querySelectorAll(componentSelector).forEach(gallery => {\n            let images = gallery.querySelectorAll(\".lightbox-wrapper, p > img, div > img, .image-wrapper > img\");\n            if (images.length == 0) return;\n            let gridView = false;\n            let horizontalOrder = defaultOrder.startsWith(\"h\");\n            let attributeValue = gallery.getAttribute(componentName);\n            if (attributeValue.startsWith(\"v\")) horizontalOrder = false;\n            if (attributeValue.startsWith(\"h\")) horizontalOrder = true;\n            if (attributeValue.startsWith(\"g\")) gridView = true;\n            while (gallery.firstChild) {\n              gallery.firstChild.remove();\n            }\n            let imageHeightsWithPaddingGrid = [[], [], []];\n            images.forEach((image, index) => {\n              if (horizontalOrder && !gridView) image.style.order = 1 + index % numberOfColumns;\n              gallery.appendChild(image);\n              let insideImage = image.getElementsByTagName(\"img\");\n              let newHeight;\n              if (insideImage.length != 0) {\n                newHeight = Math.floor(insideImage[0].height * columnWidth / insideImage[0].width);\n              } else {\n                newHeight = Math.floor(image.height * columnWidth / image.width);\n              }\n              image.style.height = newHeight + \"px\";\n              image.style.width = columnWidth + \"px\";\n              imageHeightsWithPaddingGrid[horizontalOrder ? index % numberOfColumns : 0].push(newHeight + padding);\n            });\n            if (gridView) return;\n            let highestColumnWithPadding = 0;\n            if (horizontalOrder) {\n              let columnHeightsWithPadding = imageHeightsWithPaddingGrid.map(imageCol => {\n                return imageCol.reduce((a, b) => a + b, 0);\n              });\n              highestColumnWithPadding = Math.max.apply(null, columnHeightsWithPadding);\n            } else {\n              highestColumnWithPadding = getVerticalOrderHeight(imageHeightsWithPaddingGrid[0], numberOfColumns);\n            }\n            gallery.style.height = highestColumnWithPadding + \"px\";\n          });\n        }\n        ;\n        api.decorateCookedElement(componentPrep, {\n          onlyStream: false,\n          id: 'masonry-gallery'\n        });\n        api.onToolbarCreate(function (toolbar) {\n          if (autoHideButton) return;\n          toolbar.addButton({\n            trimLeading: true,\n            id: \"masonry-gallery\",\n            group: \"insertions\",\n            icon: settings.button_icon,\n            title: \"masonry_gallery_button_text\",\n            perform: e => e.applySurround(\"<div data-masonry-gallery>\\n\\n\", \"\\n\\n</div>\", \"masonry_gallery_add_images_prompt\", {\n              multiline: false\n            })\n          });\n        });\n      });\n    }\n  };\n});\n}\n"],"mappings":"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","ignoreList":[]}