1/** 2 * jquery.socialbutton - jQuery plugin for social networking websites 3 * https://itra.jp/jquery_socialbutton_plugin/ 4 * 5 * Copyright 2010, Itrans, Inc. https://itra.jp/ 6 * 7 * Dual licensed under the MIT or GPL Version 2 licenses. 8 * https://jquery.org/license 9 * 10 * Version: 1.9.1 11 */ 12 13/** 14 * SYNOPSIS 15 * 16 * 17 * mixi_check 18 * https://developer.mixi.co.jp/connect/mixi_plugin/mixi_check/spec_mixi_check 19 * 20 * $('#mixi_check').socialbutton('mixi_check', { 21 * key: 'mixi-check-key' 22 * }); 23 * 24 * $('#mixi_check').socialbutton('mixi_check', { 25 * key: 'mixi-check-key', 26 * button: 'button-1', 27 * url: 'https://itra.jp/' 28 * }); 29 * 30 * 31 * mixi_like 32 * https://developer.mixi.co.jp/connect/mixi_plugin/favorite_button/spec 33 * 34 * $('#mixi_like').socialbutton('mixi_like', { 35 * key: 'mixi-check-key', 36 * }); 37 * 38 * $('#mixi_like').socialbutton('mixi_like', { 39 * key: 'mixi-check-key', 40 * url: 'https://itra.jp/', 41 * width: 450, 42 * height: 80, 43 * show_faces: true, 44 * style: 'additional-style-here' 45 * }); 46 * 47 * 48 * facebook_like 49 * https://developers.facebook.com/docs/reference/plugins/like 50 * 51 * $('#facebook_like').socialbutton('facebook_like'); 52 * 53 * $('#facebook_like').socialbutton('facebook_like', { 54 * button: 'standard', // synonym 'layout' 55 * url: 'https://itra.jp', 56 * show_faces: true, 57 * width: 450, 58 * height: 80, 59 * action: 'like', 60 * locale: 'en_US', 61 * font: 'arial', 62 * colorscheme: 'light' 63 * }); 64 * 65 * 66 * facebook_share 67 * https://developers.facebook.com/docs/share 68 * 69 * $('#facebook_share').socialbutton('facebook_share'); 70 * 71 * $('#facebook_share').socialbutton('facebook_share', { 72 * button: 'button_count', // synonym 'type' 73 * url: 'https://itra.jp', 74 * text: 'Share' 75 * }); 76 * 77 * 78 * Twitter 79 * https://twitter.com/goodies/tweetbutton 80 * 81 * $('#twitter').socialbutton('twitter'); 82 * 83 * $('#twitter').socialbutton('twitter', { 84 * button: 'vertical', // synonym 'count' 85 * url: 'https://itra.jp/', 86 * text: 'tweet text', 87 * lang: 'ja', 88 * via: 'ishiiyoshinori', 89 * related: 'twitter' 90 * }); 91 * 92 * 93 * GREE Social Feedback 94 * https://developer.gree.co.jp/connect/plugins/sf 95 * 96 * $('#gree_sf').socialbutton('gree_sf'); 97 * 98 * $('#gree_sf').socialbutton('gree_sf', { 99 * button: 0, // synonym 'type' 100 * url: 'https://itra.jp/', 101 * width: 0, // auto 102 * height: 20 103 * }); 104 * 105 * 106 * Evernote Site Memory 107 * https://www.evernote.com/about/developer/sitememory/ 108 * 109 * $('#evernote').socialbutton('evernote'); 110 * 111 * $('#evernote').socialbutton('evernote', { 112 * button: 'article-clipper', 113 * url: 'https://itra.jp/', 114 * provider_name: 'itra.jp', 115 * suggest_notebook: 'webclip', 116 * content_id: 'element-id-to-clip', 117 * code: 'your-affiliate-code', 118 * title: 'note-title', 119 * suggest_tags: 'comma-separated-tags,up-to-three-tags', 120 * styling: 'full' 121 * }); 122 * 123 * 124 * Hatena Bookmark 125 * https://b.hatena.ne.jp/ 126 * 127 * $('#hatena').socialbutton('hatena'); 128 * 129 * $('#hatena').socialbutton('hatena', { 130 * button: 'standard', 131 * url: 'https://itra.jp/', 132 * title: 'page-title' 133 * }); 134 * 135 * 136 * Hatena Bookmark (Old Style) 137 * https://b.hatena.ne.jp/ 138 * 139 * $('#hatena').socialbutton('hatena_oldstyle'); 140 * 141 * $('#hatena').socialbutton('hatena_oldstyle', { 142 * button: '/path/to/your-icon.png', 143 * url: 'https://itra.jp/', 144 * padding: 10, 145 * height: 15 146 * }); 147 * 148 * 149 * Google +1 Button 150 * https://www.google.com/webmasters/+1/button/ 151 * 152 * $('#google').socialbutton('google_plusone'); 153 * 154 * $('#google').socialbutton('google_plusone', { 155 * button: 'standard', // synonym 'size' 156 * url: 'https://itra.jp', // synonym 'href' 157 * lang: 'ja', 158 * parsetags: 'explicit', 159 * callback: 'some_callback_function', 160 * count: true 161 * }); 162 * 163 * 164 * Pintarest Button 165 * https://pinterest.com/about/goodies/ 166 * 167 * $('#pinterest').socialbutton('pintarest', { 168 * button: 'horizontal', // or 'vertical', 'none' 169 * url: 'https://itra.jp', 170 * media: 'https://itra.jp/image.jpg', 171 * description: 'This is an image.' 172 * }); 173 */ 174(function($) { 175 176$.fn.socialbutton = function(service, options) { 177 178 options = options || {}; 179 180 var defaults = { 181 mixi_check: { 182 key: '', 183 button: 'button-1', // button-1,button-2,button-3,button-4,button-5 184 url: '' // document.URL 185 }, 186 mixi_like: { 187 key: '', 188 url: document.URL, 189 width: 0, // auto 190 height: 0, // auto 191 show_faces: true, 192 style: '', 193 194 sizes: { 195 width: { 196 with_faces: 450, 197 without_faces: 140 198 }, 199 height: { 200 with_faces_minimum: 80, 201 without_faces_minimum: 20 202 } 203 } 204 }, 205 facebook_like: { 206 button: 'standard', // standard / button_count / box_count 207 url: document.URL, 208 209 show_faces: true, 210 width: 0, // auto 211 height: 0, // auto 212 213 width_standard_default: 450, // orig: 450 214 width_standard_minimum: 225, 215 height_standard_without_photo: 35, 216 height_standard_with_photo: 80, 217 218 width_button_count_default: 120, // orig: 90, jp_min: 114 219 width_button_count_minimum: 90, 220 height_button_count: 25, // orig:20, jp_min: 21 221 222 width_box_count_default: 80, // orig:55, jp_min: 75 223 width_box_count_minimum: 55, 224 height_box_count: 70, // orig: 65, jp_min: 66 225 226 action: 'like', // like / recommend 227 locale: '', // auto 228 font: '', 229 colorscheme: 'light' // light / dark 230 }, 231 facebook_share: { 232 button: 'button_count', // box_count / button / icon_link / icon 233 url: '', //document.URL 234 text: '' //Share 235 }, 236 twitter: { 237 button: 'vertical', // vertical / horizontal / none 238 url: '', // document.URL 239 text: '', 240 lang: 'ja', // ja / en /de / fr / es 241 via: '', 242 related: '' 243 }, 244 gree_sf: { 245 button: 0, // 0,1,2,3,4 246 url: document.URL, 247 width: 0, // auto 248 height: 20, 249 250 widths: { 251 type0_16: 58, type0_20: 70, type0_23: 76, 252 type1_16: 58, type1_20: 73, type1_23: 78, 253 type2_16: 58, type2_20: 73, type2_23: 78, 254 type3_16: 49, type3_20: 61, type3_23: 64, 255 type4_16: 16, type4_22: 21, type4_32: 32 256 } 257 }, 258 evernote: { 259 button: 'article-clipper', // article-clipper, article-clipper-remember, article-clipper-jp, article-clipper-rus, article-clipper-fr, article-clipper-es, article-clipper-de, article-clipper-vert, site-mem-32, site-mem-36, site-mem-22, site-mem-16 260 url: '', // document.URL 261 provider_name: '', // domain name
262 suggest_notebook: '', // notebook name 263 content_id: '', // element id for clip 264 code: '', // affiliate code 265 title: '', 266 suggest_tags: '', 267 styling: '' // none(text-only), full 268 }, 269 hatena: { 270 button: 'standard', // standard, vertical, simple 271 url: document.URL, 272 title: document.title 273 }, 274 hatena_oldstyle: { 275 button: 'https://d.hatena.ne.jp/images/b_append.gif', 276 url: document.URL, 277 height: 13, 278 padding: 7 279 }, 280 google_plusone: { 281 button: '', // small, standard, medium, tall 282 url: '', 283 lang: '', // en-US 284 parsetags: '', // none(onload), explicit 285 callback: '', 286 count: true // true, false 287 }, 288 pinterest: { 289 button: 'horizontal', // horizontal, vertical, none 290 url: document.URL, 291 media: '', 292 description: '' 293 } 294 }; 295 296 var max_index = this.size() - 1; 297 298 return this.each(function(index) { 299 300 switch (service) { 301 case 'mixi_check': 302 socialbutton_mixi_check(this, options, defaults.mixi_check, index, max_index); 303 break; 304 305 case 'mixi_like': 306 socialbutton_mixi_like(this, options, defaults.mixi_like, index, max_index); 307 break; 308 309 case 'facebook_like': 310 socialbutton_facebook_like(this, options, defaults.facebook_like, index, max_index); 311 break; 312 313 case 'facebook_share': 314 socialbutton_facebook_share(this, options, defaults.facebook_share, index, max_index); 315 break; 316 317 case 'twitter': 318 socialbutton_twitter(this, options, defaults.twitter, index, max_index); 319 break; 320 321 case 'gree_sf': 322 socialbutton_gree_sf(this, options, defaults.gree_sf, index, max_index); 323 break; 324 325 case 'evernote': 326 socialbutton_evernote(this, options, defaults.evernote, index, max_index); 327 break; 328 329 case 'hatena': 330 socialbutton_hatena(this, options, defaults.hatena, index, max_index); 331 break; 332 333 case 'hatena_oldstyle': 334 socialbutton_hatena_oldstyle(this, options, defaults.hatena_oldstyle, index, max_index); 335 break; 336 337 case 'google_plusone': 338 socialbutton_google_plusone(this, options, defaults.google_plusone, index, max_index); 339 break; 340 341 case 'pinterest': 342 socialbutton_pinterest(this, options, defaults.pinterest, index, max_index); 343 break; 344 345 default: 346 break; 347 } 348 349 return true; 350 }); 351} 352 353function socialbutton_mixi_check(target, options, defaults, index, max_index) 354{ 355 var key = options.key || defaults.key; 356 var button = options.button || defaults.button; 357 var url = options.url || defaults.url; 358 359 if (key == '') { 360 return; 361 } 362 363 var attr = merge_attributes({ 364 'data-key': key, 365 'data-url': htmlspecialchars(url), 366 'data-button': button 367 }); 368 369 var tag = '<a href="https://mixi.jp/share.pl" class="mixi-check-button"' + attr + '>Check</a>'; 370 371 $(target).html(tag); 372 373 if (index == max_index) { 374 $('body').append('<script type="text/javascript" src="https://static.mixi.jp/js/share.js"></script>'); 375 } 376} 377 378function socialbutton_mixi_like(target, options, defaults, index, max_index) 379{ 380 var key = options.key || defaults.key; 381 var url = options.url || defaults.url; 382 var width = options.width != undefined ? options.width : defaults.width; 383 var height = options.height != undefined ? options.height : defaults.height; 384 var show_faces = options.show_faces != undefined ? options.show_faces : defaults.show_faces; 385 var style = options.style || defaults.style; 386 387 if (key == '') { 388 return; 389 } 390 391 if (options.url) { 392 url = decodeURIComponent(url); 393 } 394 url = url_encode_rfc3986(url); 395 396 if (width == 0) { 397 width = show_faces ? defaults.sizes.width.with_faces : defaults.sizes.width.without_faces; 398 } 399 400 if (height == 0) { 401 height = show_faces ? defaults.sizes.height.with_faces_minimum : defaults.sizes.height.without_faces_minimum; 402 } else { 403 if (show_faces && height < defaults.sizes.height.with_faces_minimum) { 404 height = defaults.sizes.height.with_faces_minimum; 405 } else if (!show_faces && height < defaults.sizes.height.without_faces_minimum) { 406 height = defaults.sizes.height.without_faces_minimum; 407 } 408 } 409 410 var params = merge_parameters({ 411 'href': url, 412 'service_key': key, 413 'width': width, 414 'show_faces': show_faces ? 'true' : 'false' 415 }); 416 417 var attr = merge_attributes({ 418 src: 'https://plugins.mixi.jp/favorite.pl?' + params, 419 scrolling: 'no', 420 frameborder: '0', 421 allowTransparency: 'true', 422 style: 'border:0; overflow:hidden; width:' + width + 'px; height:' + height + 'px; ' + style 423 }); 424 425 var tag = '<iframe' + attr + '></iframe>'; 426 427 $(target).html(tag); 428} 429 430function socialbutton_facebook_like(target, options, defaults, index, max_index) 431{ 432 var layout = options.layout || options.button || defaults.button; 433 var url = options.url || defaults.url; 434 435 var show_faces = options.show_faces != undefined ? options.show_faces : defaults.show_faces; 436 var width = options.width != undefined ? options.width : defaults.width; 437 var height = options.height != undefined ? options.height : defaults.height; 438 var action = options.action || defaults.action; 439 var locale = options.locale || defaults.locale; 440 var font = options.font || defaults.font; 441 var colorscheme = options.colorscheme || defaults.colorscheme; 442 443 if (options.url) { 444 url = decodeURIComponent(url); 445 } 446 url = url_encode_rfc3986(url); 447 448 switch (layout) { 449 case 'standard': 450 if (width == 0) { 451 width = defaults.width_standard_default; 452 } else if (width < defaults.width_standard_minimum) { 453 width = defaults.width_standard_minimum; 454 } 455 if (height == 0) { 456 height = show_faces ? defaults.height_standard_with_photo : defaults.height_standard_without_photo; 457 } else if (height < defaults.height_standard_without_photo) { 458 height = defaults.height_standard_without_photo; 459 } 460 break; 461 case 'button_count': 462 if (width == 0) { 463 width = defaults.width_button_count_default; 464 } else if (width < defaults.width_button_count_minimum) { 465 width = defaults.width_button_count_minimum; 466 } 467 if (height == 0) { 468 height = defaults.height_button_count; 469 } else if (height < defaults.height_button_count) { 470 height = defaults.height_button_count; 471 } 472 break; 473 case 'box_count': 474 if (width == 0) { 475 width = defaults.width_box_count_default; 476 } else if (width < defaults.width_box_count_minimum) { 477 width = defaults.width_box_count_minimum; 478 } 479 if (height == 0) { 480 height = defaults.height_box_count; 481 } else if (height < defaults.height_box_count) { 482 height = defaults.height_box_count; 483 } 484 break; 485 } 486 487 var params = merge_parameters({ 488 'href': url, 489 'layout': layout, 490 'show_faces': show_faces ? 'true' : 'false', 491 'width': width, 492 'action': action, 493 'locale': locale, 494 'font': font, 495 'colorscheme': colorscheme, 496 'height': height 497 }); 498 499 var tag = '<iframe src="https://www.facebook.com/plugins/like.php?' + params + '" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:' + width + 'px; height:' + height + 'px;" allowTransparency="true"></iframe>'; 500 501 $(target).html(tag); 502} 503 504function socialbutton_facebook_share(target, options, defaults, index, max_index) 505{ 506 var type = options.type || options.button || defaults.button; 507 var url = options.url || defaults.url; 508 var text = options.text || defaults.text; 509 510 var attr = merge_attributes({ 511 'type': type, 512 'share_url': htmlspecialchars(url) 513 }); 514 515 var tag = '<a name="fb_share"' + attr + '>
515' + text + '</a>'; 516 517 if(index == 0) { 518 tag += '<script type="text/javascript" src="https://static.ak.fbcdn.net/connect.php/js/FB.Share"></script>'; 519 } 520 521 $(target).html(tag); 522} 523 524function socialbutton_twitter(target, options, defaults, index, max_index) 525{ 526 var count = options.count || options.button || defaults.button; 527 var url = options.url || defaults.url; 528 529 var text = options.text || defaults.text; 530 var lang = options.lang || defaults.lang; 531 var via = options.via || defaults.via; 532 var related = options.related || defaults.related; 533 534 var attr = merge_attributes({ 535 'data-count': count, 536 'data-url': htmlspecialchars(url), 537 'data-text': text, 538 'data-lang': lang, 539 'data-via': via, 540 'data-related': related 541 }); 542 543 var tag = '<a href="https://twitter.com/share" class="twitter-share-button"' + attr + '>Tweet</a>'; 544 545 $(target).html(tag); 546 547 if (index == max_index) { 548 $('body').append('<script type="text/javascript" src="https://platform.twitter.com/widgets.js"></script>'); 549 } 550} 551 552function socialbutton_gree_sf(target, options, defaults, index, max_index) 553{ 554 var type = options.type || options.button || defaults.button; 555 var url = options.url || defaults.url; 556 557 var width = options.width != undefined ? options.width : defaults.width; 558 var height = options.height != undefined ? options.height : defaults.height; 559 560 if (options.url) { 561 url = decodeURIComponent(url); 562 } 563 url = url_encode_rfc3986(url); 564 565 switch (type) { 566 case 0: 567 case 1: 568 case 2: 569 case 3: 570 if (height != 16 && height != 20 && height != 23) { 571 height = 20; 572 } 573 break; 574 575 case 4: 576 if (height != 16 && height != 22 && height != 32) { 577 height = 22; 578 } 579 break; 580 581 default: 582 type = 0; 583 width = 0; 584 height = 20; 585 break; 586 } 587 588 if (width == 0) { 589 width = defaults.widths['type' + type + '_' + height]; 590 } 591 592 var params = merge_parameters({ 593 'url': url, 594 'type': String(type), 595 'height': height 596 }); 597 598 var tag = '<iframe src="https://share.gree.jp/share?' + params + '" scrolling="no" frameborder="0" marginwidth="0" marginheight="0" style="border:none; overflow:hidden; width:' + width + 'px; height:' + height + 'px;" allowTransparency="true"></iframe>'; 599 600 $(target).html(tag); 601} 602 603function socialbutton_evernote(target, options, defaults, index, max_index) 604{ 605 var button = options.button || defaults.button; 606 var url = options.url || defaults.url; 607 608 var provider_name = options.provider_name || defaults.provider_name; 609 var suggest_notebook = options.suggest_notebook || defaults.suggest_notebook; 610 var content_id = options.content_id || defaults.content_id; 611 var code = options.code || defaults.code; 612 var title = options.title || defaults.title; 613 var suggest_tags = options.suggest_tags || defaults.suggest_tags; 614 var styling = options.styling || defaults.styling; 615 616 if (button == 'article-clipper' || 617 button == 'article-clipper-remember' || 618 button == 'article-clipper-jp' || 619 button == 'article-clipper-rus' || 620 button == 'article-clipper-fr' || 621 button == 'article-clipper-es' || 622 button == 'article-clipper-de' || 623 button == 'article-clipper-vert' || 624 button == 'site-mem-32' || 625 button == 'site-mem-36' || 626 button == 'site-mem-22' || 627 button == 'site-mem-16' 628 ) { 629 button = 'https://static.evernote.com/' + button + '.png'; 630 } 631 632 var clipoptions = { 633 'url': url, 634 'providerName': provider_name, 635 'suggestNotebook': suggest_notebook, 636 'contentId': content_id, 637 'code': code, 638 'title': title, 639 'suggestTags': suggest_tags, 640 'styling': styling 641 }; 642 643 if (index == 0) { 644 $('body').append('<script type="text/javascript" src="https://static.evernote.com/noteit.js"></script>'); 645 } 646 647 var tag = $(document.createElement('a')) 648 .attr({href: '#'}) 649 .click(function(){ 650 if (Evernote) { 651 Evernote.doClip(clipoptions); 652 } 653 return false; 654 }) 655 .append('<img src="' + button + '" alt="Clip to Evernote" style="border: none" />'); 656 657 $(target).html(tag); 658} 659 660function socialbutton_hatena(target, options, defaults, index, max_index) 661{ 662 var layout = options.layout || options.button || defaults.button; 663 var url = options.url || defaults.url; 664 var title = options.title || defaults.title; 665 666 url = htmlspecialchars(url); 667 title = htmlspecialchars(title); 668 669 var attr = merge_attributes({ 670 'href': 'https://b.hatena.ne.jp/entry/' + url, 671 'class': 'hatena-bookmark-button', 672 'data-hatena-bookmark-title': title, 673 'data-hatena-bookmark-layout': layout, 674 'title': '縺è�繧ィç¹ï½³ç¹å»Îç¹ï½¼ç¹§åµï¿½ç¸ºï½¦ç¸ºï½ªç¹æ¶ã£ç¹§ï½¯ç¹æ§ï¿½ç¹§ï½¯ç¸ºï½«éï½½è�' 675 }); 676 677 var tag = '<a' + attr + '><img src="https://b.st-hatena.com/images/entry-button/button-only.gif" alt="縺è�繧ィç¹ï½³ç¹å»Îç¹ï½¼ç¹§åµï¿½ç¸ºï½¦ç¸ºï½ªç¹æ¶ã£ç¹§ï½¯ç¹æ§ï¿½ç¹§ï½¯ç¸ºï½«éï½½è�" width="20" height="20" style="border: none;" /></a>' 678 + '<script type="text/javascript" src="https://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>'; 679 680 $(target).html(tag); 681} 682 683function socialbutton_hatena_oldstyle(target, options, defaults, index, max_index) 684{ 685 var button = options.button || defaults.button; 686 var url = options.url || defaults.url; 687 688 var height = options.height != undefined ? options.height : defaults.height; 689 var padding = options.padding != undefined ? options.padding : defaults.padding; 690 691 url = htmlspecialchars(url); 692 693 var tag = '<span style="font-size: ' + height + 'px; line-height: 100%; ">' 694 + '<span style="padding-right: ' + padding + 'px"><a href="https://b.hatena.ne.jp/entry/add/' + url + '" target="_blank"><img src="' + button + '" style="border: none; vertical-align: text-bottom" /></a></span>' 695 + '<a href="https://b.hatena.ne.jp/entry/' + url + '" target="_blank"><img src="https://b.hatena.ne.jp/entry/image/' + url + '" style="border: none; vertical-align: text-bottom" /></a>' 696 + '</span>'; 697 698 $(target).html(tag); 699} 700 701function socialbutton_google_plusone(target, options, defaults, index, max_index) 702{ 703 if (!$.support.tbody) { 704 return; 705 } 706 707 var size = options.size || options.button || defaults.button; 708 var href = options.href || options.url || defaults.url; 709 710 var lang = options.lang || defaults.lang; 711 var parsetags = options.parsetags || defaults.parsetags; 712 713 var callback = options.callback || defaults.callback; 714 var count = options.count != undefined ? options.count : defaults.count; 715 716 switch (size) { 717 case 'small': 718 case 'standard': 719 case 'medium': 720 break; 721 722 case 'tall': 723 count = true; 724 break; 725 726 default: 727 size = 'standard'; 728 count = true; 729 } 730 731 var tag = $('<div>') 732 .attr({ 733 'data-callback': callback, 734 'data-count': count ? 'true' : 'false', 735 'data-href': href, 736 'data-size': size 737 }).addClass('g-plusone'); 738 $(target).append(tag); 739 740 if (index == max_index) { 741 742 var script_params = ''; 743 744 if (lang != '') { 745 script_params += 'lang: "' + htmlspecialchars(lang) + '"'; 746 } 747 if (parsetags != '') { 748 script_params += script_params != '' ? ',' : ''; 749 script_params += 'parsetags: "' + htmlspecialchars(parsetags) + "'"; 750 } 751 if (script_params != '') { 752 script_params = '{' + script_params + '}'; 753 } 754 755 if (typeof gapi === 'undefined' || typeof gapi.plusone === 'undefined') { 756 $('body').append('<script type="text/javascript" src="https://apis.google.com/js/plusone.js">' + script_params + '</script>'); 757 } else { 758 gapi.plusone.go(); 759 } 760 } 761} 762 763function socialbutton_pinterest(target, options, defaults, index, max_index) 764{ 765 var url = options.url || defaults.url; 766 var button = options.button || defaults.button; 767 var media = options.media != undefined ? options.media : defaults.media; 768 var description = options.description != undefined ? options.description : defaults.description; 769 770 url = url_encode_rfc3986(decodeURIComponent(url)); 771 media = url_encode_rfc3986(decodeURIComponent(media)); 772 description = decodeURIComponent(description); 773 774 var params = merge_parameters({ 775 'url': url, 776 'media': media, 777 'description': description 778 }); 779 780 var tag = '<a href="https://pinterest.com/pin/create/button/?' + params + '" class="pin-it-button" count-layout="' + button +'"><img border="0" src="//assets.pinterest.com/images/PinExt.png" title="Pin It" /></a>' 781 782 $(target).html(tag); 783 784 if (index == max_index) { 785 $('body').append('<script type="text/javascript" src="//assets.pinterest.com/js/pinit.js"></script>'); 786 } 787} 788 789function merge_attributes(attr) 790{ 791 var merged = ''; 792 793 for (var i in attr) { 794 if (attr[i] == '') { 795 continue; 796 } 797 merged += ' ' + i + '="' + attr[i] + '"'; 798 } 799 800 return merged; 801} 802 803function merge_parameters(params) 804{ 805 var merged = ''; 806 807 for (var i in params) { 808 if (params[i] == '') { 809 continue; 810 } 811 merged += merged != '' ? '&' : ''; 812 merged += i + '=' + params[i] + ''; 813 } 814 815 return merged; 816} 817 818function htmlspecialchars(string) 819{ 820 var table = [ 821 [/&/g, '&'], 822 [/</g, '<'], 823 [/>/g, '>'], 824 [/"/g, '"'], 825 [/'/g, '''] 826 ]; 827 828 for (var i in table) { 829 string = string.replace(table[i][0], table[i][1]); 830 } 831 832 return string; 833} 834 835function url_encode_rfc3986(url) 836{ 837 return encodeURIComponent(url).replace(/[!*'()]/g, function(p) { 838 return "%" + p.charCodeAt(0).toString(16); 839 }); 840} 841 842})(jQuery); 843// JavaScript Document
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.