DEV: Update for glimmer topic list (#189)
This switches docs to use the core `<BasicTopicList` component, with some customizations made via the DAG API.
This commit is contained in:
parent
0897548b5d
commit
ee5111a628
|
@ -1,24 +0,0 @@
|
||||||
import Component from "@ember/component";
|
|
||||||
import { htmlSafe } from "@ember/template";
|
|
||||||
import { classNameBindings, tagName } from "@ember-decorators/component";
|
|
||||||
import { RUNTIME_OPTIONS } from "discourse-common/lib/raw-handlebars-helpers";
|
|
||||||
import { findRawTemplate } from "discourse-common/lib/raw-templates";
|
|
||||||
|
|
||||||
@tagName("tr")
|
|
||||||
@classNameBindings(":topic-list-item")
|
|
||||||
export default class DocsTopicListItem extends Component {
|
|
||||||
didInsertElement() {
|
|
||||||
super.didInsertElement(...arguments);
|
|
||||||
this.renderTopicListItem();
|
|
||||||
}
|
|
||||||
|
|
||||||
renderTopicListItem() {
|
|
||||||
const template = findRawTemplate("docs-topic-list-item");
|
|
||||||
if (template) {
|
|
||||||
this.set(
|
|
||||||
"topicListItemContents",
|
|
||||||
htmlSafe(template(this, RUNTIME_OPTIONS))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
import Component from "@ember/component";
|
|
||||||
import { action } from "@ember/object";
|
|
||||||
import { classNames } from "@ember-decorators/component";
|
|
||||||
import discourseComputed from "discourse-common/utils/decorators";
|
|
||||||
import { getDocs } from "../../lib/get-docs";
|
|
||||||
|
|
||||||
@classNames("docs-topic-list")
|
|
||||||
export default class DocsTopicList extends Component {
|
|
||||||
urlPath = getDocs();
|
|
||||||
|
|
||||||
@discourseComputed("order")
|
|
||||||
sortTitle(order) {
|
|
||||||
return order === "title";
|
|
||||||
}
|
|
||||||
|
|
||||||
@discourseComputed("order")
|
|
||||||
sortActivity(order) {
|
|
||||||
return order === "activity";
|
|
||||||
}
|
|
||||||
|
|
||||||
@action
|
|
||||||
sortListActivity() {
|
|
||||||
this.sortBy("activity");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@action
|
|
||||||
sortListTitle() {
|
|
||||||
this.sortBy("title");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -17,6 +17,22 @@ function initialize(api, container) {
|
||||||
href: "/" + docsPath,
|
href: "/" + docsPath,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
api.registerValueTransformer("topic-list-columns", ({ value: columns }) => {
|
||||||
|
if (container.lookup("service:router").currentRouteName === "docs.index") {
|
||||||
|
columns.delete("posters");
|
||||||
|
columns.delete("replies");
|
||||||
|
columns.delete("views");
|
||||||
|
}
|
||||||
|
return columns;
|
||||||
|
});
|
||||||
|
|
||||||
|
api.registerValueTransformer("topic-list-item-expand-pinned", ({ value }) => {
|
||||||
|
if (container.lookup("service:router").currentRouteName === "docs.index") {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
{{this.topicListItemContents}}
|
|
|
@ -1,41 +0,0 @@
|
||||||
<LoadMore @selector=".topic-list tr" @action={{this.loadMore}}>
|
|
||||||
<table class="topic-list">
|
|
||||||
<thead class="topic-list-header">
|
|
||||||
<th role="button" class="topic-list-data" {{action "sortListTitle"}}>
|
|
||||||
{{i18n "docs.column_titles.topic"}}
|
|
||||||
|
|
||||||
{{#if this.sortTitle}}
|
|
||||||
{{#if this.ascending}}
|
|
||||||
{{d-icon "angle-up"}}
|
|
||||||
{{else}}
|
|
||||||
{{d-icon "angle-down"}}
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
</th>
|
|
||||||
|
|
||||||
<th role="button" class="topic-list-data" {{action "sortListActivity"}}>
|
|
||||||
{{i18n "docs.column_titles.activity"}}
|
|
||||||
|
|
||||||
{{#if this.sortActivity}}
|
|
||||||
{{#if this.ascending}}
|
|
||||||
{{d-icon "angle-up"}}
|
|
||||||
{{else}}
|
|
||||||
{{d-icon "angle-down"}}
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
</th>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<tbody class="topic-list-body">
|
|
||||||
{{#each this.topics as |topic|}}
|
|
||||||
{{docs-topic-list-item
|
|
||||||
topic=topic
|
|
||||||
urlPath=this.urlPath
|
|
||||||
showExcerpt=this.showExcerpts
|
|
||||||
}}
|
|
||||||
{{/each}}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</LoadMore>
|
|
||||||
|
|
||||||
<ConditionalLoadingSpinner @condition={{this.loading}} />
|
|
|
@ -243,15 +243,15 @@
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#unless this.emptyResults}}
|
{{#unless this.emptyResults}}
|
||||||
<DocsTopicList
|
<LoadMore @selector=".topic-list tr" @action={{this.loadMore}}>
|
||||||
@topics={{this.topics}}
|
<BasicTopicList
|
||||||
@showExcerpts={{this.showExcerpts}}
|
@topics={{this.topics}}
|
||||||
@ascending={{this.ascending}}
|
@ascending={{this.ascending}}
|
||||||
@order={{this.orderColumn}}
|
@order={{this.orderColumn}}
|
||||||
@sortBy={{action "sortBy"}}
|
@changeSort={{action "sortBy"}}
|
||||||
@loadMore={{action "loadMore"}}
|
/>
|
||||||
@loading={{this.isLoadingMore}}
|
</LoadMore>
|
||||||
/>
|
<ConditionalLoadingSpinner @condition={{this.isLoadingMore}} />
|
||||||
{{/unless}}
|
{{/unless}}
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
<a href="/{{urlPath}}?topic={{topic.id}}" class="docs-topic-link">{{{topic.fancyTitle}}}</a>
|
|
|
@ -1,19 +0,0 @@
|
||||||
{{~raw-plugin-outlet name="topic-list-before-columns"}}
|
|
||||||
|
|
||||||
<td class="main-link topic-list-data">
|
|
||||||
{{~raw-plugin-outlet name="topic-list-before-link"}}
|
|
||||||
<span class="link-top-line">
|
|
||||||
{{~raw "topic-status" topic=topic}}
|
|
||||||
{{~raw "docs-topic-link" topic=topic urlPath=urlPath}}
|
|
||||||
</span>
|
|
||||||
<span class="link-bottom-line">
|
|
||||||
{{category-link topic.category}}
|
|
||||||
{{discourse-tags topic mode="list"}}
|
|
||||||
</span>
|
|
||||||
{{!-- {{#if showExcerpt}} --}}
|
|
||||||
{{~raw "list/topic-excerpt" topic=topic}}
|
|
||||||
{{!-- {{/if}} --}}
|
|
||||||
</td>
|
|
||||||
<td class="topic-list-data">
|
|
||||||
{{format-date topic.bumped_at format="tiny" noTitle="true"}}
|
|
||||||
</td>
|
|
|
@ -153,7 +153,7 @@
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: $font-down-1;
|
font-size: $font-down-1;
|
||||||
}
|
}
|
||||||
.docs-topic-link {
|
.raw-topic-link {
|
||||||
color: var(--tertiary);
|
color: var(--tertiary);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
@ -274,3 +274,12 @@
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Remove once legacy topic-list is removed
|
||||||
|
.docs-browse {
|
||||||
|
.topic-list-data.replies,
|
||||||
|
.topic-list-data.posts,
|
||||||
|
.topic-list-data.views {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
.docs-topic-list {
|
.docs-topic-list {
|
||||||
flex-basis: 100%;
|
flex-basis: 100%;
|
||||||
}
|
}
|
||||||
.docs-topic-link {
|
.raw-topic-link {
|
||||||
padding-right: 0.25em;
|
padding-right: 0.25em;
|
||||||
}
|
}
|
||||||
.docs-topic {
|
.docs-topic {
|
||||||
|
|
|
@ -16,8 +16,8 @@ describe "Discourse Docs | Index", type: :system do
|
||||||
|
|
||||||
it "does not error when showing the index" do
|
it "does not error when showing the index" do
|
||||||
visit("/docs")
|
visit("/docs")
|
||||||
expect(page).to have_css(".docs-topic-link", text: topic_1.title)
|
expect(page).to have_css(".raw-topic-link", text: topic_1.title)
|
||||||
expect(page).to have_css(".docs-topic-link", text: topic_2.title)
|
expect(page).to have_css(".raw-topic-link", text: topic_2.title)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "topic excerpts" do
|
describe "topic excerpts" do
|
||||||
|
|
|
@ -57,10 +57,7 @@ acceptance("Docs", function (needs) {
|
||||||
assert.equal(query(".docs-category .docs-item-count").innerText, "119");
|
assert.equal(query(".docs-category .docs-item-count").innerText, "119");
|
||||||
assert.equal(query(".docs-tag .docs-item-id").innerText, "something");
|
assert.equal(query(".docs-tag .docs-item-id").innerText, "something");
|
||||||
assert.equal(query(".docs-tag .docs-item-count").innerText, "74");
|
assert.equal(query(".docs-tag .docs-item-count").innerText, "74");
|
||||||
assert.equal(
|
assert.dom(".raw-topic-link").hasText("Importing from Software X");
|
||||||
query(".docs-topic-link").innerText.trim(),
|
|
||||||
"Importing from Software X"
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("selecting a category", async function (assert) {
|
test("selecting a category", async function (assert) {
|
||||||
|
|
Loading…
Reference in New Issue