discourse/app/assets/javascripts/discourse/widgets/post-edits-indicator.js.es6
Penar Musaraj a571efba35
FIX: Rename deprecated icons, allow custom icons in badges
- adds a migration renaming FA4 icon names in badges
- allows all icons to be used in badges (previously was limited to icons prefixed with fa-)
- renames remaining FA 4.7 icons equivalents
2019-07-16 11:13:44 -04:00

80 lines
1.9 KiB
JavaScript

import { createWidget } from "discourse/widgets/widget";
import { iconNode } from "discourse-common/lib/icon-library";
import { longDate } from "discourse/lib/formatter";
import { h } from "virtual-dom";
function mult(val) {
return 60 * 50 * 1000 * val;
}
export function historyHeat(siteSettings, updatedAt) {
if (!updatedAt) {
return;
}
// Show heat on age
const rightNow = new Date().getTime();
const updatedAtTime = updatedAt.getTime();
if (updatedAtTime > rightNow - mult(siteSettings.history_hours_low)) {
return "heatmap-high";
}
if (updatedAtTime > rightNow - mult(siteSettings.history_hours_medium)) {
return "heatmap-med";
}
if (updatedAtTime > rightNow - mult(siteSettings.history_hours_high)) {
return "heatmap-low";
}
}
export default createWidget("post-edits-indicator", {
tagName: "div.post-info.edits",
html(attrs) {
let icon = "pencil-alt";
const updatedAt = new Date(attrs.updated_at);
let className = historyHeat(this.siteSettings, updatedAt);
const date = longDate(updatedAt);
let title;
if (attrs.wiki) {
icon = "far-edit";
className = `${className || ""} wiki`.trim();
if (attrs.version > 1) {
title = `${I18n.t("post.last_edited_on")} ${date}`;
} else {
title = I18n.t("post.wiki.about");
}
} else {
title = `${I18n.t("post.last_edited_on")} ${date}`;
}
const contents = [
attrs.version > 1 ? attrs.version - 1 : "",
" ",
iconNode(icon)
];
return h(
"a",
{
className,
attributes: { title, href: "#" }
},
contents
);
},
click(e) {
e.preventDefault();
if (this.attrs.wiki && this.attrs.version === 1) {
this.sendWidgetAction("editPost");
} else if (this.attrs.canViewEditHistory) {
this.sendWidgetAction("showHistory");
}
}
});