Coder Social home page Coder Social logo

nonumpa / rumors-site Goto Github PK

View Code? Open in Web Editor NEW

This project forked from cofacts/rumors-site

0.0 0.0 0.0 17.95 MB

Rumors list / creation UI, with server-side rendering

Home Page: https://cofacts.tw

License: MIT License

JavaScript 89.21% TypeScript 10.59% CSS 0.05% HTML 0.02% Dockerfile 0.14%

rumors-site's Introduction

rumors-site

CI test Coverage Status

Rumors list / creation UI, with server-side rendering.

Configuration

For development, copy .env.sample to .env and make necessary changes.

For production via rumors-deploy, do setups in docker-compose.yml.

Development

This project uses NodeJS 16+.

$ npm install
$ npm run dev # Then visit http://localhost:3000

# Before you pull request, please lint your code first
$ npm run lint
# fix eslint
$ npm run lint:fix
# run test
$ npm t

styled-jsx syntax highlighting

See: https://github.com/zeit/styled-jsx#syntax-highlighting

Try built image on local

Build docker image.

# build en version
$ docker build --build-arg APP_ID=RUMORS_SITE --build-arg LOCALE=en_US -t rumors-site-test-en .
# build tw version
$ docker build --build-arg APP_ID=RUMORS_SITE --build-arg LOCALE=zh_TW -t rumors-site-test-tw .

This will build both rumors-site-test image.

Run the docker image on local machine, then visit http://localhost:3000.

# English version:
$ docker run --rm --env-file .env -e NODE_ENV=production -p 3000:3000 rumors-site-test-en

# zh_TW version:
$ docker run --rm --env-file .env -e NODE_ENV=production -p 3000:3000 rumors-site-test-tw

Storybook

We use storybook to demonstrate components.

# run storybook localserver on port 6006
$ npm run storybook

we also use storyshot to do snapshot test with stories, make sure to run:

$ npm test -- -u

before pushing to update stories snapshots. Storybook will be available under /storybook/index.html after build.

Analytics

This project supports Google Tag Manager. You can prepare the following setup in .env file:

  • PUBLIC_GTM_ID: Google Tag Manager Container ID (GTM-XXXXXXX)

The application will fire the following custom events in GTM dataLayer:

  • routeChangeStart - when next-router starts route change
  • routeChangeComplete - when next-router finish route change
  • dataLoaded - when article / reply is loaded in article & reply page

Also, it will push the following custom variable to dataLayer;

  • CURRENT_USER - Current user object, set by useCurrentUser.
  • doc - Set when dataLoaded event fires. The loaded content itself in object, including its __typename.

Lastly, in Google Tag Manager we use data-ga property to track clicks. If user clicks a decendant of an React element with data-ga property, a click event will be sent to Google analytics with the written data-ga. (It doesn't even need to be rendered, we setup the Google Tag Manager to read private React instance)

Also, if a component has its displayName set, a click event with that displayName is also sent to Google Analytics when any of its decendant is clicked.

Design and Mockups

Translation

We use ttag to support build-time i18n for the SSR website. During deploy, we build one Docker image for each locale.

Please refer to ttag documentation for annotating strings to translate.

To extract annotated strings to translation files, use:

$ npm run i18n:extract

Translation files

The translation files are located under i18n/, in Gettext PO format.

  • en_US.po: Since the language used in code is already English, this empty translation file exists to simplify settings.
  • zh_TW.po: Traditional Chinese translation.
  • ja.po: Japanese translation.

Supporting other languages

You can replace this with any language you want to support, by leveraging Gettext msginit command.

You will need to change the following to reflect the locale change:

  • i18n:extract script in package.json
  • i18n:validate script in package.json

Building in different languages

By default, the chatbot will be built under en_US locale.

During development, changing LOCALE in .env allows you to spin up dev server under a specific locale. Please set LOCALE to one of en_US, zh_TW or any other language code that exists under i18n/ directory.

When previewing translated site on local machine, sometimes the translated text does not appear. You may need to set BABEL_DISABLE_CACHE (example: BABEL_DISABLE_CACHE=1 npm run dev) to disable babel cache for the new translation to appear correctly.

When building using Docker, LOCALE can be provided via build args.

Typescript and API types

This repository uses GraphQL Code Generator with client preset.

When writing Typescript file with GraphQL, please run this command to generate or update the GraphQL codegen result (TypedDocumentNode in typegen/*):

$ npm run typegen

If encountering GraphQL operations or fragments wrapped with gql, please change to codegen result instead:

// Old syntax
import gql from 'graphql-tag';

gql`...`;

// New syntax
import { graphql } from 'path-to-typegen';
graphql(/* GraphQL */ `...`)

To consume the fragments from typed API, see Fragment Masking documentation of the client preset.

Legal

LICENSE defines the license agreement for the source code in this repository.

LEGAL.md is the user agreement for Cofacts website users.

rumors-site's People

Contributors

mrorz avatar hsiao19 avatar johnson-liang avatar yanglin5689446 avatar gorestarry avatar ztsai avatar nonumpa avatar leannechen avatar lucienlee avatar renovate-bot avatar kelvin2go avatar ulayab avatar dependabot[bot] avatar stimim avatar yumichen avatar marcussfu avatar jihchi avatar ajua avatar agameofprivacy avatar ben196888 avatar quad avatar young-tw avatar godgunman avatar ooookai avatar su-ya avatar normanlinnet avatar enninglintw avatar kerrickstaley avatar bil4444 avatar changhc avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.