DWTFYW
Disclaimer:
- no warranty this will work for you!
- I'm not responsible of how you use this!
- READ, VERIFY and TEST the CODE before using!
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <title>...</title> | |
| <style> | |
| html,body { | |
| padding: 0; | |
| margin: 0; | |
| background-color: #fff; | |
| color: #000; | |
| } | |
| main { | |
| padding: 20px; | |
| } | |
| h1 { | |
| font: 400 32px Roboto,RobotoDraft,Helvetica,Arial,sans-serif; | |
| padding: 0; | |
| margin: 0; | |
| margin-bottom: 20px; | |
| } | |
| a, a:hover { | |
| color: inherit; | |
| text-decoration: none; | |
| } | |
| * { | |
| -webkit-tap-highlight-color: transparent; | |
| user-select: none; | |
| } | |
| .albums { | |
| flex-wrap: wrap; | |
| display: flex; | |
| } | |
| .album, .album-empty { | |
| flex: 1 0 384px; | |
| margin: 0 4px 4px 0; | |
| position: relative; | |
| min-width: 384px; | |
| min-height: 256px; | |
| display: inline-block; | |
| } | |
| .album { | |
| background-color: #eeeeee; | |
| } | |
| .album-image { | |
| width: 100%; | |
| height: 0; | |
| padding-bottom: 66.67%; | |
| background-size: cover; | |
| } | |
| .album-title-bg { | |
| background-image: linear-gradient(to bottom,transparent,rgba(0,0,0,0.74)); | |
| bottom: 0; | |
| content: ''; | |
| height: 160px; | |
| position: absolute; | |
| width: 100%; | |
| } | |
| .album-title { | |
| position: absolute; | |
| width: 100%; | |
| bottom: 0; | |
| left: 0; | |
| color: #fff; | |
| padding: 24px; | |
| font-size: 20px; | |
| font-family: Roboto,RobotoDraft,Helvetica,Arial,sans-serif; | |
| font-weight: 500; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <main> | |
| <h1> | |
| Photos of ... | |
| </h1> | |
| <div id="photos"></div> | |
| <script src="https://npmcdn.com/[email protected]/dist/react.min.js"></script> | |
| <script src="https://npmcdn.com/[email protected]/dist/react-dom.min.js"></script> | |
| <script src="https://npmcdn.com/[email protected]/browser.min.js"></script> | |
| <script type="text/babel"> | |
| /* | |
| CODE to exec to extract things on GOOGLE PHOTOS ALBUMS page | |
| JSON.stringify(Array.prototype.slice.call(document.querySelectorAll('[jscontroller="BptC2e"]'), 0) | |
| .map(n => ({ | |
| name: n.children[2].children[0].textContent, | |
| img: /url\(([^)]+)\)/.exec(n.children[0].style.backgroundImage)[1], | |
| src: n.href, | |
| })), null, 2) | |
| */ | |
| const Album = ({ src, img, name }) => ( | |
| <a className="album" href={src}> | |
| <div | |
| style={{ backgroundImage: `url(${img})` }} | |
| className="album-image" /> | |
| <div className="album-title-bg"></div> | |
| <div className="album-title"> | |
| {name} | |
| </div> | |
| </a> | |
| ); | |
| const Albums = ({ children }) => ( | |
| <div className="albums"> | |
| {children.map(Album)} | |
| <div className="album-empty" /> | |
| <div className="album-empty" /> | |
| <div className="album-empty" /> | |
| <div className="album-empty" /> | |
| </div> | |
| ); | |
| ReactDOM.render( | |
| <Albums>{ | |
| ..... PASTE THE CODE OBTAINED ON THE GOOGLE PHOTOS ALBUMS PAGE | |
| }</Albums>, | |
| document.getElementById("photos") | |
| ) | |
| </script> | |
| </main> | |
| </body> | |
| </html> |
+1