/
index.html
451 lines (310 loc) · 24.2 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>粉笔网iPhone端使用的第三方开源库 | 唐巧的博客</title>
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<meta name="author" content="唐巧">
<meta name="description" content="前言最近有朋友问我粉笔网 iPhone 端使用了哪些第三方的开源库。我在这儿整理了一下,分享给大家。">
<meta property="og:type" content="article">
<meta property="og:title" content="粉笔网iPhone端使用的第三方开源库">
<meta property="og:url" content="https://blog.devtang.com/2012/10/09/3rd-libs-used-in-fenbi-app/index.html">
<meta property="og:site_name" content="唐巧的博客">
<meta property="og:description" content="前言最近有朋友问我粉笔网 iPhone 端使用了哪些第三方的开源库。我在这儿整理了一下,分享给大家。">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://blog.devtang.com/images/fenbi_libs.png">
<meta property="og:image" content="https://blog.devtang.com/images/opensource.jpg">
<meta property="article:published_time" content="2012-10-09T07:30:00.000Z">
<meta property="article:modified_time" content="2020-02-08T18:08:22.157Z">
<meta property="article:author" content="唐巧">
<meta property="article:tag" content="iOS">
<meta property="article:tag" content="唐巧">
<meta property="article:tag" content="猿辅导">
<meta property="article:tag" content="开发">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://blog.devtang.com/images/fenbi_libs.png">
<link rel="alternative" href="/atom.xml" title="唐巧的博客" type="application/atom+xml">
<link rel="icon" href="/img/favicon.png">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/%02.css">
<link rel="stylesheet" href="/.css">
<meta name="generator" content="Hexo 4.2.0"></head>
<body>
<header>
<div>
<div id="textlogo">
<h1 class="site-name"><a href="/" title="唐巧的博客">唐巧的博客</a></h1>
<h2 class="blog-motto">记录下自己学习的点滴</h2>
</div>
<div class="navbar"><a class="navbutton navmobile" href="#" title="菜单">
</a></div>
<nav class="animated">
<ul>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/archives">归档</a></li>
<li><a href="/about">关于</a></li>
<li>
<form class="search" action="//google.com/search" method="get" accept-charset="utf-8">
<label>Search</label>
<input type="search" id="search" name="q" autocomplete="off" maxlength="20" placeholder="搜索" />
<input type="hidden" name="q" value="site:blog.devtang.com">
</form>
</li>
</ul>
</nav>
</div>
</header>
<div id="container">
<div id="main" class="post" itemscope itemprop="blogPost">
<article itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2012/10/09/3rd-libs-used-in-fenbi-app/" title="粉笔网iPhone端使用的第三方开源库" itemprop="url">粉笔网iPhone端使用的第三方开源库</a>
</h1>
<p class="article-time">
<time datetime="2012-10-09T07:30:00.000Z" itemprop="datePublished"> 发表于 2012-10-09 07:30</time>
</p>
</header>
<div class="article-content">
<div id="toc" class="toc-article">
<strong class="toc-title">文章目录</strong>
<ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#前言"><span class="toc-number">1.</span> <span class="toc-text">前言</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#ASIHttpRequest"><span class="toc-number">1.1.</span> <span class="toc-text">ASIHttpRequest</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#RegexKit"><span class="toc-number">1.2.</span> <span class="toc-text">RegexKit</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#MGTemplateEngine"><span class="toc-number">1.3.</span> <span class="toc-text">MGTemplateEngine</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#JSONKit"><span class="toc-number">1.4.</span> <span class="toc-text">JSONKit</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#GTMNSString"><span class="toc-number">1.5.</span> <span class="toc-text">GTMNSString</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#FMDB"><span class="toc-number">1.6.</span> <span class="toc-text">FMDB</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#BBCustomBackButtonViewController"><span class="toc-number">1.7.</span> <span class="toc-text">BBCustomBackButtonViewController</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#MTStatusBarOverlay"><span class="toc-number">1.8.</span> <span class="toc-text">MTStatusBarOverlay</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#MBProgressHUD"><span class="toc-number">1.9.</span> <span class="toc-text">MBProgressHUD</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#NSStringWrapper"><span class="toc-number">1.10.</span> <span class="toc-text">NSStringWrapper</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#EGOTableViewPullRefresh"><span class="toc-number">1.11.</span> <span class="toc-text">EGOTableViewPullRefresh</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#LoadMoreTableFooterView"><span class="toc-number">1.12.</span> <span class="toc-text">LoadMoreTableFooterView</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#zepto-js"><span class="toc-number">1.13.</span> <span class="toc-text">zepto.js</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#ejs"><span class="toc-number">1.14.</span> <span class="toc-text">ejs</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#总结"><span class="toc-number">2.</span> <span class="toc-text">总结</span></a></li></ol>
</div>
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>最近有朋友问我粉笔网 iPhone 端使用了哪些第三方的开源库。我在这儿整理了一下,分享给大家。</p>
<img src="/images/fenbi_libs.png" class="">
<a id="more"></a>
<h3 id="ASIHttpRequest"><a href="#ASIHttpRequest" class="headerlink" title="ASIHttpRequest"></a>ASIHttpRequest</h3><p><a href="http://allseeing-i.com/ASIHTTPRequest/" target="_blank" rel="noopener">ASIHttpRequest</a> 是一个被广泛使用的第三方网络访问开源库。用于提供更加友好的网络访问接口。相信很多搞 iOS 开发的朋友都用过它。<br>ASIHttpRequest 的主要使用文档可以 <a href="http://allseeing-i.com/ASIHTTPRequest/How-to-use" target="_blank" rel="noopener">参考这里</a>。</p>
<p>另外,由于 ASIHTTPRequest 的作者已经公开说明不再维护这个开源项目,并且该项目已经一年多没有更新了,所以我一直在寻找替代的开源库。不过现在暂时还没有找到更好的。</p>
<h3 id="RegexKit"><a href="#RegexKit" class="headerlink" title="RegexKit"></a>RegexKit</h3><p><a href="http://regexkit.sourceforge.net/" target="_blank" rel="noopener">RegexKit</a> 是一个正则表达式工具类。提供强大的正则表达式匹配和替换功能。我们主要使用它来对类似微博的正文替换工作。例如将 @ 某某 换成带链接的,将图片的 URL 换成 img 标签等。</p>
<p>同时,开源库 MGTemplateEngine 也依赖于此库。附上 <a href="http://regexkit.sourceforge.net/Documentation/index.html" target="_blank" rel="noopener">RegexKit4.0 的官方文档教程</a>。</p>
<h3 id="MGTemplateEngine"><a href="#MGTemplateEngine" class="headerlink" title="MGTemplateEngine"></a>MGTemplateEngine</h3><p><a href="http://svn.cocoasourcecode.com/MGTemplateEngine" target="_blank" rel="noopener">MGTemplateEngine</a> 是一个模版引擎。我们主要使用它来生成单条微博页的内容。我们的单条微博页打算用 UIWebView 来显示,所以内容需要用模版渲染成 HTML 格式。MGTemplateEngine 的模版语言比较象:Smarty, FreeMarker 和 Django 的模版语言。</p>
<p>MGTemplateEngine 的作者官方博客在 <a href="http://mattgemmell.com/2008/05/20/mgtemplateengine-templates-with-cocoa/" target="_blank" rel="noopener">这里</a>。</p>
<p>我们在使用时,对此开源库的 Filter 类进行了修改,主要增加了 3 个自定义的 filter,用于提供我们的格式化时间,转义 html 和过滤空头象的用户的方式。</p>
<h3 id="JSONKit"><a href="#JSONKit" class="headerlink" title="JSONKit"></a>JSONKit</h3><p><a href="https://github.com/johnezang/JSONKit" target="_blank" rel="noopener">JSONKit</a> 是一个比较高效的 JSON 解析库。我之前比较过各大 JSON 解析库的性能(<a href="/2012/05/05/do-not-use-sbjson/">文章在此</a>),JSONKit 算是非常不错的,大概的使用示例如下:</p>
<figure class="highlight objc"><table><tr><td class="code"><pre><span class="line"><span class="meta">#import <span class="meta-string">"JSONKit.h"</span></span></span><br><span class="line"></span><br><span class="line"><span class="built_in">NSString</span> *path = [[<span class="built_in">NSBundle</span> mainBundle] pathForResource:<span class="string">@"data"</span> ofType:<span class="string">@"json"</span>];</span><br><span class="line"><span class="built_in">NSData</span> *content = [<span class="built_in">NSData</span> dataWithContentsOfFile:path];</span><br><span class="line"><span class="built_in">NSDictionary</span> *kitData = [content objectFromJSONData];</span><br><span class="line"><span class="built_in">NSString</span> *kitString = [kitData JSONString];</span><br></pre></td></tr></table></figure>
<h3 id="GTMNSString"><a href="#GTMNSString" class="headerlink" title="GTMNSString"></a>GTMNSString</h3><p><a href="https://code.google.com/p/google-toolbox-for-mac/" target="_blank" rel="noopener">GTMNSString</a> 主要用于转义 HTML 中的特殊字符。以防止 XSS 攻击。</p>
<h3 id="FMDB"><a href="#FMDB" class="headerlink" title="FMDB"></a>FMDB</h3><p><a href="https://github.com/ccgus/fmdb" target="_blank" rel="noopener">FMDB</a> 是一个 sqlite 数据库封装类,需要加入 libsqlite3.dylib 依赖以及引入 sqlite3.h 头文件即可。在使用上非常简单。如下是一个例子:</p>
<figure class="highlight objc"><table><tr><td class="code"><pre><span class="line"><span class="built_in">NSString</span> * docsdir = [<span class="built_in">NSSearchPathForDirectoriesInDomains</span>(<span class="built_in">NSDocumentDirectory</span>, <span class="built_in">NSUserDomainMask</span>, <span class="literal">YES</span>) lastObject];</span><br><span class="line"><span class="built_in">NSString</span> * dbpath = [docsdir stringByAppendingPathComponent:<span class="string">@"user.sqlite"</span>];</span><br><span class="line">FMDatabase * db = [FMDatabase databaseWithPath:dbpath];</span><br><span class="line">[db open];</span><br><span class="line">FMResultSet * rs = [db executeQuery:<span class="string">@"select * from People"</span>];</span><br><span class="line"><span class="keyword">while</span> ([rs next]) {</span><br><span class="line"> <span class="built_in">NSLog</span>(<span class="string">@"%@ %@"</span>,</span><br><span class="line"> [rs stringForColumn:<span class="string">@"firstname"</span>],</span><br><span class="line"> [rs stringForColumn:<span class="string">@"lastname"</span>]);</span><br><span class="line">}</span><br><span class="line">[db close];</span><br></pre></td></tr></table></figure>
<h3 id="BBCustomBackButtonViewController"><a href="#BBCustomBackButtonViewController" class="headerlink" title="BBCustomBackButtonViewController"></a>BBCustomBackButtonViewController</h3><p><a href="https://github.com/typeoneerror/BBCustomBackButtonViewController" target="_blank" rel="noopener">BBCustomBackButtonViewController</a> 是用于在 ios4 上提供自定义的 NavigationBar 按钮的开源库。使用上异常简单,只需要让自己的 ViewController 继承它就可以了。</p>
<p>我对 BBCustomBackButtonViewController 进行了修改,主要是改动它的自定义的按钮的样式,使其和我们的风格一致。</p>
<h3 id="MTStatusBarOverlay"><a href="#MTStatusBarOverlay" class="headerlink" title="MTStatusBarOverlay"></a>MTStatusBarOverlay</h3><p><a href="https://github.com/myell0w/MTStatusBarOverlay" target="_blank" rel="noopener">MTStatusBarOverlay</a> 是一个在 iphone 的顶部 status bar 显示消息的开源库。示例代码如下:</p>
<figure class="highlight objc"><table><tr><td class="code"><pre><span class="line">+ (<span class="keyword">void</span>)showCompletedTextOnStatusBar:(<span class="built_in">NSString</span> *)text {</span><br><span class="line"> <span class="built_in">NSString</span> * message = [<span class="built_in">NSString</span> stringWithFormat:<span class="string">@"%@ 成功 "</span>, text];</span><br><span class="line"> MTStatusBarOverlay *overlay = [MTStatusBarOverlay sharedInstance];</span><br><span class="line"> overlay.animation = MTStatusBarOverlayAnimationFallDown;</span><br><span class="line"> overlay.detailViewMode = MTDetailViewModeHistory;</span><br><span class="line"> [overlay postImmediateFinishMessage:message duration:<span class="number">2.0</span> animated:<span class="literal">YES</span>];</span><br><span class="line"> overlay.progress = <span class="number">1.0</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>但是 stackoverflow 上说,有项目因为这个审核被拒,但是新浪微博明显采用了此 UI 方案,所以我们还是大胆用了这个库。后来,我们也顺利通过了审核。</p>
<h3 id="MBProgressHUD"><a href="#MBProgressHUD" class="headerlink" title="MBProgressHUD"></a>MBProgressHUD</h3><p><a href="https://github.com/jdg/MBProgressHUD" target="_blank" rel="noopener">MBProgressHUD</a> 是一个用于显示灰色的加载进度或结果的类。与系统自带的 UIAlertView 相比,MBProgressHUD 由于背影是黑色的,所以视觉上不是那么强烈。我们主要用它来显示一些加载中的提示,以及一些自已会消失的操作结果(例如网络失败等)。</p>
<h3 id="NSStringWrapper"><a href="#NSStringWrapper" class="headerlink" title="NSStringWrapper"></a>NSStringWrapper</h3><p>因为自己有多年 Java 开发的经历,我还是不太习惯 Objective-C 连基本的字符串操作都要查文档,而我自己又记不住老长的方法名,所以我把 Objective-C 的字符串基本操作都封装成了 Java 风格的方法调用。这部分是很早前拿周末时间在家里写的,所以是开源的,<a href="https://github.com/tangqiaoboy/xcode_tool/tree/master/NSStringWrappeer" target="_blank" rel="noopener">源代码地址</a>。</p>
<h3 id="EGOTableViewPullRefresh"><a href="#EGOTableViewPullRefresh" class="headerlink" title="EGOTableViewPullRefresh"></a>EGOTableViewPullRefresh</h3><p><a href="https://github.com/enormego/EGOTableViewPullRefresh" target="_blank" rel="noopener">EGOTableViewPullRefresh</a> 一个开源的下拉刷新组件。我对它进行了改进,增加了强制刷新功能。</p>
<h3 id="LoadMoreTableFooterView"><a href="#LoadMoreTableFooterView" class="headerlink" title="LoadMoreTableFooterView"></a>LoadMoreTableFooterView</h3><p><a href="https://github.com/sishen/LoadMoreTableFooterView" target="_blank" rel="noopener">LoadMoreTableFooterView</a> 一个开源的上拉加载更多的组件。我做了少量修改,以便让它支持 iPhone5 的分辨率。</p>
<h3 id="zepto-js"><a href="#zepto-js" class="headerlink" title="zepto.js"></a>zepto.js</h3><p><a href="http://zeptojs.com/" target="_blank" rel="noopener">zepto</a> 是一个类似 JQuery 的 javascript 开源库,用于实现 css 选择器和一些 dom 操作。它的 api 几乎和 JQuery 完全一样,优点是体积小巧。</p>
<h3 id="ejs"><a href="#ejs" class="headerlink" title="ejs"></a>ejs</h3><p><a href="http://embeddedjs.com/getting_started.html" target="_blank" rel="noopener">ejs</a> 一个 js 端的模版库。我们主要用于渲染一些 UIWebview 中异步加载的内容。例如笔记的评论,问题的答案。</p>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>希望上面的开源库能对你有用。最后分享一张粉笔网全站用到的所有开源项目的图片。</p>
<img src="/images/opensource.jpg" class="">
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-categories">
<span></span>
<a class="article-category-link" href="/categories/iOS/">iOS</a>
</div>
</div>
<div class="article-share" id="share">
<div data-url="https://blog.devtang.com/2012/10/09/3rd-libs-used-in-fenbi-app/" data-title="粉笔网iPhone端使用的第三方开源库 | 唐巧的博客" data-tsina="" class="share clearfix">
</div>
</div>
</footer>
</article>
<nav class="article-nav clearfix">
<div class="prev" >
<a href="/2012/10/15/scrum-and-architecture-in-fenbi/" title="粉笔网的架构和项目管理">
<strong>上一篇:</strong><br/>
<span>
粉笔网的架构和项目管理</span>
</a>
</div>
<div class="next">
<a href="/2012/10/05/upgrade-your-app-to-support-iphone5/" title="让你的APP支持iPhone5">
<strong>下一篇:</strong><br/>
<span>让你的APP支持iPhone5
</span>
</a>
</div>
</nav>
</div>
<div class="openaside"><a class="navbutton" href="#" title="显示侧边栏"></a></div>
<div id="asidepart">
<div class="closeaside"><a class="closebutton" href="#" title="隐藏侧边栏"></a></div>
<aside class="clearfix">
<div class="sponsor">
</div>
<div class="categorieslist">
<p class="asidetitle">分类</p>
<ul>
<li><a href="/categories/books-summary/" title="books summary">books summary</a></li>
<li><a href="/categories/iOS/" title="iOS">iOS</a></li>
<li><a href="/categories/iOS-weekly/" title="iOS weekly">iOS weekly</a></li>
<li><a href="/categories/mac/" title="mac">mac</a></li>
<li><a href="/categories/shell/" title="shell">shell</a></li>
<li><a href="/categories/summary/" title="summary">summary</a></li>
</ul>
</div>
<div class="weixin">
<br />
<p class="asidetitle">微信公众号</p>
<p>关注我的微信公众号,和我一起成长:</p>
<img src="/images/weixin-qr.jpg" width="230px" />
</div>
<div class="rsspart">
<a href="/atom.xml" target="_blank" title="rss">RSS 订阅</a>
</div>
</aside>
</div>
</div>
<footer><div id="footer" >
<div class="social-font" class="clearfix">
</div>
<p class="copyright" style="margin-top: 10px;">
Powered by <a href="http://hexo.io" target="_blank" title="hexo">hexo</a> and Theme by <a href="https://github.com/wuchong/jacman" target="_blank" title="Jacman">Jacman</a> © 2020
<a href="/about" target="_blank" title="唐巧">唐巧</a>
</p>
</div>
</footer>
<script src="/js/jquery-2.0.3.min.js"></script>
<script src="/js/jquery.imagesloaded.min.js"></script>
<script src="/js/gallery.js"></script>
<script src="/js/jquery.qrcode-0.12.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.navbar').click(function(){
$('header nav').toggleClass('shownav');
});
var myWidth = 0;
function getSize(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
};
var m = $('#main'),
a = $('#asidepart'),
c = $('.closeaside'),
o = $('.openaside');
c.click(function(){
a.addClass('fadeOut').css('display', 'none');
o.css('display', 'block').addClass('fadeIn');
m.addClass('moveMain');
});
o.click(function(){
o.css('display', 'none').removeClass('beforeFadeIn');
a.css('display', 'block').removeClass('fadeOut').addClass('fadeIn');
m.removeClass('moveMain');
});
$(window).scroll(function(){
o.css("top",Math.max(80,260-$(this).scrollTop()));
});
$(window).resize(function(){
getSize();
if (myWidth >= 1024) {
$('header nav').removeClass('shownav');
}else{
m.removeClass('moveMain');
a.css('display', 'block').removeClass('fadeOut');
o.css('display', 'none');
}
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var ai = $('.article-content>iframe'),
ae = $('.article-content>embed'),
t = $('#toc'),
ta = $('#toc.toc-aside'),
o = $('.openaside'),
c = $('.closeaside');
if(ai.length>0){
ai.wrap('<div class="video-container" />');
};
if(ae.length>0){
ae.wrap('<div class="video-container" />');
};
c.click(function(){
ta.css('display', 'block').addClass('fadeIn');
});
o.click(function(){
ta.css('display', 'none');
});
$(window).scroll(function(){
ta.css("top",Math.max(140,320-$(this).scrollTop()));
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var $this = $('.share'),
url = $this.attr('data-url'),
encodedUrl = encodeURIComponent(url),
title = $this.attr('data-title'),
tsina = $this.attr('data-tsina'),
description = $this.attr('description');
var html = [
'<div class="hoverqrcode clearfix"></div>',
'<a class="overlay" id="qrcode"></a>',
'<a href="https://www.facebook.com/sharer.php?u=' + encodedUrl + '" class="article-share-facebook" target="_blank" title="Facebook"></a>',
'<a href="https://twitter.com/intent/tweet?url=' + encodedUrl + '" class="article-share-twitter" target="_blank" title="Twitter"></a>',
'<a href="#qrcode" class="article-share-qrcode" title="微信"></a>',
'<a href="http://widget.renren.com/dialog/share?resourceUrl=' + encodedUrl + '&srcUrl=' + encodedUrl + '&title=' + title +'" class="article-share-renren" target="_blank" title="人人"></a>',
'<a href="http://service.weibo.com/share/share.php?title='+title+'&url='+encodedUrl +'&ralateUid='+ tsina +'&searchPic=true&style=number' +'" class="article-share-weibo" target="_blank" title="微博"></a>',
'<span title="Share to"></span>'
].join('');
$this.append(html);
$('.hoverqrcode').hide();
var myWidth = 0;
function updatehoverqrcode(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
var qrsize = myWidth > 1024 ? 200:100;
var options = {render: 'image', size: qrsize, fill: '#2ca6cb', text: url, radius: 0.5, quiet: 1};
var p = $('.article-share-qrcode').position();
$('.hoverqrcode').empty().css('width', qrsize).css('height', qrsize)
.css('left', p.left-qrsize/2+20).css('top', p.top-qrsize-10)
.qrcode(options);
};
$(window).resize(function(){
$('.hoverqrcode').hide();
});
$('.article-share-qrcode').click(function(){
updatehoverqrcode();
$('.hoverqrcode').toggle();
});
$('.article-share-qrcode').hover(function(){}, function(){
$('.hoverqrcode').hide();
});
});
</script>
<!-- Analytics Begin -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-28029597-1', '');
ga('send', 'pageview');
</script>
<!-- Analytics End -->
<!-- Totop Begin -->
<div id="totop">
<a title="返回顶部"><img src="/img/scrollup.png"/></a>
</div>
<script src="/js/totop.js"></script>
<!-- Totop End -->
<!-- MathJax Begin -->
<!-- mathjax config similar to math.stackexchange -->
<!-- MathJax End -->
<!-- Tiny_search Begin -->
<!-- Tiny_search End -->
</body>
</html>