From d148bc7af4146ef15aabea0052d7a20e8dbdf0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva=20and=20Nick=20Street?= Date: Wed, 21 Aug 2013 14:20:14 +0100 Subject: [PATCH] Enabling copy buttons functionality [finishes #55299248] --- .gitignore | 1 - _includes/download_widget.md | 2 +- _layouts/base_layout.html | 18 +++++++------ js/ZeroClipboard.min.js | 8 ++++++ js/ZeroClipboard.swf | Bin 0 -> 1635 bytes js/copySnippets.js | 26 +++++++++++++++++++ js/guide.js | 42 ------------------------------- js/projectDocumentationWidget.js | 2 ++ 8 files changed, 47 insertions(+), 52 deletions(-) create mode 100755 js/ZeroClipboard.min.js create mode 100755 js/ZeroClipboard.swf create mode 100644 js/copySnippets.js delete mode 100644 js/guide.js diff --git a/.gitignore b/.gitignore index fcb1d5d0401..6ffa504ac09 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ .#* *~ _site -*.sw? .idea diff --git a/_includes/download_widget.md b/_includes/download_widget.md index 7f473f2549b..3df4f628b95 100644 --- a/_includes/download_widget.md +++ b/_includes/download_widget.md @@ -10,7 +10,7 @@ Download
The recommended way to get the code for this project is to use a dependency management system. The snippet below can be copied and pasted into your build when you create a new project, or when adding {{ site.project }} to your project. -
+
diff --git a/_layouts/base_layout.html b/_layouts/base_layout.html index 8b4acb867dc..b8ab8e56f5d 100644 --- a/_layouts/base_layout.html +++ b/_layouts/base_layout.html @@ -10,12 +10,12 @@ - - - - - - + + + + + + @@ -25,11 +25,13 @@ - + + diff --git a/js/ZeroClipboard.min.js b/js/ZeroClipboard.min.js new file mode 100755 index 00000000000..32535fddf1b --- /dev/null +++ b/js/ZeroClipboard.min.js @@ -0,0 +1,8 @@ +/*! + * zeroclipboard + * The Zero Clipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie, and a JavaScript interface. + * Copyright 2012 Jon Rohan, James M. Greene, . + * Released under the MIT license + * http://jonrohan.github.com/ZeroClipboard/ + * v1.1.7 + */(function(){"use strict";var a=function(a,b){var c=a.style[b];a.currentStyle?c=a.currentStyle[b]:window.getComputedStyle&&(c=document.defaultView.getComputedStyle(a,null).getPropertyValue(b));if(c=="auto"&&b=="cursor"){var d=["a"];for(var e=0;e=0?"&":"?")+"nocache="+(new Date).getTime()},i=function(a){var b=[];return a.trustedDomains&&(typeof a.trustedDomains=="string"?b.push("trustedDomain="+a.trustedDomains):b.push("trustedDomain="+a.trustedDomains.join(","))),b.join("&")},j=function(a,b){if(b.indexOf)return b.indexOf(a);for(var c=0,d=b.length;c ';b=document.createElement("div"),b.id="global-zeroclipboard-html-bridge",b.setAttribute("class","global-zeroclipboard-container"),b.setAttribute("data-clipboard-ready",!1),b.style.position="absolute",b.style.left="-9999px",b.style.top="-9999px",b.style.width="15px",b.style.height="15px",b.style.zIndex="9999",b.innerHTML=c,document.body.appendChild(b)}a.htmlBridge=b,a.flashBridge=document["global-zeroclipboard-flash-bridge"]||b.children[0].lastElementChild};l.prototype.resetBridge=function(){this.htmlBridge.style.left="-9999px",this.htmlBridge.style.top="-9999px",this.htmlBridge.removeAttribute("title"),this.htmlBridge.removeAttribute("data-clipboard-text"),f(m,this.options.activeClass),m=null,this.options.text=null},l.prototype.ready=function(){var a=this.htmlBridge.getAttribute("data-clipboard-ready");return a==="true"||a===!0},l.prototype.reposition=function(){if(!m)return!1;var a=g(m);this.htmlBridge.style.top=a.top+"px",this.htmlBridge.style.left=a.left+"px",this.htmlBridge.style.width=a.width+"px",this.htmlBridge.style.height=a.height+"px",this.htmlBridge.style.zIndex=a.zIndex+1,this.setSize(a.width,a.height)},l.dispatch=function(a,b){l.prototype._singleton.receiveEvent(a,b)},l.prototype.on=function(a,b){var c=a.toString().split(/\s/g);for(var d=0;d<|i+I>}9Z`;@rK0}c_ByHJ}?I?+JQ#Rf>o5+@IXOp$p(Z-Ri zjT772`m$RD392LV(Bg(7Rg&_hFAWOxAN0NGOaDNhi~fKD1)ZSidmk2k>@TQ0hg5vo zE=owlnQtyU^UY8?B=SEA8Tlh2SAf*>R|z4%9{(#4vK(0U(pJ4uJnXt&xP;b|=}r{& zmdfRWgM-h(sVY9a1 zkDg3V52{+`Y0+LkaFddjS>`V9axV(YbF*_;$TF8~Kj^Zk%6dK5F_|b=KAZ_VzWMfm z?eiJiWnpKzd=@BjA}4Zrb;a`Ayx4I0Vew&c#`g_=pL=%e=il+vC;M&BS+V zCud|4ufAYjaqe-cIA57tNRJ`VEz_(m65>-tN4}GKfEHz z_4|MSZfzMS{x{{yPu=Wy+dRl#cw9CuVL4&XWk>3E zFK{BRw);`!dzy(+JNz&*x}r4Zm~Zt&ZSM0xOSOKKLUrVoCfaUK>+*=zS;T0_BT*oW z_vg&BYW*Pe1A%Tkzv4<5A;;3ry24y%&!e8dZ8DeZp^zKC#f^2JSv*+tY+nw1KQi1? z+vqXDPQ-&S8wLF^;#S@7GRM0;SfjHQTG?JG&sQps%I&`6Mvga>w%m^#H=MZ8{!-fh z)J3qK-cwF%KE7&>$AeoJgVsDe3Ns^TpQnM>{!fwX=jXPRj7<1hWa7dOh8iAWPhD-B zn|(af5xiEgfD=itU(4V7*aUN3{~&GINXI1@%Od}0L~DBi>vbG6)Z2W|@fwcn8VTp$ zIabseO4R4v+3Q4_6|jRXJQ|Lo*I^p7tXju$Ev2@;R(qL4GdbnDgNMTAjg98+_UbR1 z->z=y19f+20M?t|ZEC5y`_0Ip(?ev(V{U$Rpd@tJ%;ZDjN!Ux9nQsdhHZ!44P$G+| z%eWJ+x}A_RjQevMrs0TtE-r!`iABTLl5O!{_PN-Il*(^$NAT4guCX3#JIJBKL%N@W zDs!Wk{D_)S;No2iJB}>?9=&g< zDkD@GrAm$}d8&+2Wt_qUg-a9)6fRS^O5qyKT&Hk@!c7Xd^divQXZi!sXMn;ig))T- zg*giI6c#8vr0_X~M-(1Y_=3VBg(V7KQdp+&gyz4Z@RUN0=IRtysrGYH#4?@bEdQ0Zqhvqdx8G_y1O@y825`e`9$qzuudG)5LeK@e2+V|?A`Jt{WP!*dK$KA+Y7Pj^1JTBS=;I&)F^tMUhOwfiXX47&2q}_o z`~Yz!UL&oE(iL_IV-xg6V9?5mB-U{Aiw{QcOzHa12`>pCi>`;8k=Dm89G^A^N! zv=^4gKlNo5}D1^E12w0geG*f|H4sc!7VmEvzrxwO`LWIx`8cbR`2 zi(z~?w!dJDD3{omD3{rjDPk(`e`Bh-aYFRA+E#92+K0CMzAf8TR-IRs{0}E5nyM)u zp5yLF_)v&NUi0)~{)jnM({70UPQDZ)b%ZqJ>#!bvMrX{}UR&nm52 hrB$!AH2nOW+(@nt#n7>F@%Mf4Z~ZAE{{=lE$MA>_KQRCR literal 0 HcmV?d00001 diff --git a/js/copySnippets.js b/js/copySnippets.js new file mode 100644 index 00000000000..654d97dd5b6 --- /dev/null +++ b/js/copySnippets.js @@ -0,0 +1,26 @@ +window.Spring = window.Spring || {}; + +ZeroClipboard.setDefaults( { moviePath: siteBaseUrl + '/js/ZeroClipboard.swf' } ); + +$(document).ready(function() { + Spring.configureCopyButtons(); +}); + +Spring.configureCopyButtons = function() { + if (ZeroClipboard.detectFlashSupport()) { + $('.highlight pre').each(function(index) { + Spring.buildCopyButton($(this), index); + } + ); + } +} + +Spring.buildCopyButton = function (preEl, id) { + var codeBlockId = "code-block-"+ id; + var copyButtonId = "copy-button-" + id; + preEl.attr('id', codeBlockId); + var button = $(''); + preEl.before(button); + var zero = new ZeroClipboard(button); + $(zero.htmlBridge).tooltip({title: "copy to clipboard", placement: 'bottom'}); +} \ No newline at end of file diff --git a/js/guide.js b/js/guide.js deleted file mode 100644 index 6b2cafb580a..00000000000 --- a/js/guide.js +++ /dev/null @@ -1,42 +0,0 @@ -ZeroClipboard.setDefaults( { moviePath: '/js/ZeroClipboard.swf' } ); - -$(document).ready(function() { - if (ZeroClipboard.detectFlashSupport()) { - createCodeCopyButtons(); - createCopyButton($('button.copy-button.github')); - } - - $('.github-actions button').click(function() { - $('.github-actions button').removeClass('active'); - $(this).addClass('active'); - - $('.clone-url').hide(); - $('.clone-url.' + $(this).data('protocol')).show(); - }); - - if (typeof(sts_import) === 'function') { - $(".gs-guide-import").show().click(function (e) { - var linkElement = e.target; - var url = linkElement.href; - sts_import("guide", url); - e.preventDefault(); - }); - } - -}); - -function createCodeCopyButtons() { - $('article .highlight pre').each(function(index) { - var codeBlockId = "code-block-"+ index; - $(this).attr('id', codeBlockId); - var button = $(''); - $(this).before(button); - createCopyButton(button); - } - ); -} - -function createCopyButton($el){ - var zero = new ZeroClipboard($el); - $(zero.htmlBridge).tooltip({title: "copy to clipboard", placement: 'bottom'}); -} \ No newline at end of file diff --git a/js/projectDocumentationWidget.js b/js/projectDocumentationWidget.js index 9f3e0dcf1c4..0eafef1d942 100644 --- a/js/projectDocumentationWidget.js +++ b/js/projectDocumentationWidget.js @@ -100,6 +100,7 @@ Spring.SnippetView = Backbone.View.extend({ var html = $("
");
     html.append(this.combinedTemplate(this.model));
     this.$el.html(html);
+    Spring.buildCopyButton(html, "snippet");
     return this;
   },
 
@@ -146,6 +147,7 @@ Spring.QuickStartSelectorView = Backbone.View.extend({
       snippetType: this.$('.js-active').data('snippet-type')
     });
     this.activeWidget.render();
+
   },
 
   changeDownloadSource: function (event) {