This commit is contained in:
parent
2f2b84bfbb
commit
b22b2cbfac
9 changed files with 60 additions and 84 deletions
|
@ -50,6 +50,8 @@ export function updateNotifications(notification, intlMessages, intlLocale) {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const excludeTypesFromSettings = state => state.getIn(['settings', 'notifications', 'shows']).filter(enabled => !enabled).keySeq().toJS();
|
||||||
|
|
||||||
export function refreshNotifications() {
|
export function refreshNotifications() {
|
||||||
return (dispatch, getState) => {
|
return (dispatch, getState) => {
|
||||||
dispatch(refreshNotificationsRequest());
|
dispatch(refreshNotificationsRequest());
|
||||||
|
@ -61,7 +63,7 @@ export function refreshNotifications() {
|
||||||
params.since_id = ids.first().get('id');
|
params.since_id = ids.first().get('id');
|
||||||
}
|
}
|
||||||
|
|
||||||
params.exclude_types = getState().getIn(['settings', 'notifications', 'shows']).filter(enabled => !enabled).keySeq().toJS();
|
params.exclude_types = excludeTypesFromSettings(getState());
|
||||||
|
|
||||||
api(getState).get('/api/v1/notifications', { params }).then(response => {
|
api(getState).get('/api/v1/notifications', { params }).then(response => {
|
||||||
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
||||||
|
@ -109,7 +111,7 @@ export function expandNotifications() {
|
||||||
|
|
||||||
const params = {};
|
const params = {};
|
||||||
|
|
||||||
params.exclude_types = getState().getIn(['settings', 'notifications', 'shows']).filter(enabled => !enabled).keySeq().toJS();
|
params.exclude_types = excludeTypesFromSettings(getState());
|
||||||
|
|
||||||
api(getState).get(url, params).then(response => {
|
api(getState).get(url, params).then(response => {
|
||||||
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
const next = getLinks(response).refs.find(link => link.rel === 'next');
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import LinkHeader from 'http-link-header';
|
import LinkHeader from './link_header';
|
||||||
|
|
||||||
export const getLinks = response => {
|
export const getLinks = response => {
|
||||||
const value = response.headers.link;
|
const value = response.headers.link;
|
||||||
|
|
|
@ -65,7 +65,7 @@ const Account = React.createClass({
|
||||||
<div className='account'>
|
<div className='account'>
|
||||||
<div style={{ display: 'flex' }}>
|
<div style={{ display: 'flex' }}>
|
||||||
<Permalink key={account.get('id')} className='account__display-name' href={account.get('url')} to={`/accounts/${account.get('id')}`}>
|
<Permalink key={account.get('id')} className='account__display-name' href={account.get('url')} to={`/accounts/${account.get('id')}`}>
|
||||||
<div style={{ float: 'left', marginLeft: '12px', marginRight: '10px' }}><Avatar src={account.get('avatar')} staticSrc={status.getIn(['account', 'avatar_static'])} size={36} /></div>
|
<div style={{ float: 'left', marginLeft: '12px', marginRight: '10px' }}><Avatar src={account.get('avatar')} staticSrc={account.get('avatar_static')} size={36} /></div>
|
||||||
<DisplayName account={account} />
|
<DisplayName account={account} />
|
||||||
</Permalink>
|
</Permalink>
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
|
|
||||||
const AutosuggestAccount = ({ account }) => (
|
const AutosuggestAccount = ({ account }) => (
|
||||||
<div style={{ overflow: 'hidden' }} className='autosuggest-account'>
|
<div style={{ overflow: 'hidden' }} className='autosuggest-account'>
|
||||||
<div style={{ float: 'left', marginRight: '5px' }}><Avatar src={account.get('avatar')} staticSrc={status.getIn(['account', 'avatar_static'])} size={18} /></div>
|
<div style={{ float: 'left', marginRight: '5px' }}><Avatar src={account.get('avatar')} staticSrc={account.get('avatar_static')} size={18} /></div>
|
||||||
<DisplayName account={account} />
|
<DisplayName account={account} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -33,7 +33,7 @@ const AccountAuthorize = ({ intl, account, onAuthorize, onReject }) => {
|
||||||
<div>
|
<div>
|
||||||
<div style={outerStyle}>
|
<div style={outerStyle}>
|
||||||
<Permalink href={account.get('url')} to={`/accounts/${account.get('id')}`} className='detailed-status__display-name' style={{ display: 'block', overflow: 'hidden', marginBottom: '15px' }}>
|
<Permalink href={account.get('url')} to={`/accounts/${account.get('id')}`} className='detailed-status__display-name' style={{ display: 'block', overflow: 'hidden', marginBottom: '15px' }}>
|
||||||
<div style={{ float: 'left', marginRight: '10px' }}><Avatar src={account.get('avatar')} staticSrc={status.getIn(['account', 'avatar_static'])} size={48} /></div>
|
<div style={{ float: 'left', marginRight: '10px' }}><Avatar src={account.get('avatar')} staticSrc={account.get('avatar_static')} size={48} /></div>
|
||||||
<DisplayName account={account} />
|
<DisplayName account={account} />
|
||||||
</Permalink>
|
</Permalink>
|
||||||
|
|
||||||
|
|
|
@ -79,14 +79,14 @@ const Notification = React.createClass({
|
||||||
const link = <Permalink className='notification__display-name' style={linkStyle} href={account.get('url')} title={account.get('acct')} to={`/accounts/${account.get('id')}`} dangerouslySetInnerHTML={displayNameHTML} />;
|
const link = <Permalink className='notification__display-name' style={linkStyle} href={account.get('url')} title={account.get('acct')} to={`/accounts/${account.get('id')}`} dangerouslySetInnerHTML={displayNameHTML} />;
|
||||||
|
|
||||||
switch(notification.get('type')) {
|
switch(notification.get('type')) {
|
||||||
case 'follow':
|
case 'follow':
|
||||||
return this.renderFollow(account, link);
|
return this.renderFollow(account, link);
|
||||||
case 'mention':
|
case 'mention':
|
||||||
return this.renderMention(notification);
|
return this.renderMention(notification);
|
||||||
case 'favourite':
|
case 'favourite':
|
||||||
return this.renderFavourite(notification, link);
|
return this.renderFavourite(notification, link);
|
||||||
case 'reblog':
|
case 'reblog':
|
||||||
return this.renderReblog(notification, link);
|
return this.renderReblog(notification, link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
33
app/assets/javascripts/components/link_header.jsx
Normal file
33
app/assets/javascripts/components/link_header.jsx
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
import Link from 'http-link-header';
|
||||||
|
import querystring from 'querystring';
|
||||||
|
|
||||||
|
Link.parseAttrs = (link, parts) => {
|
||||||
|
let match = null
|
||||||
|
let attr = ''
|
||||||
|
let value = ''
|
||||||
|
let attrs = ''
|
||||||
|
|
||||||
|
let uriAttrs = /<(.*)>;\s*(.*)/gi.exec(parts)
|
||||||
|
|
||||||
|
if(uriAttrs) {
|
||||||
|
attrs = uriAttrs[2]
|
||||||
|
link = Link.parseParams(link, uriAttrs[1])
|
||||||
|
}
|
||||||
|
|
||||||
|
while(match = Link.attrPattern.exec(attrs)) {
|
||||||
|
attr = match[1].toLowerCase()
|
||||||
|
value = match[4] || match[3] || match[2]
|
||||||
|
|
||||||
|
if( /\*$/.test(attr)) {
|
||||||
|
Link.setAttr(link, attr, Link.parseExtendedValue(value))
|
||||||
|
} else if(/%/.test(value)) {
|
||||||
|
Link.setAttr(link, attr, querystring.decode(value))
|
||||||
|
} else {
|
||||||
|
Link.setAttr(link, attr, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return link
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Link;
|
|
@ -30,7 +30,7 @@
|
||||||
"escape-html": "^1.0.3",
|
"escape-html": "^1.0.3",
|
||||||
"eventsource": "^0.2.1",
|
"eventsource": "^0.2.1",
|
||||||
"express": "^4.14.1",
|
"express": "^4.14.1",
|
||||||
"http-link-header": "^0.5.0",
|
"http-link-header": "^0.8.0",
|
||||||
"immutable": "^3.8.1",
|
"immutable": "^3.8.1",
|
||||||
"intl": "^1.2.5",
|
"intl": "^1.2.5",
|
||||||
"jsdom": "^9.11.0",
|
"jsdom": "^9.11.0",
|
||||||
|
|
79
yarn.lock
79
yarn.lock
|
@ -1281,7 +1281,7 @@ babel-template@^6.3.0:
|
||||||
babylon "^6.11.0"
|
babylon "^6.11.0"
|
||||||
lodash "^4.2.0"
|
lodash "^4.2.0"
|
||||||
|
|
||||||
babel-traverse@^6.16.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1:
|
babel-traverse@^6.16.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1, babel-traverse@^6.23.0, babel-traverse@^6.23.1:
|
||||||
version "6.23.1"
|
version "6.23.1"
|
||||||
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48"
|
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -1295,30 +1295,7 @@ babel-traverse@^6.16.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-tr
|
||||||
invariant "^2.2.0"
|
invariant "^2.2.0"
|
||||||
lodash "^4.2.0"
|
lodash "^4.2.0"
|
||||||
|
|
||||||
babel-traverse@^6.22.1:
|
babel-types@^6.16.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0, babel-types@^6.9.0:
|
||||||
version "6.22.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f"
|
|
||||||
dependencies:
|
|
||||||
babel-code-frame "^6.22.0"
|
|
||||||
babel-messages "^6.22.0"
|
|
||||||
babel-runtime "^6.22.0"
|
|
||||||
babel-types "^6.22.0"
|
|
||||||
babylon "^6.15.0"
|
|
||||||
debug "^2.2.0"
|
|
||||||
globals "^9.0.0"
|
|
||||||
invariant "^2.2.0"
|
|
||||||
lodash "^4.2.0"
|
|
||||||
|
|
||||||
babel-types@^6.16.0, babel-types@^6.22.0:
|
|
||||||
version "6.22.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db"
|
|
||||||
dependencies:
|
|
||||||
babel-runtime "^6.22.0"
|
|
||||||
esutils "^2.0.2"
|
|
||||||
lodash "^4.2.0"
|
|
||||||
to-fast-properties "^1.0.1"
|
|
||||||
|
|
||||||
babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.9.0:
|
|
||||||
version "6.23.0"
|
version "6.23.0"
|
||||||
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
|
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -1334,15 +1311,7 @@ babelify@^7.3.0:
|
||||||
babel-core "^6.0.14"
|
babel-core "^6.0.14"
|
||||||
object-assign "^4.0.0"
|
object-assign "^4.0.0"
|
||||||
|
|
||||||
babylon@^6.11.0:
|
babylon@^6.11.0, babylon@^6.15.0, babylon@^6.16.1:
|
||||||
version "6.11.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.11.4.tgz#75e1f52187efa0cde5a541a7f7fdda38f6eb5bd2"
|
|
||||||
|
|
||||||
babylon@^6.15.0:
|
|
||||||
version "6.15.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e"
|
|
||||||
|
|
||||||
babylon@^6.16.1:
|
|
||||||
version "6.16.1"
|
version "6.16.1"
|
||||||
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3"
|
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3"
|
||||||
|
|
||||||
|
@ -2159,12 +2128,6 @@ d@1:
|
||||||
dependencies:
|
dependencies:
|
||||||
es5-ext "^0.10.9"
|
es5-ext "^0.10.9"
|
||||||
|
|
||||||
d@^0.1.1, d@~0.1.1:
|
|
||||||
version "0.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309"
|
|
||||||
dependencies:
|
|
||||||
es5-ext "~0.10.2"
|
|
||||||
|
|
||||||
dashdash@^1.12.0:
|
dashdash@^1.12.0:
|
||||||
version "1.14.0"
|
version "1.14.0"
|
||||||
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141"
|
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141"
|
||||||
|
@ -2461,7 +2424,7 @@ error-ex@^1.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-arrayish "^0.2.1"
|
is-arrayish "^0.2.1"
|
||||||
|
|
||||||
es-abstract@^1.3.2, es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.5.1:
|
es-abstract@^1.3.2:
|
||||||
version "1.6.1"
|
version "1.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.6.1.tgz#bb8a2064120abcf928a086ea3d9043114285ec99"
|
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.6.1.tgz#bb8a2064120abcf928a086ea3d9043114285ec99"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -2470,7 +2433,7 @@ es-abstract@^1.3.2, es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.5.1:
|
||||||
is-callable "^1.1.3"
|
is-callable "^1.1.3"
|
||||||
is-regex "^1.0.3"
|
is-regex "^1.0.3"
|
||||||
|
|
||||||
es-abstract@^1.7.0:
|
es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.5.1, es-abstract@^1.7.0:
|
||||||
version "1.7.0"
|
version "1.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c"
|
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -2494,26 +2457,11 @@ es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
|
||||||
es6-iterator "2"
|
es6-iterator "2"
|
||||||
es6-symbol "~3.1"
|
es6-symbol "~3.1"
|
||||||
|
|
||||||
es5-ext@^0.10.7, es5-ext@~0.10.11, es5-ext@~0.10.2:
|
|
||||||
version "0.10.12"
|
|
||||||
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047"
|
|
||||||
dependencies:
|
|
||||||
es6-iterator "2"
|
|
||||||
es6-symbol "~3.1"
|
|
||||||
|
|
||||||
es5-shim@^4.5.9:
|
es5-shim@^4.5.9:
|
||||||
version "4.5.9"
|
version "4.5.9"
|
||||||
resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.9.tgz#2a1e2b9e583ff5fed0c20a3ee2cbf3f75230a5c0"
|
resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.9.tgz#2a1e2b9e583ff5fed0c20a3ee2cbf3f75230a5c0"
|
||||||
|
|
||||||
es6-iterator@2:
|
es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1:
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac"
|
|
||||||
dependencies:
|
|
||||||
d "^0.1.1"
|
|
||||||
es5-ext "^0.10.7"
|
|
||||||
es6-symbol "3"
|
|
||||||
|
|
||||||
es6-iterator@^2.0.1, es6-iterator@~2.0.1:
|
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
|
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -2550,14 +2498,7 @@ es6-shim@^0.35.1:
|
||||||
version "0.35.1"
|
version "0.35.1"
|
||||||
resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.1.tgz#a23524009005b031ab4a352ac196dfdfd1144ab7"
|
resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.1.tgz#a23524009005b031ab4a352ac196dfdfd1144ab7"
|
||||||
|
|
||||||
es6-symbol@3, es6-symbol@^3.0.2, es6-symbol@~3.1:
|
es6-symbol@3.1.1, es6-symbol@^3.0.2, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1:
|
||||||
version "3.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
|
|
||||||
dependencies:
|
|
||||||
d "~0.1.1"
|
|
||||||
es5-ext "~0.10.11"
|
|
||||||
|
|
||||||
es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
|
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
|
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -3244,9 +3185,9 @@ http-errors@~1.5.1:
|
||||||
setprototypeof "1.0.2"
|
setprototypeof "1.0.2"
|
||||||
statuses ">= 1.3.1 < 2"
|
statuses ">= 1.3.1 < 2"
|
||||||
|
|
||||||
http-link-header@^0.5.0:
|
http-link-header@^0.8.0:
|
||||||
version "0.5.0"
|
version "0.8.0"
|
||||||
resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-0.5.0.tgz#68598d92c55d3dac7d3e6ae405142fecf7bd3303"
|
resolved "https://registry.yarnpkg.com/http-link-header/-/http-link-header-0.8.0.tgz#a22b41a0c9b1e2d8fac1bf1b697c6bd532d5f5e4"
|
||||||
|
|
||||||
http-signature@~1.1.0:
|
http-signature@~1.1.0:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
|
|
Loading…
Reference in a new issue