Thứ Sáu, 15 tháng 6, 2018

PSD ẢNH BÌA BÀI HÁT ĐỪNG QUÊN TÊN ANH

Hello xin chào toàn thể mọi người đang từng ngày ghé thăm Blog của mình :D,tình cờ hôm qua lên Youtube nghe một bài hát mới ra rất hay của Hoa Vinh nên cover lun :v.
Ngoài kia bao la sóng gió , đừng quên tên anh 
Đừng quên đôi môi, ánh mắt hay giọng nói trầm lặng 
Vì người đàn ông em yêu mạnh mẽ , vẫn luôn cười mỗi khi đau 
Nếu yêu thêm người sau thì xin em cũng đừng quên tên anh . 


   DOWNLOAD


Lời kết : Trên đây mình đã chia sẻ psd ảnh bìa bài hát đừng quên tên anh.Nếu mọi người thích hãy nhấn share và theo dõi blog nha 

CHIA SẺ BÀI VIẾT

Thứ Ba, 12 tháng 6, 2018

PSD Ảnh Bìa Tuổi học trò Tháng Năm Rực Rỡ

Hello xin chào tất cả các bạn, chào mừng các bạn đã quay lại với Blog.
Chúc mọi người có một buổi sáng vui vẻ. Hôm nay mình sẽ mang tới cho mọi người một PSD Ảnh bìa về tuổi học trò cực đẹp.Kỉ niệm học trò là  những tháng năm vô cùng rực rỡ trong chúng ta.


7 TRANG WEB CỰC KÌ THÚ VỊ VÀ HỮU ÍCH DÀNH CHO BẠN

Xin chào các bạn đã lâu rồi mình không đăng bài trên Blog của anh Hùng. Hôm nay mình tìm kiếm trên mạng về những trang web hay và hữu ích nên thấy có một số web hay và thú vị nên mình đã nhanh chóng viết bài chia sẽ đến các bạn, một trong những trang web sau đây nó sẽ giúp bạn rất nhiều đấy đừng bỏ lỡ nhé. Và sau đây là 7 Trang Web Cực Kì Thú Vị Và Hữu Ích Dành Cho Bạn cùng xem nào.!
7 trang web cuc ki thu vi va huu ich danh cho ban

7 TRANG WEB HAY

pixelthoughts.co
Trang web này sẽ giúp bạn giải tỏa muộn phiền, stress bạn chỉ cần nhập điều khiến bạn lo lắng và ô "what's bothering you?" trang web sẽ an ủi bạn bằng lời động viên và một bản nhạc du dương.
weavesilk.com
Trang web này sẽ biến bạn thành một họa sĩ tài ba, chỉ cần vẽ nguệch ngoạc cũng sẽ thành những vệt sáng tuyệt đẹp, sau đó bạn có thể lưu tác phẩm để đời của mình và khoe với mọi người.
forgotify.com
Là một công cụ khám phá âm nhạc rất độc đáo, có hàng triệu bài hát chưa từng được ai nghe, trang web sẽ cho bạn một bài hát bất kỳ, và bạn sẽ là người đầu tiên nghe chúng, biết đâu bạn là người khám phá ra một siêu phẩm.
zoomquilt.org
Khi bạn vào web này và thấy đây chỉ là một bức tranh và được phóng to dần ra, nhưng bạn sẽ ngạc nhiên về sự vô tận của nó, ngồi ngắm trang web này cũng sẽ khiến bạn thích thú, thậm chí hơi ớn lạnh vì sự kì quái trong những hình ảnh này.
hackertyper.com
Bạn muốn tỏ ra nguy hiểm chứ gì? đây là cách dễ dàng và hiệu quả nhất, chỉ cần truy cập vào trang web này và gõ bất kỳ thứ gì trên bàn phím chúng sẽ biến thành những đoạn code y chang như hacker thứ thiệt vậy.
rainymood.com
Trang web này nghe tiếng mưa rất hay mỗi khi buồn, nó cũng có thể giúp bạn quên đi những nỗi buồn trong lòng không muốn tâm sự cùng ai.
futureme.org
Vào trang web này nhập nội dung, địa chỉ email của bạn và chọn thời gian, thật bất ngờ bổng dưng trong tương lai có một tin nhắn từ chính bạn trong quá khứ gửi đến bạn, cảm xúc lúc đọc thư của chính mình từ quá khứ lúc đó chắc vừa khóc vừa cười mà đọc nhỉ.

LỜI KẾT

Bạn thấy thế nào có hay không và bạn thấy trang web nào là hữu ích và hay nhất? mình ấn tượng nhất là trang web cuối cùng số 7 rất hay luôn đọc thư của chính mình trong quá khứ và thấy hay đừng quên để lại nhận xét nhé.
Xem thêm tại: Tiểu Bảo Blog


Thứ Hai, 11 tháng 6, 2018

Nâng cấp Threaded Comments Blogger với ảnh, video và syntax

Xin chào các bạn, ở bài viết trước tôi đã hướng dẫn cho các bạn cách chèn bộ icon tùy chỉnh vào Threaded Comments Blogger, và trong bài viết này chúng ta sẽ tăng lực cho nó bằng việc chèn thêm ảnh, video youtube và syntax code

Khung bình luận của blogger thô sơ tới nỗi chèn vài thẻ html cơ bản vào cũng bị cấm, vì vậy không còn cách nào khác ta cần tạo các short code và sử dụng js để chuyển chúng về tag html. Nói vậy có nghĩa không chỉ có ảnh (thẻ img), video (thẻ iframe), syntax code (thẻ pre) mà với bất kì thẻ html cơ bản nào ta đều có thể dùng js để biến đổi được


Trong bài viết này tôi sử dụng SyntaxHighlighter 3.0.83 (theme Eclipse, 3 module js-html-css) phục vụ cho làm đẹp code và fancybox 3.3.5 phục vụ cho việc xem ảnh trong khung bình luận ở chế độ lightbox. Và đương nhiên điều kiện bắt buộc là bạn không tắt blogger comment trên trang của mình

Đăng nhập vào trang quản trị và vào mục chỉnh sửa HTML

Tìm tới
<b:includable id='threaded_comments' var='post'> 
mở rộng nó ra và chèn code js vào SAU
<div class='comments-content'> 
như hình


<!-- Required for SyntaxHighlighter -->
<script src='//cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shCore.min.js'/>

<!-- Custom Theme for SyntaxHighlighter : http://alexgorbatchev.com/SyntaxHighlighter/manual/themes/ -->
<link href='//cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/styles/shCoreEclipse.min.css' rel='stylesheet' type='text/css'/>
<link href='//cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/styles/shThemeEclipse.min.css' rel='stylesheet' type='text/css'/>

<!-- Module for SyntaxHighlighter : http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/ -->
<script src='//cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shBrushXml.min.js'/>
<script src='//cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shBrushJScript.min.js'/>
<script src='//cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shBrushCss.min.js'/>

<!-- Required for fancybox -->
<link href='//cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.css' rel='stylesheet' type='text/css'/>

<script type='text/javascript'>
//<![CDATA[
function smartComment() {
a = document.getElementById("comment-holder");
b = a.innerHTML;
b = b.replace(/\[pre\]/gi, "<pre>");
b = b.replace(/\[pre js\]/gi, "<pre class='brush:js'>");
b = b.replace(/\[pre html\]/gi, "<pre class='brush:html'>");
b = b.replace(/\[pre css\]/gi, "<pre class='brush:css'>");
b = b.replace(/\[\/pre\]/gi, "</pre>");
b = b.replace(/\[img\].*?'.*?\[\/img\]/gi, "");
b = b.replace(/\[img\]/gi, "<img data-fancybox='gallery' src='");
b = b.replace(/\[\/img\]/gi, "'/>");
b = b.replace(/\[youtube\].*?'.*?\[\/youtube\]/gi, "");
b = b.replace(/\[youtube\]https:\/\/youtu.be/gi, "<iframe width='560' height='315' src='https://www.youtube.com/embed");
b = b.replace(/\[youtube\]https:\/\/www.youtube.com\/watch\?v=/gi, "<iframe width='560' height='315' src='https://www.youtube.com/embed/");
b = b.replace(/&amp;feature=/gi, "?rel=0' '");
b = b.replace(/\[\/youtube\]/gi, "?rel=0' frameborder='0' allowfullscreen></iframe>");
a.innerHTML = b
}
smartComment();

$("#comment-holder img").each(function() {
$(this).attr('data-src', $(this).attr("src"));
});

SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();

$(window).on('load', function() {
var t = document.createElement("script");
t.src = "//cdnjs.cloudflare.com/ajax/libs/fancybox/3.3.5/jquery.fancybox.min.js";
document.body.appendChild(t);
$("#comment-holder img[data-fancybox]").fancybox();
});
//]]></script>

Trong đó

Ví dụ tôi muốn thêm syntax cho code php thì phải thêm link nhúng
<script src='//cdnjs.cloudflare.com/ajax/libs/SyntaxHighlighter/3.0.83/scripts/shBrushPhp.min.js'/>

và tạo thêm short code
b = b.replace(/\[pre php\]/gi, "<pre class='brush:php'>");


Phần màu đỏ là short code bạn tự tạo tùy thích, phần màu xanh phải chuẩn Brush aliases của SyntaxHighlighter không code nó không làm đẹp đâu nhé
Theo đó với code trình bày ở trên các short code khi bình luận sẽ là
chèn ảnh: [img]link ảnh[/img]
chèn video youtube: [youtube]link video[/youtube]
chèn code HTML: [pre html]code[/pre]
chèn code CSS: [pre css]code css[/pre]
chèn code JS: [pre js]code js[/pre]
... (bạn có thể thêm các module syntax tùy theo mục đích sử dụng)

Link ảnh: là link dạng trực tiếp ví dụ https://i.imgur.com/0GZdCna.jpg Link video: là link video trên youtube, copy trên thanh địa chỉ của trình duyệt ví dụ https://www.youtube.com/watch?v=MhQKe-aERsU
Các đoạn code js, html, css phải được convert các kí tự đặc biệt, bạn có thể tự tạo tool convert để người dùng chuyển đổi trước khi bình luận

KẾT LUẬN: kết hợp với bộ icon và thêm các chức năng trong bài viết này, chắc chắn khung bình luận blog của bạn sẽ rất đắt khách.

Để lại bình luận nếu gặp khó khăn và chúc thành công !
Nguồn : Hung1001.Blog

SHARE FULL TÀI LIỆU LẬP TRÌNH

 Lập trình viên là người thiết kế, xây dựng và bảo trì các chương trình máy tính (phần mềm). Bằng cách thao tác các đoạn mã (các ngôn ngữ) trên các công cụ lập trình, họ có thể tạo ra các chương trình mới, sửa lỗi hay nâng cấp chương trình đó để tăng tính hiệu quả của việc sử dụng máy tính.
Các lập trình viên thường có thể làm việc trên nhiều ngôn ngữ lập trình, trong đó chủ yếu là lập trình web Java, C++, php, Asp, ASP.Net, Visual Basic.Net và C#. Và để hiểu rỡ hơn về lập trình hôm nay mình xin chia sẻ bộ tài liệu cực khủng: 100+ khóa học (vẫn đang update) tiếng Việt, tiếng Anh bao gồm tất cả những kiến thức một lập trình viên cần có.
Bộ Tài Liệu này gồm :
- Lập trình căn bản (C, C++, C#, Java)
- Lập trình Web (PHP,Java,Javascript Framework,HTML5,CSS3,Boostrap..)
- Lập trình Mobile (Android, IOS, React Native)
- BigData, DataScience
- Git,GitHub,ChatBot,Database,Linux,LinQ,Python..etc






Download và xem tài liệu :   Tải Về
Lời Kết :
Trên đây mình đã chia sẻ  tài liệu cực khủng về lập trình mà mọi người cần biết.Nếu mọi người thích hãy nhấn theo dõi Blog để có được những tài liệu bổ ích hơn nhen.



Chủ Nhật, 10 tháng 6, 2018

Material Design Dialog Box with jQuery


Ở bài viết trước tôi đã giới thiệu cho các bạn 1 hộp thông báo ẩn hiện responsive đơn giản với js và css. Trong bài viết này, chúng ta sẽ cho nó màu mè thêm 1 chút bằng việc thiết kế theo phong cách Material.

Trong thủ thuật này tôi sử dụng font awesome 5

Tích hợp các thư viện cần thiết nếu blog bạn chưa có, chèn trước thẻ đóng </head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href='https://use.fontawesome.com/releases/v5.0.13/css/all.css' rel='stylesheet' type='text/css'/>

Viết CSS
.material-noti-content,
.material-noti-overlay {
visibility: hidden;
opacity: 0
}

.material-noti-wrap {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: -10
}

.material-noti-content {
background: #fff;
padding: 25px;
left: 50%;
top: 40%;
position: relative;
-webkit-transform: translateX(-50%) translateY(-50%) !important;
transform: translateX(-50%) translateY(-50%) !important;
transition: all .3s ease-in-out;
max-width: 60%;
z-index: 1000;
border-radius: 4px;
box-shadow: 0 9px 46px 8px rgba(0, 0, 0, .14), 0 11px 15px -7px rgba(0, 0, 0, .12), 0 24px 38px 3px rgba(0, 0, 0, .2)
}

.material-noti-btn {
z-index: 1000;
text-decoration: none;
font-size: 18px;
color: #111
}

.material-noti-overlay {
position: fixed;
top: 0;
background: rgba(0, 0, 0, .59);
left: 0;
right: 0;
bottom: 0;
margin: 0;
z-index: 999;
transition: all .4s ease-in-out
}

.material-noti-title {
margin-bottom: 15px;
font-weight: 700;
font-size: 20px
}

.material-noti-content.shows,
.material-noti-overlay.shows {
visibility: visible;
opacity: 1
}

.material-noti-content.shows {
top: 50%
}

.material-noti-wrap.shows {
z-index: 1000
}

.material-noti-text {
font-size: 16px;
line-height: 1.5
}

.close-noti {
font-size: 20px;
color: #111;
position: absolute;
top: 10px;
right: 10px;
margin: 10px 8px;
padding:7px 10px
}

.done-wrap {
margin-top: 20px;
text-align: right
}

.done {
font-size: 14px;
color: #fff;
background: #3949ab;
padding: 9px 13px;
font-weight: 700;
border-radius: 3px;
text-transform: uppercase;
text-decoration: none
}

.done:hover,.close-noti:hover {
box-shadow: 0 2px 15px 0 rgba(0, 0, 0, .16), 0 2px 10px 0 rgba(0, 0, 0, .12);
cursor: pointer;
transition: all .4s ease-in-out
}

Đặt code HTML sau thẻ mở <body>
<div class='material-noti-wrap'>
<div class='material-noti-content'>
<div class='material-noti-title'>Notification</div>
<div class='material-noti-text'>
<!-- Viết thông báo vào đây -->
</div>
<div class='done-wrap'>
<a class='close-noti' href='javascript:void(0)'><i class='fas fa-times'></i></a></div>
<div class='done-wrap'>
<a class='done' href='javascript:void(0)'>Done</a></div>
</div>
</div>
<div class='material-noti-overlay'></div>



Đặt code js trước thẻ đóng </body>
<script type='text/javascript'>//<![CDATA[
$(document).ready(function() {
$(".close-noti,.done").click(function() {
$(".material-noti-wrap,.material-noti-content,.material-noti-overlay").removeClass("shows")
})
}), $(document).ready(function() {
$(".material-noti-btn").click(function() {
$(".material-noti-wrap,.material-noti-content,.material-noti-overlay").toggleClass("shows")
})
});
//]]></script>

Tạo button mở thông báo, đặt ở bất kì vị trí nào bạn mong muốn
<a class='material-noti-btn' href='javascript:void(0)' title='Notification'><i class='far fa-bell'></i></a>
DEMO ở thanh MENU

Chúc các bạn thành công :)

Nguồn : Hung1001.blog


Thứ Bảy, 9 tháng 6, 2018

Tạo khung chứa code có nút copy to clipboard cho blogspot

Trong bài viết Tạo khung chứa code có nút copy to clipboard cho blogspot chúng ta đã tạo được một form rất chuyên nghiệp để chia sẻ code, tuy nhiên nhận thấy vẫn có nhiều bất tiện trong quá trình sử dụng, để khắc phục điều đó chúng ta sẽ nâng cấp lên version 2 dễ sử dụng hơn sẽ được trình bày chi tiết trong bài viết này.


Công cụ để tạo nên khung code này

  • jQuery
  • Font Awesome
  • ClipboardJS
  • Tooltip Bootstrap component
Bài viết sử dụng jQuery 3.3.1, Font Awesome 5, ClipboardJS 2.0.1 và Tooltip Bootstrap 3.3.7

Tích hợp CSS tooltip và CSS khung chứa code
.codeHeader{background-color:#f5f5f5;border:1px solid #e0e0e0;border-bottom:0;text-align:right;padding:6px 0}
.copy-text{font-size:14px;cursor:pointer;color:#707070;padding:7px 10px;border-left:1px solid #e0e0e0}
.copy-text:before{font-family:"font awesome 5 free";content:"\f24d";display:inline-block;margin-right:7px}
.copy-text:hover{color:#707070;background:#ccc}
pre copy{display:block;background:#f9f9f9;max-height:400px;font-size:14px;color:black;text-align:left;overflow:auto;border:1px solid #d3d6db;margin:auto;padding:16px;line-height:21px}
.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}
.tooltip.in{opacity:.9;filter:alpha(opacity=90)}
.tooltip.top{padding:5px 0;margin-top:-3px}
.tooltip.right{padding:0 5px;margin-left:3px}
.tooltip.bottom{padding:5px 0;margin-top:3px}
.tooltip.left{padding:0 5px;margin-left:-3px}
.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}
.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}
.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}
.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}
.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}
.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}
.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}
.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}
.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}
.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}

Tích hợp jQuery, Font Awesome 5, chèn code trước thẻ </head> (bỏ qua nếu đã tích hợp)
<link href='https://use.fontawesome.com/releases/v5.0.13/css/all.css' rel='stylesheet' type='text/css' />
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'/>

Tích hợp ClipboardJS và Tooltip chèn code trước thẻ đóng </body>
<script src='https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.1/clipboard.min.js'/>
<script type='text/javascript'>//<![CDATA[
/* ========================================================================
* Bootstrap: tooltip.js v3.3.7
* http://getbootstrap.com/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
!function(t){"use strict";var e=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};e.VERSION="3.3.7",e.TRANSITION_DURATION=150,e.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},e.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var r=n[s];if("click"==r)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=r){var l="hover"==r?"mouseenter":"focusin",a="hover"==r?"mouseleave":"focusout";this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.getOptions=function(e){return(e=t.extend({},this.getDefaults(),this.$element.data(),e)).delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},e.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},e.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState)i.hoverState="in";else{if(clearTimeout(i.timeout),i.hoverState="in",!i.options.delay||!i.options.delay.show)return i.show();i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)}},e.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},e.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),!i.isInStateTrue()){if(clearTimeout(i.timeout),i.hoverState="out",!i.options.delay||!i.options.delay.hide)return i.hide();i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)}},e.prototype.show=function(){var i=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(i);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(i.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),r=this.getUID(this.type);this.setContent(),s.attr("id",r),this.$element.attr("aria-describedby",r),this.options.animation&&s.addClass("fade");var l="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,p=a.test(l);p&&(l=l.replace(a,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(l).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var h=this.getPosition(),f=s[0].offsetWidth,c=s[0].offsetHeight;if(p){var u=l,d=this.getPosition(this.$viewport);l="bottom"==l&&h.bottom+c>d.bottom?"top":"top"==l&&h.top-c<d.top?"bottom":"right"==l&&h.right+f>d.width?"left":"left"==l&&h.left-f<d.left?"right":l,s.removeClass(u).addClass(l)}var g=this.getCalculatedOffset(l,h,f,c);this.applyPlacement(g,l);var m=function(){var t=n.hoverState;n.$element.trigger("shown.bs."+n.type),n.hoverState=null,"out"==t&&n.leave(n)};t.support.transition&&this.$tip.hasClass("fade")?s.one("bsTransitionEnd",m).emulateTransitionEnd(e.TRANSITION_DURATION):m()}},e.prototype.applyPlacement=function(e,i){var o=this.tip(),n=o[0].offsetWidth,s=o[0].offsetHeight,r=parseInt(o.css("margin-top"),10),l=parseInt(o.css("margin-left"),10);isNaN(r)&&(r=0),isNaN(l)&&(l=0),e.top+=r,e.left+=l,t.offset.setOffset(o[0],t.extend({using:function(t){o.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),o.addClass("in");var a=o[0].offsetWidth,p=o[0].offsetHeight;"top"==i&&p!=s&&(e.top=e.top+s-p);var h=this.getViewportAdjustedDelta(i,e,a,p);h.left?e.left+=h.left:e.top+=h.top;var f=/top|bottom/.test(i),c=f?2*h.left-n+a:2*h.top-s+p,u=f?"offsetWidth":"offsetHeight";o.offset(e),this.replaceArrow(c,o[0][u],f)},e.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},e.prototype.hide=function(i){var o=this,n=t(this.$tip),s=t.Event("hide.bs."+this.type);function r(){"in"!=o.hoverState&&n.detach(),o.$element&&o.$element.removeAttr("aria-describedby").trigger("hidden.bs."+o.type),i&&i()}if(this.$element.trigger(s),!s.isDefaultPrevented())return n.removeClass("in"),t.support.transition&&n.hasClass("fade")?n.one("bsTransitionEnd",r).emulateTransitionEnd(e.TRANSITION_DURATION):r(),this.hoverState=null,this},e.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},e.prototype.hasContent=function(){return this.getTitle()},e.prototype.getPosition=function(e){var i=(e=e||this.$element)[0],o="BODY"==i.tagName,n=i.getBoundingClientRect();null==n.width&&(n=t.extend({},n,{width:n.right-n.left,height:n.bottom-n.top}));var s=window.SVGElement&&i instanceof window.SVGElement,r=o?{top:0,left:0}:s?null:e.offset(),l={scroll:o?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},a=o?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},n,l,a,r)},e.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},e.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,r=this.getPosition(this.$viewport);if(/right|left/.test(t)){var l=e.top-s-r.scroll,a=e.top+s-r.scroll+o;l<r.top?n.top=r.top-l:a>r.top+r.height&&(n.top=r.top+r.height-a)}else{var p=e.left-s,h=e.left+s+i;p<r.left?n.left=r.left-p:h>r.right&&(n.left=r.left+r.width-h)}return n},e.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},e.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},e.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},e.prototype.enable=function(){this.enabled=!0},e.prototype.disable=function(){this.enabled=!1},e.prototype.toggleEnabled=function(){this.enabled=!this.enabled},e.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},e.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var i=t.fn.tooltip;t.fn.tooltip=function(i){return this.each(function(){var o=t(this),n=o.data("bs.tooltip"),s="object"==typeof i&&i;!n&&/destroy|hide/.test(i)||(n||o.data("bs.tooltip",n=new e(this,s)),"string"==typeof i&&n[i]())})},t.fn.tooltip.Constructor=e,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery);
//]]></script>

Cuối cùng khởi tạo nút copy, tooltip cùng 1 số thành phần cần thiết, chèn code ngay bên dưới 2 script bên trên
<script type='text/javascript'>//<![CDATA[
jQuery(document).ready(function($) {
jQuery("pre copy").before("<div class='codeHeader'><a class='copy-text' data-clipboard-target='pre copy' data-clipboard-action='copy'>Copy</a></div>");
$('.copy-text').tooltip({
trigger: 'click'
})
});
var clipboard = new ClipboardJS(".copy-text", {
target: function(trigger) {
return trigger.parentNode.nextElementSibling
}
});

function setTooltip(btn, message) {
$(btn).tooltip('hide').attr('data-original-title', message).tooltip('show');
}

function hideTooltip(btn) {
setTimeout(function() {
$(btn).tooltip('hide');
}, 1000);
}
clipboard.on('success', function(e) {
var btn = $(e.trigger);
setTooltip(btn, 'Copied');
hideTooltip(btn);
});
clipboard.on('error', function(e) {
var btn = $(e.trigger);
setTooltip('Failed');
hideTooltip(btn);
});
//]]></script>

Lưu mẫu lại !

Khi viết bài để tạo khung code bạn chuyển chế độ HTML và đặt code theo mẫu
<pre><copy>
<!-- Dán code vào đây -->
</copy></pre>

Trước khi dán code bạn cần convert các kí tự để tránh code chạy luôn trên trang, sử dụng công cụ convert để chuyển đổi nhé

Như bạn thấy, mẫu code tạo form khi viết bài đã được rút gọn đi một cách không thể ngắn hơn nhờ 1 ít js, bên cạnh đó bạn cũng không cần chỉnh sửa data-clipboard-target nữa, icon font cũng được định nghĩa qua css, bạn có thể dễ dàng thay đổi trong template



#Lưu ý: Nếu bạn tích hợp ClipboardJS verson 1.x.x thì phải chuyển ClipboardJS thành Clipboard để code hoạt động đúng nhé

DEMO

KẾT LUẬN: Khi ghé thăm các trang về thủ thuật, tôi rất thích trang nào có nút copy to clipboard rất thích quay lại trang của họ, vì đơn giản nó giảm được rất nhiều thao tác tay cũng như thể hiện được độ chuyên nghiệp của webmaster. Hi vọng khung chứa code này sẽ sớm xuất hiện trên trang của bạn

Chúc thành công !