tdiary-contrib 3.2.2.20130518 → 3.2.2.20130614
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -3
- data/doc/ja/plugin/image_gps.txt +56 -17
- data/doc/ja/plugin/playstore.txt +31 -0
- data/js/socialbutton.js +8 -2
- data/lib/exifparser/README +6 -12
- data/lib/tdiary-contrib.rb +7 -6
- data/plugin/brow_si.rb +32 -0
- data/plugin/image_gps.rb +110 -56
- data/plugin/instagr.rb +1 -0
- data/plugin/playstore.rb +161 -0
- data/plugin/tweet_quote.rb +102 -48
- data/plugin/twitter_badge.rb +1 -1
- data/util/estraier-search/estraier-register.rb +2 -1
- data/util/estraier-search/estraier-search.rb +2 -1
- data/util/image-gallery/misc/plugin/recent_image.rb +1 -1
- metadata +7 -27
- data/doc/ja/plugin/image_detail.txt +0 -69
- data/doc/ja/plugin/image_gps2.txt +0 -41
- data/lib/exifparser/BUGS +0 -1
- data/lib/exifparser/ChangeLog +0 -169
- data/lib/exifparser/install.rb +0 -1015
- data/lib/exifparser/lib/exifparser/makernote/canon.rb +0 -502
- data/lib/exifparser/lib/exifparser/makernote/fujifilm.rb +0 -415
- data/lib/exifparser/lib/exifparser/makernote/minolta.rb +0 -84
- data/lib/exifparser/lib/exifparser/makernote/mk_nikonflensname.rb +0 -39
- data/lib/exifparser/lib/exifparser/makernote/nikon.rb +0 -267
- data/lib/exifparser/lib/exifparser/makernote/nikon2.rb +0 -581
- data/lib/exifparser/lib/exifparser/makernote/nikonflensname.rb +0 -438
- data/lib/exifparser/lib/exifparser/makernote/olympus.rb +0 -225
- data/lib/exifparser/lib/exifparser/makernote/prove.rb +0 -84
- data/lib/exifparser/lib/exifparser/makernote/sigma.rb +0 -237
- data/lib/exifparser/lib/exifparser/pre-setup.rb +0 -1
- data/lib/exifparser/lib/exifparser/scan.rb +0 -278
- data/lib/exifparser/lib/exifparser/tag.rb +0 -2298
- data/lib/exifparser/lib/exifparser/thumbnail.rb +0 -76
- data/lib/exifparser/lib/exifparser/utils.rb +0 -88
- data/lib/exifparser/lib/exifparser.rb +0 -265
- data/lib/exifparser/sample/exifview.rb +0 -279
- data/plugin/image_detail.rb +0 -143
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6160075d3a10a3f127fd3ec59f82b59a5ea4e494
|
4
|
+
data.tar.gz: 4302b52ef1948c223e5e1ce311c13bc601856e45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c3204d15ab266d374ae86082854cd7a82f38118509b6b85e56ef69ba5aedca4fa0e66b8682e4de391b671b6cac9376c3f0e124ab8ab659417eeef78225656cd
|
7
|
+
data.tar.gz: 52c0bd44604864f41e488564e38564c1e20b7126a3faf320aa224dc2f71bea2ebfab0279f426eb6c4e9f09105a467f6cb77b0445d6c9b4b6409eddc724233d70
|
data/.travis.yml
CHANGED
data/doc/ja/plugin/image_gps.txt
CHANGED
@@ -1,35 +1,74 @@
|
|
1
1
|
image_gps.rb
|
2
2
|
|
3
3
|
機能
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
JPEGファイルに含まれるExif情報を解析し、各種撮影条件を表示します。
|
5
|
+
また、位置情報が含まれる場合、周辺地図ををポップアップ表示し、
|
6
|
+
Googleマップへのリンクを生成します。
|
7
7
|
|
8
|
-
|
9
|
-
revision 1.7:
|
10
|
-
リンク先をGoogleMapにした。
|
11
|
-
モバイルモード時も世界測地系に変換する。
|
12
|
-
|
13
|
-
インストール
|
8
|
+
前提条件
|
14
9
|
このPluginはimage.rbが導入されていることを前提としています。
|
15
10
|
image.rbを有効にしてください。また、image_ex.rbと共存することはできません。
|
16
11
|
|
17
12
|
・ExifParserの導入
|
18
13
|
image_gps.rbはExifのパーサとして、ExifParserを使用しています。
|
19
|
-
|
14
|
+
以下のコマンドで導入できます。
|
15
|
+
#gem install exifparser
|
20
16
|
|
21
17
|
・Pluginのインストール
|
22
18
|
image_gps.rbを適切な場所に配置してください。多言語用リソースは存在しません。
|
23
19
|
|
24
|
-
|
25
|
-
|
26
|
-
|
20
|
+
・Google Maps API Keyの取得
|
21
|
+
ポップアップでの地図表示を行う場合は、
|
22
|
+
Google API console( https://code.google.com/apis/console )
|
23
|
+
にてStatic Maps APIのAPIキーを生成し、[設定]-[その他]-[image_gpsの設定]の
|
24
|
+
Google Static Maps API Keyに生成されたAPIキーを設定してください。
|
25
|
+
地図のポップアップ表示機能を使用しない場合は、設定する必要はありません。
|
26
|
+
API Keyに関する詳細は、
|
27
|
+
https://developers.google.com/maps/documentation/staticmaps/?hl=ja
|
28
|
+
も参照してください。
|
29
|
+
|
30
|
+
|
31
|
+
・Exif情報の表示
|
32
|
+
[設定]-[その他]-[image_gpsの設定]のShow Exif Infoに値を設定することにより、
|
33
|
+
任意のExif情報を表示することができます。
|
34
|
+
Exifのタグ名をスペース区切りで記述してください
|
35
|
+
例) Model FocalLength FNumber ExposureTime ExposureBiasValue
|
36
|
+
で、モデル名、焦点距離、F値、露出時間、露出補正が表示されます。
|
37
|
+
|
38
|
+
・地図サイトへのリンクURLの設定
|
39
|
+
[設定]-[その他]-[image_gpsの設定]のMap Link URLにURLを記述することにより
|
40
|
+
任意の地図サービスサイトへのリンクを設定することができます。
|
41
|
+
主要なサービスについては、セレクタから選択することによりデフォルト値が設定されます。
|
42
|
+
未設定の場合はGoogleマップへのリンクが設定されます。
|
43
|
+
|
27
44
|
|
28
|
-
携帯端末でアクセスした場合は、http://walk.eznavi.jp/ へのリンクを生成します。
|
29
|
-
auのezナビウォーク対応機種ではezナビウォークを起動するページが表示されます。
|
30
|
-
それ以外の端末ではhttp://map.navitime.jp/ へリダイレクトされます。
|
31
45
|
|
32
|
-
|
46
|
+
・CSSの追加
|
47
|
+
写真と撮影条件をそれっぽく表示するために、CSSを設定する必要があります。
|
48
|
+
apend_css.rbを使用すると簡単にCSSを追加することができます。
|
49
|
+
参考に、作者が設定しているCSSを示します。
|
50
|
+
|
51
|
+
--ここから
|
52
|
+
img.photo{
|
53
|
+
float:left;
|
54
|
+
clear:both;
|
55
|
+
}
|
56
|
+
|
57
|
+
div.photo_detail{
|
58
|
+
clear:both;
|
59
|
+
display:block;
|
60
|
+
margin:0.5em;
|
61
|
+
padding:0.5em;
|
62
|
+
}
|
63
|
+
|
64
|
+
|
65
|
+
img.map {
|
66
|
+
outline:solid 5px gray;
|
67
|
+
}
|
68
|
+
--ここまで
|
69
|
+
|
70
|
+
使用方法
|
71
|
+
プラグインの書式は、image.rbと同じです。
|
33
72
|
|
34
73
|
制限事項
|
35
74
|
secureモードには対応していません。
|
@@ -0,0 +1,31 @@
|
|
1
|
+
playstore.rb
|
2
|
+
|
3
|
+
機能
|
4
|
+
GooglePlayのアプリ情報の表示及びリンクの生成を行います。
|
5
|
+
|
6
|
+
|
7
|
+
・market_botの導入
|
8
|
+
GooglePlayのパーサとして、market_botを使用しています。
|
9
|
+
通常は以下のコマンドで導入できます。
|
10
|
+
#gem install market_bot
|
11
|
+
|
12
|
+
・Pluginのインストール
|
13
|
+
playstore.rbを適切な場所に配置してください。多言語用リソースは存在しません。
|
14
|
+
|
15
|
+
・使用方法
|
16
|
+
アプリIDを引数にしてプラグインを呼び出します。
|
17
|
+
アプリIDはアンドロイドアプリ一つ一つに設定されており、GoogleMapの場合は、
|
18
|
+
com.google.android.apps.maps
|
19
|
+
です。
|
20
|
+
|
21
|
+
例)
|
22
|
+
tDiary記法
|
23
|
+
<%= playstore 'com.google.android.apps.maps' %>
|
24
|
+
wiki記法
|
25
|
+
{{playstore 'com.google.android.apps.maps'}}
|
26
|
+
|
27
|
+
また、playstoreのかわりにplaystore_txtを呼び出すことにより
|
28
|
+
テキストのみのリンクを生成することもできます。
|
29
|
+
|
30
|
+
・制限事項
|
31
|
+
現状は英語版のGooglePlayの内容が表示され、リンク先も英語版になります。
|
data/js/socialbutton.js
CHANGED
@@ -90,13 +90,19 @@ $(function() {
|
|
90
90
|
return $(this).find('.socialbutton').size() == 0
|
91
91
|
})
|
92
92
|
.each(function() {
|
93
|
+
var anchor = $(this).find('h3 a');
|
93
94
|
if ($tDiary.blogkit) {
|
94
95
|
var link = $(this).children('h2').find('a:first').get(0);
|
95
96
|
var url = link ? link.href : document.URL;
|
96
97
|
var title = $(this).children('h2').find('.title').text();
|
98
|
+
} else if (anchor.size() == 0) {
|
99
|
+
// The section may not have an anchor on etdiary style.
|
100
|
+
// https://github.com/tdiary/tdiary-contrib/issues/59
|
101
|
+
var url = $(this).parents('.day').find('h2 a:first').get(0).href;
|
102
|
+
var title = $(this).parents('.day').find('h2 .title').text();
|
97
103
|
} else {
|
98
|
-
var url =
|
99
|
-
var title =
|
104
|
+
var url = anchor.get(0).href;
|
105
|
+
var title = anchor.attr('title');
|
100
106
|
}
|
101
107
|
if (url && title) {
|
102
108
|
// console.debug('loading socialbutton: ' + title);
|
data/lib/exifparser/README
CHANGED
@@ -1,15 +1,9 @@
|
|
1
|
-
|
1
|
+
ExifParserは、tdiary-contribの管理から外れました。
|
2
2
|
|
3
|
-
|
3
|
+
通常は以下のコマンドによりインストールすることができます。
|
4
|
+
#gem install exifparser
|
4
5
|
|
5
|
-
|
6
|
-
$
|
7
|
-
|
6
|
+
もしくは、
|
7
|
+
$git clone https://github.com/kp1/exifparser.git
|
8
|
+
でソースコードを取得可能です。
|
8
9
|
|
9
|
-
= License
|
10
|
-
|
11
|
-
Ruby's
|
12
|
-
|
13
|
-
= Author
|
14
|
-
|
15
|
-
Ryuichi Tamura (r-tam@fsinet.or.jp)
|
data/lib/tdiary-contrib.rb
CHANGED
@@ -1,19 +1,20 @@
|
|
1
|
+
require 'tdiary'
|
2
|
+
require 'tdiary/application'
|
3
|
+
|
1
4
|
module TDiary
|
2
5
|
class Contrib
|
3
6
|
def self.root
|
4
7
|
File.expand_path('../..', __FILE__)
|
5
8
|
end
|
6
9
|
|
7
|
-
class Assets
|
8
|
-
def self.setup(environment)
|
9
|
-
environment.append_path File.join(TDiary::Contrib.root, 'js')
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
10
|
class Plugin
|
14
11
|
def self.setup(sp_path)
|
15
12
|
sp_path << File.join(TDiary::Contrib.root, 'plugin')
|
16
13
|
end
|
17
14
|
end
|
18
15
|
end
|
16
|
+
|
17
|
+
Application.configure do
|
18
|
+
config.assets_paths << File.join(TDiary::Contrib.root, 'js')
|
19
|
+
end
|
19
20
|
end
|
data/plugin/brow_si.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# brow_si.rb: insert brow.si code
|
3
|
+
#
|
4
|
+
# Copyright (C) 2012 by hb <smallstyle@gmail.com>
|
5
|
+
#
|
6
|
+
|
7
|
+
add_conf_proc( "brow_si", "Brow.si" ) do
|
8
|
+
if @mode == "saveconf"
|
9
|
+
@conf["brow.si.site_id"] = @cgi.params["brow.si.site_id"][0]
|
10
|
+
end
|
11
|
+
|
12
|
+
<<-HTML
|
13
|
+
<h3 class="subtitle">Website Brow.si Site ID</h3>
|
14
|
+
<p><input name="brow.si.site_id" value="#{h @conf["brow.si.site_id"]}" size="80"></p>
|
15
|
+
HTML
|
16
|
+
end
|
17
|
+
|
18
|
+
add_footer_proc do
|
19
|
+
if @conf["brow.si.site_id"] and @conf.smartphone?
|
20
|
+
|
21
|
+
<<-SCRIPT
|
22
|
+
<script type="text/javascript">
|
23
|
+
window['_brSiteId'] = '#{h @conf["brow.si.site_id"]}';
|
24
|
+
(function(d){
|
25
|
+
var i='browsi-js'; if (d.getElementById(i)) {return;}
|
26
|
+
var js=d.createElement("script"); js.id=i; js.async=true;
|
27
|
+
js.src='//js.brow.si/br.js'; (d.head || d.getElementsByTagName('head')[0]).appendChild(js);
|
28
|
+
})(document);
|
29
|
+
</script>
|
30
|
+
SCRIPT
|
31
|
+
end
|
32
|
+
end
|
data/plugin/image_gps.rb
CHANGED
@@ -1,46 +1,31 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
# image_gps.rb $Revision: 1.
|
2
|
+
# image_gps.rb $Revision: 1.1 $
|
3
3
|
#
|
4
4
|
# 概要:
|
5
|
-
#
|
5
|
+
#
|
6
6
|
#
|
7
7
|
# 使い方:
|
8
8
|
# 絵日記Plugin(image.rb)とおなじ
|
9
9
|
#
|
10
|
-
# Copyright (c)
|
10
|
+
# Copyright (c) 2009,2010 kp <kp@mmho.no-ip.org>
|
11
11
|
# Distributed under the GPL
|
12
12
|
#
|
13
13
|
|
14
14
|
=begin ChangeLog
|
15
15
|
2010-04-21 kp
|
16
|
-
*
|
17
|
-
|
18
|
-
*
|
19
|
-
2009-
|
20
|
-
* walk.eznavi.jpの場合のクエリを修正
|
21
|
-
* リンク先をGoogle Mapsに
|
22
|
-
* wgs2tkyを使用しない
|
23
|
-
2008-05-22 kp
|
24
|
-
* MapDatumがTOKYO以外の場合、WGS-84と類推する
|
25
|
-
2008-01-17 kp
|
26
|
-
* いろいろ変更
|
27
|
-
2006-03-28 kp
|
28
|
-
* cooperation with ALPSLAB clip!
|
29
|
-
2006-03-27 kp
|
30
|
-
* use exifparser
|
31
|
-
2005-07-25 kp
|
32
|
-
* correct link URL when access with mobile.
|
33
|
-
2005-07-19 kp
|
34
|
-
* MapDatum macth to WGS84
|
35
|
-
2005-05-25 kp
|
36
|
-
* correct URL link to Mapion.
|
37
|
-
2005-05-24 kp
|
38
|
-
* create link to http://walk.eznavi.jp when access with mobile.
|
39
|
-
2004-11-30 kp
|
16
|
+
* スマートフォン対応
|
17
|
+
* Google Maps API Keyが設定されていない場合はStaticMAPを生成しない
|
18
|
+
* リンク先をGoogle Mapsに統一
|
19
|
+
2009-06-03 kp
|
40
20
|
* first version
|
21
|
+
* fork from image_gps2.rb
|
41
22
|
=end
|
42
23
|
|
43
|
-
|
24
|
+
begin
|
25
|
+
require 'exifparser'
|
26
|
+
rescue
|
27
|
+
retry if require 'rubygems'
|
28
|
+
end
|
44
29
|
|
45
30
|
def tky2wgs lat,lon
|
46
31
|
lat_w = lat - lat*0.00010695 + lon*0.000017464 + 0.0046017
|
@@ -67,22 +52,26 @@ def image( id, alt = 'image', thumbnail = nil, size = nil, place = 'photo' )
|
|
67
52
|
else
|
68
53
|
size = ""
|
69
54
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
55
|
+
|
56
|
+
show_exif_info = @conf['image_gps.show_exif_info']
|
57
|
+
show_exif_info = '' if show_exif_info.nil?
|
58
|
+
google_maps_api_key = @conf['image_gps.google_maps_api_key']
|
59
|
+
google_maps_api_key = '' if google_maps_api_key.nil?
|
60
|
+
if (@conf['image_gps.map_link_url'].nil? || @conf['image_gps.map_link_url'].empty?)
|
61
|
+
map_link_url = '"http://maps.google.co.jp/maps?q=#{lat},#{lon}"'
|
62
|
+
else
|
63
|
+
map_link_url = '"'+@conf['image_gps.map_link_url']+'"'
|
64
|
+
end
|
73
65
|
|
74
66
|
exif = ExifParser.new("#{@image_dir}/#{image}".untaint) rescue nil
|
75
67
|
|
76
|
-
|
68
|
+
google = "http://maps.google.co.jp"
|
77
69
|
|
78
70
|
if exif
|
79
|
-
|
80
|
-
alt += ' '+exif['Model'].to_s if exif.tag?('Model')
|
81
|
-
alt += ' '+exif['FocalLength'].to_s if exif.tag?('FocalLength')
|
82
|
-
alt += ' '+exif['ExposureTime'].to_s if exif.tag?('ExposureTime')
|
83
|
-
alt += ' '+exif['FNumber'].to_s if exif.tag?('FNumber')
|
84
|
-
end
|
71
|
+
#GPS Info
|
85
72
|
begin
|
73
|
+
raise if exif['GPSLatitudeRef'].value.length==0
|
74
|
+
raise if exif['GPSLongitudeRef'].value.length==0
|
86
75
|
lat = exif['GPSLatitude'].value
|
87
76
|
lat = lat[0].to_f + lat[1].to_f/60 + lat[2].to_f/3600
|
88
77
|
lat = -lat if exif['GPSLatitudeRef'].value == 'S'
|
@@ -90,39 +79,104 @@ def image( id, alt = 'image', thumbnail = nil, size = nil, place = 'photo' )
|
|
90
79
|
lon = lon[0].to_f + lon[1].to_f/60 + lon[2].to_f/3600
|
91
80
|
lon = -lon if exif['GPSLongitudeRef'].value == 'W'
|
92
81
|
datum = exif['GPSMapDatum'].value if exif.tag?('GPSMapDatum')
|
82
|
+
lat,lon = tky2wgs(lat,lon) if datum == 'TOKYO'
|
93
83
|
rescue
|
94
84
|
lat = nil
|
95
85
|
end
|
96
|
-
end
|
97
86
|
|
98
|
-
|
99
|
-
|
87
|
+
# show exif info
|
88
|
+
sep=' ' # ToDo: separator to config param.
|
89
|
+
|
90
|
+
detail =%Q[<p class="exif_info">]
|
91
|
+
show_exif_info.split(' ').each{|e|
|
92
|
+
detail += "#{exif[e].to_s}"+sep if exif.tag?(e)
|
93
|
+
}
|
94
|
+
unless lat.nil?
|
95
|
+
unless (google_maps_api_key == '' || @conf.smartphone?)
|
96
|
+
map_img = %Q["http://maps.googleapis.com/maps/api/staticmap?format=gif&]
|
97
|
+
map_img += %Q[center=#{lat},#{lon}&zoom=14&size=200x200&markers=#{lat},#{lon}&]
|
98
|
+
map_img += %Q[key=#{google_maps_api_key}&sensor=false"]
|
99
|
+
end
|
100
|
+
map_link = %Q[<a href="#{eval(map_link_url)}">]
|
101
|
+
map_link += %Q[MAP]
|
102
|
+
map_link += %Q[<img class="map" src=#{map_img}>] if map_img
|
103
|
+
map_link += "</a>"
|
104
|
+
detail += map_link
|
105
|
+
end
|
106
|
+
detail += "</p>"
|
100
107
|
end
|
101
108
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
109
|
+
img = %Q[<img class="#{place}" src="#{@image_url}/#{image}" alt="#{alt}" title="#{alt}" #{size}>]
|
110
|
+
img_t = %Q[<img class="#{place}" src="#{@image_url}/#{image_t}" alt="#{alt}" title="#{alt}" #{size}>]
|
111
|
+
|
112
|
+
url = ''
|
113
|
+
|
114
|
+
if @conf.mobile_agent?
|
115
|
+
url += %Q[<a href=#{google}/maps/m?q=#{lat},#{lon}>] unless lat.nil?
|
116
|
+
url += thumbnail ? img_t : img
|
117
|
+
url += %Q[</a>] unless lat.nil?
|
106
118
|
else
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
url += %Q[
|
119
|
+
url += %Q[<div class="photo_detail">]
|
120
|
+
url += %Q[<a href="#{@image_url}/#{image}">]
|
121
|
+
url += thumbnail ? img_t : img
|
122
|
+
url += %Q[</a>]
|
123
|
+
url += %Q[#{detail}] if detail
|
124
|
+
url += %Q[</div>]
|
113
125
|
end
|
126
|
+
|
114
127
|
url
|
128
|
+
|
129
|
+
end
|
130
|
+
add_header_proc do
|
131
|
+
if @mode !~ /conf$/ and not bot? then
|
132
|
+
<<-HTML
|
133
|
+
<style type="text/css"><!--
|
134
|
+
img.map{
|
135
|
+
display:none;
|
136
|
+
position:absolute;
|
137
|
+
border:none;
|
138
|
+
}
|
139
|
+
a:hover img.map{
|
140
|
+
display:inline;
|
141
|
+
}
|
142
|
+
--></style>
|
143
|
+
HTML
|
144
|
+
else
|
145
|
+
''
|
146
|
+
end
|
115
147
|
end
|
116
148
|
|
117
149
|
add_conf_proc('image_gps','image_gpsの設定','etc') do
|
118
150
|
if @mode == 'saveconf' then
|
119
|
-
@conf['
|
151
|
+
@conf['mage_gps.google_maps_api_key'] = @cgi.params['image_gps.google_maps_api_key'][0]
|
152
|
+
@conf['image_gps.show_exif_info'] = @cgi.params['image_gps.show_exif_info'][0]
|
153
|
+
@conf['image_gps.map_link_url'] = @cgi.params['image_gps.map_link_url'][0]
|
120
154
|
end
|
121
155
|
|
122
156
|
<<-HTML
|
123
|
-
<
|
124
|
-
<h3
|
125
|
-
<input type="
|
157
|
+
<div>
|
158
|
+
<h3>Google Static Maps API Key</h3>
|
159
|
+
<input type="text" name="image_gps.google_maps_api_key" value="#{@conf['image_gps.google_maps_api_key']}">
|
160
|
+
</div>
|
161
|
+
<div>
|
162
|
+
<h3>Show Exif Info</h3>
|
163
|
+
<input type="text" name="image_gps.show_exif_info" value="#{@conf['image_gps.show_exif_info']}">
|
164
|
+
<p>EXIFのタグ名をスペース区切りで設定します。</p>
|
165
|
+
<p>exp.)Model FocalLength FNumber ExposureTime ExposureBiasValue</p>
|
166
|
+
</div>
|
167
|
+
<div>
|
168
|
+
<h3>Map Link URL</h3>
|
169
|
+
<input type="text" name="image_gps.map_link_url" id="map_link_url" value="#{@conf['image_gps.map_link_url']}">
|
170
|
+
<p>地図サイトへのリンクURLを設定します。空欄の場合、Googleマップへリンクされます。</p>
|
171
|
+
<p>パラメータとして\#{lat},\#{lon}が使用できます。それぞれ緯度、経度に展開されます。</p>
|
172
|
+
<p>下のセレクタから選択すると各サービスのデフォルト値が設定されます。</p>
|
173
|
+
<select name="map_url" id="map_url" onChange="document.getElementById('map_link_url').value=this.value">
|
174
|
+
<option value="" selected disabled>--select service--</option>
|
175
|
+
<option value="http://maps.google.co.jp//maps/m?q=\#{lat},\#{lon}">Googleマップ</option>
|
176
|
+
<option value="http://maps.loco.yahoo.co.jp/maps?p=lat=\#{lat}&lon=\#{lon}&ei=utf-8">Yahoo地図</option>
|
177
|
+
<option value="http://www.mapion.co.jp/m/\#{lat}_\#{lon}_9">マピオン</option>
|
178
|
+
<option value="http://www.bing.com/maps/?v=2&cp=\#{lat}~\#{lon}&lvl=15">Bing Maps</option>
|
179
|
+
</select>
|
180
|
+
</div>
|
126
181
|
HTML
|
127
|
-
|
128
182
|
end
|
data/plugin/instagr.rb
CHANGED
@@ -23,6 +23,7 @@ def instagr( short_url, size = :medium)
|
|
23
23
|
option = option.nil? ? {} : option
|
24
24
|
|
25
25
|
# img size
|
26
|
+
size = size.to_sym if size != :medium
|
26
27
|
maxwidth_data = {:small => 150, :medium => 306, :large => 612}
|
27
28
|
maxwidth = maxwidth_data[ size ] ? maxwidth_data[ size ] : maxwidth_data[:medium]
|
28
29
|
|
data/plugin/playstore.rb
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# playstore.rb
|
3
|
+
#
|
4
|
+
# 概要:
|
5
|
+
# GooglePlay( play.goog.com)へのリンクを生成します。
|
6
|
+
#
|
7
|
+
# 使い方:
|
8
|
+
# playstore'app_id' or playstore_txt'app_id'
|
9
|
+
#
|
10
|
+
# Copyright (c) 2014 kp <knomura.1394@gmail.com>
|
11
|
+
# Distributed under the GPL
|
12
|
+
#
|
13
|
+
begin
|
14
|
+
require 'market_bot'
|
15
|
+
rescue
|
16
|
+
retry if require 'rubygems'
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'date'
|
20
|
+
|
21
|
+
class PlayStore < MarketBot::Android::App
|
22
|
+
def initialize(app_id,option={})
|
23
|
+
super(app_id,option)
|
24
|
+
end
|
25
|
+
|
26
|
+
def save(path)
|
27
|
+
File.open(path,"wb"){ |f|
|
28
|
+
Marshal.dump(self.html,f)
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def load(path)
|
33
|
+
html = nil
|
34
|
+
File.open(path,"rb"){ |f|
|
35
|
+
begin
|
36
|
+
html = Marshal.restore(f)
|
37
|
+
rescue
|
38
|
+
html = nil
|
39
|
+
end
|
40
|
+
}
|
41
|
+
unless html.nil?
|
42
|
+
result = PlayStore.parse(html)
|
43
|
+
update_callback(result)
|
44
|
+
end
|
45
|
+
return html
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def playstore_load_cache(app)
|
50
|
+
path="#{@cache_path}/playstore/#{app.app_id}"
|
51
|
+
begin
|
52
|
+
stat = File::Stat.new(path)
|
53
|
+
rescue Errno::ENOENT
|
54
|
+
return nil
|
55
|
+
end
|
56
|
+
m = Date.parse(stat.mtime.to_s)
|
57
|
+
return nil if Date.today - m > 7 # 1week before
|
58
|
+
return app.load(path)
|
59
|
+
end
|
60
|
+
|
61
|
+
def playstore_save_cache(app)
|
62
|
+
path="#{@cache_path}/playstore/#{app.app_id}"
|
63
|
+
dir = File.dirname(path)
|
64
|
+
Dir.mkdir(dir) unless File.directory?(dir)
|
65
|
+
|
66
|
+
app.save(path)
|
67
|
+
end
|
68
|
+
|
69
|
+
def playstore(app_id)
|
70
|
+
app = PlayStore.new(app_id)
|
71
|
+
if playstore_load_cache(app).nil?
|
72
|
+
app.update
|
73
|
+
save = true
|
74
|
+
else
|
75
|
+
save = false
|
76
|
+
end
|
77
|
+
if app.nil? || app.error
|
78
|
+
html =
|
79
|
+
<<-HTML
|
80
|
+
<div class="market">#{app_id} was not found.</div>
|
81
|
+
HTML
|
82
|
+
else
|
83
|
+
playstore_save_cache(app) if save
|
84
|
+
html =
|
85
|
+
<<-HTML
|
86
|
+
<div class="market">
|
87
|
+
<div class="leader"><a href="#{app.market_url}">#{app.title} #{app.current_version}</a>
|
88
|
+
- <span class="dev">#{app.developer}</span></div>
|
89
|
+
<a href="#{app.market_url}">
|
90
|
+
<img class="icon" src="#{app.banner_icon_url}" title="#{app.title}">
|
91
|
+
</a>
|
92
|
+
<ul class="info">
|
93
|
+
<li>Rating:#{app.rating}</li>
|
94
|
+
<li>Price:#{app.price}</li>
|
95
|
+
</ul>
|
96
|
+
</div>
|
97
|
+
HTML
|
98
|
+
end
|
99
|
+
return html
|
100
|
+
end
|
101
|
+
|
102
|
+
def playstore_text(app_id)
|
103
|
+
app = PlayStore.new(app_id)
|
104
|
+
if playstore_load_cache(app).nil?
|
105
|
+
app.update
|
106
|
+
save = true
|
107
|
+
else
|
108
|
+
save = false
|
109
|
+
end
|
110
|
+
if app.nil? || app.error
|
111
|
+
html = "<em>#{app_id} was not found</em>"
|
112
|
+
else
|
113
|
+
app.update
|
114
|
+
playstore_save_cache(app) if save
|
115
|
+
html=%Q[<a href="#{app.market_url}">#{app.title} #{app.current_version}</a>]
|
116
|
+
end
|
117
|
+
return html
|
118
|
+
end
|
119
|
+
|
120
|
+
add_header_proc do
|
121
|
+
if @mode !~ /conf$/ and not bot? then
|
122
|
+
<<-HTML
|
123
|
+
<style type="text/css"><!--
|
124
|
+
div.market ul.info {
|
125
|
+
list-style: none;
|
126
|
+
padding: 3px;
|
127
|
+
}
|
128
|
+
div.market img.icon {
|
129
|
+
float: left;
|
130
|
+
}
|
131
|
+
div.market span.dev {
|
132
|
+
font-size: small;
|
133
|
+
color: gray;
|
134
|
+
}
|
135
|
+
div.market div.leader {
|
136
|
+
background: #a4c639;
|
137
|
+
border-top-left-radius: 6px;
|
138
|
+
border-top-right-radius: 6px;
|
139
|
+
padding: 3px;
|
140
|
+
}
|
141
|
+
div.market {
|
142
|
+
background: #f5f5f5;
|
143
|
+
border-radius: 6px;
|
144
|
+
margin: 5px;
|
145
|
+
display: block;
|
146
|
+
overflow: hidden;
|
147
|
+
box-shadow: 3px 3px 3px 0px lightgray;
|
148
|
+
}
|
149
|
+
--></style>
|
150
|
+
HTML
|
151
|
+
else
|
152
|
+
''
|
153
|
+
end
|
154
|
+
end
|
155
|
+
# Local Variables:
|
156
|
+
# mode: ruby
|
157
|
+
# indent-tabs-mode: t
|
158
|
+
# tab-width: 3
|
159
|
+
# ruby-indent-level: 3
|
160
|
+
# End:
|
161
|
+
# vim: ts=3
|