tdiary-contrib 5.0.4 → 5.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a618c3a15f193c43756a0bb8ecd1df26e9d317a6
4
- data.tar.gz: d0a68910bcda472a2d9f056378f0d90157420b75
3
+ metadata.gz: 3d47b569ca7f9fe177f670b8e60ba493b80831ce
4
+ data.tar.gz: 1575e8d48b554035e7d7d806eefaa8c64fcf909f
5
5
  SHA512:
6
- metadata.gz: c7b58f2bef33ed390c5d7de5159991a6b114eec164f1e18b0ad758cfc6c6d0ffe2b6dd7f12f240da6551d942a08c5b9d973cb2b077a92ace9fa3285e20e005d2
7
- data.tar.gz: e3245824b3d1f11295fd172e0043dc7f5ea46d3fd5876ea2b1ed89406af74adbe20c92ce229175c28d3db06869338f89a0dead941d5c1728e037c847aaf308d1
6
+ metadata.gz: 41cd6a1edd86c27e2e6412fc6a737f1759da17be066d82df9b4e97b382fbda663544fd939b2c98aaa6d30ddfcb2bb883c420d81adb7284dcc404b26d69cd8d78
7
+ data.tar.gz: 759786b536e9c10d7cd495de44bb90d80f34a6923199765019ded3f689ff46eeeff983ae60f52e7dbdd6eb0fd9c3a6a95f2a44529e937ae8807b796299e273bb
data/js/appstore.js CHANGED
@@ -88,7 +88,7 @@ $( function() {
88
88
  };
89
89
 
90
90
  // for AutoPagerize
91
- $(window).bind('AutoPagerize_DOMNodeInserted', function(event) {
91
+ $(window).on('AutoPagerize_DOMNodeInserted', function(event) {
92
92
  appstore(event.target);
93
93
  });
94
94
 
@@ -0,0 +1,63 @@
1
+ $(function() {
2
+ var developerKey = $tDiary.plugin.google_photos.api_key;
3
+ var clientId = $tDiary.plugin.google_photos.client_id;
4
+ var oauthToken;
5
+
6
+ if (!developerKey || !clientId) {
7
+ $('#google_photos').after($('<p>設定画面でAPIキーとクライアントIDを登録してください</p>'));
8
+ return false;
9
+ }
10
+
11
+ gapi.load('auth',
12
+ { callback: function() { console.debug('load auth function') } });
13
+ gapi.load('picker',
14
+ { callback: function() { console.debug('load picker function') } });
15
+
16
+ $('#google_photos').click(function() {
17
+ if (oauthToken) {
18
+ createPicker();
19
+ } else {
20
+ authentication();
21
+ }
22
+ });
23
+
24
+ function authentication() {
25
+ window.gapi.auth.authorize(
26
+ {
27
+ 'client_id': clientId,
28
+ 'scope': ['https://www.googleapis.com/auth/photos'],
29
+ 'immediate': false
30
+ },
31
+ function(authResult) {
32
+ if (!authResult || authResult.error) {
33
+ console.error('[google_photos] authentication faild');
34
+ return false;
35
+ }
36
+ oauthToken = authResult.access_token;
37
+ createPicker();
38
+ });
39
+ }
40
+
41
+ function createPicker() {
42
+ var picker = new google.picker.PickerBuilder()
43
+ .addView(new google.picker.PhotosView()
44
+ .setType(google.picker.PhotosView.Type.UPLOADED))
45
+ .addView(google.picker.ViewId.PHOTOS)
46
+ .addView(google.picker.ViewId.PHOTO_UPLOAD)
47
+ .setOAuthToken(oauthToken)
48
+ .setDeveloperKey(developerKey)
49
+ .setLocale('ja')
50
+ .setCallback(pickerCallback)
51
+ .build();
52
+ picker.setVisible(true);
53
+ }
54
+
55
+ function pickerCallback(data) {
56
+ if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {
57
+ var doc = data[google.picker.Response.DOCUMENTS][0];
58
+ var image = doc.thumbnails[doc.thumbnails.length - 1];
59
+ var tag = $.makePluginTag("google_photos '" + image.url + "', '" + image.width + "', '" + image.height + "'");
60
+ $('#body').insertAtCaret(tag);
61
+ }
62
+ }
63
+ });
data/js/image_ex.js CHANGED
@@ -64,13 +64,13 @@ $(function() {
64
64
 
65
65
  if ($(window).width() <= 360) {
66
66
  $(document).ready(function() {
67
- $("img.image-ex").bind("load", function() {
67
+ $("img.image-ex").on("load", function() {
68
68
  resizeImage(this);
69
69
  });
70
70
  });
71
71
 
72
72
  // for when images have been cached
73
- $(window).bind("load", function() {
73
+ $(window).on("load", function() {
74
74
  $("img.image-ex").each(function() {
75
75
  resizeImage(this);
76
76
  });
@@ -293,7 +293,7 @@ $.fn.socialbutton = function(service, options) {
293
293
  }
294
294
  };
295
295
 
296
- var max_index = this.size() - 1;
296
+ var max_index = this.length - 1;
297
297
 
298
298
  return this.each(function(index) {
299
299
 
data/js/show_and_hide.js CHANGED
@@ -16,7 +16,7 @@ $( function() {
16
16
  };
17
17
 
18
18
  // for AutoPagerize
19
- $(window).bind('AutoPagerize_DOMNodeInserted', function(event) {
19
+ $(window).on('AutoPagerize_DOMNodeInserted', function(event) {
20
20
  show_and_hide(event.target);
21
21
  });
22
22
 
data/js/socialbutton.js CHANGED
@@ -92,7 +92,7 @@ $(function() {
92
92
  return bottom > $(this).offset().top;
93
93
  })
94
94
  .filter(function() {
95
- return $(this).find('.socialbutton').size() == 0
95
+ return $(this).find('.socialbutton').length == 0
96
96
  })
97
97
  .each(function() {
98
98
  var anchor = $(this).find('h3 a');
@@ -100,7 +100,7 @@ $(function() {
100
100
  var link = $(this).children('h2').find('a:first').get(0);
101
101
  var url = link ? link.href : document.URL;
102
102
  var title = $(this).children('h2').find('.title').text();
103
- } else if (anchor.size() == 0) {
103
+ } else if (anchor.length == 0) {
104
104
  // The section may not have an anchor on etdiary style.
105
105
  // https://github.com/tdiary/tdiary-contrib/issues/59
106
106
  var url = ($(this).parents('.day').find('h2 a:first').get(0)||'').href;
@@ -129,7 +129,7 @@ $(function() {
129
129
  });
130
130
  }
131
131
 
132
- $(window).bind('scroll', function(event) {
132
+ $(window).on('scroll', function(event) {
133
133
  socialbutton(document);
134
134
  });
135
135
 
@@ -1,5 +1,5 @@
1
1
  module TDiary
2
2
  class Contrib
3
- VERSION = "5.0.4"
3
+ VERSION = "5.0.5"
4
4
  end
5
5
  end
@@ -0,0 +1,13 @@
1
+ #
2
+ # profile.rb: english resource of profile plugin for tDiary
3
+ #
4
+ # Copyright (C) 2017 by Tada, Tadashi <t@tdtds.jp>
5
+ # Distributed under the GPL.
6
+ #
7
+ module ::Profile
8
+ module Service
9
+ class Gravatar < Base
10
+ HOST = 'en.gravatar.com'
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,67 @@
1
+ # -*- coding: utf-8 -*-
2
+ # show Google Photos
3
+ #
4
+ # Copyright (c) MATSUOKA Kohei <http://www.machu.jp/>
5
+ # Distributed under the GPL
6
+ #
7
+
8
+ def google_photos(src, width, height, alt="photo", place="photo")
9
+ %Q|<img title="#{alt}" width="#{width}" height="#{height}" alt="#{alt}" src="#{src}" class="#{place} google">|
10
+ end
11
+
12
+ def google_photos_left(src, width, height, alt="photo")
13
+ google_photos(src, width, height, alt, 'left')
14
+ end
15
+
16
+ def google_photos_right(src, width, height, alt="photo")
17
+ google_photos(src, width, height, alt, 'right')
18
+ end
19
+
20
+ if /\A(form|edit|preview|showcomment)\z/ === @mode then
21
+ enable_js('google_photos.js')
22
+ add_js_setting('$tDiary.plugin.google_photos')
23
+ add_js_setting('$tDiary.plugin.google_photos.api_key', @conf['google_photos.api_key'].to_json)
24
+ add_js_setting('$tDiary.plugin.google_photos.client_id', @conf['google_photos.client_id'].to_json)
25
+
26
+ add_footer_proc do
27
+ '<script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>'
28
+ end
29
+ end
30
+
31
+ add_edit_proc do |date|
32
+ <<-FORM
33
+ <div class="google_photos">
34
+ <input id="google_photos" type="button" value="Googleフォト"></input>
35
+ </div>
36
+ FORM
37
+ end
38
+
39
+ add_conf_proc('google_photos', 'Googleフォト') do
40
+ if @mode == 'saveconf'
41
+ @conf['google_photos.api_key'] = @cgi.params['google_photos.api_key'][0]
42
+ @conf['google_photos.client_id'] = @cgi.params['google_photos.client_id'][0]
43
+ end
44
+
45
+ r = <<-_HTML
46
+ <h3>概要</h3>
47
+ <p>Googleフォトの写真を日記に表示します。</p>
48
+ <h3>機能</h3>
49
+ <ul>
50
+ <li>Googleフォトの写真を選択して日記に貼り付ける</li>
51
+ <li>PC上の写真をGoogleフォトへアップロードする</li>
52
+ </ul>
53
+ <h3>制約事項</h3>
54
+ <ul>
55
+ <li>サムネイルを使用しているため、サイズが512pxまでしか表示できません</li>
56
+ </ul>
57
+ <h3>使い方</h3>
58
+ <p>
59
+ このプラグインを使うためには、Google Developers ConsoleからAPIキーと認証用クライアントIDを取得する必要があります。
60
+ 手順は<a href="https://www.evernote.com/shard/s18/sh/7211b9c3-fb75-4af8-aa55-718ff6c81aac/77c3a51871f0f245">Googleフォトプラグインを利用するためのAPIキーとクライアントIDの取得手順</a>を参考にしてください。
61
+ </p>
62
+ <h3>APIキー</h3>
63
+ <p><input type="text" name="google_photos.api_key" size="100" value="#{@conf['google_photos.api_key']}"></p>
64
+ <h3>認証用クライアントID</h3>
65
+ <p><input type="text" name="google_photos.client_id" size="100" value="#{@conf['google_photos.client_id']}"></p>
66
+ _HTML
67
+ end
data/plugin/mathjax.rb CHANGED
@@ -10,14 +10,21 @@
10
10
  # Copyright (C) 2014 by Yuh Ohmura <http://yutopia.pussycat.jp/diary/>
11
11
  #
12
12
  =begin ChangeLog
13
+ 2017-06-05 Yuh Ohmura
14
+ * Modity MathJax address.
13
15
  2014-12-17 Yuh Ohmura
14
16
  * created.
15
17
  =end
16
18
  add_header_proc do
17
19
  '<script type="text/x-mathjax-config">
18
- MathJax.Hub.Config({tex2jax: {inlineMath: [[\'$\',\'$\'], ["\\\\(","\\\\)"]]}});
20
+ MathJax.Hub.Config({
21
+ tex2jax: {
22
+ inlineMath: [[\'$\',\'$\'], ["\\\\(","\\\\)"]],
23
+ processEscapes: true
24
+ }
25
+ }
26
+ );
19
27
  </script>
20
- <script type="text/javascript"
21
- src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
28
+ <script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_CHTML">
22
29
  </script>'
23
30
  end
data/plugin/nicovideo.rb CHANGED
@@ -23,7 +23,7 @@
23
23
  require 'net/http'
24
24
  require 'timeout'
25
25
 
26
- enable_js( 'nicovideo.js' )
26
+ enable_js('nicovideo.js') unless base_url =~ /\Ahttps:/
27
27
 
28
28
  def nicovideo_call_api( video_id )
29
29
  uri = "http://ext.nicovideo.jp/api/getthumbinfo/#{video_id}"
@@ -76,6 +76,8 @@ end
76
76
  def nicovideo_player( video_id, size = [544,384] )
77
77
  if feed?
78
78
  nicovideo( video_id )
79
+ elsif base_url =~ /\Ahttps:/
80
+ nicovideo(video_id)
79
81
  else
80
82
  q = ''
81
83
  if size then
@@ -97,7 +99,7 @@ def nicovideo( video_id, label = nil, link = nil )
97
99
  if feed?
98
100
  r.gsub!( /<a(?:[ \t\n\r][^>]*)?>/, '' )
99
101
  r.gsub!( %r{</a[ \t\n\r]*>}, '' )
100
- else
102
+ elsif base_url !~ /\Ahttps:/
101
103
  r << %Q|<div id="player-#{video_id}" style="display:none;background-color:#000;margin-left:2em;padding-bottom:4px;">|
102
104
  r << %Q|<a name="player-#{video_id}">|
103
105
  r << nicovideo_player( video_id, [544,384] )
data/plugin/ogp.rb CHANGED
@@ -20,34 +20,37 @@ def ogp_image(html)
20
20
  end
21
21
  end
22
22
 
23
- add_header_proc do
23
+ if defined? :ogp_tag && !defined? :ogp_tag_org
24
+ alias :ogp_tag_org :ogp_tag
25
+ end
26
+
27
+ def ogp_tag
28
+ ogp = ogp_tag_org || ''
24
29
  headers = {
25
- 'og:title' => title_tag.match(/>([^<]+)</).to_a[1],
26
- 'og:site_name' => @conf.html_title,
27
- 'og:author' => @conf.author_name,
28
30
  'fb:app_id' => @conf['ogp.facebook.app_id'],
29
31
  'fb:admins' => @conf['ogp.facebook.admins']
30
32
  }
31
33
 
32
34
  if @mode == 'day'
35
+ # remove original og:image generated at 00default.rb
36
+ ogp.gsub!(/<meta property="og:image"[^>]+>\n/, '')
37
+
33
38
  diary = @diaries[@date.strftime('%Y%m%d')]
34
39
  if diary
35
40
  sections = diary.instance_variable_get(:@sections)
36
41
  section_index = @cgi.params['p'][0] || sections.size
37
- section = sections[section_index.to_i - 1].body_to_html
38
- section_html = apply_plugin(section)
42
+ begin
43
+ section = sections[section_index.to_i - 1].body_to_html
44
+ section_html = apply_plugin(section)
39
45
 
40
- headers['og:description'] = ogp_description(section_html)
41
- headers['og:image'] = ogp_image(section_html)
42
- headers['og:type'] = 'article'
46
+ headers['og:description'] = ogp_description(section_html)
47
+ headers['og:image'] = ogp_image(section_html)
48
+ rescue
49
+ end
43
50
  end
44
- else
45
- headers['og:description'] = @conf.description
46
- headers['og:image'] = @conf.banner
47
- headers['og:type'] = 'website'
48
51
  end
49
52
 
50
- headers.select {|key, val|
53
+ ogp + "\n" + headers.select {|key, val|
51
54
  val && !val.empty?
52
55
  }.map {|key, val|
53
56
  %Q|<meta property="#{key}" content="#{CGI::escapeHTML(val)}">|
data/plugin/prettify.rb CHANGED
@@ -3,15 +3,21 @@
3
3
  if /\A(?:latest|day|month|nyear)\z/ =~ @mode then
4
4
  add_header_proc do
5
5
  <<-HTML
6
- <link href="https://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css" type="text/css" rel="stylesheet">
7
- <script type="text/javascript" src="https://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js"></script>
6
+ <script type="text/javascript" src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>
8
7
  <script type="text/javascript"><!--
8
+ var initPrettyPrint = function() {
9
+ var pres = document.querySelectorAll("div.body > div.section > pre");
10
+ Array.prototype.slice.call(pres).forEach(function(pre) {
11
+ pre.setAttribute("class", "prettyprint");
12
+ });
13
+ PR.prettyPrint();
14
+ };
9
15
  if(window.addEventListener){
10
- window.addEventListener("load", prettyPrint, false);
16
+ window.addEventListener("load", initPrettyPrint, false);
11
17
  }else if(window.attachEvent){
12
- window.attachEvent("onload", prettyPrint);
18
+ window.attachEvent("onload", initPrettyPrint);
13
19
  }else{
14
- window.onload=prettyPrint;
20
+ window.onload=initPrettyPrint;
15
21
  }
16
22
  // --></script>
17
23
  HTML
data/plugin/profile.rb CHANGED
@@ -113,9 +113,10 @@ module ::Profile
113
113
 
114
114
  # gravatar.com
115
115
  class Gravatar < Base
116
+ HOST = 'ja.gravatar.com' unless const_defined?(:HOST)
116
117
  endpoint {|id|
117
118
  hash = Digest::MD5.hexdigest(id.downcase)
118
- "https://www.gravatar.com/#{hash}.json"
119
+ "https://#{HOST}/#{hash}.json"
119
120
  }
120
121
 
121
122
  def image
data/plugin/puboo.rb CHANGED
@@ -34,7 +34,7 @@ def puboo( id, doc = nil )
34
34
  end
35
35
 
36
36
  link = "http://p.booklog.jp/book/#{id}"
37
- doc ||= open( link ).read
37
+ doc ||= open( link ).read.force_encoding('UTF-8')
38
38
  title = doc.match(%r|<meta property="og:title"\s*content="(.*)"|).to_a[1]
39
39
  image = doc.match(%r|<meta property="og:image"\s*content="(.*)"|).to_a[1]
40
40
  price = doc.match(%r|<th class="th_2">価格</th>.*?<span>(.*?)</span>.*?<br />|m).to_a[1]
@@ -55,7 +55,7 @@ EOS
55
55
 
56
56
  puboo_cache_set( id, result ) unless @conf.secure
57
57
  result
58
- rescue
58
+ rescue
59
59
  link
60
60
  end
61
61
 
data/plugin/tatsu_zine.rb CHANGED
@@ -32,12 +32,12 @@ def tatsu_zine( id, doc = nil )
32
32
  return result
33
33
  end
34
34
 
35
- link = "http://tatsu-zine.com/books/#{id}"
36
- doc ||= open( link ).read
35
+ link = "https://tatsu-zine.com/books/#{id}"
36
+ doc ||= open(link, ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE).read
37
37
  title = doc.match(%r|<meta property="og:title" content="(.*)">|).to_a[1]
38
38
  image = doc.match(%r|<meta property="og:image" content="(.*)">|).to_a[1]
39
- price = doc.match(%r|<meta name="twitter:data2" content="(.*)JPY">|).to_a[1]
40
- author = doc.match(%r|<meta name="twitter:data1" content="(.*)">|).to_a[1]
39
+ price = doc.match(%r|span itemprop="price">(.*)</span>|).to_a[1]
40
+ author = doc.match(%r|<p itemprop="author" class="author">(.*)</p>|).to_a[1]
41
41
 
42
42
  result = <<-EOS
43
43
  <a class="amazon-detail" href="#{h link}"><span class="amazon-detail">
@@ -54,7 +54,8 @@ EOS
54
54
 
55
55
  tatsu_zine_cache_set( id, result ) unless @conf.secure
56
56
  result
57
- rescue
57
+ rescue => e
58
+ @logger.error(e)
58
59
  link
59
60
  end
60
61
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tdiary-contrib
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.4
4
+ version: 5.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - tDiary contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-29 00:00:00.000000000 Z
11
+ date: 2017-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tdiary
@@ -187,6 +187,7 @@ files:
187
187
  - js/datepicker.js
188
188
  - js/editor.js
189
189
  - js/flickr.js
190
+ - js/google_photos.js
190
191
  - js/hide_sidebar_smartphone.js
191
192
  - js/image_ex.js
192
193
  - js/jquery.socialbutton.js
@@ -241,6 +242,7 @@ files:
241
242
  - plugin/en/microsummary.rb
242
243
  - plugin/en/nicovideo.rb
243
244
  - plugin/en/openid.rb
245
+ - plugin/en/profile.rb
244
246
  - plugin/en/section_footer.rb
245
247
  - plugin/en/section_footer2.rb
246
248
  - plugin/en/socialbutton.rb
@@ -255,6 +257,7 @@ files:
255
257
  - plugin/google_adsense.rb
256
258
  - plugin/google_analytics.rb
257
259
  - plugin/google_map.rb
260
+ - plugin/google_photos.rb
258
261
  - plugin/google_sitemaps.rb
259
262
  - plugin/google_universal_analytics.rb
260
263
  - plugin/google_webmaster.rb