jekyll-google-photos 0.0.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +0 -3
- data/Gemfile.lock +1 -3
- data/README.md +39 -1
- data/_config.yml +3 -6
- data/_posts/2018-02-22-welcome-to-jekyll.markdown +1 -1
- data/jekyll-google-photos.gemspec +2 -3
- data/lib/jekyll-google-photos/tag.rb +142 -65
- data/lib/jekyll-google-photos/version.rb +1 -1
- metadata +4 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4196827dd3a3b94ca00f5a0a3e7c4a5f47c9447a
|
4
|
+
data.tar.gz: ddbb5f23ce3c09a237db5c9a87b1de74315d644c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 427374f095a2a4f984a6b5c0ad6fce8e35c20d9bc310b12af509b13691a7a72de361b2c6c50cf0cad8d6d9378ae09b10d633b8a90d29f1f10d3c40efba33e89e
|
7
|
+
data.tar.gz: 50947e581864842ac80d77aaf70ef155ba31f2b49f8d285642ad4c73edcb95fb89550b46fc82fdaa32cbb5ae5499034d871384372f7ac8a4b49837855f277e86
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -15,7 +15,6 @@ GEM
|
|
15
15
|
http_parser.rb (0.6.0)
|
16
16
|
i18n (0.9.5)
|
17
17
|
concurrent-ruby (~> 1.0)
|
18
|
-
image_size (2.0.1)
|
19
18
|
jekyll (3.7.4)
|
20
19
|
addressable (~> 2.4)
|
21
20
|
colorator (~> 1.0)
|
@@ -71,7 +70,6 @@ PLATFORMS
|
|
71
70
|
|
72
71
|
DEPENDENCIES
|
73
72
|
fastimage (~> 2.1)
|
74
|
-
image_size (~> 2.0)
|
75
73
|
jekyll (~> 3.7.2)
|
76
74
|
jekyll-feed (~> 0.6)
|
77
75
|
minima (~> 2.0)
|
@@ -79,4 +77,4 @@ DEPENDENCIES
|
|
79
77
|
tzinfo-data
|
80
78
|
|
81
79
|
BUNDLED WITH
|
82
|
-
|
80
|
+
2.0.1
|
data/README.md
CHANGED
@@ -1,3 +1,41 @@
|
|
1
|
-
#
|
1
|
+
# Jekyll Google Photos
|
2
2
|
|
3
3
|
> 💎 Embedd Google Photos Album to your Jekyll Site
|
4
|
+
|
5
|
+
[Check out the Demo](http://chira.ga/trip-to-annecy/)
|
6
|
+
|
7
|
+
# Installing
|
8
|
+
|
9
|
+
add the following to your Gemfile:
|
10
|
+
```
|
11
|
+
gem 'jekyll-google-photos'
|
12
|
+
gem 'fastimage'
|
13
|
+
```
|
14
|
+
|
15
|
+
then:
|
16
|
+
```
|
17
|
+
bundle install
|
18
|
+
```
|
19
|
+
Note: Simplified installation is still a WIP
|
20
|
+
|
21
|
+
You also need to add this plugin to your `_config.yml` file:
|
22
|
+
```
|
23
|
+
plugins:
|
24
|
+
- jekyll-google-photos
|
25
|
+
```
|
26
|
+
|
27
|
+
# Usage:
|
28
|
+
```
|
29
|
+
{% google_photos <Link to Shared Google Photos Album> %}
|
30
|
+
```
|
31
|
+
Example:
|
32
|
+
```
|
33
|
+
{% google_photos https://photos.app.goo.gl/bhWukds8QVodFU246 %}
|
34
|
+
```
|
35
|
+
|
36
|
+
# Features to implement
|
37
|
+
|
38
|
+
* Revamp Grid Layout Algorithm
|
39
|
+
* Let users decide how many photos in each row
|
40
|
+
* Full-Screen HQ Image View and Slider
|
41
|
+
* Do something about Videos
|
data/_config.yml
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
title:
|
2
|
-
email:
|
3
|
-
description:
|
4
|
-
Write an awesome description for your new site here. You can edit this
|
5
|
-
line in _config.yml. It will appear in your document head meta (for
|
6
|
-
Google search results) and in your feed.xml site description.
|
1
|
+
title: jekyll-google-photos
|
2
|
+
email: me@chia.ro
|
3
|
+
description: ""
|
7
4
|
baseurl: ""
|
8
5
|
url: ""
|
9
6
|
twitter_username: jekyllrb
|
@@ -5,7 +5,7 @@ date: 2018-02-22 18:29:32 +0000
|
|
5
5
|
categories: jekyll update
|
6
6
|
---
|
7
7
|
|
8
|
-
{% google_photos https://photos.app.goo.gl/
|
8
|
+
{% google_photos https://photos.app.goo.gl/bhWukds8QVodFU246 300 150 100 1280 400 5 %}
|
9
9
|
|
10
10
|
You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.
|
11
11
|
|
@@ -6,8 +6,8 @@ Gem::Specification.new do |spec|
|
|
6
6
|
spec.summary = "Embedd Google Photos Album to your Jekyll Site"
|
7
7
|
spec.description = "Embedd Google Photos Album to your Jekyll Site"
|
8
8
|
spec.version = JekyllGooglePhotos::VERSION
|
9
|
-
spec.authors = ["
|
10
|
-
spec.email = ["
|
9
|
+
spec.authors = ["Chirag Arora"]
|
10
|
+
spec.email = ["me@chia.ro"]
|
11
11
|
spec.homepage = "https://github.com/heychirag/jekyll-google-photos"
|
12
12
|
spec.licenses = ["MIT"]
|
13
13
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r!^(test|spec|features)/!) }
|
@@ -17,5 +17,4 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.add_development_dependency "rspec", "~> 3.5"
|
18
18
|
spec.add_development_dependency "rubocop", "~> 0.52"
|
19
19
|
spec.add_development_dependency "nokogiri", "~> 1.10"
|
20
|
-
spec.add_development_dependency "fastimage", "~> 2.1"
|
21
20
|
end
|
@@ -2,85 +2,162 @@ require "jekyll"
|
|
2
2
|
require 'open-uri'
|
3
3
|
require 'nokogiri'
|
4
4
|
require 'fastimage'
|
5
|
-
|
6
|
-
# https://jekyllrb.com/docs/plugins/#tags
|
5
|
+
require 'net/http'
|
7
6
|
|
8
7
|
module JekyllGooglePhotos
|
9
8
|
class Tag < Liquid::Tag
|
10
|
-
def initialize(tagName,
|
9
|
+
def initialize(tagName, args, tokens)
|
11
10
|
super
|
12
|
-
|
13
|
-
|
14
|
-
@
|
15
|
-
|
16
|
-
@
|
11
|
+
args = args.split(" ")
|
12
|
+
url = args[0]
|
13
|
+
@row_height = args[1].to_i
|
14
|
+
@space = args[6].to_i
|
15
|
+
@tablet_max = args[4].to_i
|
16
|
+
@row_height_tablet = args[2].to_i
|
17
|
+
@space_tablet = @space
|
18
|
+
@phone_max = args[5].to_i
|
19
|
+
@row_height_phone = args[3].to_i
|
20
|
+
@space_phone = @space
|
21
|
+
@imgLinks = getImageLinks(url)
|
22
|
+
@dom = createDOM()
|
23
|
+
end
|
17
24
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
25
|
+
def getImageLinks(url)
|
26
|
+
doc = Nokogiri::HTML(open(url.strip).read)
|
27
|
+
scripts = doc.xpath("//script")
|
28
|
+
for x in scripts do
|
29
|
+
if x.inner_html.match(/initDataCallback\(/)
|
30
|
+
jsonString = x.inner_html
|
31
|
+
jsonString = jsonString.sub(/.*function\(\)\{return /,"")
|
32
|
+
jsonString["\n}});"] = ""
|
23
33
|
end
|
24
34
|
end
|
35
|
+
json = JSON.parse(jsonString)
|
36
|
+
return json[1]
|
37
|
+
end
|
25
38
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
39
|
+
def flexbinCSS()
|
40
|
+
elem = %Q{
|
41
|
+
.flexbin {
|
42
|
+
display: flex;
|
43
|
+
overflow: hidden;
|
44
|
+
flex-wrap: wrap;
|
45
|
+
margin: -#{@space/2.0}px;
|
46
|
+
}
|
47
|
+
.flexbin:after {
|
48
|
+
content: '';
|
49
|
+
flex-grow: 999999999;
|
50
|
+
min-width: #{@row_height}px;
|
51
|
+
height: 0;
|
52
|
+
}
|
53
|
+
.flexbin > * {
|
54
|
+
position: relative;
|
55
|
+
display: block;
|
56
|
+
height: #{@row_height}px;
|
57
|
+
margin: #{@space/2.0}px;
|
58
|
+
flex-grow: 1;
|
59
|
+
}
|
60
|
+
.flexbin > * > img {
|
61
|
+
height: #{@row_height}px;
|
62
|
+
object-fit: cover;
|
63
|
+
max-width: 100%;
|
64
|
+
min-width: 100%;
|
65
|
+
vertical-align: bottom;
|
66
|
+
}
|
67
|
+
.flexbin.flexbin-margin {
|
68
|
+
margin: #{@space/2.0}px;
|
69
|
+
}
|
70
|
+
@media (max-width: #{@tablet_max}px) {
|
71
|
+
.flexbin {
|
72
|
+
display: flex;
|
73
|
+
overflow: hidden;
|
74
|
+
flex-wrap: wrap;
|
75
|
+
margin: -#{@space/2.0}px;
|
76
|
+
}
|
77
|
+
.flexbin:after {
|
78
|
+
content: '';
|
79
|
+
flex-grow: 999999999;
|
80
|
+
min-width: #{@row_height_tablet}px;
|
81
|
+
height: 0;
|
82
|
+
}
|
83
|
+
.flexbin > * {
|
84
|
+
position: relative;
|
85
|
+
display: block;
|
86
|
+
height: #{@row_height_tablet}px;
|
87
|
+
margin: #{@space/2.0}px;
|
88
|
+
flex-grow: 1;
|
89
|
+
}
|
90
|
+
.flexbin > * > img {
|
91
|
+
height: #{@row_height_tablet}px;
|
92
|
+
object-fit: cover;
|
93
|
+
max-width: 100%;
|
94
|
+
min-width: 100%;
|
95
|
+
vertical-align: bottom;
|
96
|
+
}
|
97
|
+
.flexbin.flexbin-margin {
|
98
|
+
margin: #{@space/2.0}px;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
@media (max-width: #{@phone_max}px) {
|
102
|
+
.flexbin {
|
103
|
+
display: flex;
|
104
|
+
overflow: hidden;
|
105
|
+
flex-wrap: wrap;
|
106
|
+
margin: -#{@space/2.0}px;
|
107
|
+
}
|
108
|
+
.flexbin:after {
|
109
|
+
content: '';
|
110
|
+
flex-grow: 999999999;
|
111
|
+
min-width: #{@row_height_phone}px;
|
112
|
+
height: 0;
|
113
|
+
}
|
114
|
+
.flexbin > * {
|
115
|
+
position: relative;
|
116
|
+
display: block;
|
117
|
+
height: #{@row_height_phone}px;
|
118
|
+
margin: #{@space/2.0}px;
|
119
|
+
flex-grow: 1;
|
120
|
+
}
|
121
|
+
.flexbin > * > img {
|
122
|
+
height: #{@row_height_phone}px;
|
123
|
+
object-fit: cover;
|
124
|
+
max-width: 100%;
|
125
|
+
min-width: 100%;
|
126
|
+
vertical-align: bottom;
|
127
|
+
}
|
128
|
+
.flexbin.flexbin-margin {
|
129
|
+
margin: #{@space/2.0}px;
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
}
|
134
|
+
return elem
|
135
|
+
end
|
38
136
|
|
39
|
-
|
137
|
+
def createDOM()
|
138
|
+
sp = %Q{<style>}
|
139
|
+
sp += flexbinCSS()
|
140
|
+
sp += %Q{</style>}
|
141
|
+
sp += addImages()
|
142
|
+
return sp
|
40
143
|
end
|
41
144
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
result += '}'
|
55
|
-
result += 'for(var j=i;j<i+noPics&&j<albumImages.length;j++) {'
|
56
|
-
result += 'albumImages[j].width *= currMinHeight/albumImages[j].height;'
|
57
|
-
result += 'albumImages[j].height = currMinHeight;'
|
58
|
-
result += '}'
|
59
|
-
result += 'var currWidth = (noPics)*albumMargin;'
|
60
|
-
result += 'for(var j=i;j<i+noPics&&j<albumImages.length;j++) {'
|
61
|
-
result += 'currWidth += albumImages[j].width;'
|
62
|
-
result += '}'
|
63
|
-
result += 'var k; var limitWidth = 0;'
|
64
|
-
result += 'for(var k=i;k<i+noPics-1&&k<albumImages.length;k++) {'
|
65
|
-
result += 'albumImages[k].width *= containerWidth/currWidth;'
|
66
|
-
result += 'limitWidth = limitWidth + albumImages[k].width + albumMargin;'
|
67
|
-
result += 'albumImages[k].height *= containerWidth/currWidth;'
|
68
|
-
result += '}'
|
69
|
-
result += 'albumImages[k].width = containerWidth-limitWidth;'
|
70
|
-
result += 'albumImages[k].height *= containerWidth/currWidth;'
|
71
|
-
result += '/*var setWidth = 0;'
|
72
|
-
result += 'for(var j=i;j<i+noPics&&j<albumImages.length;j++) {'
|
73
|
-
result += 'albumImages[j].style.transform = "translate3d($setWidth,$setHeight,0px)";'
|
74
|
-
result += 'setWidth += albumImages[j].width;'
|
75
|
-
result += 'setWidth += albumMargin;'
|
76
|
-
result += '}'
|
77
|
-
result += 'setHeight += albumImages[i].height;'
|
78
|
-
result += 'setHeight += albumMargin;*/'
|
79
|
-
result += '}'
|
145
|
+
def addImages()
|
146
|
+
sp = %Q{<div class="flexbin">}
|
147
|
+
for x in @imgLinks
|
148
|
+
link = x[1][0] + %Q{=w#{@tablet_max}}
|
149
|
+
sp += %Q{
|
150
|
+
<a href="#{x[1][0]}">
|
151
|
+
<img src="#{link}" />
|
152
|
+
</a>
|
153
|
+
}
|
154
|
+
end
|
155
|
+
sp += %Q{</div>}
|
156
|
+
return sp
|
80
157
|
end
|
81
158
|
|
82
159
|
def render(context)
|
83
|
-
|
160
|
+
@dom
|
84
161
|
end
|
85
162
|
end
|
86
163
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-google-photos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Chirag Arora
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -80,23 +80,9 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.10'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: fastimage
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '2.1'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '2.1'
|
97
83
|
description: Embedd Google Photos Album to your Jekyll Site
|
98
84
|
email:
|
99
|
-
-
|
85
|
+
- me@chia.ro
|
100
86
|
executables: []
|
101
87
|
extensions: []
|
102
88
|
extra_rdoc_files: []
|