From 49e9012449c52e7cfdecbf313be34303f11d1246 Mon Sep 17 00:00:00 2001 From: Auraofdivinity Date: Wed, 19 Feb 2020 11:49:00 +0530 Subject: [PATCH 1/4] Fixes #192- Fetching articles from Medium --- src/components/Activities/ActivityCard.js | 65 +++++++++---- src/pages/Home/Components/Activities.js | 109 +++++++++++++--------- 2 files changed, 113 insertions(+), 61 deletions(-) diff --git a/src/components/Activities/ActivityCard.js b/src/components/Activities/ActivityCard.js index ffe4eb5..0fb0d23 100644 --- a/src/components/Activities/ActivityCard.js +++ b/src/components/Activities/ActivityCard.js @@ -1,19 +1,48 @@ -import React from 'react' -import { Card } from 'react-bootstrap'; -const ActivityCard = (props) => { - return ( - - - -

{props.activity.title}

- - {props.activity.text} - - Read More -
-
+import React from "react"; +import { Card } from "react-bootstrap"; +const ActivityCard = props => { + return ( +
+ + + + +
+

+ {props.activity.title} +

+
+
+ + {props.activity.text} + + + Read More + +
+
+
+ ); +}; - ) -} - -export default ActivityCard \ No newline at end of file +export default ActivityCard; diff --git a/src/pages/Home/Components/Activities.js b/src/pages/Home/Components/Activities.js index 91bea22..f901aa0 100644 --- a/src/pages/Home/Components/Activities.js +++ b/src/pages/Home/Components/Activities.js @@ -1,49 +1,72 @@ -import React from 'react' -import ActivityCard from '../../../components/Activities/ActivityCard' -import KWoC from '../images/kwoc_logo.png' -import workshop19 from '../images/workshop.jpg' -import './common.css' -var activities = [ - { - img:'https://1.bp.blogspot.com/-Ig-v1tDXZt4/XDODmZvWp1I/AAAAAAAAB0A/KtbFdBPFVQw2O15FekkIR0Yg8MUp--rngCLcBGAs/s1600/GCI%2B-%2BVertical%2B-%2BGray%2BText%2B-%2BWhite%2BBG.png', - title:'Google CodeIN 2019-20', - text:'Competition for preschool.', - link:'/#/gci19' - }, - { - img:'https://cdn.shortpixel.ai/spai/q_lossy+ret_img/https://numfocus.org/wp-content/uploads/2017/03/vertical-gsoc-logo_1-1.jpg', - title:'Google Summer of Code 2019', - text:'Competition for undergraduate students.', - link:'/#/gsoc19' - }, - { - img:KWoC, - title:'Kharagpur Winter of Code 2019', - text:'Competition for undergraduate students.', - link:'/#/kwoc19' - }, - { - img:workshop19, - title:'Organized a Workshop/ Event At New Delhi Together With Women Who Code', - text:'Competition for undergraduate students.', - link:'/#/workshop19' - }, -] +import React, { Component } from "react"; +import ActivityCard from "../../../components/Activities/ActivityCard"; +import KWoC from "../images/kwoc_logo.png"; +import workshop19 from "../images/workshop.jpg"; +import "./common.css"; -const MapActivites = activities.map((activity,index)=>{return }) +class Activities extends React.Component { + constructor(props) { + super(props); + this.state = { + activities: [] + }; + } + componentDidMount() { + let activities = []; + fetch("https://medium-article-fetcher.herokuapp.com/posts", { + crossDomain: true, + method: "GET", + headers: { "Content-Type": "application/json" } + }) + .then(res => { + return res.json(); + }) + .then(resData => { + for (let i = 0; i < 4; i++) { + let obj = {}; + obj.title = resData.items[i].title; + obj.link = resData.items[i].link; -const Activities = () => { + let m, + urls = [], + str = resData.items[i].content_encoded, + rex = /]+src="?([^"\s]+)"?\s*\/>/g; + + while ((m = rex.exec(str))) { + urls.push(m[1]); + } + obj.img = urls[0]; + activities.push(obj); + } + this.setState({ activities: activities }, () => { + console.log(this.state.activities); + }); + }) + .catch(err => { + console.log(err); + }); + } + render() { return ( -
-

Activities

-
-
- {MapActivites} -
-
-
- ) +
+

Activities

+
+
+ {this.state.activities.map((currentActivity, index) => { + return ; + })} +
+
+
+ ); + } } -export default Activities \ No newline at end of file +export default Activities; From a616a0c165eaffa0ec52b0afe0fb16131c299df7 Mon Sep 17 00:00:00 2001 From: Auraofdivinity Date: Thu, 20 Feb 2020 02:02:26 +0530 Subject: [PATCH 2/4] Requested changes --- src/components/Activities/ActivityCard.css | 49 ++++++++++++++++++ src/components/Activities/ActivityCard.js | 59 +++++++--------------- src/pages/Home/Components/Activities.js | 34 ++++++++----- 3 files changed, 88 insertions(+), 54 deletions(-) create mode 100644 src/components/Activities/ActivityCard.css diff --git a/src/components/Activities/ActivityCard.css b/src/components/Activities/ActivityCard.css new file mode 100644 index 0000000..6dc3f13 --- /dev/null +++ b/src/components/Activities/ActivityCard.css @@ -0,0 +1,49 @@ +.card.activity { + width: 20rem; + height: 400px; +} + +.card.activity:hover { + box-shadow: 5px 10px 20px 1px rgba(0, 0, 0, 0.253); +} + +.card.activity.card-body { + padding: 3rem 0; +} + +.card.activity.card-text { + font-size: 0.9rem; + padding: 0.4rem 1.9rem; +} + +.container.fluid.row { + padding-top: 6rem; +} + +.card-img-top.activity { + transform: scale(1); + transition: transform 0.5s ease; + height: 150px; + object-fit: scale-down; +} + +.card-img-top.activity:hover { + transform: scale(1.8); + overflow: hidden; +} + +.btn.activity { + color: #22247a; + background-color: #fff; + border-color: #22247a; +} + +.btn.activity:hover { + color: #fff; + background-color: #22247a; + border-color: #22247a; +} + +.card-title.activity { + font-weight: bold; +} diff --git a/src/components/Activities/ActivityCard.js b/src/components/Activities/ActivityCard.js index 0fb0d23..aeb47db 100644 --- a/src/components/Activities/ActivityCard.js +++ b/src/components/Activities/ActivityCard.js @@ -1,46 +1,25 @@ import React from "react"; -import { Card } from "react-bootstrap"; +import "./ActivityCard.css"; + const ActivityCard = props => { return ( -
- - - - -
-

- {props.activity.title} -

-
-
- - {props.activity.text} - - - Read More - -
-
+
+ + +
+

+ {props.activity.title} +

+

{props.activity.description}

+ + + Read More + +
); }; diff --git a/src/pages/Home/Components/Activities.js b/src/pages/Home/Components/Activities.js index f901aa0..930d59f 100644 --- a/src/pages/Home/Components/Activities.js +++ b/src/pages/Home/Components/Activities.js @@ -1,7 +1,5 @@ -import React, { Component } from "react"; +import React from "react"; import ActivityCard from "../../../components/Activities/ActivityCard"; -import KWoC from "../images/kwoc_logo.png"; -import workshop19 from "../images/workshop.jpg"; import "./common.css"; class Activities extends React.Component { @@ -23,11 +21,11 @@ class Activities extends React.Component { return res.json(); }) .then(resData => { - for (let i = 0; i < 4; i++) { + console.log(resData); + for (let i = 0; i < 3; i++) { let obj = {}; obj.title = resData.items[i].title; obj.link = resData.items[i].link; - let m, urls = [], str = resData.items[i].content_encoded, @@ -37,6 +35,16 @@ class Activities extends React.Component { urls.push(m[1]); } obj.img = urls[0]; + + let reg = /<\s*p[^>]*>([^<]*)<\s*\/\s*p\s*>/; + let stream = resData.items[i].content_encoded.match(reg); + + obj.description = + stream[1] + .split(" ") + .slice(0, 20) + .join(" ") + "..."; + activities.push(obj); } this.setState({ activities: activities }, () => { @@ -51,16 +59,14 @@ class Activities extends React.Component { return (

Activities

-
-
+
+
{this.state.activities.map((currentActivity, index) => { - return ; + return ( +
+ +
+ ); })}
From dd40b82b204defe2248192640be1cf65d1092a42 Mon Sep 17 00:00:00 2001 From: Auraofdivinity Date: Sun, 23 Feb 2020 02:26:24 +0530 Subject: [PATCH 3/4] Requested Changes --- package.json | 1 + src/components/Activities/ActivityCard.js | 22 +- src/pages/Blogs/BlogList.css | 69 ++++++ src/pages/Blogs/BlogList.js | 276 +++++++++++++--------- src/pages/Home/Components/Activities.css | 11 + src/pages/Home/Components/Activities.js | 47 ++-- 6 files changed, 284 insertions(+), 142 deletions(-) create mode 100644 src/pages/Blogs/BlogList.css create mode 100644 src/pages/Home/Components/Activities.css diff --git a/package.json b/package.json index 651dfea..5ecc169 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "markdown-it-task-lists": "^2.1.1", "marked": "^0.8.0", "react": "^16.12.0", + "react-awesome-modal": "^2.0.5", "react-bootstrap": "^1.0.0-beta.16", "react-dom": "^16.12.0", "react-markdown": "^4.3.1", diff --git a/src/components/Activities/ActivityCard.js b/src/components/Activities/ActivityCard.js index aeb47db..fd268a3 100644 --- a/src/components/Activities/ActivityCard.js +++ b/src/components/Activities/ActivityCard.js @@ -1,24 +1,16 @@ -import React from "react"; -import "./ActivityCard.css"; +import React from 'react'; +import './ActivityCard.css'; const ActivityCard = props => { return ( -
- +
+ -
-

+
+

{props.activity.title}

-

{props.activity.description}

- - - Read More - +

{props.activity.description}

); diff --git a/src/pages/Blogs/BlogList.css b/src/pages/Blogs/BlogList.css new file mode 100644 index 0000000..b4c292b --- /dev/null +++ b/src/pages/Blogs/BlogList.css @@ -0,0 +1,69 @@ +.card.activity { + width: 20rem; + height: 400px; +} + +.card.activity:hover { + box-shadow: 5px 10px 20px 1px rgba(0, 0, 0, 0.253); +} + +.card.activity.card-body { + padding: 3rem 0; +} + +.card.activity.card-text { + font-size: 0.9rem; + padding: 0.4rem 1.9rem; +} + +.container.fluid.row { + padding-top: 6rem; +} + +.card-img-top.activity { + transform: scale(1); + transition: transform 0.5s ease; + height: 150px; + object-fit: scale-down; +} + +.card-img-top.activity:hover { + transform: scale(1.8); + overflow: hidden; +} + +.btn.activity { + color: #22247a; + background-color: #fff; + border-color: #22247a; +} + +.btn.activity:hover { + color: #fff; + background-color: #22247a; + border-color: #22247a; +} + +.card-title.activity { + font-weight: bold; + height: 100px; +} + +::-webkit-scrollbar { + width: 10px; +} + +/* Track */ +::-webkit-scrollbar-track { + background: #f1f1f1; +} + +/* Handle */ +::-webkit-scrollbar-thumb { + background: #3133aa; +} + +/* Handle on hover */ +::-webkit-scrollbar-thumb:hover { + background: #22247a; +} diff --git a/src/pages/Blogs/BlogList.js b/src/pages/Blogs/BlogList.js index 7e6fa33..9c34010 100644 --- a/src/pages/Blogs/BlogList.js +++ b/src/pages/Blogs/BlogList.js @@ -1,123 +1,183 @@ -import React from 'react' -import PropTypes from 'prop-types' +import React from 'react'; +import './BlogList.css'; +import Modal from 'react-awesome-modal'; -export default function BlogList({title,content}) { - return ( - <> -
-
-
+class BlogList extends React.Component { + constructor(props) { + super(props); + this.state = { + activities: [], + visible: false, + currentActivity: null + }; + } -
-
-

What is MDB?

-

MDB is world's most popular Material Design framework for building responsive, mobile-first websites - and apps.

-

Trusted by over - 400 000 developers and designers. Easy to use & customize. 400+ material UI elements, templates - & tutorials.

-
-
-
-
-
-
- -
-
-
-
+ componentDidMount() { + let activities = []; + fetch('https://medium-article-fetcher.herokuapp.com/posts', { + crossDomain: true, + method: 'GET', + headers: { 'Content-Type': 'application/json' } + }) + .then(res => { + return res.json(); + }) + .then(resData => { + console.log(resData); + for (let i = 0; i < resData.items.length; i++) { + let obj = {}; + obj.title = resData.items[i].title; + obj.link = resData.items[i].link; + let m, + urls = [], + str = resData.items[i].content_encoded, + rex = /]+src="?([^"\s]+)"?\s*\/>/g; -
+ while ((m = rex.exec(str))) { + urls.push(m[1]); + } + obj.img = urls[0]; -
-
-
-
- - -
-
-
-
-
-

- Bootstrap Automation -

-

Learn how to create a smart website which learns your user and reacts properly to his behavior.

- Start tutorial - - -
+ let reg = /<\s*p[^>]*>([^<]*)<\s*\/\s*p\s*>/; + let stream = resData.items[i].content_encoded.match(reg); -
+ let div = document.createElement('div'); + div.innerHTML = resData.items[i].content_encoded; -
-
-
-
- - -
-
-
-
-
-

- Web Push notifications -

-

Push messaging provides a simple and effective way to re-engage with your users and in this tutorial - you'll learn how to add push notifications to your web app

- Start tutorial - - -
+ obj.longDescription = div.textContent || div.innerText || ''; -
+ obj.description = + stream[1] + .split(' ') + .slice(0, 20) + .join(' ') + '...'; -
- + closeModal = () => { + this.setState({ + visible: false + }); + }; + + render() { + return ( +
+
+
+
+
+
+ {this.state.activities.map((currentActivity, index) => { + return ( +
+
+ +
+

+ {currentActivity.title} +

+

+ {currentActivity.description} +

+ + this.handleClick(currentActivity)} + > + Read More + +
+
+
+ ); + })} +
+
+
+
+ this.closeModal()} + > +
+ +

+ {this.state.currentActivity + ? this.state.currentActivity.title + : ''} +

+
+

+ {this.state.currentActivity + ? this.state.currentActivity.longDescription + : ''} +

+
-
-
-
- - ); + +
+ +
+ ); + } } +export default BlogList; diff --git a/src/pages/Home/Components/Activities.css b/src/pages/Home/Components/Activities.css new file mode 100644 index 0000000..87b80c6 --- /dev/null +++ b/src/pages/Home/Components/Activities.css @@ -0,0 +1,11 @@ +.btn.activity { + color: #22247a; + background-color: #fff; + border-color: #22247a; +} + +.btn.activity:hover { + color: #fff; + background-color: #22247a; + border-color: #22247a; +} diff --git a/src/pages/Home/Components/Activities.js b/src/pages/Home/Components/Activities.js index 930d59f..7d66b77 100644 --- a/src/pages/Home/Components/Activities.js +++ b/src/pages/Home/Components/Activities.js @@ -1,27 +1,27 @@ -import React from "react"; -import ActivityCard from "../../../components/Activities/ActivityCard"; -import "./common.css"; +import React from 'react'; +import ActivityCard from '../../../components/Activities/ActivityCard'; +import './common.css'; class Activities extends React.Component { constructor(props) { super(props); this.state = { - activities: [] + activities: [], + page: 'activities' }; } componentDidMount() { let activities = []; - fetch("https://medium-article-fetcher.herokuapp.com/posts", { + fetch('https://medium-article-fetcher.herokuapp.com/posts', { crossDomain: true, - method: "GET", - headers: { "Content-Type": "application/json" } + method: 'GET', + headers: { 'Content-Type': 'application/json' } }) .then(res => { return res.json(); }) .then(resData => { - console.log(resData); for (let i = 0; i < 3; i++) { let obj = {}; obj.title = resData.items[i].title; @@ -41,15 +41,13 @@ class Activities extends React.Component { obj.description = stream[1] - .split(" ") + .split(' ') .slice(0, 20) - .join(" ") + "..."; + .join(' ') + '...'; activities.push(obj); } - this.setState({ activities: activities }, () => { - console.log(this.state.activities); - }); + this.setState({ activities: activities }); }) .catch(err => { console.log(err); @@ -57,19 +55,30 @@ class Activities extends React.Component { } render() { return ( -
-

Activities

-
-
+
+

Activities

+
+
{this.state.activities.map((currentActivity, index) => { return ( -
- +
+
); })}
+ + Continue to the Blogs Page +
); } From e045962d7e64663638d50817b69c3c5fb530aa0c Mon Sep 17 00:00:00 2001 From: Auraofdivinity Date: Wed, 26 Feb 2020 11:29:41 +0530 Subject: [PATCH 4/4] Removing modal --- package.json | 1 - src/pages/Blogs/BlogList.js | 77 +------------------------------------ 2 files changed, 1 insertion(+), 77 deletions(-) diff --git a/package.json b/package.json index 5ecc169..651dfea 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "markdown-it-task-lists": "^2.1.1", "marked": "^0.8.0", "react": "^16.12.0", - "react-awesome-modal": "^2.0.5", "react-bootstrap": "^1.0.0-beta.16", "react-dom": "^16.12.0", "react-markdown": "^4.3.1", diff --git a/src/pages/Blogs/BlogList.js b/src/pages/Blogs/BlogList.js index 9c34010..88e57be 100644 --- a/src/pages/Blogs/BlogList.js +++ b/src/pages/Blogs/BlogList.js @@ -1,6 +1,5 @@ import React from 'react'; import './BlogList.css'; -import Modal from 'react-awesome-modal'; class BlogList extends React.Component { constructor(props) { @@ -23,7 +22,6 @@ class BlogList extends React.Component { return res.json(); }) .then(resData => { - console.log(resData); for (let i = 0; i < resData.items.length; i++) { let obj = {}; obj.title = resData.items[i].title; @@ -41,11 +39,6 @@ class BlogList extends React.Component { let reg = /<\s*p[^>]*>([^<]*)<\s*\/\s*p\s*>/; let stream = resData.items[i].content_encoded.match(reg); - let div = document.createElement('div'); - div.innerHTML = resData.items[i].content_encoded; - - obj.longDescription = div.textContent || div.innerText || ''; - obj.description = stream[1] .split(' ') @@ -61,25 +54,6 @@ class BlogList extends React.Component { }); } - handleClick = currentActivity => { - this.setState( - { - currentActivity: currentActivity - }, - () => { - this.setState({ - visible: true - }); - } - ); - }; - - closeModal = () => { - this.setState({ - visible: false - }); - }; - render() { return (
@@ -110,10 +84,9 @@ class BlogList extends React.Component {

this.handleClick(currentActivity)} > Read More @@ -127,54 +100,6 @@ class BlogList extends React.Component {
- this.closeModal()} - > -
- -

- {this.state.currentActivity - ? this.state.currentActivity.title - : ''} -

-
-

- {this.state.currentActivity - ? this.state.currentActivity.longDescription - : ''} -

-
- - -
-
); }