tdiary-contrib 4.2.1 → 5.0.0
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 +4 -4
- data/js/jquery.socialbutton.js +59 -59
- data/js/picasa.js +31 -85
- data/lib/tdiary/contrib/version.rb +1 -1
- data/plugin/coderwall.rb +1 -1
- data/plugin/flickr.rb +1 -1
- data/plugin/google_webmaster.rb +1 -1
- data/plugin/iddy.rb +1 -1
- data/plugin/instagram.rb +1 -1
- data/plugin/livedoor_weather.rb +1 -1
- data/plugin/my_hotentry.rb +1 -1
- data/plugin/nhk_program_info.rb +1 -1
- data/plugin/nicovideo.rb +1 -1
- data/plugin/ohmsha_estore.rb +5 -1
- data/plugin/prettify.rb +2 -2
- data/plugin/profile.rb +3 -3
- data/plugin/pygments_css.rb +0 -1
- data/plugin/recent_tweet.rb +1 -1
- data/plugin/section_footer.rb +1 -1
- data/plugin/section_footer2.rb +6 -6
- data/plugin/squeeze.rb +272 -0
- data/plugin/tweet_quote.rb +1 -1
- data/plugin/twitter.rb +1 -1
- data/plugin/yo_update.rb +1 -1
- data/plugin/youtube.rb +8 -4
- data/spec/youtube_spec.rb +1 -1
- data/style/hatena_style.rb +1 -1
- metadata +3 -3
- data/plugin/category-lite.rb +0 -235
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 951b6aa4dbb64c3c27286b17c127134c29294626
|
|
4
|
+
data.tar.gz: 4ec21935523768181cbbb5f1fd843ba06f648089
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 59961f3c4ac5a76f3f38bfb440661347355afeef28e91ead68e28599f3637bdec99c382ed1d1db34e210d55aba8cafb64dbc68f281883e521281104228c8649f
|
|
7
|
+
data.tar.gz: b170c62aa74a2dffbb13955dfa9a918827794199942c6c89fd72c3489576750651a378096220c5bac92ffc6b8c1b1fbb808d926a046e95034b043e2cde02967c
|
data/js/jquery.socialbutton.js
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* jquery.socialbutton - jQuery plugin for social networking websites
|
|
3
3
|
* http://itra.jp/jquery_socialbutton_plugin/
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* Copyright 2010, Itrans, Inc. http://itra.jp/
|
|
6
|
-
*
|
|
6
|
+
*
|
|
7
7
|
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
8
8
|
* http://jquery.org/license
|
|
9
|
-
*
|
|
10
|
-
* Version: 1.
|
|
9
|
+
*
|
|
10
|
+
* Version: 1.9.1
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* SYNOPSIS
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
*
|
|
16
|
+
*
|
|
17
17
|
* mixi_check
|
|
18
18
|
* http://developer.mixi.co.jp/connect/mixi_plugin/mixi_check/spec_mixi_check
|
|
19
|
-
*
|
|
19
|
+
*
|
|
20
20
|
* $('#mixi_check').socialbutton('mixi_check', {
|
|
21
21
|
* key: 'mixi-check-key'
|
|
22
22
|
* });
|
|
23
|
-
*
|
|
23
|
+
*
|
|
24
24
|
* $('#mixi_check').socialbutton('mixi_check', {
|
|
25
25
|
* key: 'mixi-check-key',
|
|
26
26
|
* button: 'button-1',
|
|
27
27
|
* url: 'http://itra.jp/'
|
|
28
28
|
* });
|
|
29
|
-
*
|
|
30
|
-
*
|
|
29
|
+
*
|
|
30
|
+
*
|
|
31
31
|
* mixi_like
|
|
32
32
|
* http://developer.mixi.co.jp/connect/mixi_plugin/favorite_button/spec
|
|
33
|
-
*
|
|
33
|
+
*
|
|
34
34
|
* $('#mixi_like').socialbutton('mixi_like', {
|
|
35
35
|
* key: 'mixi-check-key',
|
|
36
36
|
* });
|
|
37
|
-
*
|
|
37
|
+
*
|
|
38
38
|
* $('#mixi_like').socialbutton('mixi_like', {
|
|
39
39
|
* key: 'mixi-check-key',
|
|
40
40
|
* url: 'http://itra.jp/',
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
* show_faces: true,
|
|
44
44
|
* style: 'additional-style-here'
|
|
45
45
|
* });
|
|
46
|
-
*
|
|
47
|
-
*
|
|
46
|
+
*
|
|
47
|
+
*
|
|
48
48
|
* facebook_like
|
|
49
49
|
* http://developers.facebook.com/docs/reference/plugins/like
|
|
50
|
-
*
|
|
50
|
+
*
|
|
51
51
|
* $('#facebook_like').socialbutton('facebook_like');
|
|
52
|
-
*
|
|
52
|
+
*
|
|
53
53
|
* $('#facebook_like').socialbutton('facebook_like', {
|
|
54
54
|
* button: 'standard', // synonym 'layout'
|
|
55
55
|
* url: 'http://itra.jp',
|
|
@@ -61,25 +61,25 @@
|
|
|
61
61
|
* font: 'arial',
|
|
62
62
|
* colorscheme: 'light'
|
|
63
63
|
* });
|
|
64
|
-
*
|
|
65
|
-
*
|
|
64
|
+
*
|
|
65
|
+
*
|
|
66
66
|
* facebook_share
|
|
67
67
|
* http://developers.facebook.com/docs/share
|
|
68
|
-
*
|
|
68
|
+
*
|
|
69
69
|
* $('#facebook_share').socialbutton('facebook_share');
|
|
70
|
-
*
|
|
70
|
+
*
|
|
71
71
|
* $('#facebook_share').socialbutton('facebook_share', {
|
|
72
72
|
* button: 'button_count', // synonym 'type'
|
|
73
73
|
* url: 'http://itra.jp',
|
|
74
74
|
* text: 'Share'
|
|
75
75
|
* });
|
|
76
|
-
*
|
|
77
|
-
*
|
|
76
|
+
*
|
|
77
|
+
*
|
|
78
78
|
* Twitter
|
|
79
79
|
* http://twitter.com/goodies/tweetbutton
|
|
80
|
-
*
|
|
80
|
+
*
|
|
81
81
|
* $('#twitter').socialbutton('twitter');
|
|
82
|
-
*
|
|
82
|
+
*
|
|
83
83
|
* $('#twitter').socialbutton('twitter', {
|
|
84
84
|
* button: 'vertical', // synonym 'count'
|
|
85
85
|
* url: 'http://itra.jp/',
|
|
@@ -88,26 +88,26 @@
|
|
|
88
88
|
* via: 'ishiiyoshinori',
|
|
89
89
|
* related: 'twitter'
|
|
90
90
|
* });
|
|
91
|
-
*
|
|
92
|
-
*
|
|
91
|
+
*
|
|
92
|
+
*
|
|
93
93
|
* GREE Social Feedback
|
|
94
94
|
* http://developer.gree.co.jp/connect/plugins/sf
|
|
95
|
-
*
|
|
95
|
+
*
|
|
96
96
|
* $('#gree_sf').socialbutton('gree_sf');
|
|
97
|
-
*
|
|
97
|
+
*
|
|
98
98
|
* $('#gree_sf').socialbutton('gree_sf', {
|
|
99
99
|
* button: 0, // synonym 'type'
|
|
100
100
|
* url: 'http://itra.jp/',
|
|
101
101
|
* width: 0, // auto
|
|
102
102
|
* height: 20
|
|
103
103
|
* });
|
|
104
|
-
*
|
|
105
|
-
*
|
|
104
|
+
*
|
|
105
|
+
*
|
|
106
106
|
* Evernote Site Memory
|
|
107
107
|
* http://www.evernote.com/about/developer/sitememory/
|
|
108
|
-
*
|
|
108
|
+
*
|
|
109
109
|
* $('#evernote').socialbutton('evernote');
|
|
110
|
-
*
|
|
110
|
+
*
|
|
111
111
|
* $('#evernote').socialbutton('evernote', {
|
|
112
112
|
* button: 'article-clipper',
|
|
113
113
|
* url: 'http://itra.jp/',
|
|
@@ -119,38 +119,38 @@
|
|
|
119
119
|
* suggest_tags: 'comma-separated-tags,up-to-three-tags',
|
|
120
120
|
* styling: 'full'
|
|
121
121
|
* });
|
|
122
|
-
*
|
|
123
|
-
*
|
|
122
|
+
*
|
|
123
|
+
*
|
|
124
124
|
* Hatena Bookmark
|
|
125
125
|
* http://b.hatena.ne.jp/
|
|
126
|
-
*
|
|
126
|
+
*
|
|
127
127
|
* $('#hatena').socialbutton('hatena');
|
|
128
|
-
*
|
|
128
|
+
*
|
|
129
129
|
* $('#hatena').socialbutton('hatena', {
|
|
130
130
|
* button: 'standard',
|
|
131
131
|
* url: 'http://itra.jp/',
|
|
132
132
|
* title: 'page-title'
|
|
133
133
|
* });
|
|
134
|
-
*
|
|
135
|
-
*
|
|
134
|
+
*
|
|
135
|
+
*
|
|
136
136
|
* Hatena Bookmark (Old Style)
|
|
137
137
|
* http://b.hatena.ne.jp/
|
|
138
|
-
*
|
|
138
|
+
*
|
|
139
139
|
* $('#hatena').socialbutton('hatena_oldstyle');
|
|
140
|
-
*
|
|
140
|
+
*
|
|
141
141
|
* $('#hatena').socialbutton('hatena_oldstyle', {
|
|
142
142
|
* button: '/path/to/your-icon.png',
|
|
143
143
|
* url: 'http://itra.jp/',
|
|
144
144
|
* padding: 10,
|
|
145
145
|
* height: 15
|
|
146
146
|
* });
|
|
147
|
-
*
|
|
148
|
-
*
|
|
147
|
+
*
|
|
148
|
+
*
|
|
149
149
|
* Google +1 Button
|
|
150
150
|
* http://www.google.com/webmasters/+1/button/
|
|
151
|
-
*
|
|
151
|
+
*
|
|
152
152
|
* $('#google').socialbutton('google_plusone');
|
|
153
|
-
*
|
|
153
|
+
*
|
|
154
154
|
* $('#google').socialbutton('google_plusone', {
|
|
155
155
|
* button: 'standard', // synonym 'size'
|
|
156
156
|
* url: 'http://itra.jp', // synonym 'href'
|
|
@@ -159,16 +159,16 @@
|
|
|
159
159
|
* callback: 'some_callback_function',
|
|
160
160
|
* count: true
|
|
161
161
|
* });
|
|
162
|
-
*
|
|
162
|
+
*
|
|
163
163
|
*
|
|
164
164
|
* Pintarest Button
|
|
165
165
|
* http://pinterest.com/about/goodies/
|
|
166
166
|
*
|
|
167
|
-
* $('#pinterest').socialbutton('
|
|
167
|
+
* $('#pinterest').socialbutton('pintarest', {
|
|
168
168
|
* button: 'horizontal', // or 'vertical', 'none'
|
|
169
169
|
* url: 'http://itra.jp',
|
|
170
170
|
* media: 'http://itra.jp/image.jpg',
|
|
171
|
-
* description: 'This is an image.'
|
|
171
|
+
* description: 'This is an image.'
|
|
172
172
|
* });
|
|
173
173
|
*/
|
|
174
174
|
(function($) {
|
|
@@ -272,7 +272,7 @@ $.fn.socialbutton = function(service, options) {
|
|
|
272
272
|
title: document.title
|
|
273
273
|
},
|
|
274
274
|
hatena_oldstyle: {
|
|
275
|
-
button: '
|
|
275
|
+
button: 'https://d.hatena.ne.jp/images/b_append.gif',
|
|
276
276
|
url: document.URL,
|
|
277
277
|
height: 13,
|
|
278
278
|
padding: 7
|
|
@@ -287,10 +287,10 @@ $.fn.socialbutton = function(service, options) {
|
|
|
287
287
|
},
|
|
288
288
|
pinterest: {
|
|
289
289
|
button: 'horizontal', // horizontal, vertical, none
|
|
290
|
-
url:
|
|
290
|
+
url: document.URL,
|
|
291
291
|
media: '',
|
|
292
292
|
description: ''
|
|
293
|
-
}
|
|
293
|
+
}
|
|
294
294
|
};
|
|
295
295
|
|
|
296
296
|
var max_index = this.size() - 1;
|
|
@@ -496,7 +496,7 @@ function socialbutton_facebook_like(target, options, defaults, index, max_index)
|
|
|
496
496
|
'height': height
|
|
497
497
|
});
|
|
498
498
|
|
|
499
|
-
var tag = '<iframe src="
|
|
499
|
+
var tag = '<iframe src="https://www.facebook.com/plugins/like.php?' + params + '" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:' + width + 'px; height:' + height + 'px;" allowTransparency="true"></iframe>';
|
|
500
500
|
|
|
501
501
|
$(target).html(tag);
|
|
502
502
|
}
|
|
@@ -545,7 +545,7 @@ function socialbutton_twitter(target, options, defaults, index, max_index)
|
|
|
545
545
|
$(target).html(tag);
|
|
546
546
|
|
|
547
547
|
if (index == max_index) {
|
|
548
|
-
$('body').append('<script type="text/javascript" src="
|
|
548
|
+
$('body').append('<script type="text/javascript" src="https://platform.twitter.com/widgets.js"></script>');
|
|
549
549
|
}
|
|
550
550
|
}
|
|
551
551
|
|
|
@@ -667,15 +667,15 @@ function socialbutton_hatena(target, options, defaults, index, max_index)
|
|
|
667
667
|
title = htmlspecialchars(title);
|
|
668
668
|
|
|
669
669
|
var attr = merge_attributes({
|
|
670
|
-
'href': '
|
|
670
|
+
'href': 'https://b.hatena.ne.jp/entry/' + url,
|
|
671
671
|
'class': 'hatena-bookmark-button',
|
|
672
672
|
'data-hatena-bookmark-title': title,
|
|
673
673
|
'data-hatena-bookmark-layout': layout,
|
|
674
674
|
'title': 'このエントリーをはてなブックマークに追加'
|
|
675
675
|
});
|
|
676
|
-
|
|
677
|
-
var tag = '<a' + attr + '><img src="
|
|
678
|
-
+ '<script type="text/javascript" src="
|
|
676
|
+
|
|
677
|
+
var tag = '<a' + attr + '><img src="https://b.st-hatena.com/images/entry-button/button-only.gif" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a>'
|
|
678
|
+
+ '<script type="text/javascript" src="https://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>';
|
|
679
679
|
|
|
680
680
|
$(target).html(tag);
|
|
681
681
|
}
|
|
@@ -691,8 +691,8 @@ function socialbutton_hatena_oldstyle(target, options, defaults, index, max_inde
|
|
|
691
691
|
url = htmlspecialchars(url);
|
|
692
692
|
|
|
693
693
|
var tag = '<span style="font-size: ' + height + 'px; line-height: 100%; ">'
|
|
694
|
-
+ '<span style="padding-right: ' + padding + 'px"><a href="
|
|
695
|
-
+ '<a href="
|
|
694
|
+
+ '<span style="padding-right: ' + padding + 'px"><a href="https://b.hatena.ne.jp/entry/add/' + url + '" target="_blank"><img src="' + button + '" style="border: none; vertical-align: text-bottom" /></a></span>'
|
|
695
|
+
+ '<a href="https://b.hatena.ne.jp/entry/' + url + '" target="_blank"><img src="https://b.hatena.ne.jp/entry/image/' + url + '" style="border: none; vertical-align: text-bottom" /></a>'
|
|
696
696
|
+ '</span>';
|
|
697
697
|
|
|
698
698
|
$(target).html(tag);
|
|
@@ -700,7 +700,7 @@ function socialbutton_hatena_oldstyle(target, options, defaults, index, max_inde
|
|
|
700
700
|
|
|
701
701
|
function socialbutton_google_plusone(target, options, defaults, index, max_index)
|
|
702
702
|
{
|
|
703
|
-
if (
|
|
703
|
+
if (!$.support.tbody) {
|
|
704
704
|
return;
|
|
705
705
|
}
|
|
706
706
|
|
data/js/picasa.js
CHANGED
|
@@ -222,101 +222,47 @@ $(function () {
|
|
|
222
222
|
|
|
223
223
|
var service = new PicasaService($tDiary.plugin.picasa.userId, $tDiary.plugin.picasa.imgMax);
|
|
224
224
|
var loading = new CanvasLoadingImage();
|
|
225
|
-
|
|
226
|
-
var
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
225
|
+
|
|
226
|
+
var showAlbums = function(){
|
|
227
|
+
service.setAlbumStartIndex(1);
|
|
228
|
+
$('h3.plugin_picasa span.title').remove();
|
|
229
|
+
$('#albums').remove();
|
|
230
|
+
$('.photo').remove();
|
|
231
|
+
$('<ul>').css({
|
|
232
|
+
'overflow': 'auto',
|
|
233
|
+
'height': '300px'
|
|
234
|
+
}).attr('id', 'albums').addClass('album')
|
|
235
|
+
.scroll(function(){
|
|
236
|
+
if (($(this).height() + $(this).scrollTop()) > ($(this).get(0).scrollHeight - 250)) {
|
|
237
|
+
if (!service.active && service.hasMoreAlbums()) {
|
|
238
|
+
service.active = true;
|
|
239
|
+
service.getAlbums(function(next_albums) {
|
|
240
|
+
service.active = false;
|
|
241
|
+
$.each(next_albums, function(m, next_album) {
|
|
242
|
+
showAlbum(next_album);
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
})
|
|
248
|
+
.appendTo('#plugin_picasa');
|
|
249
|
+
|
|
230
250
|
$(loading.canvas).show();
|
|
231
|
-
|
|
251
|
+
loading.start();
|
|
252
|
+
service.getAlbums(function (albums) {
|
|
232
253
|
$(loading.canvas).hide();
|
|
233
254
|
loading.stop();
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
.attr('title', 'アルバム一覧を表示する')
|
|
237
|
-
.click(function() {
|
|
238
|
-
$(this).unbind('click');
|
|
239
|
-
service.setAlbumStartIndex(1);
|
|
240
|
-
$('h3.plugin_picasa span.title').remove();
|
|
241
|
-
$('#albums').remove();
|
|
242
|
-
$('.photo').remove();
|
|
243
|
-
$('<ul>').css({
|
|
244
|
-
'overflow': 'auto',
|
|
245
|
-
'height': '300px'
|
|
246
|
-
}).attr('id', 'albums').addClass('album')
|
|
247
|
-
.scroll(function(){
|
|
248
|
-
if (($(this).height() + $(this).scrollTop()) > ($(this).get(0).scrollHeight - 250)) {
|
|
249
|
-
if (!service.active && service.hasMoreAlbums()) {
|
|
250
|
-
service.active = true;
|
|
251
|
-
service.getAlbums(function(next_albums) {
|
|
252
|
-
service.active = false;
|
|
253
|
-
$.each(next_albums, function(m, next_album) {
|
|
254
|
-
showAlbum(next_album);
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
})
|
|
260
|
-
.appendTo('#plugin_picasa');
|
|
261
|
-
|
|
262
|
-
$(loading.canvas).show();
|
|
263
|
-
loading.start();
|
|
264
|
-
service.getAlbums(function (albums) {
|
|
265
|
-
$(loading.canvas).hide();
|
|
266
|
-
loading.stop();
|
|
267
|
-
$.each(albums, function(l, album) {
|
|
268
|
-
showAlbum(album)
|
|
269
|
-
});
|
|
270
|
-
$('<input>')
|
|
271
|
-
.attr({
|
|
272
|
-
'type': 'button',
|
|
273
|
-
'value': '最近アップロードした写真の一覧を表示する'
|
|
274
|
-
})
|
|
275
|
-
.insertAfter('#plugin_picasa')
|
|
276
|
-
.click(function(){
|
|
277
|
-
$(this).remove();
|
|
278
|
-
$('h3.plugin_picasa span.title').remove();
|
|
279
|
-
$('#albums').remove();
|
|
280
|
-
$('.photo').remove();
|
|
281
|
-
showRecentlyPhotos();
|
|
282
|
-
});
|
|
283
|
-
});
|
|
284
|
-
});
|
|
285
|
-
$('<span>', {
|
|
286
|
-
text: ' > Recently uploaded photos'
|
|
287
|
-
}).addClass('title').appendTo('h3.plugin_picasa');
|
|
288
|
-
$('<div>')
|
|
289
|
-
.css({
|
|
290
|
-
'overflow': 'auto',
|
|
291
|
-
'height': '300px'
|
|
292
|
-
})
|
|
293
|
-
.attr('id', 'photos')
|
|
294
|
-
.addClass('photo')
|
|
295
|
-
.appendTo('#plugin_picasa')
|
|
296
|
-
.scroll(function(){
|
|
297
|
-
if (($(this).height() + $(this).scrollTop()) > ($(this).get(0).scrollHeight - 400)) {
|
|
298
|
-
if (!service.active && service.hasMorePhotos()) {
|
|
299
|
-
service.active = true;
|
|
300
|
-
service.getPhotosRecentlyUploaded(function(next_photos) {
|
|
301
|
-
service.active = false;
|
|
302
|
-
$.each(next_photos, function(j, next_photo) {
|
|
303
|
-
showPhoto(next_photo);
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
$.each(photos, function(i, photo){
|
|
310
|
-
showPhoto(photo);
|
|
255
|
+
$.each(albums, function(l, album) {
|
|
256
|
+
showAlbum(album)
|
|
311
257
|
});
|
|
312
258
|
});
|
|
313
|
-
}
|
|
259
|
+
}
|
|
314
260
|
|
|
315
261
|
$('#plugin_picasa_recent').click(function(){
|
|
316
262
|
$('#plugin_picasa')
|
|
317
263
|
.css('height', '300px')
|
|
318
264
|
.empty();
|
|
319
265
|
$(loading.canvas).appendTo($('#plugin_picasa'));
|
|
320
|
-
|
|
266
|
+
showAlbums();
|
|
321
267
|
});
|
|
322
268
|
});
|
data/plugin/coderwall.rb
CHANGED
|
@@ -9,7 +9,7 @@ def coderwall(name, size = [60, 60])
|
|
|
9
9
|
File::delete(cache) if Time::now > File::mtime( cache ) + 60*60*24
|
|
10
10
|
rescue Errno::ENOENT
|
|
11
11
|
begin
|
|
12
|
-
timeout(10) do
|
|
12
|
+
Timeout.timeout(10) do
|
|
13
13
|
json = open( "https://coderwall.com/#{name}.json" ) {|f| f.read }
|
|
14
14
|
end
|
|
15
15
|
open(cache, 'wb') {|f| f.write(json) }
|
data/plugin/flickr.rb
CHANGED
data/plugin/google_webmaster.rb
CHANGED
|
@@ -16,7 +16,7 @@ add_conf_proc('Google Webmaster', 'Google ウェブマスターツール', 'etc'
|
|
|
16
16
|
<<-HTML
|
|
17
17
|
<h3>Google ウェブマスターツールの検証コード</h3>
|
|
18
18
|
<p>
|
|
19
|
-
<input name='google_webmaster.verification'/>
|
|
19
|
+
<input name='google_webmaster.verification' value="#{h @conf['google_webmaster.verification']}" />
|
|
20
20
|
</p>
|
|
21
21
|
HTML
|
|
22
22
|
end
|
data/plugin/iddy.rb
CHANGED
data/plugin/instagram.rb
CHANGED
|
@@ -41,7 +41,7 @@ def instagram_serverside( short_url, size = :medium)
|
|
|
41
41
|
|
|
42
42
|
begin
|
|
43
43
|
Net::HTTP.version_1_2
|
|
44
|
-
res = Net::HTTP::Proxy(px_host, px_port).get('instagram.com', "/
|
|
44
|
+
res = Net::HTTP::Proxy(px_host, px_port).get('api.instagram.com', "/oembed/#{query}")
|
|
45
45
|
json_data = JSON::parse( res, &:read )
|
|
46
46
|
width = option[:width] ? option[:width] : json_data["width"]
|
|
47
47
|
height = option[:height] ? option[:height] : json_data["height"]
|
data/plugin/livedoor_weather.rb
CHANGED
data/plugin/my_hotentry.rb
CHANGED
|
@@ -42,7 +42,7 @@ class MyHotEntry
|
|
|
42
42
|
rss_url << URI.escape(base_url, /[^-.!~*'()\w]/n)
|
|
43
43
|
rss_url << "&sort=#{options[:sort]}&threshold=#{options[:threshold]}"
|
|
44
44
|
begin
|
|
45
|
-
timeout(5) do
|
|
45
|
+
Timeout.timeout(5) do
|
|
46
46
|
# convert Tempfile to String because REXML can't accept Tempfile
|
|
47
47
|
open(rss_url) do |f|
|
|
48
48
|
rss = REXML::Document.new(f.readlines.join("\n"))
|
data/plugin/nhk_program_info.rb
CHANGED
data/plugin/nicovideo.rb
CHANGED
|
@@ -29,7 +29,7 @@ def nicovideo_call_api( video_id )
|
|
|
29
29
|
uri = "http://ext.nicovideo.jp/api/getthumbinfo/#{video_id}"
|
|
30
30
|
proxy = @conf['proxy']
|
|
31
31
|
proxy = 'http://' + proxy if proxy
|
|
32
|
-
xml = timeout( feed? ? 10 : 2 ) {
|
|
32
|
+
xml = Timeout.timeout( feed? ? 10 : 2 ) {
|
|
33
33
|
px_host, px_port = (@conf['proxy'] || '').split( /:/ )
|
|
34
34
|
px_port = 80 if px_host and !px_port
|
|
35
35
|
Net::HTTP::Proxy( px_host, px_port ).get_response( URI::parse( uri ) ).body
|
data/plugin/ohmsha_estore.rb
CHANGED
|
@@ -31,7 +31,11 @@ def ohmsha_estore( id, doc = nil )
|
|
|
31
31
|
return result
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
html =
|
|
34
|
+
html = ''
|
|
35
|
+
begin
|
|
36
|
+
open("https://estore.ohmsha.co.jp/titles/#{id}"){|r|html = r.read}
|
|
37
|
+
rescue SecurityError # avoid error on unlink
|
|
38
|
+
end
|
|
35
39
|
info = JSON.parse(html.scan(%r|<script type='application/ld\+json'>(.*?)</script>|m).flatten[0])
|
|
36
40
|
|
|
37
41
|
result = <<-EOS
|
data/plugin/prettify.rb
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
if /\A(?:latest|day|month|nyear)\z/ =~ @mode then
|
|
4
4
|
add_header_proc do
|
|
5
5
|
<<-HTML
|
|
6
|
-
<link href="
|
|
7
|
-
<script type="text/javascript" src="
|
|
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>
|
|
8
8
|
<script type="text/javascript"><!--
|
|
9
9
|
if(window.addEventListener){
|
|
10
10
|
window.addEventListener("load", prettyPrint, false);
|
data/plugin/profile.rb
CHANGED
|
@@ -58,7 +58,7 @@ module ::Profile
|
|
|
58
58
|
|
|
59
59
|
# get a XML document from endpoint and create REXML::Document instance
|
|
60
60
|
def fetch(endpoint)
|
|
61
|
-
timeout(5) do
|
|
61
|
+
Timeout.timeout(5) do
|
|
62
62
|
open(endpoint) do |f|
|
|
63
63
|
doc = REXML::Document.new(f)
|
|
64
64
|
end
|
|
@@ -89,7 +89,7 @@ module ::Profile
|
|
|
89
89
|
|
|
90
90
|
def fetch(endpoint)
|
|
91
91
|
require 'json'
|
|
92
|
-
timeout(5) do
|
|
92
|
+
Timeout.timeout(5) do
|
|
93
93
|
doc = open(endpoint) {|f| JSON.parse(f.read) }
|
|
94
94
|
end
|
|
95
95
|
end
|
|
@@ -125,7 +125,7 @@ module ::Profile
|
|
|
125
125
|
|
|
126
126
|
def fetch(endpoint)
|
|
127
127
|
require 'json'
|
|
128
|
-
timeout(5) do
|
|
128
|
+
Timeout.timeout(5) do
|
|
129
129
|
begin
|
|
130
130
|
doc = open(endpoint) {|f| JSON.parse(f.read) }
|
|
131
131
|
rescue RuntimeError => err
|
data/plugin/pygments_css.rb
CHANGED
data/plugin/recent_tweet.rb
CHANGED
data/plugin/section_footer.rb
CHANGED
|
@@ -152,7 +152,7 @@ def add_delicious_json(date, index)
|
|
|
152
152
|
|
|
153
153
|
if cached_time.nil? or update
|
|
154
154
|
begin
|
|
155
|
-
timeout(10) do
|
|
155
|
+
Timeout.timeout(10) do
|
|
156
156
|
open( "http://feeds.delicious.com/v2/json/urlinfo/#{url_md5}") do |file|
|
|
157
157
|
File::open( file_name, 'wb' ) do |f|
|
|
158
158
|
f.write( file.read )
|
data/plugin/section_footer2.rb
CHANGED
|
@@ -56,11 +56,11 @@ end
|
|
|
56
56
|
|
|
57
57
|
add_header_proc do
|
|
58
58
|
<<-"EOS"
|
|
59
|
-
<script type="text/javascript" src="
|
|
59
|
+
<script type="text/javascript" src="//b.st-hatena.com/js/bookmark_button_wo_al.js" charset="utf-8" async="async"></script>
|
|
60
60
|
<style type="text/css">iframe.hatena-bookmark-button-frame {margin-bottom: -7px; }</style>
|
|
61
|
-
<script src="
|
|
61
|
+
<script src="//platform.twitter.com/widgets.js" type="text/javascript"></script>
|
|
62
62
|
<style type="text/css">iframe.twitter-share-button.twitter-count-horizontal {margin-bottom: -6px; }</style>
|
|
63
|
-
<script src="
|
|
63
|
+
<script src="//connect.facebook.net/#{@section_footer2_locale}/all.js"></script>
|
|
64
64
|
<script>
|
|
65
65
|
FB.init({
|
|
66
66
|
appId : '',
|
|
@@ -70,7 +70,7 @@ add_header_proc do
|
|
|
70
70
|
});
|
|
71
71
|
</script>
|
|
72
72
|
<style type="text/css">iframe.fb_ltr {margin-bottom: -2px; margin-right: 4px;}</style>
|
|
73
|
-
<script type="text/javascript" src="
|
|
73
|
+
<script type="text/javascript" src="//apis.google.com/js/plusone.js">
|
|
74
74
|
{lang: '#{@section_footer2_locale}'}
|
|
75
75
|
</script>
|
|
76
76
|
<style type="text/css">.tags > div > iframe {margin-bottom: -6px !important; }</style>
|
|
@@ -123,7 +123,7 @@ end
|
|
|
123
123
|
def call_delicious_json( url_md5 )
|
|
124
124
|
json = nil
|
|
125
125
|
begin
|
|
126
|
-
timeout(10) do
|
|
126
|
+
Timeout.timeout(10) do
|
|
127
127
|
open( "http://feeds.delicious.com/v2/json/urlinfo/#{url_md5}" ) do |f|
|
|
128
128
|
json = JSON.parse( f.read )
|
|
129
129
|
end
|
|
@@ -171,7 +171,7 @@ def add_delicious( date, index )
|
|
|
171
171
|
end
|
|
172
172
|
|
|
173
173
|
def add_hatena( date, index )
|
|
174
|
-
%Q!<a href="http://b.hatena.ne.jp/entry/#{permalink( date, index )}" class="hatena-bookmark-button" data-hatena-bookmark-layout="standard"><img src="
|
|
174
|
+
%Q!<a href="http://b.hatena.ne.jp/entry/#{permalink( date, index )}" class="hatena-bookmark-button" data-hatena-bookmark-layout="standard"><img src="//b.st-hatena.com/images/entry-button/button-only.gif" width="20" height="20" style="border: none;" /></a> | !
|
|
175
175
|
end
|
|
176
176
|
|
|
177
177
|
def add_facebook(date, index)
|
data/plugin/squeeze.rb
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# squeeze.rb
|
|
4
|
+
#
|
|
5
|
+
# Create daily HTML file from tDiary database.
|
|
6
|
+
#
|
|
7
|
+
# See URLs below for more details.
|
|
8
|
+
# http://ponx.s5.xrea.com/hiki/squeeze.rb.html (English)
|
|
9
|
+
# http://ponx.s5.xrea.com/hiki/ja/squeeze.rb.html (Japanese)
|
|
10
|
+
#
|
|
11
|
+
# Copyright (C) 2002 MUTOH Masao <mutoh@highway.ne.jp>
|
|
12
|
+
# You can redistribute it and/or modify it under GPL2 or any later version.
|
|
13
|
+
#
|
|
14
|
+
# The original version of this file was distributed with squeeze
|
|
15
|
+
# TADA Tadashi <sho@spc.gr.jp> with GPL2 or any later version.
|
|
16
|
+
#
|
|
17
|
+
unless $tdiary_squeeze_loaded
|
|
18
|
+
$tdiary_squeeze_loaded ||= true
|
|
19
|
+
|
|
20
|
+
mode = defined?(TDiary) ? "PLUGIN" : ENV["REQUEST_METHOD"]? "CGI" : "CMD"
|
|
21
|
+
|
|
22
|
+
if mode == "CMD" || mode == "CGI"
|
|
23
|
+
output_path = "./html/"
|
|
24
|
+
tdiary_path = "."
|
|
25
|
+
tdiary_conf = "."
|
|
26
|
+
suffix = ''
|
|
27
|
+
all_data = false
|
|
28
|
+
overwrite = false
|
|
29
|
+
compat = false
|
|
30
|
+
$stdout.sync = true
|
|
31
|
+
|
|
32
|
+
if mode == "CMD"
|
|
33
|
+
def usage
|
|
34
|
+
puts "squeeze $Revision: 1.25 $"
|
|
35
|
+
puts " making html files from tDiary's database."
|
|
36
|
+
puts " usage: ruby squeeze.rb [-p <tDiary path>] [-c <tdiary.conf path>] [-a] [-s] [-x suffix] <dest path>"
|
|
37
|
+
exit
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
require 'getoptlong'
|
|
41
|
+
parser = GetoptLong::new
|
|
42
|
+
parser.set_options(['--path', '-p', GetoptLong::REQUIRED_ARGUMENT],
|
|
43
|
+
['--conf', '-c', GetoptLong::REQUIRED_ARGUMENT],
|
|
44
|
+
['--suffix', '-x', GetoptLong::REQUIRED_ARGUMENT],
|
|
45
|
+
['--all', '-a', GetoptLong::NO_ARGUMENT],
|
|
46
|
+
['--overwrite', '-o', GetoptLong::NO_ARGUMENT],
|
|
47
|
+
['--squeeze', '-s', GetoptLong::NO_ARGUMENT])
|
|
48
|
+
begin
|
|
49
|
+
parser.each do |opt, arg|
|
|
50
|
+
case opt
|
|
51
|
+
when '--path'
|
|
52
|
+
tdiary_path = arg.dup.untaint
|
|
53
|
+
when '--conf'
|
|
54
|
+
tdiary_conf = arg
|
|
55
|
+
when '--suffix'
|
|
56
|
+
suffix = arg
|
|
57
|
+
when '--all'
|
|
58
|
+
all_data = true
|
|
59
|
+
when '--overwrite'
|
|
60
|
+
overwrite = true
|
|
61
|
+
when '--squeeze'
|
|
62
|
+
compat = true
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
rescue
|
|
66
|
+
usage
|
|
67
|
+
exit( 1 )
|
|
68
|
+
end
|
|
69
|
+
output_path = ARGV.shift
|
|
70
|
+
usage unless output_path
|
|
71
|
+
output_path = File::expand_path(output_path)
|
|
72
|
+
output_path += '/' if /\/$/ !~ output_path
|
|
73
|
+
|
|
74
|
+
tdiary_conf = tdiary_path unless tdiary_conf
|
|
75
|
+
Dir::chdir( tdiary_conf )
|
|
76
|
+
ARGV << '' # dummy argument against cgi.rb offline mode.
|
|
77
|
+
$:.unshift tdiary_path
|
|
78
|
+
else
|
|
79
|
+
@options = Hash.new
|
|
80
|
+
File::readlines("tdiary.conf").each {|item|
|
|
81
|
+
if item =~ /@options/
|
|
82
|
+
begin
|
|
83
|
+
eval(item)
|
|
84
|
+
rescue SyntaxError
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
}
|
|
88
|
+
output_path = @options['squeeze.output_path'] || @options['yasqueeze.output_path']
|
|
89
|
+
suffix = @options['squeeze.suffix'] || ''
|
|
90
|
+
all_data = @options['squeeze.all_data'] || @options['yasqueeze.all_data']
|
|
91
|
+
overwrite = @options['squeeze.overwrite']
|
|
92
|
+
compat = @options['squeeze.compat_path'] || @options['yasqueeze.compat_path']
|
|
93
|
+
|
|
94
|
+
if FileTest::symlink?( __FILE__ ) then
|
|
95
|
+
org_path = File::dirname( File::readlink( __FILE__ ) )
|
|
96
|
+
else
|
|
97
|
+
org_path = File::dirname( __FILE__ )
|
|
98
|
+
end
|
|
99
|
+
$:.unshift( org_path.untaint )
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
begin
|
|
103
|
+
require "tdiary"
|
|
104
|
+
rescue LoadError
|
|
105
|
+
$stderr.print "squeeze.rb: cannot load tdiary.rb. <#{tdiary_path}/tdiary>\n"
|
|
106
|
+
exit( 1 )
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
#
|
|
111
|
+
# Dairy Squeeze
|
|
112
|
+
#
|
|
113
|
+
module ::TDiary
|
|
114
|
+
class YATDiarySqueeze < TDiaryBase
|
|
115
|
+
def initialize(diary, dest, all_data, overwrite, compat, conf, suffix)
|
|
116
|
+
@ignore_parser_cache = true
|
|
117
|
+
|
|
118
|
+
cgi = CGI::new
|
|
119
|
+
def cgi.referer; nil; end
|
|
120
|
+
def cgi.user_agent; 'bot'; end
|
|
121
|
+
super( cgi, 'day.rhtml', conf )
|
|
122
|
+
@diary = diary
|
|
123
|
+
@date = diary.date
|
|
124
|
+
@diaries = {@date.strftime('%Y%m%d') => @diary} if @diaries.size == 0
|
|
125
|
+
@dest = dest
|
|
126
|
+
@all_data = all_data
|
|
127
|
+
@overwrite = overwrite
|
|
128
|
+
@compat = compat
|
|
129
|
+
@suffix = suffix
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def execute
|
|
133
|
+
if @compat
|
|
134
|
+
dir = @dest
|
|
135
|
+
name = @diary.date.strftime('%Y%m%d')
|
|
136
|
+
else
|
|
137
|
+
dir = @dest + "/" + @diary.date.strftime('%Y')
|
|
138
|
+
name = @diary.date.strftime('%m%d')
|
|
139
|
+
Dir.mkdir(dir, 0755) unless File.directory?(dir)
|
|
140
|
+
end
|
|
141
|
+
filename = dir + "/" + name + @suffix
|
|
142
|
+
if FileTest.exist?( filename ) and @overwrite
|
|
143
|
+
File::delete( filename )
|
|
144
|
+
end
|
|
145
|
+
if @diary.visible? or @all_data
|
|
146
|
+
if not FileTest::exist?(filename) or
|
|
147
|
+
File::mtime(filename) != @diary.last_modified
|
|
148
|
+
File::open(filename, 'w'){|f| f.write(eval_rhtml)}
|
|
149
|
+
File::utime(@diary.last_modified, @diary.last_modified, filename)
|
|
150
|
+
end
|
|
151
|
+
else
|
|
152
|
+
if FileTest.exist?(filename) and ! @all_data
|
|
153
|
+
name = "remove #{name}"
|
|
154
|
+
File::delete(filename)
|
|
155
|
+
else
|
|
156
|
+
name = ""
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
name
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
protected
|
|
163
|
+
def mode
|
|
164
|
+
'day'
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def cookie_name; ''; end
|
|
168
|
+
def cookie_mail; ''; end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
#
|
|
173
|
+
# Main
|
|
174
|
+
#
|
|
175
|
+
module ::TDiary
|
|
176
|
+
class YATDiarySqueezeMain < TDiaryBase
|
|
177
|
+
def initialize(dest, all_data, overwrite, compat, conf, suffix)
|
|
178
|
+
@ignore_parser_cache = true
|
|
179
|
+
|
|
180
|
+
cgi = CGI::new
|
|
181
|
+
def cgi.referer; nil; end
|
|
182
|
+
super( cgi, 'day.rhtml', conf )
|
|
183
|
+
calendar
|
|
184
|
+
@years.keys.sort.each do |year|
|
|
185
|
+
print "(#{year.to_s}/) "
|
|
186
|
+
@years[year.to_s].sort.each do |month|
|
|
187
|
+
diaries2 = nil
|
|
188
|
+
@io.transaction(Time::local(year.to_i, month.to_i)) do |diaries|
|
|
189
|
+
diaries2 = diaries
|
|
190
|
+
DIRTY_NONE
|
|
191
|
+
end
|
|
192
|
+
diaries2.sort.each do |day, diary|
|
|
193
|
+
print YATDiarySqueeze.new(diary, dest, all_data, overwrite, compat, conf, suffix).execute + " "
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
squeeze_navi_on_footer = '<div class="adminmenu"><%= navi_user %></div>'
|
|
202
|
+
|
|
203
|
+
if mode == "CGI" || mode == "CMD"
|
|
204
|
+
if mode == "CGI"
|
|
205
|
+
print %Q[Content-type:text/html\n\n
|
|
206
|
+
<html>
|
|
207
|
+
<head>
|
|
208
|
+
<title>Squeeze for tDiary</title>
|
|
209
|
+
<link href="./theme/default/default.css" type="text/css" rel="stylesheet"/>
|
|
210
|
+
</head>
|
|
211
|
+
<body><div style="text-align:center">
|
|
212
|
+
<h1>Squeeze for tDiary</h1>
|
|
213
|
+
<p>$Revision: 1.25 $</p>
|
|
214
|
+
<p>Copyright (C) 2002 MUTOH Masao<mutoh@highway.ne.jp></p></div>
|
|
215
|
+
<br><br>Start!</p><hr>
|
|
216
|
+
]
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
begin
|
|
220
|
+
require 'cgi'
|
|
221
|
+
cgi = CGI.new
|
|
222
|
+
def cgi.user_agent; 'bot'; end
|
|
223
|
+
conf = TDiary::Config::new(cgi)
|
|
224
|
+
conf.header = ''
|
|
225
|
+
conf.footer = squeeze_navi_on_footer
|
|
226
|
+
conf.show_comment = true
|
|
227
|
+
conf.hide_comment_form = true
|
|
228
|
+
output_path = "#{conf.data_path}/cache/html" unless output_path
|
|
229
|
+
Dir.mkdir(output_path, 0755) unless File.directory?(output_path)
|
|
230
|
+
::TDiary::YATDiarySqueezeMain.new(output_path, all_data, overwrite, compat, conf, suffix)
|
|
231
|
+
rescue
|
|
232
|
+
print $!, "\n"
|
|
233
|
+
$@.each do |v|
|
|
234
|
+
print v, "\n"
|
|
235
|
+
end
|
|
236
|
+
exit( 1 )
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
if mode == "CGI"
|
|
240
|
+
print "<hr><p>End!</p></body></html>\n"
|
|
241
|
+
else
|
|
242
|
+
print "\n\n"
|
|
243
|
+
end
|
|
244
|
+
else
|
|
245
|
+
add_update_proc do
|
|
246
|
+
conf = @conf.clone
|
|
247
|
+
conf.header = ''
|
|
248
|
+
conf.footer = squeeze_navi_on_footer
|
|
249
|
+
conf.show_comment = true
|
|
250
|
+
conf.hide_comment_form = true
|
|
251
|
+
|
|
252
|
+
diary = @diaries[@date.strftime('%Y%m%d')]
|
|
253
|
+
dir = @options['squeeze.output_path'] || @options['yasqueeze.output_path']
|
|
254
|
+
dir = @cache_path + "/html" unless dir
|
|
255
|
+
Dir.mkdir(dir, 0755) unless File.directory?(dir)
|
|
256
|
+
::TDiary::YATDiarySqueeze.new(diary, dir,
|
|
257
|
+
@options['squeeze.all_data'] || @options['yasqueeze.all_data'],
|
|
258
|
+
@options['squeeze.overwrite'],
|
|
259
|
+
@options['squeeze.compat_path'] || @options['yasqueeze.compat_path'],
|
|
260
|
+
conf,
|
|
261
|
+
@options['squeeze.suffix'] || ''
|
|
262
|
+
).execute
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
# Local Variables:
|
|
268
|
+
# mode: ruby
|
|
269
|
+
# indent-tabs-mode: t
|
|
270
|
+
# tab-width: 3
|
|
271
|
+
# ruby-indent-level: 3
|
|
272
|
+
# End:
|
data/plugin/tweet_quote.rb
CHANGED
|
@@ -56,7 +56,7 @@ def twitter_statuses_show_api( tweet_id )
|
|
|
56
56
|
"Authorization" => %Q[OAuth #{oauth_parameters.map{|k ,v| "#{URI.escape( k.to_s, unsafe )}=\"#{URI.escape( v, unsafe )}\""}.join( "," )}],
|
|
57
57
|
:proxy => proxy
|
|
58
58
|
}
|
|
59
|
-
timeout( 20 ) do
|
|
59
|
+
Timeout.timeout( 20 ) do
|
|
60
60
|
open( "#{url}?#{parameters.map{|k,v| "#{k}=#{v}"}.join( "&" )}", headers ) {|f| f.read }
|
|
61
61
|
end
|
|
62
62
|
end
|
data/plugin/twitter.rb
CHANGED
|
@@ -12,7 +12,7 @@ require 'rexml/document'
|
|
|
12
12
|
if /^(latest|day)$/ =~ @mode then
|
|
13
13
|
add_header_proc do
|
|
14
14
|
xml = nil
|
|
15
|
-
timeout( 5 ) do
|
|
15
|
+
Timeout.timeout( 5 ) do
|
|
16
16
|
begin
|
|
17
17
|
xml = open( "http://twitter.com/statuses/user_timeline/#{@conf['twitter.user']}.xml" ){|f| f.read}
|
|
18
18
|
rescue Exception
|
data/plugin/yo_update.rb
CHANGED
data/plugin/youtube.rb
CHANGED
|
@@ -7,20 +7,24 @@
|
|
|
7
7
|
#
|
|
8
8
|
def youtube( video_id, size = [425,350] )
|
|
9
9
|
if feed?
|
|
10
|
-
%Q|<div class="youtube"><a href="
|
|
10
|
+
%Q|<div class="youtube"><a href="//www.youtube.com/watch?v=#{video_id}">YouTube (#{video_id})</a></div>|
|
|
11
11
|
else
|
|
12
12
|
<<-TAG
|
|
13
|
-
<
|
|
13
|
+
<div class="youtube-player-wrapper">
|
|
14
|
+
<iframe class="youtube-player" type="text/html" width="#{size[0]}" height="#{size[1]}" src="//www.youtube.com/embed/#{video_id}" frameborder="0">
|
|
14
15
|
</iframe>
|
|
16
|
+
</div>
|
|
15
17
|
TAG
|
|
16
18
|
end
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
def youtube_custom( video_id, size = [416,337] )
|
|
20
22
|
<<-TAG
|
|
23
|
+
<div class="youtube-player-wrapper">
|
|
21
24
|
<object width="#{size[0]}" height="#{size[1]}">
|
|
22
|
-
<param name="movie" value="
|
|
23
|
-
<embed src="
|
|
25
|
+
<param name="movie" value="//www.youtube.com/cp/#{video_id}"></param>
|
|
26
|
+
<embed src="//www.youtube.com/cp/#{video_id}" type="application/x-shockwave-flash" width="#{size[0]}" height="#{size[1]}"></embed>
|
|
24
27
|
</object>
|
|
28
|
+
</div>
|
|
25
29
|
TAG
|
|
26
30
|
end
|
data/spec/youtube_spec.rb
CHANGED
|
@@ -5,7 +5,7 @@ describe "youtube plugin" do
|
|
|
5
5
|
DUMMY_YOUTUBE_VIDEO_ID = 1234567890
|
|
6
6
|
|
|
7
7
|
{
|
|
8
|
-
'Mozilla' => %|\t\t<iframe class="youtube-player" type="text/html" width="425" height="350" src="
|
|
8
|
+
'Mozilla' => %|\t\t<div class="youtube-player-wrapper">\n\t\t<iframe class="youtube-player" type="text/html" width="425" height="350" src="//www.youtube.com/embed/#{DUMMY_YOUTUBE_VIDEO_ID}" frameborder="0">\n\t\t</iframe>\n\t\t</div>\n|
|
|
9
9
|
}.each do |k,v|
|
|
10
10
|
it 'should render object tag in :user_agent' do
|
|
11
11
|
plugin = fake_plugin(:youtube)
|
data/style/hatena_style.rb
CHANGED
|
@@ -125,7 +125,7 @@ module Hatena
|
|
|
125
125
|
File.open(kw, IO::WRONLY|IO::CREAT) do |fp|
|
|
126
126
|
break unless fp.flock(IO::LOCK_EX|IO::LOCK_NB)
|
|
127
127
|
uri = ::URI.parse('http://d.hatena.ne.jp/images/keyword/keywordlist')
|
|
128
|
-
timeout(60) do
|
|
128
|
+
Timeout.timeout(60) do
|
|
129
129
|
Net::HTTP.version_1_1
|
|
130
130
|
Net::HTTP.new(uri.host, uri.port).start do |http|
|
|
131
131
|
res, body = http.get(uri.request_uri,
|
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:
|
|
4
|
+
version: 5.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- tDiary contributors
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2016-03-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: tdiary
|
|
@@ -220,7 +220,6 @@ files:
|
|
|
220
220
|
- plugin/bootstrap-navi.rb
|
|
221
221
|
- plugin/brow_si.rb
|
|
222
222
|
- plugin/canonical.rb
|
|
223
|
-
- plugin/category-lite.rb
|
|
224
223
|
- plugin/category_similar.rb
|
|
225
224
|
- plugin/category_to_tag.rb
|
|
226
225
|
- plugin/category_to_tagcloud.rb
|
|
@@ -342,6 +341,7 @@ files:
|
|
|
342
341
|
- plugin/show_and_hide.rb
|
|
343
342
|
- plugin/slideshare.rb
|
|
344
343
|
- plugin/socialbutton.rb
|
|
344
|
+
- plugin/squeeze.rb
|
|
345
345
|
- plugin/tatsu_zine.rb
|
|
346
346
|
- plugin/tdiarytimes2.rb
|
|
347
347
|
- plugin/tdiarytimes_flashstyle.rb
|
data/plugin/category-lite.rb
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# category-lite.rb : tDiary plugin for show category pages (light edition)
|
|
3
|
-
#
|
|
4
|
-
# Copyright (C) 2015 TADA Tadashi
|
|
5
|
-
# Distributed under the GPL2 or any later version.
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# read cache here so that you can use category with secure mode.
|
|
10
|
-
@conf['category.header1'] = ''
|
|
11
|
-
@conf['category.header2'] = '<%= category_dropdown_list %>'
|
|
12
|
-
@category_icon = {}
|
|
13
|
-
@categories = transaction('category'){|db|db.keys}.sort_by{|c|c.downcase}
|
|
14
|
-
|
|
15
|
-
module Category
|
|
16
|
-
class Info
|
|
17
|
-
def initialize(cgi, _, conf)
|
|
18
|
-
@cgi, @conf = cgi, conf
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def category
|
|
22
|
-
@name || (@name = @conf.to_native(@cgi.params['category'][0], @conf.encoding_old))
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def category_title
|
|
28
|
-
info = Category::Info.new(@cgi, nil, @conf)
|
|
29
|
-
"[#{info.category}]"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def category_anchor(category)
|
|
33
|
-
%Q|[<a href="#{h @index}?category=#{u category}" title="#{h category}">#{h category}</a>]|
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def category_dropdown_list(label = nil, _ = nil)
|
|
37
|
-
label ||= 'show category list'
|
|
38
|
-
|
|
39
|
-
info = Category::Info.new(@cgi, _, @conf)
|
|
40
|
-
category = info.category
|
|
41
|
-
category = [] if category.empty?
|
|
42
|
-
|
|
43
|
-
options = ''
|
|
44
|
-
@categories.each do |c|
|
|
45
|
-
options << %Q|<option value="#{h c}"#{" selected" if category.include?(c)}>#{h c}</option>\n|
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
<<-HTML
|
|
49
|
-
<form method="get" action="#{h @index}"><div>
|
|
50
|
-
<select name="category">
|
|
51
|
-
#{options}
|
|
52
|
-
</select>
|
|
53
|
-
<input type="submit" value="#{label}">
|
|
54
|
-
</div></form>
|
|
55
|
-
HTML
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def category_transaction(categories)
|
|
59
|
-
transaction('category') do |db|
|
|
60
|
-
(categories || db.keys).each do |category|
|
|
61
|
-
Hash[*JSON.load(db.get(category) || '{}').sort_by{|d,_|d}.flatten(1)].each do |ymd, diaries|
|
|
62
|
-
yield db, category, ymd, diaries
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def category_list_sections
|
|
69
|
-
info = Category::Info.new(@cgi, nil, @conf)
|
|
70
|
-
|
|
71
|
-
r = ''
|
|
72
|
-
r << <<-HTML
|
|
73
|
-
<div class="category day">
|
|
74
|
-
<h2>
|
|
75
|
-
<span class="title">
|
|
76
|
-
<a href="#{h @conf.index}?category=#{u info.category}">#{h info.category}</a>
|
|
77
|
-
</span>
|
|
78
|
-
</h2>
|
|
79
|
-
<div class="body">
|
|
80
|
-
<ul class="category">
|
|
81
|
-
HTML
|
|
82
|
-
category_transaction([info.category]) do |db, category, ymd, diaries|
|
|
83
|
-
date = Time.local(*ymd.scan(/(.{4})(..)(..)/)[0]).strftime(@conf.date_format)
|
|
84
|
-
diaries.sort_by{|i|i[0]}.each do |idx, title, excerpt|
|
|
85
|
-
r << <<-HTML
|
|
86
|
-
<li>
|
|
87
|
-
<a href="#{h @index}#{anchor "#{ymd}#p#{'%02d' % idx}"}" title="#{h excerpt}">
|
|
88
|
-
#{date}#p#{'%02d' % idx}
|
|
89
|
-
</a>
|
|
90
|
-
#{apply_plugin(title)}
|
|
91
|
-
</li>
|
|
92
|
-
HTML
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
r << <<-HTML
|
|
96
|
-
</ul>
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
|
-
HTML
|
|
100
|
-
return r
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def category_serialize(diary)
|
|
104
|
-
data = {}
|
|
105
|
-
ymd = diary.date.strftime('%Y%m%d')
|
|
106
|
-
|
|
107
|
-
idx = 1
|
|
108
|
-
diary.each_section do |s|
|
|
109
|
-
s.categories.each do |c|
|
|
110
|
-
data[c] ||= {}
|
|
111
|
-
data[c][ymd] ||= []
|
|
112
|
-
body = <<-EVAL.gsub(/^\t+/, '')
|
|
113
|
-
text = apply_plugin(<<'BODY', true)
|
|
114
|
-
#{s.body_to_html}
|
|
115
|
-
BODY
|
|
116
|
-
EVAL
|
|
117
|
-
shorten = begin
|
|
118
|
-
@conf.shorten(eval(body.untaint))
|
|
119
|
-
rescue NameError
|
|
120
|
-
""
|
|
121
|
-
end
|
|
122
|
-
data[c][ymd] << [idx, s.stripped_subtitle_to_html, shorten]
|
|
123
|
-
end
|
|
124
|
-
idx +=1
|
|
125
|
-
end
|
|
126
|
-
data
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
def category_rebuild(years)
|
|
130
|
-
transaction('category') do |db|
|
|
131
|
-
cache = Hash.new{{}}
|
|
132
|
-
@years.each do |y, ms|
|
|
133
|
-
ms.each do |m|
|
|
134
|
-
m = DiaryContainer::find_by_month(@conf, "#{y}#{m}")
|
|
135
|
-
m.diaries.each do |ymd, diary|
|
|
136
|
-
next if !diary.visible? or !diary.categorizable?
|
|
137
|
-
serialize = category_serialize(diary)
|
|
138
|
-
serialize.keys.each do |category|
|
|
139
|
-
cache[category] = cache[category].merge!(serialize[category])
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
db.keys.each {|key| db.delete(key)}
|
|
145
|
-
cache.each do |category, diaries|
|
|
146
|
-
db.set(category, diaries.to_json)
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
add_update_proc do
|
|
152
|
-
if /^(append|replace)$/ =~ @mode
|
|
153
|
-
ymd = @date.strftime('%Y%m%d')
|
|
154
|
-
diary = @diaries[ymd]
|
|
155
|
-
serialize = category_serialize(diary)
|
|
156
|
-
|
|
157
|
-
transaction('category') do |db|
|
|
158
|
-
(db.keys + serialize.keys).uniq.each do |category|
|
|
159
|
-
data = JSON.load(db.get(category) || '{}')
|
|
160
|
-
if diary.visible? and serialize[category]
|
|
161
|
-
data.update(serialize[category])
|
|
162
|
-
db.set(category, data.to_json)
|
|
163
|
-
else
|
|
164
|
-
data.delete(ymd)
|
|
165
|
-
if data.empty?
|
|
166
|
-
db.delete(category)
|
|
167
|
-
else
|
|
168
|
-
db.set(category, data.to_json)
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
#
|
|
177
|
-
# edit support: insert category to editing diary using JavaScript
|
|
178
|
-
#
|
|
179
|
-
def category_edit_support_flatlist(categories)
|
|
180
|
-
ret = ''
|
|
181
|
-
ret << '<div class="field title">'
|
|
182
|
-
ret << "#{@category_conf_label}:\n"
|
|
183
|
-
categories.each do |c|
|
|
184
|
-
ret << %Q!| <span class="category-item">#{h c}</span>\n!
|
|
185
|
-
end
|
|
186
|
-
ret << "|\n</div>\n<br>\n"
|
|
187
|
-
ret
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
def category_edit_support_dropdown(categories)
|
|
191
|
-
ret = ''
|
|
192
|
-
ret << '<div class="field title">'
|
|
193
|
-
ret << %Q|#{@category_conf_label}: <select id="category-candidate" name="category-candidate">\n|
|
|
194
|
-
categories.each do |c|
|
|
195
|
-
ret << %Q!<option>#{h c}</option>\n!
|
|
196
|
-
end
|
|
197
|
-
ret << "|\n</select>\n</div>\n<br>\n"
|
|
198
|
-
ret
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
if @mode =~ /^(form|edit)$/ and @conf['category.edit_support'] != 0
|
|
202
|
-
enable_js( 'category.js' )
|
|
203
|
-
add_edit_proc do |date|
|
|
204
|
-
ret = ''
|
|
205
|
-
transaction('category') do |db|
|
|
206
|
-
categories = db.keys
|
|
207
|
-
unless categories.size == 0 then
|
|
208
|
-
if @conf['category.edit_support'] == 2 then
|
|
209
|
-
ret << category_edit_support_dropdown(categories)
|
|
210
|
-
else
|
|
211
|
-
ret << category_edit_support_flatlist(categories)
|
|
212
|
-
end
|
|
213
|
-
end
|
|
214
|
-
end
|
|
215
|
-
ret
|
|
216
|
-
end
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
if @mode == 'conf' || @mode == 'saveconf'
|
|
220
|
-
add_conf_proc('category', @category_conf_label, 'basic') do
|
|
221
|
-
if @mode == 'saveconf'
|
|
222
|
-
category_rebuild(@years) if @cgi.valid?('category_initialize')
|
|
223
|
-
@conf['category.edit_support'] = (@cgi.params['category.edit_support'][0] || '1').to_i
|
|
224
|
-
end
|
|
225
|
-
category_conf_html
|
|
226
|
-
end
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
# Local Variables:
|
|
230
|
-
# mode: ruby
|
|
231
|
-
# indent-tabs-mode: t
|
|
232
|
-
# tab-width: 3
|
|
233
|
-
# ruby-indent-level: 3
|
|
234
|
-
# End:
|
|
235
|
-
# vim: ts=3
|