diff --git a/.eslintignore b/.eslintignore
index 3811f290c..f6362a2e3 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -13,6 +13,9 @@ plugins/*
!plugins/talk-plugin-comment-content
!plugins/talk-plugin-permalink
!plugins/talk-plugin-featured-comments
+!plugins/talk-plugin-sort-newest
!plugins/talk-plugin-sort-oldest
+!plugins/talk-plugin-sort-most-liked
+!plugins/talk-plugin-sort-most-replied
node_modules
diff --git a/.gitignore b/.gitignore
index 3f5cbc085..c75ffc78b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,6 +29,9 @@ plugins/*
!plugins/talk-plugin-comment-content
!plugins/talk-plugin-permalink
!plugins/talk-plugin-featured-comments
+!plugins/talk-plugin-sort-newest
!plugins/talk-plugin-sort-oldest
+!plugins/talk-plugin-sort-most-liked
+!plugins/talk-plugin-sort-most-replied
**/node_modules/*
diff --git a/plugin-api/beta/client/components/SortOption.css b/plugin-api/beta/client/components/SortOption.css
index f2df56082..d1bbab6c4 100644
--- a/plugin-api/beta/client/components/SortOption.css
+++ b/plugin-api/beta/client/components/SortOption.css
@@ -1,8 +1,12 @@
-.input {
+.label {
+ display: block;
cursor: pointer;
+ width: 100%;
+ padding: 4px 16px 4px 10px;
+ box-sizing: border-box;
}
-.label {
+.input {
cursor: pointer;
- padding-left: 4px;
+ margin-right: 6px;
}
diff --git a/plugin-api/beta/client/components/SortOption.js b/plugin-api/beta/client/components/SortOption.js
index 42e1c7ba5..6ea0b14d1 100644
--- a/plugin-api/beta/client/components/SortOption.js
+++ b/plugin-api/beta/client/components/SortOption.js
@@ -4,12 +4,15 @@ import styles from './SortOption.css';
export default class SortOption extends React.Component {
render() {
return (
-
-
-
-
+
);
}
}
diff --git a/plugins/talk-plugin-offtopic/client/components/OffTopicCheckbox.css b/plugins/talk-plugin-offtopic/client/components/OffTopicCheckbox.css
new file mode 100644
index 000000000..1a6bda2a6
--- /dev/null
+++ b/plugins/talk-plugin-offtopic/client/components/OffTopicCheckbox.css
@@ -0,0 +1,8 @@
+.offTopic {
+ height: 100%;
+}
+
+.offTopicLabel {
+ padding: 10px 20px;
+ display: block;
+}
diff --git a/plugins/talk-plugin-offtopic/client/components/OffTopicCheckbox.js b/plugins/talk-plugin-offtopic/client/components/OffTopicCheckbox.js
index 70876f739..7b59d87d6 100644
--- a/plugins/talk-plugin-offtopic/client/components/OffTopicCheckbox.js
+++ b/plugins/talk-plugin-offtopic/client/components/OffTopicCheckbox.js
@@ -1,5 +1,5 @@
import React from 'react';
-import styles from './styles.css';
+import styles from './OffTopicCheckbox.css';
import {t} from 'plugin-api/beta/client/services';
diff --git a/plugins/talk-plugin-offtopic/client/components/OffTopicFilter.css b/plugins/talk-plugin-offtopic/client/components/OffTopicFilter.css
new file mode 100644
index 000000000..d31b1a4dd
--- /dev/null
+++ b/plugins/talk-plugin-offtopic/client/components/OffTopicFilter.css
@@ -0,0 +1,16 @@
+.label {
+ display: block;
+ cursor: pointer;
+ width: 100%;
+ padding: 4px 16px 4px 10px;
+ box-sizing: border-box;
+}
+
+.input {
+ cursor: pointer;
+ margin-right: 6px;
+}
+
+:global(.talk-plugin-off-topic-comment) {
+ display: none;
+}
diff --git a/plugins/talk-plugin-offtopic/client/components/OffTopicFilter.js b/plugins/talk-plugin-offtopic/client/components/OffTopicFilter.js
index 426dea29a..0ed882e28 100644
--- a/plugins/talk-plugin-offtopic/client/components/OffTopicFilter.js
+++ b/plugins/talk-plugin-offtopic/client/components/OffTopicFilter.js
@@ -1,5 +1,5 @@
import React from 'react';
-import styles from './styles.css';
+import styles from './OffTopicFilter.css';
export default class OffTopicFilter extends React.Component {
@@ -20,12 +20,15 @@ export default class OffTopicFilter extends React.Component {
render() {
return (
-
-
-
+
);
}
}
diff --git a/plugins/talk-plugin-offtopic/client/components/styles.css b/plugins/talk-plugin-offtopic/client/components/OffTopicTag.css
similarity index 50%
rename from plugins/talk-plugin-offtopic/client/components/styles.css
rename to plugins/talk-plugin-offtopic/client/components/OffTopicTag.css
index 22d1f787a..c1cddce8d 100644
--- a/plugins/talk-plugin-offtopic/client/components/styles.css
+++ b/plugins/talk-plugin-offtopic/client/components/OffTopicTag.css
@@ -1,12 +1,3 @@
-.offTopic {
- height: 100%;
-}
-
-.offTopicLabel {
- padding: 10px 20px;
- display: block;
-}
-
.tag {
background: #D2D7D3;
font-size: 12px;
@@ -17,10 +8,3 @@
padding: 5px 5px;
border-radius: 2px;
}
-
-.viewingOption {
-}
-
-:global(.talk-plugin-off-topic-comment) {
- display: none;
-}
diff --git a/plugins/talk-plugin-offtopic/client/components/OffTopicTag.js b/plugins/talk-plugin-offtopic/client/components/OffTopicTag.js
index 0277072eb..5b8de8875 100644
--- a/plugins/talk-plugin-offtopic/client/components/OffTopicTag.js
+++ b/plugins/talk-plugin-offtopic/client/components/OffTopicTag.js
@@ -1,5 +1,5 @@
import React from 'react';
-import styles from './styles.css';
+import styles from './OffTopicTag.css';
import {t} from 'plugin-api/beta/client/services';
import {isTagged} from 'plugin-api/beta/client/utils';
diff --git a/plugins/talk-plugin-sort-most-liked/client/.babelrc b/plugins/talk-plugin-sort-most-liked/client/.babelrc
new file mode 100644
index 000000000..60be246eb
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-liked/client/.babelrc
@@ -0,0 +1,14 @@
+{
+ "presets": [
+ "es2015"
+ ],
+ "plugins": [
+ "add-module-exports",
+ "transform-class-properties",
+ "transform-decorators-legacy",
+ "transform-object-assign",
+ "transform-object-rest-spread",
+ "transform-async-to-generator",
+ "transform-react-jsx"
+ ]
+}
\ No newline at end of file
diff --git a/plugins/talk-plugin-sort-most-liked/client/.eslintrc.json b/plugins/talk-plugin-sort-most-liked/client/.eslintrc.json
new file mode 100644
index 000000000..9fe56bd14
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-liked/client/.eslintrc.json
@@ -0,0 +1,23 @@
+{
+ "env": {
+ "browser": true,
+ "es6": true,
+ "mocha": true
+ },
+ "parserOptions": {
+ "sourceType": "module",
+ "ecmaFeatures": {
+ "experimentalObjectRestSpread": true,
+ "jsx": true
+ }
+ },
+ "parser": "babel-eslint",
+ "plugins": [
+ "react"
+ ],
+ "rules": {
+ "react/jsx-uses-react": "error",
+ "react/jsx-uses-vars": "error",
+ "no-console": ["warn", { "allow": ["warn", "error"] }]
+ }
+}
diff --git a/plugins/talk-plugin-sort-most-liked/client/index.js b/plugins/talk-plugin-sort-most-liked/client/index.js
new file mode 100644
index 000000000..36faf7a88
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-liked/client/index.js
@@ -0,0 +1,19 @@
+import translations from './translations.yml';
+import {createSortOption} from 'plugin-api/beta/client/factories';
+import {t} from 'plugin-api/beta/client/services';
+
+const SortOption = createSortOption(
+ () => t('talk-plugin-sort-most-liked.label'),
+ {sortBy: 'LIKES', sortOrder: 'DESC'},
+);
+
+/**
+ * talk-plugin-sort-newest depends on talk-plugin-viewing-options.
+ */
+
+export default {
+ translations,
+ slots: {
+ viewingOptionsSort: [SortOption]
+ }
+};
diff --git a/plugins/talk-plugin-sort-most-liked/client/translations.yml b/plugins/talk-plugin-sort-most-liked/client/translations.yml
new file mode 100644
index 000000000..836f96474
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-liked/client/translations.yml
@@ -0,0 +1,5 @@
+en:
+ talk-plugin-sort-most-liked:
+ label: Most liked first
+es:
+ talk-plugin-sort-most-liked:
diff --git a/plugins/talk-plugin-sort-most-liked/index.js b/plugins/talk-plugin-sort-most-liked/index.js
new file mode 100644
index 000000000..7be35b6b6
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-liked/index.js
@@ -0,0 +1,2 @@
+module.exports = {
+};
diff --git a/plugins/talk-plugin-sort-most-replied/client/.babelrc b/plugins/talk-plugin-sort-most-replied/client/.babelrc
new file mode 100644
index 000000000..60be246eb
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-replied/client/.babelrc
@@ -0,0 +1,14 @@
+{
+ "presets": [
+ "es2015"
+ ],
+ "plugins": [
+ "add-module-exports",
+ "transform-class-properties",
+ "transform-decorators-legacy",
+ "transform-object-assign",
+ "transform-object-rest-spread",
+ "transform-async-to-generator",
+ "transform-react-jsx"
+ ]
+}
\ No newline at end of file
diff --git a/plugins/talk-plugin-sort-most-replied/client/.eslintrc.json b/plugins/talk-plugin-sort-most-replied/client/.eslintrc.json
new file mode 100644
index 000000000..9fe56bd14
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-replied/client/.eslintrc.json
@@ -0,0 +1,23 @@
+{
+ "env": {
+ "browser": true,
+ "es6": true,
+ "mocha": true
+ },
+ "parserOptions": {
+ "sourceType": "module",
+ "ecmaFeatures": {
+ "experimentalObjectRestSpread": true,
+ "jsx": true
+ }
+ },
+ "parser": "babel-eslint",
+ "plugins": [
+ "react"
+ ],
+ "rules": {
+ "react/jsx-uses-react": "error",
+ "react/jsx-uses-vars": "error",
+ "no-console": ["warn", { "allow": ["warn", "error"] }]
+ }
+}
diff --git a/plugins/talk-plugin-sort-most-replied/client/index.js b/plugins/talk-plugin-sort-most-replied/client/index.js
new file mode 100644
index 000000000..52b837410
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-replied/client/index.js
@@ -0,0 +1,19 @@
+import translations from './translations.yml';
+import {createSortOption} from 'plugin-api/beta/client/factories';
+import {t} from 'plugin-api/beta/client/services';
+
+const SortOption = createSortOption(
+ () => t('talk-plugin-sort-most-replied.label'),
+ {sortBy: 'REPLIES', sortOrder: 'DESC'},
+);
+
+/**
+ * talk-plugin-sort-newest depends on talk-plugin-viewing-options.
+ */
+
+export default {
+ translations,
+ slots: {
+ viewingOptionsSort: [SortOption]
+ }
+};
diff --git a/plugins/talk-plugin-sort-most-replied/client/translations.yml b/plugins/talk-plugin-sort-most-replied/client/translations.yml
new file mode 100644
index 000000000..b77043d6d
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-replied/client/translations.yml
@@ -0,0 +1,5 @@
+en:
+ talk-plugin-sort-most-replied:
+ label: Most replied first
+es:
+ talk-plugin-sort-most-replied:
diff --git a/plugins/talk-plugin-sort-most-replied/index.js b/plugins/talk-plugin-sort-most-replied/index.js
new file mode 100644
index 000000000..7be35b6b6
--- /dev/null
+++ b/plugins/talk-plugin-sort-most-replied/index.js
@@ -0,0 +1,2 @@
+module.exports = {
+};
diff --git a/plugins/talk-plugin-sort-newest/client/.babelrc b/plugins/talk-plugin-sort-newest/client/.babelrc
new file mode 100644
index 000000000..60be246eb
--- /dev/null
+++ b/plugins/talk-plugin-sort-newest/client/.babelrc
@@ -0,0 +1,14 @@
+{
+ "presets": [
+ "es2015"
+ ],
+ "plugins": [
+ "add-module-exports",
+ "transform-class-properties",
+ "transform-decorators-legacy",
+ "transform-object-assign",
+ "transform-object-rest-spread",
+ "transform-async-to-generator",
+ "transform-react-jsx"
+ ]
+}
\ No newline at end of file
diff --git a/plugins/talk-plugin-sort-newest/client/.eslintrc.json b/plugins/talk-plugin-sort-newest/client/.eslintrc.json
new file mode 100644
index 000000000..9fe56bd14
--- /dev/null
+++ b/plugins/talk-plugin-sort-newest/client/.eslintrc.json
@@ -0,0 +1,23 @@
+{
+ "env": {
+ "browser": true,
+ "es6": true,
+ "mocha": true
+ },
+ "parserOptions": {
+ "sourceType": "module",
+ "ecmaFeatures": {
+ "experimentalObjectRestSpread": true,
+ "jsx": true
+ }
+ },
+ "parser": "babel-eslint",
+ "plugins": [
+ "react"
+ ],
+ "rules": {
+ "react/jsx-uses-react": "error",
+ "react/jsx-uses-vars": "error",
+ "no-console": ["warn", { "allow": ["warn", "error"] }]
+ }
+}
diff --git a/plugins/talk-plugin-sort-newest/client/index.js b/plugins/talk-plugin-sort-newest/client/index.js
new file mode 100644
index 000000000..d4979e299
--- /dev/null
+++ b/plugins/talk-plugin-sort-newest/client/index.js
@@ -0,0 +1,19 @@
+import translations from './translations.yml';
+import {createSortOption} from 'plugin-api/beta/client/factories';
+import {t} from 'plugin-api/beta/client/services';
+
+const SortOption = createSortOption(
+ () => t('talk-plugin-sort-newest.label'),
+ {sortBy: 'CREATED_AT', sortOrder: 'DESC'},
+);
+
+/**
+ * talk-plugin-sort-newest depends on talk-plugin-viewing-options.
+ */
+
+export default {
+ translations,
+ slots: {
+ viewingOptionsSort: [SortOption]
+ }
+};
diff --git a/plugins/talk-plugin-sort-newest/client/translations.yml b/plugins/talk-plugin-sort-newest/client/translations.yml
new file mode 100644
index 000000000..fbaed0fe9
--- /dev/null
+++ b/plugins/talk-plugin-sort-newest/client/translations.yml
@@ -0,0 +1,5 @@
+en:
+ talk-plugin-sort-newest:
+ label: Newest first
+es:
+ talk-plugin-sort-newest:
diff --git a/plugins/talk-plugin-sort-newest/index.js b/plugins/talk-plugin-sort-newest/index.js
new file mode 100644
index 000000000..7be35b6b6
--- /dev/null
+++ b/plugins/talk-plugin-sort-newest/index.js
@@ -0,0 +1,2 @@
+module.exports = {
+};
diff --git a/plugins/talk-plugin-viewing-options/client/components/Category.css b/plugins/talk-plugin-viewing-options/client/components/Category.css
index 758975fce..dbae31bc4 100644
--- a/plugins/talk-plugin-viewing-options/client/components/Category.css
+++ b/plugins/talk-plugin-viewing-options/client/components/Category.css
@@ -1,6 +1,14 @@
+.root {
+ padding-bottom: 12px;
+
+ &:not(:first-child) {
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
+ }
+}
+
.title {
font-weight: bold;
- padding: 12px 8px 0px 8px;
+ padding: 12px 8px 4px 8px;
}
.list {
@@ -9,7 +17,6 @@
}
.listItem {
- padding: 10px;
list-style: none;
white-space: nowrap;
}
diff --git a/plugins/talk-plugin-viewing-options/client/components/Category.js b/plugins/talk-plugin-viewing-options/client/components/Category.js
index 0ef08b6d0..13beb259a 100644
--- a/plugins/talk-plugin-viewing-options/client/components/Category.js
+++ b/plugins/talk-plugin-viewing-options/client/components/Category.js
@@ -6,7 +6,7 @@ const childFactory = (child) =>
const ViewingOptions = ({slot, title}) => {
return (
-
+
{title}
diff --git a/plugins/talk-plugin-viewing-options/client/components/Menu.css b/plugins/talk-plugin-viewing-options/client/components/Menu.css
new file mode 100644
index 000000000..f1f3903a1
--- /dev/null
+++ b/plugins/talk-plugin-viewing-options/client/components/Menu.css
@@ -0,0 +1,11 @@
+.menu {
+ background: white;
+ position: absolute;
+ box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.15);
+ right: 0px;
+ top: 20px;
+ z-index: 10;
+ min-height: 32px;
+ min-width: 64px;
+}
+
diff --git a/plugins/talk-plugin-viewing-options/client/components/Menu.js b/plugins/talk-plugin-viewing-options/client/components/Menu.js
new file mode 100644
index 000000000..68afe4b3b
--- /dev/null
+++ b/plugins/talk-plugin-viewing-options/client/components/Menu.js
@@ -0,0 +1,31 @@
+import React from 'react';
+import cn from 'classnames';
+import styles from './Menu.css';
+import {capitalize} from 'plugin-api/beta/client/utils';
+import Category from './Category';
+import {t} from 'plugin-api/beta/client/services';
+
+class Menu extends React.Component {
+ categories = {
+ sort: t('talk-plugin-viewing-options.sort'),
+ filter: t('talk-plugin-viewing-options.filter'),
+ };
+
+ render() {
+ return (
+
+ {
+ Object.keys(this.categories).map((category) =>
+
+ )
+ }
+
+ );
+ }
+}
+
+export default Menu;
diff --git a/plugins/talk-plugin-viewing-options/client/components/ViewingOptions.css b/plugins/talk-plugin-viewing-options/client/components/ViewingOptions.css
index c71094e33..4de6f15f7 100644
--- a/plugins/talk-plugin-viewing-options/client/components/ViewingOptions.css
+++ b/plugins/talk-plugin-viewing-options/client/components/ViewingOptions.css
@@ -9,29 +9,7 @@
cursor: pointer;
}
-.menu {
- background: white;
- position: absolute;
- box-shadow: 0px 3px 5px 0px rgba(0,0,0,0.15);
- right: 0px;
- top: 20px;
- z-index: 10;
- min-height: 32px;
- min-width: 64px;
-}
-
-.list > ul, .list > ul > li {
- padding: 0;
- margin: 0;
-}
-
-.list > ul > li {
- padding: 10px;
- list-style: none;
- white-space: nowrap;
-}
-
-.icon {
+.arrowIcon {
font-size: 14px;
vertical-align: middle;
}
@@ -39,20 +17,20 @@
@custom-media --small-viewport (max-width: 425px);
-.filterText {
+.label {
display: inline-block;
}
-.filterIcon {
+.icon {
vertical-align: middle;
display: none;
}
@media (--small-viewport) {
- .filterText {
+ .label {
display: none;
}
- .filterIcon {
+ .icon {
display: inline-block;
}
}
diff --git a/plugins/talk-plugin-viewing-options/client/components/ViewingOptions.js b/plugins/talk-plugin-viewing-options/client/components/ViewingOptions.js
index a7d6040e1..0d2faf2a4 100644
--- a/plugins/talk-plugin-viewing-options/client/components/ViewingOptions.js
+++ b/plugins/talk-plugin-viewing-options/client/components/ViewingOptions.js
@@ -4,16 +4,10 @@ import styles from './ViewingOptions.css';
import {t} from 'plugin-api/beta/client/services';
import {Icon} from 'plugin-api/beta/client/components/ui';
import {ClickOutside} from 'plugin-api/beta/client/components';
-import {capitalize} from 'plugin-api/beta/client/utils';
-import Category from './Category';
+import Menu from './Menu';
class ViewingOptions extends React.Component {
- categories = {
- sort: t('talk-plugin-viewing-options.sort'),
- filter: t('talk-plugin-viewing-options.filter'),
- };
-
toggleOpen = () => {
const {open, openMenu, closeMenu} = this.props;
if (!open) {
@@ -37,22 +31,15 @@ class ViewingOptions extends React.Component {
- {
- open ? (
-
- {
- Object.keys(this.categories).map((category) =>
-
- )
- }
-
- ) : null
- }
+ {open &&
}
);
diff --git a/plugins/talk-plugin-viewing-options/client/translations.yml b/plugins/talk-plugin-viewing-options/client/translations.yml
index 8560b79cc..c06bffb9e 100644
--- a/plugins/talk-plugin-viewing-options/client/translations.yml
+++ b/plugins/talk-plugin-viewing-options/client/translations.yml
@@ -1,8 +1,8 @@
en:
talk-plugin-viewing-options:
viewing_options: "Viewing Options"
- sort: Sort
- filter: Filter
+ sort: Sorting
+ filter: Filtering
es:
talk-plugin-viewing-options:
viewing_options: "Opciones de visualización"