Родитель
92aeb3aab7
Коммит
90308b841f
|
@ -61,6 +61,11 @@
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="https://blog.mozilla.com/addons">Blog</a></li>
|
<li><a href="https://blog.mozilla.com/addons">Blog</a></li>
|
||||||
|
<li>
|
||||||
|
<a href="https://extensionworkshop.com/">
|
||||||
|
Extension Workshop
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="/en-GB/developers/">
|
<a href="/en-GB/developers/">
|
||||||
<!-- react-text: 245 -->Developer Hub
|
<!-- react-text: 245 -->Developer Hub
|
||||||
|
|
|
@ -4,6 +4,7 @@ import { compose } from 'redux';
|
||||||
|
|
||||||
import LanguagePicker from 'amo/components/LanguagePicker';
|
import LanguagePicker from 'amo/components/LanguagePicker';
|
||||||
import Link from 'amo/components/Link';
|
import Link from 'amo/components/Link';
|
||||||
|
import { makeQueryStringWithUTM } from 'amo/utils';
|
||||||
import translate from 'core/i18n/translate';
|
import translate from 'core/i18n/translate';
|
||||||
import Icon from 'ui/components/Icon';
|
import Icon from 'ui/components/Icon';
|
||||||
import { sanitizeHTML } from 'core/utils';
|
import { sanitizeHTML } from 'core/utils';
|
||||||
|
@ -51,6 +52,19 @@ export class FooterBase extends React.Component {
|
||||||
{i18n.gettext('Blog')}
|
{i18n.gettext('Blog')}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
className="Footer-extension-workshop-link"
|
||||||
|
href={`https://extensionworkshop.com/${makeQueryStringWithUTM(
|
||||||
|
{
|
||||||
|
utm_content: 'footer-link',
|
||||||
|
utm_campaign: null,
|
||||||
|
},
|
||||||
|
)}`}
|
||||||
|
>
|
||||||
|
{i18n.gettext('Extension Workshop')}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<Link href="/developers/" prependClientApp={false}>
|
<Link href="/developers/" prependClientApp={false}>
|
||||||
{i18n.gettext('Developer Hub')}
|
{i18n.gettext('Developer Hub')}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import {
|
||||||
getCurrentUser,
|
getCurrentUser,
|
||||||
hasAnyReviewerRelatedPermission,
|
hasAnyReviewerRelatedPermission,
|
||||||
} from 'amo/reducers/users';
|
} from 'amo/reducers/users';
|
||||||
|
import { makeQueryStringWithUTM } from 'amo/utils';
|
||||||
import { VIEW_CONTEXT_HOME } from 'core/constants';
|
import { VIEW_CONTEXT_HOME } from 'core/constants';
|
||||||
import translate from 'core/i18n/translate';
|
import translate from 'core/i18n/translate';
|
||||||
import DropdownMenu from 'ui/components/DropdownMenu';
|
import DropdownMenu from 'ui/components/DropdownMenu';
|
||||||
|
@ -69,6 +70,19 @@ export class HeaderBase extends React.Component {
|
||||||
<SectionLinks className="Header-SectionLinks" location={location} />
|
<SectionLinks className="Header-SectionLinks" location={location} />
|
||||||
|
|
||||||
<div className="Header-user-and-external-links">
|
<div className="Header-user-and-external-links">
|
||||||
|
<Link
|
||||||
|
className="Header-extension-workshop-link Header-button"
|
||||||
|
href={`https://extensionworkshop.com/${makeQueryStringWithUTM({
|
||||||
|
utm_content: 'header-link',
|
||||||
|
utm_campaign: null,
|
||||||
|
})}`}
|
||||||
|
external
|
||||||
|
prependClientApp={false}
|
||||||
|
prependLang={false}
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
{i18n.gettext('Extension Workshop')}
|
||||||
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
className="Header-developer-hub-link Header-button"
|
className="Header-developer-hub-link Header-button"
|
||||||
href="/developers/"
|
href="/developers/"
|
||||||
|
|
|
@ -106,7 +106,8 @@
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.Header-developer-hub-link {
|
.Header-developer-hub-link,
|
||||||
|
.Header-extension-workshop-link {
|
||||||
display: none;
|
display: none;
|
||||||
|
|
||||||
@include respond-to(large) {
|
@include respond-to(large) {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
|
||||||
import Footer, { FooterBase } from 'amo/components/Footer';
|
import Footer, { FooterBase } from 'amo/components/Footer';
|
||||||
|
import { makeQueryStringWithUTM } from 'amo/utils';
|
||||||
import { fakeI18n, shallowUntilTarget } from 'tests/unit/helpers';
|
import { fakeI18n, shallowUntilTarget } from 'tests/unit/helpers';
|
||||||
|
|
||||||
describe(__filename, () => {
|
describe(__filename, () => {
|
||||||
|
@ -41,5 +42,16 @@ describe(__filename, () => {
|
||||||
'href',
|
'href',
|
||||||
'https://developer.mozilla.org/Add-ons/AMO/Policy/Contact',
|
'https://developer.mozilla.org/Add-ons/AMO/Policy/Contact',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
expect(root.find('.Footer-extension-workshop-link')).toHaveText(
|
||||||
|
'Extension Workshop',
|
||||||
|
);
|
||||||
|
expect(root.find('.Footer-extension-workshop-link')).toHaveProp(
|
||||||
|
'href',
|
||||||
|
`https://extensionworkshop.com/${makeQueryStringWithUTM({
|
||||||
|
utm_content: 'footer-link',
|
||||||
|
utm_campaign: null,
|
||||||
|
})}`,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -3,6 +3,7 @@ import * as React from 'react';
|
||||||
import { setViewContext } from 'amo/actions/viewContext';
|
import { setViewContext } from 'amo/actions/viewContext';
|
||||||
import Header, { HeaderBase } from 'amo/components/Header';
|
import Header, { HeaderBase } from 'amo/components/Header';
|
||||||
import Link from 'amo/components/Link';
|
import Link from 'amo/components/Link';
|
||||||
|
import { makeQueryStringWithUTM } from 'amo/utils';
|
||||||
import AuthenticateButton from 'core/components/AuthenticateButton';
|
import AuthenticateButton from 'core/components/AuthenticateButton';
|
||||||
import DropdownMenu from 'ui/components/DropdownMenu';
|
import DropdownMenu from 'ui/components/DropdownMenu';
|
||||||
import { VIEW_CONTEXT_HOME } from 'core/constants';
|
import { VIEW_CONTEXT_HOME } from 'core/constants';
|
||||||
|
@ -162,4 +163,20 @@ describe(__filename, () => {
|
||||||
expect(link.children()).toHaveText('Manage My Submissions');
|
expect(link.children()).toHaveText('Manage My Submissions');
|
||||||
expect(link).toHaveProp('href', '/developers/addons/');
|
expect(link).toHaveProp('href', '/developers/addons/');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('displays a extension workshop link in header', () => {
|
||||||
|
const { store } = dispatchSignInActions();
|
||||||
|
const wrapper = renderHeader({ store });
|
||||||
|
const link = wrapper.find('.Header-extension-workshop-link');
|
||||||
|
|
||||||
|
expect(link).toHaveLength(1);
|
||||||
|
expect(link.children()).toHaveText('Extension Workshop');
|
||||||
|
expect(link).toHaveProp(
|
||||||
|
'href',
|
||||||
|
`https://extensionworkshop.com/${makeQueryStringWithUTM({
|
||||||
|
utm_content: 'header-link',
|
||||||
|
utm_campaign: null,
|
||||||
|
})}`,
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Загрузка…
Ссылка в новой задаче