-
Notifications
You must be signed in to change notification settings - Fork 0
xixici/xixici.github.io
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
<!DOCTYPE html> <html class="theme-next gemini use-motion" lang="zh-CN"> <head><meta name="generator" content="Hexo 3.8.0"> <!-- hexo-inject:begin --><!-- hexo-inject:end --><meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"> <meta name="theme-color" content="#222"> <link rel="stylesheet" href="/lib/needsharebutton/needsharebutton.css"> <script src="/lib/pace/pace.min.js?v=1.0.2"></script> <link rel="stylesheet" href="/lib/pace/pace-theme-bounce.min.css?v=1.0.2"> <link rel="stylesheet" href="/lib/Han/dist/han.min.css?v=3.3"> <link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2"> <link rel="stylesheet" href="/css/main.css?v=7.0.0"> <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=7.0.0"> <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=7.0.0"> <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=7.0.0"> <link rel="mask-icon" href="/images/logo.svg?v=7.0.0" color="#222"> <script id="hexo.configurations"> var NexT = window.NexT || {}; var CONFIG = { root: '/', scheme: 'Gemini', version: '7.0.0', sidebar: {"position":"left","width":300,"display":"post","offset":12,"b2t":true,"scrollpercent":true,"onmobile":false}, fancybox: false, fastclick: false, lazyload: true, tabs: true, motion: {"enable":true,"async":true,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}}, algolia: { applicationID: '', apiKey: '', indexName: '', hits: {"per_page":10}, labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"} } }; </script> <meta name="description" content="xixici"> <meta property="og:type" content="website"> <meta property="og:title" content="西西词"> <meta property="og:url" content="http://xixici.com/README.html"> <meta property="og:site_name" content="西西词"> <meta property="og:description" content="xixici"> <meta property="og:locale" content="zh-CN"> <meta property="og:updated_time" content="2019-02-25T03:47:04.504Z"> <meta name="twitter:card" content="summary"> <meta name="twitter:title" content="西西词"> <meta name="twitter:description" content="xixici"> <link rel="canonical" href="http://xixici.com/README.html"> <script id="page.configurations"> CONFIG.page = { sidebar: "", }; </script> <title> | 西西词</title> <noscript> <style> .use-motion .motion-element, .use-motion .brand, .use-motion .menu-item, .sidebar-inner, .use-motion .post-block, .use-motion .pagination, .use-motion .comments, .use-motion .post-header, .use-motion .post-body, .use-motion .collection-title { opacity: initial; } .use-motion .logo, .use-motion .site-title, .use-motion .site-subtitle { opacity: initial; top: initial; } .use-motion .logo-line-before i { left: initial; } .use-motion .logo-line-after i { right: initial; } </style> </noscript><!-- hexo-inject:begin --><!-- hexo-inject:end --> </head> <body itemscope itemtype="http://schema.org/WebPage" lang="zh-CN"> <!-- hexo-inject:begin --><!-- hexo-inject:end --><div class="container sidebar-position-left page-post-detail"> <div class="headband"></div> <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader"> <div class="header-inner"><div class="site-brand-wrapper"> <div class="site-meta"> <div class="custom-logo-site-title"> <a href="/" class="brand" rel="start"> <span class="logo-line-before"><i></i></span> <span class="site-title">西西词</span> <span class="logo-line-after"><i></i></span> </a> </div> <h1 class="site-subtitle" itemprop="description">诗在远方</h1> </div> <div class="site-nav-toggle"> <button aria-label="切换导航栏"> <span class="btn-bar"></span> <span class="btn-bar"></span> <span class="btn-bar"></span> </button> </div> </div> <nav class="site-nav"> <ul id="menu" class="menu"> <li class="menu-item menu-item-home"> <a href="/" rel="section"><i class="menu-item-icon fa fa-fw fa-home"></i> <br>首页</a> </li> <li class="menu-item menu-item-about"> <a href="/about/" rel="section"><i class="menu-item-icon fa fa-fw fa-user"></i> <br>关于</a> </li> <li class="menu-item menu-item-tags"> <a href="/tags/" rel="section"><i class="menu-item-icon fa fa-fw fa-tags"></i> <br>标签<span class="badge">22</span></a> </li> <li class="menu-item menu-item-categories"> <a href="/categories/" rel="section"><i class="menu-item-icon fa fa-fw fa-th"></i> <br>分类<span class="badge">7</span></a> </li> <li class="menu-item menu-item-archives"> <a href="/archives/" rel="section"><i class="menu-item-icon fa fa-fw fa-archive"></i> <br>归档<span class="badge">41</span></a> </li> <li class="menu-item menu-item-search"> <a href="javascript:;" class="popup-trigger"> <i class="menu-item-icon fa fa-search fa-fw"></i> <br>搜索</a> </li> </ul> <div class="site-search"> <div class="popup search-popup local-search-popup"> <div class="local-search-header clearfix"> <span class="search-icon"> <i class="fa fa-search"></i> </span> <span class="popup-btn-close"> <i class="fa fa-times-circle"></i> </span> <div class="local-search-input-wrapper"> <input autocomplete="off" placeholder="搜索..." spellcheck="false" type="text" id="local-search-input"> </div> </div> <div id="local-search-result"></div> </div> </div> </nav> </div> </header> <a href="https://github.com/xixici" class="github-corner" title="Follow me on GitHub" aria-label="Follow me on GitHub" rel="noopener" target="_blank"><svg width="80" height="80" viewbox="0 0 250 250" style="fill: #222; color: #fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"/><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"/><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"/></svg></a> <main id="main" class="main"> <div class="main-inner"> <div class="content-wrap"> <div id="content" class="content"> <div id="posts" class="posts-expand"> <div class="post-block page"> <header class="post-header"> <h2 class="post-title" itemprop="name headline"> </h2> <div class="post-meta"> </div> </header> <div class="post-body han-init-context"> <h1 id="xixici"><a href="#xixici" class="headerlink" title="xixici"></a>xixici</h1> </div> </div> </div> </div> <div class="comments" id="comments"> </div> </div> <div class="sidebar-toggle"> <div class="sidebar-toggle-line-wrap"> <span class="sidebar-toggle-line sidebar-toggle-line-first"></span> <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span> <span class="sidebar-toggle-line sidebar-toggle-line-last"></span> </div> </div> <aside id="sidebar" class="sidebar"> <div class="sidebar-inner"> <ul class="sidebar-nav motion-element"> <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap"> 文章目录 </li> <li class="sidebar-nav-overview" data-target="site-overview-wrap"> 站点概览 </li> </ul> <div class="site-overview-wrap sidebar-panel"> <div class="site-overview"> <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person"> <img class="site-author-image" itemprop="image" src="/uploads/avatar.gif" alt="博主"> <p class="site-author-name" itemprop="name">博主</p> <p class="site-description motion-element" itemprop="description">远方与诗的存在</p> </div> <nav class="site-state motion-element"> <div class="site-state-item site-state-posts"> <a href="/archives/"> <span class="site-state-item-count">41</span> <span class="site-state-item-name">日志</span> </a> </div> <div class="site-state-item site-state-categories"> <a href="/categories/index.html"> <span class="site-state-item-count">7</span> <span class="site-state-item-name">分类</span> </a> </div> <div class="site-state-item site-state-tags"> <a href="/tags/index.html"> <span class="site-state-item-count">22</span> <span class="site-state-item-name">标签</span> </a> </div> </nav> <div class="links-of-author motion-element"> <span class="links-of-author-item"> <a href="https://github.com/xixici" title="GitHub → https://github.com/xixici" rel="noopener" target="_blank"><i class="fa fa-fw fa-github"></i></a> </span> <span class="links-of-author-item"> <a href="mailto:ybleak@gmail.com" title="E-Mail → mailto:ybleak@gmail.com" rel="noopener" target="_blank"><i class="fa fa-fw fa-envelope"></i></a> </span> </div> <div class="cc-license motion-element" itemprop="license"> <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" class="cc-opacity" rel="noopener" target="_blank"><img src="/images/cc-by-nc-sa.svg" alt="Creative Commons"></a> </div> </div> </div> <!--noindex--> <div class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active"> <div class="post-toc"> <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#xixici"><span class="nav-number">1.</span> <span class="nav-text">xixici</span></a></li></ol></div> </div> </div> <!--/noindex--> <div class="back-to-top"> <i class="fa fa-arrow-up"></i> <span id="scrollpercent"><span>0</span>%</span> </div> </div> </aside> </div> </main> <footer id="footer" class="footer"> <div class="footer-inner"> <div class="copyright">© 2015 – <span itemprop="copyrightYear">2019</span> <span class="with-love" id="animate"> <i class="fa fa-heart"></i> </span> <span class="author" itemprop="copyrightHolder">博主</span> </div> <div class="powered-by">由 <a href="https://hexo.io" class="theme-link" rel="noopener" target="_blank">Hexo</a> 强力驱动 - Hosted by <a href="https://pages.coding.me" style="font-weight: bold">Coding Pages</a> v3.8.0</div> <span class="post-meta-divider">|</span> <div class="theme-info">主题 – <a href="https://theme-next.org" class="theme-link" rel="noopener" target="_blank">NexT.Gemini</a> v7.0.0</div> <div class="busuanzi-count"> <script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script> <span class="post-meta-item-icon"> <i class="fa fa-user"></i> </span> <span class="site-uv" title="总访客量"> <span class="busuanzi-value" id="busuanzi_value_site_uv"></span> </span> <span class="post-meta-divider">|</span> <span class="post-meta-item-icon"> <i class="fa fa-eye"></i> </span> <span class="site-pv" title="总访问量"> <span class="busuanzi-value" id="busuanzi_value_site_pv"></span> </span> </div> </div> </footer> <div id="needsharebutton-float"> <span class="btn"> <i class="fa fa-share-alt" aria-hidden="true"></i> </span> </div> </div> <script> if (Object.prototype.toString.call(window.Promise) !== '[object Function]') { window.Promise = null; } </script> <script color="0,0,255" opacity="0.5" zindex="-1" count="99" src="/lib/canvas-nest/canvas-nest.min.js"></script> <script src="/lib/jquery/index.js?v=2.1.3"></script> <script src="/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script> <script src="/lib/velocity/velocity.min.js?v=1.2.1"></script> <script src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script> <script src="/lib/reading_progress/reading_progress.js"></script> <script src="/js/src/utils.js?v=7.0.0"></script> <script src="/js/src/motion.js?v=7.0.0"></script> <script src="/js/src/affix.js?v=7.0.0"></script> <script src="/js/src/schemes/pisces.js?v=7.0.0"></script> <script src="/js/src/scrollspy.js?v=7.0.0"></script> <script src="/js/src/post-details.js?v=7.0.0"></script> <script src="/js/src/bootstrap.js?v=7.0.0"></script> <script src="//cdn1.lncld.net/static/js/3.11.1/av-min.js"></script> <script src="//unpkg.com/valine/dist/Valine.min.js"></script> <script> var GUEST = ['nick', 'mail', 'link']; var guest = 'nick,mail,link'; guest = guest.split(',').filter(function(item) { return GUEST.indexOf(item) > -1; }); new Valine({ el: '#comments', verify: false, notify: false, appId: 'eNL90rjoyqRULdbwDWngaezL-gzGzoHsz', appKey: 'U7WbxXmVMpcwTtsEqCv41v5s', placeholder: 'Talk Something...', avatar: 'mm', meta: guest, pageSize: '10' || 10, visitor: false }); </script> <script> // Popup Window; var isfetched = false; var isXml = true; // Search DB path; var search_path = "search.xml"; if (search_path.length === 0) { search_path = "search.xml"; } else if (/json$/i.test(search_path)) { isXml = false; } var path = "/" + search_path; // monitor main search box; var onPopupClose = function (e) { $('.popup').hide(); $('#local-search-input').val(''); $('.search-result-list').remove(); $('#no-result').remove(); $(".local-search-pop-overlay").remove(); $('body').css('overflow', ''); } function proceedsearch() { $("body") .append('<div class="search-popup-overlay local-search-pop-overlay"></div>') .css('overflow', 'hidden'); $('.search-popup-overlay').click(onPopupClose); $('.popup').toggle(); var $localSearchInput = $('#local-search-input'); $localSearchInput.attr("autocapitalize", "none"); $localSearchInput.attr("autocorrect", "off"); $localSearchInput.focus(); } // search function; var searchFunc = function(path, search_id, content_id) { 'use strict'; // start loading animation $("body") .append('<div class="search-popup-overlay local-search-pop-overlay">' + '<div id="search-loading-icon">' + '<i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>' + '</div>' + '</div>') .css('overflow', 'hidden'); $("#search-loading-icon").css('margin', '20% auto 0 auto').css('text-align', 'center'); $.ajax({ url: path, dataType: isXml ? "xml" : "json", async: true, success: function(res) { // get the contents from search data isfetched = true; $('.popup').detach().appendTo('.header-inner'); var datas = isXml ? $("entry", res).map(function() { return { title: $("title", this).text(), content: $("content",this).text(), url: $("url" , this).text() }; }).get() : res; var input = document.getElementById(search_id); var resultContent = document.getElementById(content_id); var inputEventFunction = function() { var searchText = input.value.trim().toLowerCase(); var keywords = searchText.split(/[\s\-]+/); if (keywords.length > 1) { keywords.push(searchText); } var resultItems = []; if (searchText.length > 0) { // perform local searching datas.forEach(function(data) { var isMatch = false; var hitCount = 0; var searchTextCount = 0; var title = data.title.trim(); var titleInLowerCase = title.toLowerCase(); var content = data.content.trim().replace(/<[^>]+>/g,""); var contentInLowerCase = content.toLowerCase(); var articleUrl = decodeURIComponent(data.url).replace(/\/{2,}/g, '/'); var indexOfTitle = []; var indexOfContent = []; // only match articles with not empty titles if(title != '') { keywords.forEach(function(keyword) { function getIndexByWord(word, text, caseSensitive) { var wordLen = word.length; if (wordLen === 0) { return []; } var startPosition = 0, position = [], index = []; if (!caseSensitive) { text = text.toLowerCase(); word = word.toLowerCase(); } while ((position = text.indexOf(word, startPosition)) > -1) { index.push({position: position, word: word}); startPosition = position + wordLen; } return index; } indexOfTitle = indexOfTitle.concat(getIndexByWord(keyword, titleInLowerCase, false)); indexOfContent = indexOfContent.concat(getIndexByWord(keyword, contentInLowerCase, false)); }); if (indexOfTitle.length > 0 || indexOfContent.length > 0) { isMatch = true; hitCount = indexOfTitle.length + indexOfContent.length; } } // show search results if (isMatch) { // sort index by position of keyword [indexOfTitle, indexOfContent].forEach(function (index) { index.sort(function (itemLeft, itemRight) { if (itemRight.position !== itemLeft.position) { return itemRight.position - itemLeft.position; } else { return itemLeft.word.length - itemRight.word.length; } }); }); // merge hits into slices function mergeIntoSlice(text, start, end, index) { var item = index[index.length - 1]; var position = item.position; var word = item.word; var hits = []; var searchTextCountInSlice = 0; while (position + word.length <= end && index.length != 0) { if (word === searchText) { searchTextCountInSlice++; } hits.push({position: position, length: word.length}); var wordEnd = position + word.length; // move to next position of hit index.pop(); while (index.length != 0) { item = index[index.length - 1]; position = item.position; word = item.word; if (wordEnd > position) { index.pop(); } else { break; } } } searchTextCount += searchTextCountInSlice; return { hits: hits, start: start, end: end, searchTextCount: searchTextCountInSlice }; } var slicesOfTitle = []; if (indexOfTitle.length != 0) { slicesOfTitle.push(mergeIntoSlice(title, 0, title.length, indexOfTitle)); } var slicesOfContent = []; while (indexOfContent.length != 0) { var item = indexOfContent[indexOfContent.length - 1]; var position = item.position; var word = item.word; // cut out 100 characters var start = position - 20; var end = position + 80; if(start < 0){ start = 0; } if (end < position + word.length) { end = position + word.length; } if(end > content.length){ end = content.length; } slicesOfContent.push(mergeIntoSlice(content, start, end, indexOfContent)); } // sort slices in content by search text's count and hits' count slicesOfContent.sort(function (sliceLeft, sliceRight) { if (sliceLeft.searchTextCount !== sliceRight.searchTextCount) { return sliceRight.searchTextCount - sliceLeft.searchTextCount; } else if (sliceLeft.hits.length !== sliceRight.hits.length) { return sliceRight.hits.length - sliceLeft.hits.length; } else { return sliceLeft.start - sliceRight.start; } }); // select top N slices in content var upperBound = parseInt('1'); if (upperBound >= 0) { slicesOfContent = slicesOfContent.slice(0, upperBound); } // highlight title and content function highlightKeyword(text, slice) { var result = ''; var prevEnd = slice.start; slice.hits.forEach(function (hit) { result += text.substring(prevEnd, hit.position); var end = hit.position + hit.length; result += '<b class="search-keyword">' + text.substring(hit.position, end) + '</b>'; prevEnd = end; }); result += text.substring(prevEnd, slice.end); return result; } var resultItem = ''; if (slicesOfTitle.length != 0) { resultItem += "<li><a href='" + articleUrl + "' class='search-result-title'>" + highlightKeyword(title, slicesOfTitle[0]) + "</a>"; } else { resultItem += "<li><a href='" + articleUrl + "' class='search-result-title'>" + title + "</a>"; } slicesOfContent.forEach(function (slice) { resultItem += "<a href='" + articleUrl + "'>" + "<p class=\"search-result\">" + highlightKeyword(content, slice) + "...</p>" + "</a>"; }); resultItem += "</li>"; resultItems.push({ item: resultItem, searchTextCount: searchTextCount, hitCount: hitCount, id: resultItems.length }); } }) }; if (keywords.length === 1 && keywords[0] === "") { resultContent.innerHTML = '<div id="no-result"><i class="fa fa-search fa-5x"></i></div>' } else if (resultItems.length === 0) { resultContent.innerHTML = '<div id="no-result"><i class="fa fa-frown-o fa-5x"></i></div>' } else { resultItems.sort(function (resultLeft, resultRight) { if (resultLeft.searchTextCount !== resultRight.searchTextCount) { return resultRight.searchTextCount - resultLeft.searchTextCount; } else if (resultLeft.hitCount !== resultRight.hitCount) { return resultRight.hitCount - resultLeft.hitCount; } else { return resultRight.id - resultLeft.id; } }); var searchResultList = '<ul class=\"search-result-list\">'; resultItems.forEach(function (result) { searchResultList += result.item; }) searchResultList += "</ul>"; resultContent.innerHTML = searchResultList; } } if ('auto' === 'auto') { input.addEventListener('input', inputEventFunction); } else { $('.search-icon').click(inputEventFunction); input.addEventListener('keypress', function (event) { if (event.keyCode === 13) { inputEventFunction(); } }); } // remove loading animation $(".local-search-pop-overlay").remove(); $('body').css('overflow', ''); proceedsearch(); } }); } // handle and trigger popup window; $('.popup-trigger').click(function(e) { e.stopPropagation(); if (isfetched === false) { searchFunc(path, 'local-search-input', 'local-search-result'); } else { proceedsearch(); }; }); $('.popup-btn-close').click(onPopupClose); $('.popup').click(function(e){ e.stopPropagation(); }); $(document).on('keyup', function (event) { var shouldDismissSearchPopup = event.which === 27 && $('.search-popup').is(':visible'); if (shouldDismissSearchPopup) { onPopupClose(); } }); </script> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> <script src="/lib/needsharebutton/needsharebutton.js"></script> <script> pbOptions = {}; pbOptions.iconStyle = "default"; pbOptions.boxForm = "horizontal"; pbOptions.position = "bottomCenter"; pbOptions.networks = "Weibo,Wechat,Douban,QQZone,Twitter,Linkedin,Mailto,Pinterest,Facebook,Tumblr,GoogleBookmarks,Evernote"; new needShareButton('#needsharebutton-postbottom', pbOptions); flOptions = {}; flOptions.iconStyle = "default"; flOptions.boxForm = "horizontal"; flOptions.position = "middleRight"; flOptions.networks = "Weibo,Wechat,Douban,QQZone,Twitter,Linkedin,Mailto,Pinterest,Facebook,Tumblr,GoogleBookmarks,Evernote"; new needShareButton('#needsharebutton-float', flOptions); </script> <script src="/lib/pangu/dist/pangu.min.js?v=3.3"></script> <script>pangu.spacingPage();</script> <script src="/js/src/js.cookie.js?v=7.0.0"></script> <script src="/js/src/scroll-cookie.js?v=7.0.0"></script> <style> .copy-btn { display: inline-block; padding: 6px 12px; font-size: 13px; font-weight: 700; line-height: 20px; color: #333; white-space: nowrap; vertical-align: middle; cursor: pointer; background-color: #eee; background-image: linear-gradient(#fcfcfc, #eee); border: 1px solid #d5d5d5; border-radius: 3px; user-select: none; outline: 0; } .highlight-wrap .copy-btn { transition: opacity .3s ease-in-out; opacity: 0; padding: 2px 6px; position: absolute; right: 4px; top: 8px; } .highlight-wrap:hover .copy-btn, .highlight-wrap .copy-btn:focus { opacity: 1 } .highlight-wrap { position: relative; } </style> <script> $('.highlight').each(function(i, e) { var $wrap = $('<div>').addClass('highlight-wrap'); $(e).after($wrap); $wrap.append($('<button>').addClass('copy-btn').append('复制').on('click', function(e) { var code = $(this).parent().find('.code').find('.line').map(function(i, e) { return $(e).text(); }).toArray().join('\n'); var ta = document.createElement('textarea'); var range = document.createRange(); //For Chrome var sel = window.getSelection(); //For Chrome var yPosition = window.pageYOffset || document.documentElement.scrollTop; ta.style.top = yPosition + 'px'; //Prevent page scroll ta.style.position = 'absolute'; ta.style.opacity = '0'; ta.value = code; ta.textContent = code; //For FireFox ta.contentEditable = true; ta.readOnly = false; document.body.appendChild(ta); range.selectNode(ta); sel.removeAllRanges(); sel.addRange(range); ta.setSelectionRange(0, code.length); var result = document.execCommand('copy'); if (result) $(this).text('复制成功'); else $(this).text('复制失败'); ta.blur(); //For iOS $(this).blur(); })).on('mouseleave', function(e) { var $b = $(this).find('.copy-btn'); setTimeout(function() { $b.text('复制'); }, 300); }).append(e); }) </script><!-- hexo-inject:begin --><!-- Begin: Injected MathJax --> <script type="text/x-mathjax-config"> MathJax.Hub.Config({"tex2jax":{"inlineMath":[["$","$"],["\\(","\\)"]],"skipTags":["script","noscript","style","textarea","pre","code"],"processEscapes":true},"TeX":{"equationNumbers":{"autoNumber":"AMS"}}}); </script> <script type="text/x-mathjax-config"> MathJax.Hub.Queue(function() { var all = MathJax.Hub.getAllJax(), i; for(i=0; i < all.length; i += 1) { all[i].SourceElement().parentNode.className += ' has-jax'; } }); </script> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js"> </script> <!-- End: Injected MathJax --> <!-- hexo-inject:end --> </body> </html>
About
xixici built with Hexo
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published