root/platform/tdiary/plugin/yahoo_map.rb @ 37797

Revision 37797, 3.0 kB (checked in by drry, 3 years ago)
  • removed a regex.
  • et cetera.
Line 
1# -*- coding: utf-8 -*-
2#
3# yahoo_map.rb - embeded Yahoo! JAPAN Map for tDiary
4#
5# Copyright (C) 2010, KAYA Satoshi <kayakaya@kayakaya.net>
6# You can redistribute it and/or modify it under GPL2.
7#
8
9add_header_proc do
10   init_ymap
11   r = ''
12   if @conf['yahoo_jp.appid'] and @conf['yahoo_jp.appid'].size > 0
13      r << %Q|<script type="text/javascript"|
14      r << %Q| src="http://map.yahooapis.jp/MapsService/js/V2/?appid=#{h @conf['yahoo_jp.appid']}"></script>|
15   end
16   return r
17end
18
19add_conf_proc( 'yahoo_jp_appid', 'Yahoo! JAPAN Application ID' ) do
20   if @mode == 'saveconf' then
21      @conf['yahoo_jp.appid'] = @cgi.params['yahoo_jp.appid'][0]
22   end
23
24   <<-HTML
25   <h3 class="subtitle">Yahoo! JAPAN Application ID</h3>
26   <p><input name="yahoo_jp.appid" value="#{h @conf['yahoo_jp.appid']}" size="70"></p>
27   <p><a href="http://e.developer.yahoo.co.jp/webservices/register_application">Get Application id</a></p>
28   HTML
29end
30
31add_footer_proc do |date|
32   insert_ymap_js
33end
34
35def init_ymap
36   @ymap_container = Array.new
37end
38
39def generate_ymapid(lat, lon, layer)
40   ymapid = 'ymapid' << lat.to_s << lon.to_s << layer.to_s
41   ymapid.delete('.')
42end
43
44def yahoo_map(lat, lon, options = {})
45   options[:layer] ||= 3
46   options[:size] ||= 'medium'
47
48   if feed? or @conf.mobile_agent? then
49      return %Q|<p><a href="http://map.yahoo.co.jp/pl?type=scroll&amp;lat=#{lat}&amp;lon=#{lon}&amp;z=17&amp;mode=map&amp;pointer=on&amp;datum=wgs&amp;fa=ks&amp;home=on&amp;hlat=#{lat}&amp;hlon=#{lon}&amp;layout=&amp;ei=utf-8&amp;p=">Link to Yahoo! JAPAN Map </a></p>|
50   end
51
52   # define map size
53   height = {'iphone' => '240px', 'small'=> '240px', 'medium' => '360px', 'large' => '480px'}
54   width = {'iphone' => '240px', 'small' => '320px', 'medium' => '480px', 'large' => '640px'}
55   if @conf.iphone? then
56      size = 'iphone'
57   else
58      size = options[:size]
59   end
60
61   ymapid = generate_ymapid(lat, lon, options[:layer])
62   ymap_info = {:ymapid => ymapid, :lat => lat, :lon => lon, :layer => options[:layer]}
63
64   @ymap_container << ymap_info
65
66   %Q|<div class="ymap" id="#{ymapid}" style="width:#{width[size]}; height:#{height[size]}"></div>|
67end
68
69def insert_ymap_js
70   r = ''
71   if @ymap_container.size > 0 then
72      unless feed? then
73         r << %Q|<script type="text/javascript">\n|
74         r << %Q|function defineYmapIds() {\n|
75         @ymap_container.each do |ymap_info|
76            r << %Q|  var obj#{ymap_info[:ymapid]} = new YahooMapsCtrl("#{ymap_info[:ymapid]}", "#{ymap_info[:lat]}, #{ymap_info[:lon]}", #{ymap_info[:layer]}, YMapMode.MAP, YDatumType.WGS84);\n|
77         end
78         r << %Q|}\n|
79         r << %Q|if (window.addEventListener) window.addEventListener("load", defineYmapIds, false); // for DOM level 2 compliant Web browsers\n|
80         r << %Q|else if (window.attachEvent) window.attachEvent("onload", defineYmapIds); // for IE\n|
81         r << %Q|</script>|
82      #else
83      #   return
84      end
85   end
86   return r
87end
88# Local Variables:
89# mode: ruby
90# indent-tabs-mode: t
91# tab-width: 3
92# ruby-indent-level: 3
93# End:
94# vim: ts=3
Note: See TracBrowser for help on using the browser.