diff --git a/frontend/app/components/preloader/index.ts b/frontend/app/components/preloader/index.ts index 76c20d37..26c3fbff 100644 --- a/frontend/app/components/preloader/index.ts +++ b/frontend/app/components/preloader/index.ts @@ -1,3 +1,3 @@ -export { default } from './preloader'; +export { Preloader } from './preloader'; // all styles were moved to iframe.html diff --git a/frontend/app/components/preloader/preloader.test.tsx b/frontend/app/components/preloader/preloader.test.tsx deleted file mode 100644 index 7ea1fb4c..00000000 --- a/frontend/app/components/preloader/preloader.test.tsx +++ /dev/null @@ -1,12 +0,0 @@ -/** @jsx createElement */ -import { createElement } from 'preact'; -import { mount } from 'enzyme'; -import Preloader from './preloader'; - -describe(``, () => { - it('should render Preloader', () => { - const element = mount(); - - expect(element.childAt(0).hasClass('preloader root__preloader')).toEqual(true); - }); -}); diff --git a/frontend/app/components/preloader/preloader.tsx b/frontend/app/components/preloader/preloader.tsx index 66b4e65b..9b814c63 100644 --- a/frontend/app/components/preloader/preloader.tsx +++ b/frontend/app/components/preloader/preloader.tsx @@ -1,17 +1,9 @@ /** @jsx createElement */ -import { createElement, JSX } from 'preact'; +import { createElement, FunctionComponent } from 'preact'; import b, { Mix } from 'bem-react-helper'; -type Props = JSX.HTMLAttributes & { +interface Props { mix?: Mix; -}; +} -const Preloader = (props: Props) => ( -
-
-
-
-
-); - -export default Preloader; +export const Preloader: FunctionComponent = ({ mix }) =>
; diff --git a/frontend/app/components/root/root.tsx b/frontend/app/components/root/root.tsx index 783ef6e2..42da7705 100644 --- a/frontend/app/components/root/root.tsx +++ b/frontend/app/components/root/root.tsx @@ -36,7 +36,7 @@ import { AuthPanel } from '@app/components/auth-panel'; import Settings from '@app/components/settings'; import { ConnectedComment as Comment } from '@app/components/comment/connected-comment'; import { CommentForm } from '@app/components/comment-form'; -import Preloader from '@app/components/preloader'; +import { Preloader } from '@app/components/preloader'; import { Thread } from '@app/components/thread'; import { Button } from '@app/components/button'; import { uploadImage, getPreview } from '@app/common/api'; diff --git a/frontend/app/components/user-info/__preloader/user-info__preloader.scss b/frontend/app/components/user-info/__preloader/user-info__preloader.scss index e9547920..3dae5aed 100644 --- a/frontend/app/components/user-info/__preloader/user-info__preloader.scss +++ b/frontend/app/components/user-info/__preloader/user-info__preloader.scss @@ -1,3 +1,4 @@ .user-info__preloader { margin: 0 auto 18px; + color: #888; } diff --git a/frontend/app/components/user-info/last-comments-list.tsx b/frontend/app/components/user-info/last-comments-list.tsx index 34f3295a..2dc58767 100644 --- a/frontend/app/components/user-info/last-comments-list.tsx +++ b/frontend/app/components/user-info/last-comments-list.tsx @@ -3,8 +3,8 @@ import { createElement } from 'preact'; import { Comment as CommentType } from '@app/common/types'; -import { Comment } from '../comment'; -import Preloader from '../preloader'; +import { Comment } from '@app/components/comment'; +import { Preloader } from '@app/components/preloader'; const LastCommentsList = ({ comments, isLoading }: { comments: CommentType[]; isLoading: boolean }) => { if (isLoading) { diff --git a/frontend/deleteme.html b/frontend/deleteme.html index ff424dad..e2b8acc8 100644 --- a/frontend/deleteme.html +++ b/frontend/deleteme.html @@ -12,60 +12,57 @@ -moz-osx-font-smoothing: grayscale; } - .preloader { - width: 60px; - text-align: center; - font-size: 0; + @keyframes bouncing { + 0%, + 80%, + 100% { + box-shadow: 0 10px 0 -8px; } - - .preloader_view_iframe { - margin: 0 auto; + 40% { + box-shadow: 0 10px 0 0; } + } - .preloader__bounce { - display: inline-block; + .preloader, + .preloader:before, + .preloader:after { + border-radius: 50%; width: 10px; height: 10px; - margin-right: 3px; - background-color: #333; - border-radius: 100%; - animation: iframePreloaderBounce 1.4s infinite ease-in-out both; + animation-fill-mode: both; + animation: bouncing 1.8s infinite ease-in-out; } - .preloader__bounce:first-child { - animation-delay: -.32s; - } - - .preloader__bounce:nth-child(2) { - animation-delay: -.16s; + .preloader { + color: #fff; + position: relative; + transform: translateZ(0); + animation-delay: -0.16s; } - .preloader__bounce:last-child { - margin-right: 0; + .preloader:before, + .preloader:after { + content: ''; + position: absolute; + top: 0; + } + .preloader:before { + transform: translateX(-15px) translateZ(0); + animation-delay: -0.32s; + } + .preloader:after { + transform: translateX(15px) translateZ(0); } - @keyframes iframePreloaderBounce { - 0% { - transform: scale(0); - } - - 40% { - transform: scale(1); - } - - 80%, 100% { - transform: scale(0); - } + .preloader_view_iframe { + margin: 0 auto; + color: #888; }
-
-
-
-
-
+