Thursday, April 3, 2008

GWT: The Road to 1.5, Language features and GQuery

Hi folks,
I had to delay the second part of my article on Linkers because the APIs have been changing radically lately and have only just settled down in the trunk. However, to pass the time, I decided to demonstrate some of the huge benefits of 1.5 by implementing a type-safe JQuery clone in GWT.

That's right, for all those folks who don't want to deal with GWT Widgets, but just want to query, wrap, and manipulate plain old DOM elements in GWT, this article is for you. I'm talking to you, you self-hating Java programmer with an inner Javascript Ninja begging to be let out.

Yes this is working code


First, let's just dispense with the details and show you a working example, yes, this is working code:

public void onModuleLoad() {
$("div").css("color", "red").click(new Function() {
public void f(Element e) {
Window.alert("Hello");
$(e).as(Effects).fadeOut();
}
});
}

What does this do? It makes every DIV element red and clickable, and if you click one, it pops up an alert message, and fades the DIV out.

The API is mostly faithful to jQuery's public API, with the exception of the lack of succinct closures (Hello, Neal Gafter!), but that's ok, we can introduce enough prebuilt composable functors to eliminate alot of the need for inline anonymous functions for common operations.

Small, Fast, Efficient Code, and Other Benefits


Since GWT prunes any code not being used, this example produced a obfuscated + gzipped script size of only 5459. If I change the click handler to simply $(e).setInnerHTML("Boom"), the compiled + gzipped script size is 1400 bytes.

There's a few small differences to take note which are either a benefit, or a hinderance depending on who you ask:
1. Type-Safety, IDE code completion, debuggability, etc
2. Lack of prototype modifications forced slighty change for GQuery plugin usage (see Effects above)
3. Selectors can be compiled at compile time, more on that later.

How 1.5 Enables GQuery


Now, let's talk about the features in GWT 1.5 that make GQuery nice and efficient to implement.

1) Joel Webber of the GWT Team just submitted a patch to GWT 1.5 that implements every DOM2 Core+HTML class as a subclass of the new JavaScriptObject. This not only made the coding of GQuery very easy, but it produces nicely optimized JavaScript.

2) Static Imports. The $ function would not nearly be as nice without static imports.

3) Generics and Covariant return. The Plugin mechanism utilizes this to fake prototype based overrides of the GQuery object.

How to write GQuery plugins? Damn simple


Java doesn't feature metaclasses or prototypes, so there is no way to add methods to an existing instance or class without subclassing, but in order to preserve jQuery style syntax, we can use covariant return, type capture, and other features of JDK 1.5, to fake it.

There are two ways this occurs, first, the $() method can take a final parameter which is a Plugin class literal, or, you can call the as() method on any GQuery and "cast" it to a plugin interface. Here's the implementation of the as() method:

/**
* Convert to Plugin interface provided by Class literal.
*/
public <T extends GQuery> T as(Class<T> plugin) {
return (T) plugins.get(plugin).init(this);
}


The type of the plugin, which is a subclass of GQuery is captured by the class literal parameter, the Class literal is mapped to a Plugin class factory which creates instances of the plugin, and finally, the current GQuery is passed in, so that the Plugin can access the set of matched elements.

Here is an example plugin implementation:

public class Effects extends GQuery {

static {
GQuery.registerPlugin(Effects.class, new EffectsPlugin());
}
public static final Class<Effects> Effects = Effects.class;

public Effects(Element element) {
super(element);
}

public Effects(Element[] elements) {
super(elements);
}

public Effects(NodeList list) {
super(list);
}

public Effects fadeOut() {
Animation a = new Animation() {

public void onCancel() {
}

public void onComplete() {
for(Element e : elements) {
e.getStyle().setProperty("opacity", "1.0");
}
}

public void onStart() {
}

public void onUpdate(double progress) {
for(Element e : elements) {
e.getStyle().setProperty("opacity", String.valueOf(1.0-progress));
}
}
};
a.run(2000);
return this;
}

public Effects fadeIn() {
Animation a = new Animation() {

public void onCancel() {
}

public void onComplete() {
}

public void onStart() {
}

public void onUpdate(double progress) {
for(Element e : elements) {
e.getStyle().setProperty("opacity", String.valueOf(progress));
}
}
};
a.run(2000);
return this;
}

public static class EffectsPlugin implements Plugin<Effects> {
public Effects init(GQuery gq) {
return new Effects(gq.get());
}
}
}


That's it. Plugins are nothing more than subclasses of GQuery which have an extra registry step and factory.

I'll put up the source code on http://code.google.com/p/gwtquery after GWT 1.5 milestone 2 is released, which is needed to run this.

You forgot to talk about compile-time selectors


So, yeah, as Generators are a frequent topic of this blog, you really think I wouldn't find a way to sneak them in? GQuery supports two mechanisms for selector evaluation. It can compile and evaluate selectors at runtime (currently just using XPath for prototyping, which isn't available everywhere), or, you can create an interface containing selectors you know about at runtime, and have them precompiled and ready to execute.

As an example:

public interface MySelectors extends GQuery.Selectors {
@Selector("div")
public GQuery allDivs();

@Selector("div.foo")
public GQuery allFooDivsBelow(Element context);

}

Then to use:

MySelectors s = (MySelectors)GWT.create(MySelectors.class);
s.allFooDivsBelow(context).css("backgroundColor", "yellow");

A generator performs a browser-specific compile-time transformation of the selector in the annotation into the most optimal form that the browser supports (XPath, pure-JS, DOM traversal, document.getElementsByClass, etc) Not only does this produce smaller per-browser code, it produces faster code as well.

One last thing, the $$ function


jQuery contains a lot of methods which take essentially property/value pairs in a Javascript object literal. Emulating this with Java syntax would be too tedious (Scala frontend to GWT, please!), however, to ease this use case, I added a global $$ function for manipulation JavaScriptObject/JSON objects easily.

For example, if you want to create a JS object literal, you write:

Properties literal = $$("{ foo: 'bar', baz: 'bam'}");

You can then use this Properties literal in GQuery functions ala jQuery, or, you can access them with JS-like syntax

$("div").attr($$("{ foo: 1, bar: 2 }"); // set every DIV to have a foo attribute = 1, and bar attribute = 2

// And;
$$("{foo: 1, bar : 2}").get("foo") == 1;
$$("{foo: 1, bar: { baz: 3} }").get("bar.baz") == 3;

-Ray

28 comments:

rjrjr said...

Wow. Wow! Oh, and +1 on the scala front end notion.

Andrés Testi said...

Nice post! Yes, we need Scala to GWT.

Chii said...

that is amazing! i m definitely keeping an eye out for this.

Ray Cromwell said...

Hehe, so far, it looks like more people are interested in a Scala front end. :)

Jens Göring said...

Very nice!

James Strachan said...

Great stuff! Is GwtQuery gonna show up in svn any time soon? :)

oyoaha said...

That really nice!
Cannot wait to play with this one...

Cameron said...

I'm excited about GwtQuery, any updates on when the source will be available ?

sexy said...

情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣,情趣,情趣,情趣,情趣,情趣,情趣用品,情趣用品,情趣,情趣,A片,A片,A片,A片,A片,A片,情趣用品,A片,情趣用品,A片,情趣用品,a片,情趣用品,視訊聊天室,聊天室,視訊,ut聊天室,聊天室,視訊聊天室,成人電影,

A片,A片,AV女優,色情,成人,做愛,情色,AIO,視訊聊天室,SEX,聊天室,自拍,AV,情色,成人,情色,aio,sex,成人,情色,色情,情色電影,色情網站,av女優,av,自拍,成人,視訊聊天室,視訊交友網,AV女優,成人,聊天室,ut聊天室,av女優

免費A片,美女視訊,情色交友,免費AV,色情網站,辣妹視訊,美女交友,色情影片,成人影片,成人網站,H漫,18成人,成人圖片,成人漫畫,情色網,日本A片,免費A片下載,性愛

色情A片,A片下載,色情遊戲,色情影片,色情聊天室,情色電影,免費視訊,免費視訊聊天,免費視訊聊天室,一葉情貼圖片區,情色視訊,免費成人影片,視訊交友,視訊聊天,言情小說,愛情小說,AV片,A漫,av dvd,情色論壇,視訊美女,AV成人網,情色文學,成人交友,成人電影,成人貼圖,成人小說,成人文章,成人圖片區,成人遊戲,愛情公寓,情色貼圖,成人論壇,色情

免費A片,美女視訊,情色交友,色情網站,免費AV,辣妹視訊,美女交友,色情影片,成人網站,H漫,18成人,成人圖片,成人漫畫,成人影片,情色網

said...

A片,A片,成人網站,成人漫畫,色情,情色網,情色,AV,AV女優,成人影城,成人,色情A片,日本AV,免費成人影片,成人影片,SEX,免費A片,A片下載,免費A片下載,做愛,情色A片,色情影片,H漫,A漫,18成人

a片,色情影片,情色電影,a片,色情,情色網,情色,av,av女優,成人影城,成人,色情a片,日本av,免費成人影片,成人影片,情色a片,sex,免費a片,a片下載,免費a片下載

情趣用品,情趣用品,情趣,情趣,情趣用品,情趣用品,情趣,情趣,情趣用品,情趣用品,情趣,情趣

A片,A片,A片下載,做愛,成人電影,.18成人,日本A片,情色小說,情色電影,成人影城,自拍,情色論壇,成人論壇,情色貼圖,情色,免費A片,成人,成人網站,成人圖片,AV女優,成人光碟,色情,色情影片,免費A片下載,SEX,AV,色情網站,本土自拍,性愛,成人影片,情色文學,成人文章,成人圖片區,成人貼圖

情色,AV女優,UT聊天室,聊天室,A片,視訊聊天室


UT聊天室,視訊聊天室,辣妹視訊,視訊辣妹,情色視訊,視訊,080視訊聊天室,視訊交友90739,美女視訊,視訊美女,免費視訊聊天室,免費視訊聊天,免費視訊,視訊聊天室,視訊聊天,視訊交友網,視訊交友,情人視訊網,成人視訊,哈啦聊天室,UT聊天室,豆豆聊天室,
聊天室,聊天,色情聊天室,色情,尋夢園聊天室,聊天室尋夢園,080聊天室,080苗栗人聊天室,柔情聊天網,小高聊天室,上班族聊天室,080中部人聊天室,中部人聊天室,成人聊天室,成人

jianmin said...

SEO服务, SEO, 视频聊天, 情色小说 ,anime wholesale ,animme products ,翻译公司 ,视频聊天 ,情色小说 ,北京翻译公司 ,美女图片 ,重庆旅游 ,重庆旅行社 ,美女图片下载 ,美女视频 ,SEO服务 ,SEO ,视频聊天情色小说 ,anime wholesale ,animme products ,翻译公司视频聊天情色小说北京翻译公司美女图片 ,重庆旅游重庆旅行社 ,美女图片下载 ,美女视频 ,SEO, SEO服务, 北京翻译公司视频聊天翻译公司, 重庆SEO, 美女视频, 激情美女视频 , 视频聊天室 ,情色小说, 情色五月天, 美女图片 ,重庆旅游 重庆旅行社 室内套装门 ,重庆注册公司, 信用卡套现, アダルト, 徵信徵信社外遇 ,徵信徵信社外遇 情趣用品, 免費a片, a片, 免費av, 色情影片, 情色 ,情色網, 色情網站色情成人網成人圖片成人影片18成人avav女優情慾走光做愛sexa片免費av色情影片情色情色網色情網站色情成人網成人圖片成人影片18成人avav女優情慾走光做愛sexH漫a片アダルトアダルトサイト離婚抓姦外遇蒐證外遇抓姦外遇侵權仿冒應收帳款工商徵信室內設計公司, 室內裝潢, 室內裝修, 宜蘭民宿, 環保袋 ,shopping bags, アダルト
北京翻译公司视频聊天翻译公司, 重庆SEO, 美女视频, 激情美女视频 , 视频聊天室 ,情色小说, 情色五月天, 美女图片 ,重庆旅游 重庆旅行社 室内套装门 ,重庆注册公司, 信用卡套现, 情趣用品, 室內設計公司, 室內裝潢, 室內裝修, 宜蘭民宿, 環保袋 ,shopping bags, アダルト

our said...

搬家 搬家 搬家公司 徵信社 徵信 彩妝造型 新娘秘書 票貼 室內設計 室內設計 徵信 徵信社 外遇 徵信 徵信社 外遇 搬家 搬家 花蓮民宿 花蓮民宿 免費a片 a片 免費av 色情影片 情色 情色網 色情網站 色情 成人網 成人圖片 成人影片 18成人 av av女優 情慾 走光 做愛 sex H漫 免費a片 a片 免費av 色情影片 情色 情色網 色情網站 色情 成人網 成人圖片 成人影片 18成人 av av女優 情慾 走光 做愛 sex H漫 a片 アダルト アダルト アダルトサイト アダルトサイト 情趣用品 情趣用品 情趣用品 情趣用品 a片 成人網站 成人影片 情色 情色 離婚 抓姦 外遇蒐證 外遇抓姦 外遇 侵權 仿冒 應收帳款 工商徵信 Shade sail nike shoes 水泵 电动隔膜泵 自吸泵 离心泵 磁力泵 螺杆泵 化工泵 水泵 电动隔膜泵 自吸泵 离心泵 磁力泵 螺杆泵 化工泵 水泵 电动隔膜泵 自吸泵 离心泵 磁力泵 螺杆泵 化工泵 隔膜泵 气动隔膜泵 隔膜泵 气动隔膜泵 隔膜泵 气动隔膜泵 寵物用品 MBA 在职研究生 在职博士 補習班 花店 花店 補正下着 中古車買賣 貸款 婚紗 婚紗攝影 補習班 留學 百家乐 轮盘 21点 德州扑克 百家乐系统 真人娱乐场 百家乐 足球 德州扑克 电子游戏 英格兰超级联赛 德国甲组联赛 意大利甲组联赛 西班牙甲组联赛 法国甲组联赛欧冠杯 英超 足球比分 足球彩票 体育彩票 即时比分 堆高機 婚禮佈置 宜蘭民宿推薦 寵物用品 坐月子 植牙 牙齒矯正 租屋 催眠 房屋出租 租房子 xo醬 牛軋糖 牛嘎糖 代償 房屋貸款 信用貸款 失眠 減肥 眼鏡 金門高梁酒 變頻洗衣機 票貼 借款 關鍵字廣告 租車 派報 漆彈 減重 高雄花店 學英文 糖尿病 花店 呼吸照護 勞工體檢 安養中心 飾品批發 窈窕 雞腳凍 自行車褲 自行車帽 自行車衣

減肥 眼鏡 睡眠障礙 憂鬱症 躁鬱症 減重 瘦身 中醫減肥 台北中醫減肥 台中中醫減肥 高雄中醫減肥 產後減肥 下半身減肥 下半身瘦身 高雄眼鏡 屏東眼鏡 名牌眼鏡 太陽眼鏡 隱形眼鏡 鐵氟龍 PTFE 中壢花店 林口花店 南崁花店 金莎花束 歌倫比亞 飲料加盟 太陽餅 月餅 口袋秤 度量衡 吊秤 吊磅 電子秤 磅秤 口袋秤 度量衡 吊秤 吊磅 電子秤 磅秤 招牌製作 招牌設計 廣告招牌 大圖輸出 電腦割字 招牌看板 廢鐵 廢銅 廢不銹鋼 廢電線 廢鋁 廢棄物 廢電纜電線 廢塑膠 制服 成衣 戒指 耳環 項鍊 對戒 手鍊 銀飾 飾品 對鍊 護理之家 台中花店 考試 塑膠箱 塑膠容器 工具箱 物流箱 拖板車 自動倉儲 倉儲設備 自行車衣 自行車背包 自行車手套 車衣 債務更生 債務清理 法協 蜂蜜 蜂王乳花粉 農產品 草本膠囊 促進新陳代謝 排便順暢的方法 體內環保 塑膠射出 塑膠製品 塑膠箱籃 物流塑膠箱 休閒傢俱 庭園圍籬

liveshow said...

小弟第貼影片區小弟第貼影片區小弟第貼影片區小弟第貼影片區小弟第貼影片區小弟第貼影片區亞洲成人免費線上影片亞洲成人免費線上影片亞洲成人免費線上影片亞洲成人免費線上影片亞洲成人免費線上影片亞洲成人免費線上影片亞洲成人免費線上影片亞洲成人免費線上影片亞洲成人免費線上影片亞洲成人免費線上影片xx18net影片交流區xx18net影片交流區xx18net影片交流區xx18net影片交流區xx18net影片交流區xx18net影片交流區xx18net影片交流區xx18net影片交流區xx18net影片交流區xx18net影片交流區線上影片 貼影片區線上影片 貼影片區線上影片 貼影片區線上影片 貼影片區線上影片 貼影片區線上影片 貼影片區線上影片 貼影片區線上影片 貼影片區線上影片 貼影片區線上影片 貼影片區777美女dvd影片777美女dvd影片777美女dvd影片777美女dvd影片777美女dvd影片777美女dvd影片777美女dvd影片777美女dvd影片777美女dvd影片777美女dvd影片一葉情貼影片區一葉情貼影片區一葉情貼影片區一葉情貼影片區一葉情貼影片區一葉情貼影片區一葉情貼影片區一葉情貼影片區一葉情貼影片區一葉情貼影片區383movie成人影城383movie成人影城383movie成人影城383movie成人影城383movie成人影城383movie成人影城383movie成人影城383movie成人影城383movie成人影城383movie成人影城綺麗影城綺麗影城綺麗影城綺麗影城綺麗影城綺麗影城綺麗影城綺麗影城綺麗影城綺麗影城免費成人影城免費成人影城免費成人影城免費成人影城免費成人影城免費成人影城免費成人影城免費成人影城免費成人影城免費成人影城嘟嘟影城嘟嘟影城嘟嘟影城嘟嘟影城嘟嘟影城嘟嘟影城嘟嘟影城嘟嘟影城嘟嘟影城嘟嘟影城383成人影城383成人影城383成人影城383成人影城383成人影城383成人影城383成人影城383成人影城383成人影城383成人影城18成人影城0204movie18成人影城0204movie18成人影城0204movie18成人影城0204movie18成人影城0204movie18成人影城0204movie18成人影城0204movie18成人影城0204movie18成人影城0204movie18成人影城0204movie亞洲禁果影城亞洲禁果影城亞洲禁果影城亞洲禁果影城亞洲禁果影城亞洲禁果影城亞洲禁果影城亞洲禁果影城亞洲禁果影城亞洲禁果影城夜未眠成人影城夜未眠成人影城夜未眠成人影城夜未眠成人影城夜未眠成人影城夜未眠成人影城夜未眠成人影城夜未眠成人影城夜未眠成人影城夜未眠成人影城a38影城a38影城a38影城a38影城a38影城a38影城a38影城a38影城a38影城a38影城絕色影城絕色影城aa片免費看微風論壇080哈啦聊天室6k聊天室成人聊天室上班族捷克論壇大眾論壇plus論壇080視訊聊天室520視訊聊天室尋夢園上班族聊天室成人聊天室上班族 a片a片影片免費情色影片免費a片觀看小弟第貼影片區免費av影片免費h影片試看 H漫 - 卡通美女短片小魔女貼影片免費影片觀賞無碼a片網美女pc交友相簿美女交友-哈啦聊天室中文a片線上試看免費電影下載區免費試看a短片免費卡通aa片觀看女優影片無碼直播免費性感a片試看日本AV女優影音娛樂網日本av女優無碼 dvd辣妹視訊 - 免費聊天室美女交友視訊聊天室 080免費視訊聊天室尋夢園聊天室080苗栗人聊天室a片下載

三國美女 said...

(法新社倫敦四日電) 英國情色大亨芮孟的公司昨天成人光碟說,av芮孟日前去世,享成人影片壽八十二歲;這位身價上億的房地產開發商,曾av經在倫敦推av出第一場脫衣舞表演。
a片下載

成人孟的財a片產估計達六部落格億五千萬英鎊(台幣將近四百億),由於他名下sex色情業大多分布在日本av倫敦夜生活區蘇活區,因此擁有「蘇AV片活之王」的稱av女優號。

情色視訊
他的公司「保羅芮成人電影孟集團」旗下發行多種情情色色雜誌a片,包括「Razzle」、「男性世a片下載界」以及「Maavyf成人網站air」。情色電影


芮孟本名傑福瑞.安東尼.奎恩,父親為搬運承包商。芮孟十a片五歲離開學校,矢色情a片色情要在情色av女優演事業a片留名,起先表演av女優讀心術,後來成為巡迴歌舞雜耍表成人電影演的製作人。


色情影片多評論家認為,他把情色成人表演帶進主流社會,成人網站一九五九年主持破天荒的情色電影脫衣舞表演,後來avdvd更靠著在蘇活區與倫敦西區開發房色情地產成人影片賺得大筆財富。


有人形容芮部落格孟是成人網站英國的海夫成人影片部落格,地位等同美國的「花花公子」創辦人海夫納。

sex said...

免費視訊聊天,辣妹視訊,視訊交友網,美女視訊,視訊交友,視訊交友90739,成人聊天室,視訊聊天室,視訊聊天,視訊聊天室,情色視訊,情人視訊網,視訊美女,一葉情貼圖片區,免費視訊聊天室,免費視訊,ut聊天室,聊天室,豆豆聊天室,尋夢園聊天室,聊天室尋夢園,影音視訊聊天室

威而柔,自慰套,自慰套,SM,充氣娃娃,充氣娃娃,潤滑液,飛機杯,按摩棒,跳蛋,性感睡衣,威而柔,自慰套,自慰套,SM,充氣娃娃,充氣娃娃,潤滑液,飛機杯,按摩棒,跳蛋,性感睡衣
情惑用品性易購,情侶歡愉用品

色情遊戲,寄情築園小遊戲,情色文學,一葉情貼圖片區,情惑用品性易購,情人視訊網,辣妹視訊,情色交友,成人論壇,情色論壇,愛情公寓,情色,舊情人,情色貼圖,色情聊天室,色情小說,做愛,做愛影片,性愛

情惑用品性易購,aio交友愛情館,一葉情貼圖片區,情趣用品,情侶歡愉用品

辣妹視訊,美女視訊,視訊交友網,視訊聊天室,視訊交友,視訊美女,免費視訊,免費視訊聊天,視訊交友90739,免費視訊聊天室,成人聊天室,視訊聊天,視訊交友aooyy,哈啦聊天室,辣妺視訊

A片,色情A片,視訊,080視訊聊天室,視訊美女34c,視訊情人高雄網,視訊交友高雄網,0204貼圖區,sex520免費影片,情色貼圖

情趣用品,情趣用品,情趣用品,情趣,情趣,情侶歡愉用品

網頁設計,徵信社

信次 said...

情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣用品,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,情趣,美國aneros,rudeboy,英國rudeboy,英國Rocksoff,德國Fun Factory,Fun Factory,英國甜筒造型按摩座,甜筒造型按摩座,英國Rock Chic ,瑞典 Lelo ,英國Emotional Bliss,英國 E.B,荷蘭 Natural Contours,荷蘭 N C,美國 OhMiBod,美國 OMB,Naughti Nano ,音樂按摩棒,ipod按摩棒,美國 The Screaming O,美國TSO,美國TOPCO,美國Doc Johnson,美國CA Exotic,美國CEN,美國Nasstoy,美國Tonguejoy,英國Je Joue,美國Pipe Dream,美國California Exotic,美國NassToys,美國Vibropod,美國Penthouse,仿真按摩棒,矽膠按摩棒,猛男倒模,真人倒模,仿真倒模,PJUR,Zestra,適趣液,穿戴套具,日本NPG,雙頭龍,FANCARNAL,日本NIPPORI,日本GEL,日本Aqua Style,美國WET,費洛蒙,費洛蒙香水,仿真名器,av女優,打炮,做愛,性愛,口交,吹喇叭,肛交,魔女訓練大師,無線跳蛋,有線跳蛋,震動棒,震動保險套,震動套,TOY-情趣用品,情趣用品網,情趣購物網,成人用品網,情趣用品討論,成人購物網,鎖精套,鎖精環,持久環,持久套,拉珠,逼真按摩棒,名器,超名器,逼真老二,電動自慰,自慰,打手槍,仿真女郎,SM道具,SM,性感內褲,仿真按摩棒,pornograph,hunter系列,h動畫,成人動畫,成人卡通,情色動畫,情色卡通,色情動畫,色情卡通,無修正,禁斷,人妻,極悪調教,姦淫,近親相姦,顏射,盜攝,偷拍,本土自拍,素人自拍,公園露出,街道露出,野外露出,誘姦,迷姦,輪姦,凌辱,痴漢,痴女,素人娘,中出,巨乳,調教,潮吹,av,a片,成人影片,成人影音,線上影片,成人光碟,成人無碼,成人dvd,情色影音,情色影片,情色dvd,情色光碟,航空版,薄碼,色情dvd,色情影音,色情光碟,線上A片,免費A片,A片下載,成人電影,色情電影,TOKYO HOT,SKY ANGEL,一本道,SOD,S1,ALICE JAPAN,皇冠系列,老虎系列,東京熱,亞熱,武士系列,新潮館,情趣用品,情趣,情趣商品,情趣網站,跳蛋,按摩棒,充氣娃娃,自慰套,G點,性感內衣,情趣內衣,角色扮演,生日禮物,生日精品,自慰,打手槍,潮吹,高潮,後庭,情色論譠,影片下載,遊戲下載,手機鈴聲,音樂下載,開獎號碼,統一發票號碼,夜市,統一發票對獎,保險套,做愛,減肥,美容,瘦身,當舖,軟體下載,汽車,機車,手機,來電答鈴,週年慶,美食,徵信社,網頁設計,網站設計,室內設計,靈異照片,同志,聊天室,運動彩券,大樂透,威力彩,搬家公司,除蟲,偷拍,自拍,無名破解,av女優,小說,民宿,大樂透開獎號碼,大樂透中獎號碼,威力彩開獎號碼,討論區,痴漢,懷孕,美女交友,交友,日本av,日本,機票,香水,股市,股市行情, 股市分析,租房子,成人影片,免費影片,醫學美容,免費算命,算命,姓名配對,姓名學,姓名學免費,遊戲,好玩遊戲,好玩遊戲區,線上遊戲,新遊戲,漫畫,線上漫畫,動畫,成人圖片,桌布,桌布下載,電視節目表,線上電視,線上a片,線上掃毒,線上翻譯,購物車,身分證製造機,身分證產生器,手機,二手車,中古車,法拍屋,歌詞,音樂,音樂網,火車,房屋,情趣用品,情趣,情趣商品,情趣網站,跳蛋,按摩棒,充氣娃娃,自慰套, G點,性感內衣,情趣內衣,角色扮演,生日禮物,精品,禮品,自慰,打手槍,潮吹,高潮,後庭,情色論譠,影片下載,遊戲下載,手機鈴聲,音樂下載,開獎號碼,統一發票,夜市,保險套,做愛,減肥,美容,瘦身,當舖,軟體下載,汽車,機車,手機,來電答鈴,週年慶,美食,徵信社,網頁設計,網站設計,室內設計,靈異照片,同志,聊天室,運動彩券,,大樂透,威力彩,搬家公司,除蟲,偷拍,自拍,無名破解, av女優,小說,民宿,大樂透開獎號碼,大樂透中獎號碼,威力彩開獎號碼,討論區,痴漢,懷孕,美女交友,交友,日本av ,日本,機票,香水,股市,股市行情,股市分析,租房子,成人影片,免費影片,醫學美容,免費算命,算命,姓名配對,姓名學,姓名學免費,遊戲,好玩遊戲,好玩遊戲區,線上遊戲,新遊戲,漫畫,線上漫畫,動畫,成人圖片,桌布,桌布下載,電視節目表,線上電視,線上a片,線上a片,線上翻譯,購物車,身分證製造機,身分證產生器,手機,二手車,中古車,法拍屋,歌詞,音樂,音樂網,借錢,房屋,街頭籃球,找工作,旅行社,六合彩,整型,整型,珠海,雷射溶脂,婚紗,網頁設計,水噹噹,台中隆鼻,果凍隆乳,改運整型,自體脂肪移植,新娘造型,婚禮顧問,下川島,常平,常平,珠海,澳門機票,香港機票,貸款,貸款,信用貸款,宜蘭民宿,花蓮民宿,未婚聯誼,網路購物,婚友,婚友社,未婚聯誼,交友,婚友,婚友社,單身聯誼,未婚聯誼,未婚聯誼, 婚友社,婚友,婚友社,單身聯誼,婚友,未婚聯誼,婚友社,未婚聯誼,單身聯誼,單身聯誼,白蟻,白蟻,除蟲,老鼠,減肥,減肥,在家工作,在家工作,婚友,單身聯誼,未婚聯誼,婚友,交友,交友,婚友社,婚友社,婚友社,大陸新娘,大陸新娘,越南新娘,越南新娘,外籍新娘,外籍新娘,台中坐月子中心,搬家公司,搬家公司,中和搬家,台北搬家,板橋搬家,新店搬家,線上客服,網頁設計,線上客服,網頁設計,植牙,關鍵字,關鍵字,seo,seo,網路排名,自然排序,網路排名軟體,交友,越南新娘,婚友社,外籍新娘,大陸新娘,越南新娘,交友,外籍新娘,視訊聊天,大陸新娘,婚友社,婚友,越南新娘,大陸新娘,越南新娘,視訊交友,外籍新娘,網路排名,網路排名軟體,網站排名優化大師,關鍵字排名大師,網站排名seo大師,關鍵字行銷專家,關鍵字,seo,關鍵字行銷,網頁排序,網頁排名,關鍵字大師,seo大,自然排名,網站排序,網路行銷創業,汽車借款,汽車借錢,汽車貸款,汽車貸款,拉皮,抽脂,近視雷射,隆乳,隆鼻,變性,雙眼皮,眼袋,牙齒,下巴,植牙,人工植牙,植髮,雷射美容,膠原蛋白,皮膚科,醫學美容,玻尿酸,肉毒桿菌,微晶瓷,電波拉皮,脈衝光,關鍵字,關鍵字,seo,seo,網路排名,自然排序,網路排名軟體,汽車借款,汽車借款,汽車借款,汽車貸款,汽車貸款,借錢,借貸,當舖,借款,借貸,借錢,週轉,學英文,英文社團,英語俱樂部,學習英文,英語會話,英文演講,English Club,學英語,學英文,美語社團,英語社團,英文讀書會,Toastmasters,Toastmaster,英語讀書會,拍樂得批發,拍樂得飾品,拍樂得化妝品批發,

sex said...

免費視訊聊天,辣妹視訊,視訊交友網,美女視訊,視訊交友,視訊交友90739,成人聊天室,視訊聊天室,視訊聊天,視訊聊天室,情色視訊,情人視訊網,視訊美女,一葉情貼圖片區,免費視訊聊天室,免費視訊,ut聊天室,聊天室,豆豆聊天室,尋夢園聊天室,聊天室尋夢園,影音視訊聊天室

威而柔,自慰套,自慰套,SM,充氣娃娃,充氣娃娃,潤滑液,飛機杯,按摩棒,跳蛋,性感睡衣,威而柔,自慰套,自慰套,SM,充氣娃娃,充氣娃娃,潤滑液,飛機杯,按摩棒,跳蛋,性感睡衣
情惑用品性易購,情侶歡愉用品

色情遊戲,寄情築園小遊戲,情色文學,一葉情貼圖片區,情惑用品性易購,情人視訊網,辣妹視訊,情色交友,成人論壇,情色論壇,愛情公寓,情色,舊情人,情色貼圖,色情聊天室,色情小說,做愛,做愛影片,性愛

情惑用品性易購,aio交友愛情館,一葉情貼圖片區,情趣用品,情侶歡愉用品

辣妹視訊,美女視訊,視訊交友網,視訊聊天室,視訊交友,視訊美女,免費視訊,免費視訊聊天,視訊交友90739,免費視訊聊天室,成人聊天室,視訊聊天,視訊交友aooyy,哈啦聊天室,辣妺視訊

A片,色情A片,視訊,080視訊聊天室,視訊美女34c,視訊情人高雄網,視訊交友高雄網,0204貼圖區,sex520免費影片,情色貼圖

情趣用品,情趣用品,情趣用品,情趣,情趣,情侶歡愉用品

網頁設計,徵信社

xingyitour said...

花蓮旅遊
花蓮租車
花東旅遊
花蓮租車
花蓮旅行社
花蓮租車
花蓮租車
花蓮租車
花蓮旅遊
花蓮租車
花蓮包車
花蓮旅遊景點
花蓮旅遊行程
花蓮旅遊地圖
花蓮租車資訊
花蓮租車
花蓮租車旅遊網
花蓮賞鯨泛舟溯溪
花蓮旅遊
花蓮旅遊
花東旅遊
花蓮租車
花蓮租車
花蓮租車旅遊網
花蓮黃頁網路電話簿
花蓮入口網 IN HUALIEN 吃喝玩樂樣樣通
花蓮民宿黃頁
花蓮旅遊
花蓮旅遊網
花蓮租車
花蓮包車
花東旅遊
花蓮租車
[ 芝麻店家 ]花蓮租車旅遊網
花蓮租車-行易花蓮旅遊租車資訊網
租車

http://www.hualientour.com.tw
花蓮旅遊
花蓮租車
花東旅遊
花蓮租車
花蓮旅行社
花蓮租車
花蓮租車
花蓮租車
花蓮旅遊
花蓮租車
花蓮包車
花蓮旅遊景點
花蓮旅遊行程
花蓮旅遊地圖
花蓮租車資訊
花蓮租車
花蓮租車旅遊網
花蓮賞鯨泛舟溯溪
花蓮旅遊
花蓮旅遊
花東旅遊
花蓮租車
花蓮租車
花蓮租車旅遊網
花蓮黃頁網路電話簿
花蓮入口網 IN HUALIEN 吃喝玩樂樣樣通
花蓮民宿黃頁
花蓮旅遊
花蓮旅遊網
花蓮租車
花蓮包車
花東旅遊
花蓮租車
[ 芝麻店家 ]花蓮租車旅遊網
花蓮租車-行易花蓮旅遊租車資訊網
租車

http://www.hualientour.com.tw

xji4ek6 1j4 said...

海鮮餐廳,花蓮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,花蓮海產店,花蓮美食,海鮮餐廳,花蓮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,花蓮海產店,花蓮美食,海鮮餐廳,花蓮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,花蓮海產店,花蓮美食,花蓮海產店,海鮮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,花蓮餐廳,花蓮美食,花蓮海產店,花蓮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,海鮮餐廳,花蓮美食,花蓮海產店,花蓮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,海鮮餐廳,花蓮美食,花蓮海產店,花蓮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,海鮮餐廳,花蓮美食,花蓮海產店,花蓮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,海鮮餐廳,花蓮美食,花蓮海產店,花蓮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,海鮮餐廳,花蓮美食,花蓮海產店,花蓮餐廳,美食餐廳,好吃餐廳,美食玩家,美食,海產店,海鮮餐廳,花蓮美食

chenhsin66 said...

汽車旅館
消費券優惠
motel
消費券
薇閣
住宿券
廣交會
廣州飯店
廣州
广州
广交会
广州酒店
Canton Fair
Guangzhou Hotel
Guangzhou
広州
広州の交易会
広州のホテル

AV哦哦 said...

(法新社a倫敦二B十WE四日電) 「情色二零零七」情趣產品大產自二十三日起av女優AV倫敦的肯辛頓奧林匹亞展覽館舉行,倫敦人擺a片下載脫對性的保守態度踴躍參觀,許多穿情色電影皮衣與塑膠緊身衣的好色之徒擠進這項世界規模最大的成人生活展,估計三天展期可吸引八萬多好奇民眾參觀。

活動計畫負責人米里根承諾:「要搞浪漫、誘惑人、玩虐待,你渴望的我們都有。」

A片下載說:「時髦的設計與華麗女裝,從成人網站吊飾到束腹情色電影到真人大小的成人影片雕塑,是我們由今年展出的數千件A片產品精選出的一部分,參展產品還包括時尚服飾、貼身女用內在美、鞋子、珠寶、玩具、影片、藝術、a片圖書及遊戲,更不要說性愛輔具及馬術裝備。成人影片AV女優

參觀民眾遊覽兩百五十多個攤位,色情有性感服裝、玩具及情色食品,色情影片迎合各種品味。

大舞台上表演的是美國野情色蠻搖滾歌手瑪莉蓮曼森的前妻─全世界頭牌脫衣舞孃黛塔范提思,這是她今年在英國唯一一場色情表演。

成人電影以一九四零年代風格演出的黛a片塔范提思表演性感的天堂成人電影鳥、旋轉木馬及情色羽扇等舞蹈。

參展攤位有成人網站的推廣情趣用品,有的公開展示av人體藝術和人體雕塑,也有情色藝術家工會成員提供建議。

emba said...

看房子,買房子,建商自售,自售,台北新成屋,台北豪宅,新成屋,豪宅,美髮儀器,美髮,儀器,髮型,EMBA,MBA,學位,EMBA,專業認證,認證課程,博士學位,DBA,PHD,在職進修,碩士學位,推廣教育,DBA,進修課程,碩士學位,網路廣告,關鍵字廣告,關鍵字,廣告,課程介紹,學分班,文憑,牛樟芝,段木,牛樟菇,日式料理, 台北居酒屋,燒肉,結婚,婚宴場地,推車飲茶,港式點心,尾牙春酒,台北住宿,國內訂房,台北HOTEL,台北婚宴,飯店優惠,台北結婚,婚宴場地,推車飲茶,港式點心,尾牙春酒,住宿,訂房,HOTEL,飯店,造型系列,學位,牛樟芝,腦磷脂,磷脂絲胺酸,SEO,婚宴,捷運,學區,美髮,儀器,髮型,牛樟芝,腦磷脂,磷脂絲胺酸,看房子,買房子,建商自售,自售,房子,捷運,學區,台北新成屋,台北豪宅,新成屋,豪宅,學位,碩士學位,進修,在職進修, 課程,教育,學位,證照,mba,文憑,學分班,網路廣告,關鍵字廣告,關鍵字,SEO,关键词,网络广告,关键词广告,SEO,关键词,网络广告,关键词广告,SEO,台北住宿,國內訂房,台北HOTEL,台北婚宴,飯店優惠,住宿,訂房,HOTEL,飯店,婚宴,台北住宿,國內訂房,台北HOTEL,台北婚宴,飯店優惠,住宿,訂房,HOTEL,飯店,婚宴,台北住宿,國內訂房,台北HOTEL,台北婚宴,飯店優惠,住宿,訂房,HOTEL,飯店,婚宴,結婚,婚宴場地,推車飲茶,港式點心,尾牙春酒,台北結婚,婚宴場地,推車飲茶,港式點心,尾牙春酒,結婚,婚宴場地,推車飲茶,港式點心,尾牙春酒,台北結婚,婚宴場地,推車飲茶,港式點心,尾牙春酒,結婚,婚宴場地,推車飲茶,港式點心,尾牙春酒,台北結婚,婚宴場地,推車飲茶,港式點心,尾牙春酒,居酒屋,燒烤,美髮,儀器,髮型,美髮,儀器,髮型,美髮,儀器,髮型,美髮,儀器,髮型,小套房,小套房,進修,在職進修,留學,證照

kevio said...

威創牙醫診所除了提供優質的植牙技術外還提供假牙|矯正|牙周病治療,是值得您信賴的牙醫診所

獅王紋身工作室提供專業的無痛刺青技術,獅王紋身在世界TATTOO大賽中,獲獎無數,獅王紋身給您最時尚的作品。

陳駿逸皮膚科診所提供了治療痘痘的服務,皮膚雷射權威,包括雷射脈衝光除斑等,讓您回復青春蘋果臉。

ck皮件處理棧提供專業洗包包|洗鞋子|各式皮件修理保養疑難雜症都有服務,清洗包包專門店讓您的包包、鞋子、永遠保持最新的況態唷。

杏儒中醫診所提供了糖尿病的治療。

seo大師e王國幫您的網站輕鬆在您的行業裡站上第一頁,e王國的關鍵字行銷是您的好幫手,包括關鍵字自然排序、都能讓您獲得完美的效果,以目前的網路行銷不外乎是關鍵字自然排序為主、而關鍵字行銷seo又是e王國的強項讓e王國幫您征服網海。

花蓮生活+ said...

花蓮|花蓮民宿|花蓮旅遊|花蓮美食|花蓮住宿|花蓮飯店|花蓮旅館|花蓮|花蓮民宿|花蓮民宿推薦|花蓮民宿市區|花蓮民宿王|花蓮民宿網|花蓮民宿資訊網|花蓮民宿悠遊網|花蓮民宿交流網|花蓮海景民宿|花蓮海邊民宿|花蓮海岸民宿|花蓮旅遊民宿|花蓮|花蓮旅遊|花蓮廣告|花蓮民宿|花蓮房屋|花蓮汽車旅館|花蓮飯店|花蓮旅館|花蓮美食|花蓮餐廳|花蓮小吃|花蓮名產|花蓮工作|花蓮新聞|花蓮租車|花蓮入口網|花蓮旅遊|花蓮旅遊|花蓮旅遊景點|花蓮旅遊|花蓮旅遊景點|花蓮旅遊|花蓮旅遊景點|花蓮美食|花蓮餐廳|花蓮小吃|花蓮名產|花蓮縣長|花蓮租車旅遊網|花蓮行易旅遊資訊網|

強盜 said...

成人網站,成人影片,av女優,h漫,成人網站,成人電影,a片,色情,成人影片,色情,成人電影,色情,h漫,成人影片,成人電影,免費A片,色情,成人電影,成人影片,免費A片,色情,成人網站,免費A片,成人網站,色情,a片,成人影片,情色,免費A片,微風成人,情色,成人影片,微風成人,av女優,

成人網站,成人網站,成人網站,成人網站,色情網站,色情網站,色情網站,色情網站,av女優,av女優,av女優,av女優,色情,色情,色情,色情,h漫,h漫,h漫,h漫,sex,sex,sex,sex,成人影片,成人影片,成人影片,成人影片,成人電影,成人電影,成人電影,成人電影,av女優,a片,a片,a片,a片,成人網站,成人網站,成人網站,成人網站,成人影片,成人影片,成人影片,成人影片,av女優,av女優,


av女優,av女優,色情,色情,色情,色情,h漫,h漫,h漫,h漫,sex,sex,sex,sex,情色,情色,情色,情色,a片,a片,a片,a片,情趣用品,情趣用品,情趣用品,情趣用品,成人網站,成人網站,成人網站,成人網站,成人影片,成人影片,成人影片,成人影片,av女優,av女優,av女優,av女優,色情,色情,色情,


色情,h漫,h漫,h漫,h漫,sex,sex,sex,sex,情色,情色,情色,情色,辣妹視訊,辣妹視訊,辣妹視訊,辣妹視訊,080視訊聊天室,080視訊聊天室,080視訊聊天室,080視訊聊天室,美女交友,美女交友,


美女交友,美女交友,情色視訊,情色視訊,情色視訊,情色視訊,哈啦聊天室,哈啦聊天室,哈啦聊天室,哈啦聊天室,ut聊天室,ut聊天室,ut聊天室,ut聊天室,聊天室,聊天室,聊天室

海盜 said...

成人網站,av女優,成人網站,a片,成人影片,h漫,成人電影,成人電影,色情,成人影片,免費A片,色情,成人影片,色情,免費A片,微風成人,情色,成人網站,av女優,成人網站,a片,成人影片,h漫,色情,成人電影,色情,成人電影,色情,成人影片,免費A片,成人影片,免費A片,情色,微風成人,成人網站,av女優,成人網站,a片,成人影片,h漫,成人電影,成人電影,色情,成人影片,免費A片,色情,成人影片,色情,免費A片,


微風成人,情色,成人網站,av女優,成人網站,a片,成人影片,h漫,色情,成人電影,色情,成人電影,色情,成人影片,免費A片,成人影片,免費A片,情色,微風成人,情趣用品,情趣用品,情趣用品,情趣用品,打卡鐘,跳蛋,持久液,成人網站,成人網站,成人網站,成人網站,色情網站,色情網站,色情網站,色情網站,av女優,av女優,av女優,av女優,色情,色情,色情,色情,h漫,h漫,h漫,h漫,sex,sex,sex,sex,成人影片,成人影片,成人影片,成人影片,成人電影,成人電影,成人電影,成人電影,av女優,a片,a片,a片,a片,成人網站,



成人網站,成人網站,成人網站,成人影片,成人影片,成人影片,成人影片,av女優,av女優,av女優,av女優,色情,色情,色情,色情,h漫,h漫,h漫,h漫,sex,sex,sex,sex,情色,情色,情色,情色,黃金回收,黃金回收,黃金回收,黃金回收,借錢,借錢,借錢,借錢,植牙,植牙,植牙,牙醫,牙醫,牙醫,a片,a片,a片,a片,情趣用品,情趣用品,情趣用品,情趣用品,成人網站,成人網站,成人網站,成人網站,成人影片,成人影片,

成人影片
,成人影片,av女優,av女優,av女優,av女優,色情,色情,色情,色情,h漫,h漫,h漫,h漫,sex,sex,sex,sex,情色,情色,情色,情色,黃金,黃金,黃金,黃金,黃金價格,黃金價格,黃金價格,黃金價格,黃金買賣,黃金買賣,黃金買賣,黃金買賣,當舖,當舖,當舖,當舖,鑽石價格,鑽石價格,鑽石價格,鑽石價格,鑽石回收,鑽石回收,鑽石回收,鑽石回收,鑽石買賣,鑽石買賣,鑽石買賣,鑽石買賣,黃金存摺,黃金存摺,黃金存摺,



黃金存摺,辣妹視訊,辣妹視訊,辣妹視訊,辣妹視訊,080視訊聊天室,080視訊聊天室,080視訊聊天室,080視訊聊天室,美女交友,美女交友,美女交友,美女交友,情色視訊,情色視訊,情色視訊,情色視訊,哈啦聊天室,哈啦聊天室,哈啦聊天室,哈啦聊天室,ut聊天室,ut聊天室,ut聊天室,ut聊天室,聊天室,聊天室,聊天室,打卡鐘,火鍋吃到飽,創業加盟,賺錢,吃到飽麻辣鍋

Jeremy said...

Nice work Ray, very impressive. Not ready to covert from jQuery, but very impressed.

Eric said...

How do I include the jar file in my eclipse project?

I'm just new to Java and GWT.
I started learning yesterday :)