{"version":3,"file":"virtual_main.js","sources":["theme-7/virtual:init-settings","theme-7/virtual:theme","theme-7/discourse/components/topic-list-thumbnail.gjs","theme-7/discourse/lib/masonry-calculator.js","theme-7/discourse/connectors/before-topic-list-body/topic-list-masonry-styles.gjs","theme-7/discourse/initializers/topic-thumbnails-init.gjs","theme-7/discourse/services/topic-thumbnails.js","theme-7/virtual:main"],"sourcesContent":["import { registerSettings } from \"discourse/lib/theme-settings-store\";\n\nregisterSettings(7, {\n  \"default_thumbnail_mode\": \"none\",\n  \"docs_thumbnail_mode\": \"none\",\n  \"blog_style_categories\": \"\",\n  \"minimal_grid_categories\": \"\",\n  \"grid_categories\": \"49\",\n  \"masonry_categories\": \"\",\n  \"list_categories\": \"\",\n  \"blog_style_tags\": \"\",\n  \"minimal_grid_tags\": \"\",\n  \"grid_tags\": \"官方评测\",\n  \"masonry_tags\": \"\",\n  \"list_tags\": \"\",\n  \"suggested_topics_mode\": \"\",\n  \"enable_outside_topic_lists\": false,\n  \"placeholder_icon\": \"comments\",\n  \"mobile_thumbnails\": true,\n  \"list_thumbnail_size\": 200\n});\n","import { getObjectForTheme } from \"discourse/lib/theme-settings-store\";\n\nexport const settings = getObjectForTheme(7);\n\nexport function themePrefix(key) {\n  return `theme_translations.7.${key}`;\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport coldAgeClass from \"discourse/helpers/cold-age-class\";\nimport concatClass from \"discourse/helpers/concat-class\";\nimport dIcon from \"discourse/helpers/d-icon\";\nimport formatDate from \"discourse/helpers/format-date\";\n\nexport default class TopicListThumbnail extends Component {\n  @service topicThumbnails;\n\n  responsiveRatios = [1, 1.5, 2];\n\n  // Make sure to update about.json thumbnail sizes if you change these variables\n  get displayWidth() {\n    return this.topicThumbnails.displayList\n      ? settings.list_thumbnail_size\n      : 400;\n  }\n\n  get topic() {\n    return this.args.topic;\n  }\n\n  get hasThumbnail() {\n    return !!this.topic.thumbnails;\n  }\n\n  get srcSet() {\n    const srcSetArray = [];\n\n    this.responsiveRatios.forEach((ratio) => {\n      const target = ratio * this.displayWidth;\n      const match = this.topic.thumbnails.find(\n        (t) => t.url && t.max_width === target\n      );\n      if (match) {\n        srcSetArray.push(`${match.url} ${ratio}x`);\n      }\n    });\n\n    if (srcSetArray.length === 0) {\n      srcSetArray.push(`${this.original.url} 1x`);\n    }\n\n    return srcSetArray.join(\",\");\n  }\n\n  get original() {\n    return this.topic.thumbnails[0];\n  }\n\n  get width() {\n    return this.original.width;\n  }\n\n  get isLandscape() {\n    return this.original.width >= this.original.height;\n  }\n\n  get height() {\n    return this.original.height;\n  }\n\n  get fallbackSrc() {\n    const largeEnough = this.topic.thumbnails.filter((t) => {\n      if (!t.url) {\n        return false;\n      }\n      return t.max_width > this.displayWidth * this.responsiveRatios.lastObject;\n    });\n\n    if (largeEnough.lastObject) {\n      return largeEnough.lastObject.url;\n    }\n\n    return this.original.url;\n  }\n\n  get url() {\n    return this.topic.get(\"linked_post_number\")\n      ? this.topic.urlForPostNumber(this.topic.get(\"linked_post_number\"))\n      : this.topic.get(\"lastUnreadUrl\");\n  }\n\n  <template>\n    <div\n      class={{concatClass\n        \"topic-list-thumbnail\"\n        (if this.hasThumbnail \"has-thumbnail\" \"no-thumbnail\")\n      }}\n    >\n      <a href={{this.url}} aria-label={{this.topic.title}}>\n        {{#if this.hasThumbnail}}\n          <img\n            class=\"background-thumbnail\"\n            src={{this.fallbackSrc}}\n            srcset={{this.srcSet}}\n            width={{this.width}}\n            height={{this.height}}\n            loading=\"lazy\"\n          />\n          <img\n            class=\"main-thumbnail\"\n            src={{this.fallbackSrc}}\n            srcset={{this.srcSet}}\n            width={{this.width}}\n            height={{this.height}}\n            loading=\"lazy\"\n          />\n        {{else}}\n          <div class=\"thumbnail-placeholder\">\n            {{dIcon settings.placeholder_icon}}\n          </div>\n        {{/if}}\n      </a>\n    </div>\n\n    {{#if this.topicThumbnails.showLikes}}\n      <div class=\"topic-thumbnail-likes\">\n        {{dIcon \"heart\"}}\n        <span class=\"number\">\n          {{this.topic.like_count}}\n        </span>\n      </div>\n    {{/if}}\n\n    {{#if this.topicThumbnails.displayBlogStyle}}\n      <div class=\"topic-thumbnail-blog-data\">\n        <div class=\"topic-thumbnail-blog-data-views\">\n          {{dIcon \"eye\"}}\n          <span class=\"number\">\n            {{this.topic.views}}\n          </span>\n        </div>\n        <div class=\"topic-thumbnail-blog-data-likes\">\n          {{dIcon \"heart\"}}\n          <span class=\"number\">\n            {{this.topic.like_count}}\n          </span>\n        </div>\n        <div class=\"topic-thumbnail-blog-data-comments\">\n          {{dIcon \"comment\"}}\n          <span class=\"number\">\n            {{this.topic.reply_count}}\n          </span>\n        </div>\n        <div\n          class={{concatClass\n            \"topic-thumbnail-blog-data-activity\"\n            \"activity\"\n            (coldAgeClass\n              this.topic.createdAt startDate=this.topic.bumpedAt class=\"\"\n            )\n          }}\n          title={{this.topic.bumpedAtTitle}}\n        >\n          <a class=\"post-activity\" href={{this.topic.lastPostUrl}}>\n            {{~formatDate this.topic.bumpedAt format=\"tiny\" noTitle=\"true\"~}}\n          </a>\n        </div>\n      </div>\n    {{/if}}\n  </template>\n}\n","import { htmlSafe } from \"@ember/template\";\n\nexport default class MasonryCalculator {\n  masonryTargetColumnWidth = 300;\n  gridSpacingPixels = 10;\n  masonryTitleSpacePixels = 76;\n  masonryDefaultAspect = 1.3;\n  masonryMinAspect = 0.7;\n\n  topics;\n  masonryContainerWidth;\n\n  constructor(topicThumbnails, topics, masonryContainerWidth) {\n    this.topicThumbnails = topicThumbnails;\n    this.topics = topics;\n    this.masonryContainerWidth = masonryContainerWidth;\n  }\n\n  get numColumns() {\n    return Math.floor(\n      this.masonryContainerWidth / this.masonryTargetColumnWidth\n    );\n  }\n\n  get columnWidth() {\n    return (\n      (this.masonryContainerWidth -\n        (this.numColumns - 1) * this.gridSpacingPixels) /\n      this.numColumns\n    );\n  }\n\n  calculateMasonryLayout() {\n    const numColumns = this.numColumns;\n    const gridSpacingPixels = this.gridSpacingPixels;\n\n    const columnHeights = [];\n    for (let n = 0; n < numColumns; n++) {\n      columnHeights[n] = 0;\n    }\n\n    this.topicData = this.topics.map((topic) => {\n      // Pick the column with the lowest height\n      const smallestColumn = columnHeights.indexOf(Math.min(...columnHeights));\n\n      // Get the height of this topic\n      let aspect = this.masonryDefaultAspect;\n      if (topic.thumbnails) {\n        aspect = topic.thumbnails[0].width / topic.thumbnails[0].height;\n      }\n      aspect = Math.max(aspect, this.masonryMinAspect);\n      const thisHeight =\n        this.columnWidth / aspect + this.masonryTitleSpacePixels;\n\n      const dataForTopic = {\n        columnIndex: smallestColumn,\n        height: thisHeight,\n        heightAbove: columnHeights[smallestColumn],\n      };\n\n      columnHeights[smallestColumn] += thisHeight + gridSpacingPixels;\n\n      return dataForTopic;\n    });\n\n    this.tallestColumn = Math.max(...columnHeights);\n  }\n\n  get masonryStyle() {\n    return htmlSafe(\n      [\n        `.topic-list {`,\n        `--masonry-num-columns: ${Math.round(this.numColumns)};`,\n        `--masonry-grid-spacing: ${this.gridSpacingPixels}px;`,\n        `--masonry-tallest-column: ${Math.round(this.tallestColumn)}px;`,\n        `--masonry-column-width: ${Math.round(this.columnWidth)}px;`,\n        `}`,\n\n        ...this.topicData.map((topicData, index) => {\n          return [\n            `.masonry-${index} {`,\n            `--masonry-column-index: ${topicData.columnIndex};`,\n            `--masonry-height: ${Math.round(topicData.height)}px;`,\n            `--masonry-height-above: ${Math.round(topicData.heightAbove)}px;`,\n            `}`,\n          ].join(\"\\n\");\n        }),\n      ].join(\"\\n\")\n    );\n  }\n}\n","import Component from \"@glimmer/component\";\nimport { service } from \"@ember/service\";\nimport { modifier } from \"ember-modifier\";\nimport MasonryCalculator from \"../../lib/masonry-calculator\";\n\nexport default class TopicListMasonryStyles extends Component {\n  @service topicThumbnails;\n\n  attachResizeObserver = modifier((element) => {\n    const topicList = element.closest(\".topic-list\");\n\n    if (!topicList) {\n      // eslint-disable-next-line no-console\n      console.error(\n        \"topic-list-thumbnails resize-observer must be inside a topic-list\"\n      );\n      return;\n    }\n\n    this.topicThumbnails.masonryContainerWidth =\n      topicList.getBoundingClientRect().width;\n\n    const observer = new ResizeObserver(() => {\n      this.topicThumbnails.masonryContainerWidth =\n        topicList.getBoundingClientRect().width;\n    });\n    observer.observe(topicList);\n\n    return () => {\n      observer.disconnect();\n      this.topicThumbnails.masonryContainerWidth = null;\n    };\n  });\n\n  get masonryStyle() {\n    if (!this.topicThumbnails.displayMasonry) {\n      return;\n    }\n\n    if (!this.topicThumbnails.masonryContainerWidth) {\n      return;\n    }\n\n    const calculator = new MasonryCalculator(\n      this.topicThumbnails,\n      this.args.outletArgs.topics,\n      this.topicThumbnails.masonryContainerWidth\n    );\n    calculator.calculateMasonryLayout();\n    return calculator.masonryStyle;\n  }\n\n  <template>\n    {{#if this.topicThumbnails.displayMasonry}}\n      {{! template-lint-disable no-forbidden-elements }}\n      <style\n        {{this.attachResizeObserver}}\n      >\n        {{this.masonryStyle}}\n      </style>\n    {{/if}}\n  </template>\n}\n","import { readOnly } from \"@ember/object/computed\";\nimport { service } from \"@ember/service\";\nimport { apiInitializer } from \"discourse/lib/api\";\nimport TopicListThumbnail from \"../components/topic-list-thumbnail\";\n\nexport default apiInitializer((api) => {\n  const ttService = api.container.lookup(\"service:topic-thumbnails\");\n\n  api.registerValueTransformer(\"topic-list-class\", ({ value }) => {\n    if (ttService.displayMinimalGrid) {\n      value.push(\"topic-thumbnails-minimal\");\n    } else if (ttService.displayGrid) {\n      value.push(\"topic-thumbnails-grid\");\n    } else if (ttService.displayList) {\n      value.push(\"topic-thumbnails-list\");\n    } else if (ttService.displayMasonry) {\n      value.push(\"topic-thumbnails-masonry\");\n    } else if (ttService.displayBlogStyle) {\n      value.push(\"topic-thumbnails-blog-style-grid\");\n    }\n    return value;\n  });\n\n  api.registerValueTransformer(\"topic-list-columns\", ({ value: columns }) => {\n    if (ttService.enabledForRoute && !ttService.displayList) {\n      columns.add(\n        \"thumbnail\",\n        { item: TopicListThumbnail },\n        { before: \"topic\" }\n      );\n    }\n    return columns;\n  });\n\n  api.renderInOutlet(\n    \"topic-list-before-link\",\n    <template>\n      {{#if ttService.displayList}}\n        <TopicListThumbnail @topic={{@outletArgs.topic}} />\n      {{/if}}\n    </template>\n  );\n\n  api.registerValueTransformer(\"topic-list-item-mobile-layout\", ({ value }) => {\n    if (ttService.enabledForRoute && !ttService.displayList) {\n      // Force the desktop layout\n      return false;\n    }\n    return value;\n  });\n\n  api.registerValueTransformer(\n    \"topic-list-item-class\",\n    ({ value, context: { index } }) => {\n      if (ttService.displayMasonry) {\n        value.push(`masonry-${index}`);\n      }\n      return value;\n    }\n  );\n\n  const siteSettings = api.container.lookup(\"service:site-settings\");\n  if (settings.docs_thumbnail_mode !== \"none\" && siteSettings.docs_enabled) {\n    api.modifyClass(\"component:docs-topic-list\", {\n      pluginId: \"topic-thumbnails\",\n      topicThumbnailsService: service(\"topic-thumbnails\"),\n      classNameBindings: [\n        \"isMinimalGrid:topic-thumbnails-minimal\",\n        \"isThumbnailGrid:topic-thumbnails-grid\",\n        \"isThumbnailList:topic-thumbnails-list\",\n        \"isMasonryList:topic-thumbnails-masonry\",\n        \"isBlogStyleGrid:topic-thumbnails-blog-style-grid\",\n      ],\n      isMinimalGrid: readOnly(\"topicThumbnailsService.displayMinimalGrid\"),\n      isThumbnailGrid: readOnly(\"topicThumbnailsService.displayGrid\"),\n      isThumbnailList: readOnly(\"topicThumbnailsService.displayList\"),\n      isMasonryList: readOnly(\"topicThumbnailsService.displayMasonry\"),\n      isBlogStyleGrid: readOnly(\"topicThumbnailsService.displayBlogStyle\"),\n    });\n  }\n});\n","import { tracked } from \"@glimmer/tracking\";\nimport { dependentKeyCompat } from \"@ember/object/compat\";\nimport Service, { service } from \"@ember/service\";\nimport discourseComputed from \"discourse/lib/decorators\";\nimport Site from \"discourse/models/site\";\n\nconst minimalGridCategories = settings.minimal_grid_categories\n  .split(\"|\")\n  .map((id) => parseInt(id, 10));\n\nconst listCategories = settings.list_categories\n  .split(\"|\")\n  .map((id) => parseInt(id, 10));\n\nconst gridCategories = settings.grid_categories\n  .split(\"|\")\n  .map((id) => parseInt(id, 10));\n\nconst masonryCategories = settings.masonry_categories\n  .split(\"|\")\n  .map((id) => parseInt(id, 10));\n\nconst blogStyleCategories = settings.blog_style_categories\n  .split(\"|\")\n  .map((id) => parseInt(id, 10));\n\nconst minimalGridTags = settings.minimal_grid_tags.split(\"|\");\nconst listTags = settings.list_tags.split(\"|\");\nconst gridTags = settings.grid_tags.split(\"|\");\nconst masonryTags = settings.masonry_tags.split(\"|\");\nconst blogStyleTags = settings.blog_style_tags.split(\"|\");\n\nexport default class TopicThumbnailService extends Service {\n  @service router;\n  @service discovery;\n\n  @tracked masonryContainerWidth;\n\n  @dependentKeyCompat\n  get isTopicListRoute() {\n    return this.discovery.onDiscoveryRoute;\n  }\n\n  @discourseComputed(\"router.currentRouteName\")\n  isTopicRoute(currentRouteName) {\n    return currentRouteName.match(/^topic\\./);\n  }\n\n  @discourseComputed(\"router.currentRouteName\")\n  isDocsRoute(currentRouteName) {\n    return currentRouteName.match(/^docs\\./);\n  }\n\n  @dependentKeyCompat\n  get viewingCategoryId() {\n    return this.discovery.category?.id;\n  }\n\n  @dependentKeyCompat\n  get viewingTagId() {\n    return this.discovery.tag?.id;\n  }\n\n  @discourseComputed(\n    \"viewingCategoryId\",\n    \"viewingTagId\",\n    \"router.currentRoute.metadata.customThumbnailMode\",\n    \"isTopicListRoute\",\n    \"isTopicRoute\",\n    \"isDocsRoute\"\n  )\n  displayMode(\n    viewingCategoryId,\n    viewingTagId,\n    customThumbnailMode,\n    isTopicListRoute,\n    isTopicRoute,\n    isDocsRoute\n  ) {\n    if (customThumbnailMode) {\n      return customThumbnailMode;\n    }\n    if (minimalGridCategories.includes(viewingCategoryId)) {\n      return \"minimal-grid\";\n    } else if (blogStyleCategories.includes(viewingCategoryId)) {\n      return \"blog-style\";\n    } else if (masonryCategories.includes(viewingCategoryId)) {\n      return \"masonry\";\n    } else if (gridCategories.includes(viewingCategoryId)) {\n      return \"grid\";\n    } else if (listCategories.includes(viewingCategoryId)) {\n      return \"list\";\n    } else if (masonryTags.includes(viewingTagId)) {\n      return \"masonry\";\n    } else if (minimalGridTags.includes(viewingTagId)) {\n      return \"minimal-grid\";\n    } else if (blogStyleTags.includes(viewingTagId)) {\n      return \"blog-style\";\n    } else if (gridTags.includes(viewingTagId)) {\n      return \"grid\";\n    } else if (listTags.includes(viewingTagId)) {\n      return \"list\";\n    } else if (isTopicRoute && settings.suggested_topics_mode) {\n      return settings.suggested_topics_mode;\n    } else if (isTopicListRoute || settings.enable_outside_topic_lists) {\n      return settings.default_thumbnail_mode;\n    } else if (isDocsRoute) {\n      return settings.docs_thumbnail_mode;\n    } else {\n      return \"none\";\n    }\n  }\n\n  @discourseComputed(\"displayMode\")\n  enabledForRoute(displayMode) {\n    return displayMode !== \"none\";\n  }\n\n  @discourseComputed()\n  enabledForDevice() {\n    return Site.current().mobileView ? settings.mobile_thumbnails : true;\n  }\n\n  @discourseComputed(\"enabledForRoute\", \"enabledForDevice\")\n  shouldDisplay(enabledForRoute, enabledForDevice) {\n    return enabledForRoute && enabledForDevice;\n  }\n\n  @discourseComputed(\"shouldDisplay\", \"displayMode\")\n  displayMinimalGrid(shouldDisplay, displayMode) {\n    return shouldDisplay && displayMode === \"minimal-grid\";\n  }\n\n  @discourseComputed(\"shouldDisplay\", \"displayMode\")\n  displayList(shouldDisplay, displayMode) {\n    return shouldDisplay && displayMode === \"list\";\n  }\n\n  @discourseComputed(\"shouldDisplay\", \"displayMode\")\n  displayGrid(shouldDisplay, displayMode) {\n    return shouldDisplay && displayMode === \"grid\";\n  }\n\n  @discourseComputed(\"shouldDisplay\", \"displayMode\")\n  displayMasonry(shouldDisplay, displayMode) {\n    return shouldDisplay && displayMode === \"masonry\";\n  }\n\n  @discourseComputed(\"shouldDisplay\", \"displayMode\")\n  displayBlogStyle(shouldDisplay, displayMode) {\n    return shouldDisplay && displayMode === \"blog-style\";\n  }\n\n  @discourseComputed(\"displayMinimalGrid\", \"displayBlogStyle\")\n  showLikes(isMinimalGrid) {\n    return isMinimalGrid;\n  }\n}\n","import \"virtual:init-settings\";\n\nconst themeCompatModules = {};\nimport * as Mod1 from \"./discourse/components/topic-list-thumbnail\";\nthemeCompatModules[\"discourse/components/topic-list-thumbnail\"] = Mod1;\n\nimport * as Mod2 from \"./discourse/connectors/before-topic-list-body/topic-list-masonry-styles.gjs\";\nthemeCompatModules[\"discourse/connectors/before-topic-list-body/topic-list-masonry-styles\"] = Mod2;\n\nimport * as Mod3 from \"./discourse/initializers/topic-thumbnails-init\";\nthemeCompatModules[\"discourse/initializers/topic-thumbnails-init\"] = Mod3;\n\nimport * as Mod4 from \"./discourse/lib/masonry-calculator\";\nthemeCompatModules[\"discourse/lib/masonry-calculator\"] = Mod4;\n\nimport * as Mod5 from \"./discourse/services/topic-thumbnails\";\nthemeCompatModules[\"discourse/services/topic-thumbnails\"] = Mod5;\n\nexport default themeCompatModules;\n"],"names":["registerSettings","default_thumbnail_mode","docs_thumbnail_mode","blog_style_categories","minimal_grid_categories","grid_categories","masonry_categories","list_categories","blog_style_tags","minimal_grid_tags","grid_tags","masonry_tags","list_tags","suggested_topics_mode","enable_outside_topic_lists","placeholder_icon","mobile_thumbnails","list_thumbnail_size","settings","getObjectForTheme","TopicListThumbnail","Component","dt7948","g","this","prototype","service","topicThumbnails","i","responsiveRatios","displayWidth","displayList","topic","args","hasThumbnail","thumbnails","srcSet","srcSetArray","forEach","ratio","target","match","find","t","url","max_width","push","length","original","join","width","isLandscape","height","fallbackSrc","largeEnough","filter","lastObject","get","urlForPostNumber","setComponentTemplate","createTemplateFactory","id","block","moduleName","scope","concatClass","dIcon","coldAgeClass","formatDate","isStrictMode","MasonryCalculator","masonryTargetColumnWidth","gridSpacingPixels","masonryTitleSpacePixels","masonryDefaultAspect","masonryMinAspect","topics","masonryContainerWidth","constructor","numColumns","Math","floor","columnWidth","calculateMasonryLayout","columnHeights","n","topicData","map","smallestColumn","indexOf","min","aspect","max","thisHeight","dataForTopic","columnIndex","heightAbove","tallestColumn","masonryStyle","htmlSafe","round","index","TopicListMasonryStyles","attachResizeObserver","modifier","element","topicList","closest","console","error","getBoundingClientRect","observer","ResizeObserver","observe","disconnect","displayMasonry","calculator","outletArgs","topicThumbnailsInit","apiInitializer","api","ttService","container","lookup","registerValueTransformer","value","displayMinimalGrid","displayGrid","displayBlogStyle","columns","enabledForRoute","add","item","before","renderInOutlet","templateOnly","context","siteSettings","docs_enabled","modifyClass","pluginId","topicThumbnailsService","classNameBindings","isMinimalGrid","readOnly","isThumbnailGrid","isThumbnailList","isMasonryList","isBlogStyleGrid","minimalGridCategories","split","parseInt","listCategories","gridCategories","masonryCategories","blogStyleCategories","minimalGridTags","listTags","gridTags","masonryTags","blogStyleTags","TopicThumbnailService","Service","router","discovery","tracked","isTopicListRoute","onDiscoveryRoute","dependentKeyCompat","isTopicRoute","currentRouteName","discourseComputed","isDocsRoute","viewingCategoryId","category","viewingTagId","tag","displayMode","customThumbnailMode","includes","enabledForDevice","Site","current","mobileView","shouldDisplay","showLikes","themeCompatModules","Mod1","Mod2","Mod3","Mod4","Mod5"],"mappings":"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"}