Changes between Version 4 and Version 5 of oid/WorkLog/09-02-04


Ignore:
Timestamp:
Feb 4, 2009, 3:37:02 PM (16 years ago)
Author:
jazz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • oid/WorkLog/09-02-04

    v4 v5  
    118118 * 點選"聲明"才會顯示 disclaimer_box 的畫面[[BR]][[Image(bottom-button-div2.jpg)]]
    119119{{{
     120#!js
    120121<div style="height:2em;"></div>
    121 
    122 ### 載入 jQuery API
    123122<script src="http://www.google.com/jsapi" type="text/javascript"></script>
    124123<script type="text/javascript">
     
    128127 * 上面這一段是宣告要載入 Hosting 在 Google 的 jQuery API 1.2.6 版
    129128{{{
     129#!js
    130130<script type="text/javascript">
    131131window.serverBase="http://www.google.com";
     
    137137 * [註] 底下開始會稍微變動一下原始碼的順序,我們先來看 jQuery 的 main 進入點
    138138{{{
     139#!js
    139140  $(function(){
    140     G_MAP = new RedcliffMap();
     141    G_MAP = new RedcliffMap(); # 呼叫 RedcliffMap() 產生 GMap2 物件
    141142    LoadLocation();
    142143    new TilesSelect();
     
    150151  });
    151152}}}
     153 * 關於 G_MAP = new RedcliffMap(); 這行程式
     154{{{
     155#!js
     156
     157  # 首先要看的是 RedcliffMap 這個類別物件的建構子(Constructor)
     158
     159  RedcliffMap.prototype = {
     160    changeTiles: function(opacity_val) {
     161      // IE6 does not support opacity, so we remove the layer if opacity is 0
     162      if (this.tileLayerOverlay != null) {
     163        this.gmap.removeOverlay(this.tileLayerOverlay);
     164      }
     165      if (opacity_val < 0.01) {
     166        this.tileLayerOverlay = null;
     167      } else {
     168        this.tileLayerOverlay = new GTileLayerOverlay(
     169          new GTileLayer(null, null, null, {
     170            tileUrlTemplate: URL.tile_url,
     171            isPng:true,
     172            opacity:opacity_val
     173          })
     174        );
     175        this.gmap.addOverlay(this.tileLayerOverlay);
     176      }
     177    },
     178    addOverlay: function(overlay) {
     179      this.gmap.addOverlay(overlay);
     180    },
     181    removeOverlay: function(overlay) {
     182      this.gmap.removeOverlay(overlay);
     183    },
     184    openInfoWindow: function(type, id, latlng) {
     185      if (type == "EVENT") {
     186        var event = EVENT.getItem(id);
     187        var info_div = Utils.constructInfoWindowHtml([event]);
     188        this.gmap.openInfoWindowHtml(latlng, info_div);
     189        //this.highLightOverlay(event.element_ids);
     190      }
     191      if (type == "ELEMENT") {
     192        var element = ELEMENT.getItem(id);
     193        var events = new Array();
     194        $.each(element.events, function(index, event_id) {
     195          if (CURRENT_EVENT_HASH.hasItem(event_id)) {
     196            var event = EVENT.getItem(event_id);
     197            events.push(event);
     198          }
     199        });
     200        if (events.length > 1) {
     201          var info_tabs = Utils.constructInfoWindowTabsHtml(events);
     202          this.gmap.openInfoWindowTabsHtml(latlng, info_tabs);
     203        } else {
     204          var info_div = Utils.constructInfoWindowHtml(events);
     205          this.gmap.openInfoWindowHtml(latlng, info_div);
     206        }
     207        //this.highLightOverlay(id);
     208      }
     209    },
     210    highLightOverlay: function(element_ids) {
     211      $.each(element_ids, function(index, element_id) {
     212        if (CURRENT_ELEMENT_HASH.hasItem(element_id)) {
     213          var element = ELEMENT.getItem(element_id);
     214          element.highLight();
     215          HIGH_LIGHT_ELEMENT.push(element_id);
     216        }
     217      });
     218    },
     219   
     220    deHighLightOverlay: function() {
     221      while (HIGH_LIGHT_ELEMENT.length > 0) {
     222        var element_id = HIGH_LIGHT_ELEMENT.pop();
     223        var element = ELEMENT.getItem(element_id);
     224        //element.deHighLight();
     225      }
     226    },
     227   
     228    setCenter: function(center, level) {
     229      this.gmap.panTo(center);
     230    },
     231
     232    clearOverlays: function() {
     233      this.gmap.closeInfoWindow();
     234      while (CURRENT_ELEMENT.length > 0) {
     235        var element_id = CURRENT_ELEMENT.pop();
     236        var elem = ELEMENT.getItem(element_id);
     237        CURRENT_ELEMENT_HASH.removeItem(element_id);
     238        elem.removeFromMap();
     239      }
     240     
     241      while (CURRENT_EVENT.length > 0) {
     242        var event_id = CURRENT_EVENT.pop();
     243        CURRENT_EVENT_HASH.removeItem(element_id);
     244      }
     245      CURRENT_OVERLAY_ID = "";
     246    },
     247
     248    updateOverlay: function(type, id) {
     249      if (type + '_' + id == CURRENT_OVERLAY_ID)
     250        return;
     251      CURRENT_OVERLAY_ID = type + '_' + id;
     252      this.clearOverlays();
     253     
     254      var element_ids;
     255      var event_ids;
     256      if (type == 'E') {
     257        var big_event = BIG_EVENT.getItem(id);
     258        element_ids = big_event.element_ids;
     259        event_ids = big_event.event_ids;
     260      } else {
     261        var people = PEOPLE.getItem(id);
     262        element_ids = people.element_ids;
     263        event_ids = people.event_ids;
     264      }
     265     
     266      $.each(element_ids, function(index, element_id) {
     267        var elem = ELEMENT.getItem(element_id);
     268        elem.drawOnMap();
     269        CURRENT_ELEMENT.push(element_id);
     270        CURRENT_ELEMENT_HASH.setItem(element_id, "");
     271      });
     272
     273      $.each(event_ids, function(index, event_id) {
     274        CURRENT_EVENT.push(event_id);
     275        CURRENT_EVENT_HASH.setItem(event_id, "");
     276      });
     277    }
     278  };
     279
     280  function RedcliffMap(node) {
     281    var me = this;
     282
     283    # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/mapplets/basics.html#GMap2
     284    # GMap2 代表 Google Map 的 map 根元件
     285    this.gmap = new GMap2();
     286
     287    # 設定初始地圖中心經緯度位置
     288    this.gmap.setCenter(new GLatLng(29.833, 113.618), 7, G_PHYSICAL_MAP);
     289
     290    # 用 GTileLayerOverlay 來取代原始的地圖底圖
     291    # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/overlays.html#Tile_Overlays
     292    # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/reference.html#GTileLayerOverlay
     293    # 建構子定義 GTileLayerOverlay(tileLayer:GTileLayer, opts?:GTileLayerOverlayOptions)
     294
     295    this.tileLayerOverlay = new GTileLayerOverlay(
     296
     297    # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/reference.html#GTileLayer
     298    # 建構子定義 GTileLayer(copyrights:GCopyrightCollection, minResolution:Number,
     299    #                     maxResolution:Number, options?:GTileLayerOptions)
     300    # 參考 http://code.google.com/intl/zh-TW/apis/maps/documentation/reference.html#GTileLayerOptions
     301    # 這裡設定 tileUrlTemplate: URL.tile_url = http://mt.google.cn/mt?v=cnsg1.2&hl=zh-CN&x={X}&y={Y}&z={Z}
     302    # 根據 API 文件 Templates 必須是這樣: http://host/tile?x={X}&y={Y}&z={Z}.png
     303
     304      new GTileLayer(null, null, null, {
     305        tileUrlTemplate: URL.tile_url,
     306        isPng:true,
     307        opacity:1.0
     308      })
     309    );
     310    this.gmap.addOverlay(this.tileLayerOverlay);
     311  };
     312}}}