Site updated: 2019-10-25 14:36:19
445
2019/10/09/NaoVision-General-Introduction/index.html
Normal file
@ -0,0 +1,445 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
|
||||
<meta name="theme-color" content="#222">
|
||||
<meta name="generator" content="Hexo 3.9.0">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=7.4.1">
|
||||
<link rel="mask-icon" href="/images/logo.svg?v=7.4.1" color="#222">
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css?v=7.4.1">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css?v=4.7.0">
|
||||
|
||||
|
||||
<script id="hexo-configurations">
|
||||
var NexT = window.NexT || {};
|
||||
var CONFIG = {
|
||||
root: '/',
|
||||
scheme: 'Muse',
|
||||
version: '7.4.1',
|
||||
exturl: false,
|
||||
sidebar: {"position":"left","display":"post","offset":12,"onmobile":false},
|
||||
copycode: {"enable":false,"show_result":false,"style":null},
|
||||
back2top: {"enable":true,"sidebar":false,"scrollpercent":false},
|
||||
bookmark: {"enable":false,"color":"#222","save":"auto"},
|
||||
fancybox: false,
|
||||
mediumzoom: false,
|
||||
lazyload: false,
|
||||
pangu: false,
|
||||
algolia: {
|
||||
appID: '',
|
||||
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"}
|
||||
},
|
||||
localsearch: {"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},
|
||||
path: '',
|
||||
motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
|
||||
translation: {
|
||||
copy_button: 'Copy',
|
||||
copy_success: 'Copied',
|
||||
copy_failure: 'Copy failed'
|
||||
},
|
||||
sidebarPadding: 40
|
||||
};
|
||||
</script>
|
||||
|
||||
<meta name="description" content="NaoVision Concise DocumentProject SummaryIntroductionNaoVision is a dedicated NAO group of dedicated vision method solutions for NAO robots in the RoboCup competition. NaoVision was written in C++ and">
|
||||
<meta name="keywords" content="Software, Computing">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:title" content="NaoVision">
|
||||
<meta property="og:url" content="http://saturneric.cn/2019/10/09/NaoVision-General-Introduction/index.html">
|
||||
<meta property="og:site_name" content="Hu Yu's Personal Blog">
|
||||
<meta property="og:description" content="NaoVision Concise DocumentProject SummaryIntroductionNaoVision is a dedicated NAO group of dedicated vision method solutions for NAO robots in the RoboCup competition. NaoVision was written in C++ and">
|
||||
<meta property="og:locale" content="en">
|
||||
<meta property="og:updated_time" content="2019-10-25T06:35:45.513Z">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="NaoVision">
|
||||
<meta name="twitter:description" content="NaoVision Concise DocumentProject SummaryIntroductionNaoVision is a dedicated NAO group of dedicated vision method solutions for NAO robots in the RoboCup competition. NaoVision was written in C++ and">
|
||||
<link rel="canonical" href="http://saturneric.cn/2019/10/09/NaoVision-General-Introduction/">
|
||||
|
||||
|
||||
<script id="page-configurations">
|
||||
// https://hexo.io/docs/variables.html
|
||||
CONFIG.page = {
|
||||
sidebar: "",
|
||||
isHome: false,
|
||||
isPost: true,
|
||||
isPage: false,
|
||||
isArchive: false
|
||||
};
|
||||
</script>
|
||||
|
||||
<title>NaoVision | Hu Yu's Personal Blog</title>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<noscript>
|
||||
<style>
|
||||
.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-header { 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>
|
||||
|
||||
</head>
|
||||
|
||||
<body itemscope itemtype="http://schema.org/WebPage">
|
||||
<div class="container use-motion">
|
||||
<div class="headband"></div>
|
||||
|
||||
<header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
|
||||
<div class="header-inner"><div class="site-brand-container">
|
||||
<div class="site-meta">
|
||||
|
||||
<div>
|
||||
<a href="/" class="brand" rel="start">
|
||||
<span class="logo-line-before"><i></i></span>
|
||||
<span class="site-title">Hu Yu's Personal Blog</span>
|
||||
<span class="logo-line-after"><i></i></span>
|
||||
</a>
|
||||
</div>
|
||||
<p class="site-subtitle">Technical Articles about Computing and Software.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="site-nav-toggle">
|
||||
<div class="toggle" aria-label="Toggle navigation bar">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<nav class="site-nav">
|
||||
|
||||
<ul id="menu" class="menu">
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-home">
|
||||
|
||||
|
||||
|
||||
<a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-archives">
|
||||
|
||||
|
||||
|
||||
<a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
<div class="back-to-top">
|
||||
<i class="fa fa-arrow-up"></i>
|
||||
<span>0%</span>
|
||||
</div>
|
||||
|
||||
|
||||
<main id="main" class="main">
|
||||
<div class="main-inner">
|
||||
<div class="content-wrap">
|
||||
<div id="content" class="content">
|
||||
|
||||
|
||||
<div class="posts-expand">
|
||||
|
||||
|
||||
|
||||
<article itemscope itemtype="http://schema.org/Article" class="post-block " lang="en">
|
||||
<link itemprop="mainEntityOfPage" href="http://saturneric.cn/2019/10/09/NaoVision-General-Introduction/">
|
||||
|
||||
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||
<meta itemprop="name" content="Hu Yu">
|
||||
<meta itemprop="description" content="">
|
||||
<meta itemprop="image" content="/images/avatar.gif">
|
||||
</span>
|
||||
|
||||
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
|
||||
<meta itemprop="name" content="Hu Yu's Personal Blog">
|
||||
</span>
|
||||
<header class="post-header">
|
||||
<h1 class="post-title" itemprop="name headline">NaoVision
|
||||
|
||||
|
||||
</h1>
|
||||
|
||||
<div class="post-meta">
|
||||
<span class="post-meta-item">
|
||||
<span class="post-meta-item-icon">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
</span>
|
||||
<span class="post-meta-item-text">Posted on</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<time title="Created: 2019-10-09 23:22:44" itemprop="dateCreated datePublished" datetime="2019-10-09T23:22:44+08:00">2019-10-09</time>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="post-meta-item">
|
||||
<span class="post-meta-item-icon">
|
||||
<i class="fa fa-calendar-check-o"></i>
|
||||
</span>
|
||||
<span class="post-meta-item-text">Edited on</span>
|
||||
<time title="Modified: 2019-10-25 14:35:45" itemprop="dateModified" datetime="2019-10-25T14:35:45+08:00">2019-10-25</time>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-body" itemprop="articleBody">
|
||||
|
||||
|
||||
<h1 id="NaoVision-Concise-Document"><a href="#NaoVision-Concise-Document" class="headerlink" title="NaoVision Concise Document"></a>NaoVision Concise Document</h1><h2 id="Project-Summary"><a href="#Project-Summary" class="headerlink" title="Project Summary"></a>Project Summary</h2><h3 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h3><p>NaoVision is a dedicated NAO group of dedicated vision method solutions for NAO robots in the RoboCup competition. NaoVision was written in C++ and is designed to solve the problem that NAO robots in the Bhuman system under the original fixed threshold scheme for the color discrimination of the field is easily interfered by light and other factors, resulting in the actual game NAO robot for the objects in the field (especially football) The identification is not fast enough and accurate.</p>
|
||||
<p>Correspondingly, for the judgment of the football field, NaoVision adopts the OTSU algorithm to realize the automatic adjustment of the image processing threshold, and is able to correctly identify and mark the field pixels in most cases without being affected by the light shadow.</p>
|
||||
<p>Based on the color discrimination of the site, NaoVision creates a scan line in the picture. The boundary between the site and the non-site is determined by sampling and scanning the pixels where the scan line is located. The picture is then divided into part and non-site parts by connecting between the demarcation points.</p>
|
||||
<p>In general, in order to reduce the computational overhead, NaoVision only calculates the picture pixels belonging to the site part. After determining the calculation range, NaoVison will create smaller scan lines within the calculation range for more detailed scanning and detection of objects within the calculation range.</p>
|
||||
<p>Then, NaoVision limited the detection of circular objects in the field. The program will perform a uniform skip scan on the scan line. After detecting pixels that do not belong to the field within the calculation range, three non-collinear points are randomly selected around the pixel. Based on these three points, the scanning is performed in eight directions, and it is known that the pixels of the field are detected and returned. Then judge whether the 24 effective points are on a circle, and simultaneously calculate the center coordinates of the circle and its radius. After the circle is added to the candidate queue, the program will continue to scan the rest of the calculation area.</p>
|
||||
<p>(To be continued)</p>
|
||||
<h3 id="Main-Component"><a href="#Main-Component" class="headerlink" title="Main Component"></a>Main Component</h3><p>Under NaoVision’s solution (developed with Visual Studio 2019), there is</p>
|
||||
<ul>
|
||||
<li><strong>NAOFastTools</strong> Core Toolset</li>
|
||||
<li><strong>NFTCommandLineTools</strong> Common Command Line Tools</li>
|
||||
<li><strong>NFTDeamon</strong> Daemon</li>
|
||||
<li><strong>NFTGUI</strong> Debugging Interface</li>
|
||||
<li><strong>NFTTest</strong> OpenCV Docking Toolset</li>
|
||||
<li><strong>UnitTest</strong> Unit Test Project</li>
|
||||
</ul>
|
||||
<h3 id="Brief-Process-Introduction"><a href="#Brief-Process-Introduction" class="headerlink" title="Brief Process Introduction"></a>Brief Process Introduction</h3><p>Problem Description: Due to various problems with the direct embedding scheme of NFT and BHuman, this project intends to adopt the independent process with BHuman.</p>
|
||||
<p>In the actual game process, the <strong>NAOFastTools Framework</strong> is driven by the <strong>NFTDeamon</strong>, running in parallel with Nao qi and BHuman in the NAO robot system. <strong>NFTDeamon</strong> communicates with BHuman by sharing memory. Camera data is obtained from BHuman. After calculation, visual correction information is transmitted to BHuman. In the usual debugging process, you can use the <strong>NFTCommandLineTools ** or **NFTGUI Debug Interface</strong> to establish a connection with the <strong>NFTDeamon</strong> to monitor and adjust the <strong>NAOFastTools Framework</strong> or *<em>BHuman *</em> Operating status and related parameters.</p>
|
||||
<p>(To be continued)</p>
|
||||
<h4 id="Introduction-To-Each-Component"><a href="#Introduction-To-Each-Component" class="headerlink" title="Introduction To Each Component"></a>Introduction To Each Component</h4><h5 id="1-NAOFastTools-Core-Toolset"><a href="#1-NAOFastTools-Core-Toolset" class="headerlink" title="1. NAOFastTools Core Toolset"></a>1. NAOFastTools Core Toolset</h5><p>The core framework for image processing and storage of the solution and the corresponding graphics processing module stored in the NAOFastTools Core Tools Group (hereinafter referred to as NFT) is the core project of the solution. The project follows the C++14 standard, and a small portion of the code contains C++14 features (the system with BHuman2018 has libstdc++.so that supports C++14). NFT eventually generates a static link library (NAOFastTools.lib and NAOFastTools.a) that corresponds to Windows and Linux. NFT works by linking with other programs. In addition to compiling in the VS environment, the NFT framework can also be compiled in a Linux environment, provided that the clang, make, and cmake tools are properly installed. The following is an extremely simple introduction to several of the most important common classes and functions in the NFT (including not limited to the following) (the actual use requires code understanding).</p>
|
||||
<p>OperaMatrix is a proxy class that is a layer of proxy access to the Matrix class of the Eigen linear algebra library. In addition to providing proxy access services, it also provides a smart pointer service that automatically creates and releases Matrix objects based on reference counts. One or more OperaMatrix corresponds to a Matrix object. OperaMatrix objects provide a variety of constructors to meet the needs of users in most situations. The elements in OperaMatrix are stored in memory in a column-first manner, and the user can directly get a pointer to the first element of the matrix via the getData() interface. The number of rows and columns of the matrix corresponding to OperaMatrix can be obtained using getRows() and getCols().</p>
|
||||
<p>The Image class is a storage vector for images that contains one or more OpreaMatrix objects, corresponding to multiple channels of the image. An OperaMatrix stores pixel data for a corresponding channel. Normally, the type of pixel data (PIXEL_TYPE) is defined in NFT.h. The number of channels in an image can be obtained using the getColumns() method, and a reference to a channel can be obtained directly using the [] operator. The height and width of the image are obtained using the getHeight() and getWidth() methods.</p>
|
||||
<p>The ImageYUV422 class inherits from the Image class, which provides storage for the compressed color space YUV422. Need to note that it has one and only one channel. In a specific memory implementation, it compresses the pixel data of three channels into one channel for storage. If you need to get the Y, Cr, and Cb values of a pixel, you can call getY(int, int), getCr(int, int), getCb(int, int) to access it. Further, if it is necessary to modify the Y, Cr, and Cb values of a certain pixel in the picture, the corresponding setter is called and the coordinate parameters of the pixel are provided.</p>
|
||||
<p>The ImageColored class inherits from the ImageYUV422 class and has one and only one channel. It mainly provides a single-channel image storage function and is a storage carrier for the output of the site color discrimination module. It is also a storage carrier for input data for many other vision modules. It disables all of the features of the ImageYUV422 parent class that have operations on the YUV color space.</p>
|
||||
<p>The ImageSaver class is a storage service class for the Image class. It can store the data in the Image object correctly in a file on a Windows or Linux system (.nftd suffix). It can also build the corresponding Image object by reading the file in .nftd format.</p>
|
||||
<p>(To be continued)</p>
|
||||
<h5 id="2-NFTGUI-Debugging-Interface"><a href="#2-NFTGUI-Debugging-Interface" class="headerlink" title="2. NFTGUI Debugging Interface"></a>2. NFTGUI Debugging Interface</h5><p>The NFTGUI debugging interface is based on Qt5. It is a visual debugging interface for NAOFastTools. It can output intermediate results and internal related parameters for processing each graphics processing module.</p>
|
||||
<p>(To be continued)</p>
|
||||
<h5 id="3-NFTTest-Opencv-Docking-Toolset"><a href="#3-NFTTest-Opencv-Docking-Toolset" class="headerlink" title="3.NFTTest Opencv Docking Toolset"></a>3.NFTTest Opencv Docking Toolset</h5><p>The NFTTest Opencv Docking Toolset is a bridge between the NaoVision framework and the OpenCV framework. It provides a conversion function between the main data structures between the two frameworks. In addition, the project is also used for the most basic debugging information output during the development process. .</p>
|
||||
<p>(To be continued)</p>
|
||||
<h5 id="4-UnitTest"><a href="#4-UnitTest" class="headerlink" title="4.UnitTest"></a>4.UnitTest</h5><p>Based on the Google Test test framework, the unit test code of the core framework in NAOFastTools is stored. This code will ensure that the core framework can run efficiently and accurately, and it is convenient to discover the loopholes in the framework in time.</p>
|
||||
<p>(To be continued)</p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<footer class="post-footer">
|
||||
|
||||
|
||||
|
||||
</footer>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="toggle sidebar-toggle">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-inner">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<ul class="sidebar-nav motion-element">
|
||||
<li class="sidebar-nav-toc">
|
||||
Table of Contents
|
||||
</li>
|
||||
<li class="sidebar-nav-overview">
|
||||
Overview
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!--noindex-->
|
||||
<div class="post-toc-wrap sidebar-panel">
|
||||
<div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#NaoVision-Concise-Document"><span class="nav-number">1.</span> <span class="nav-text">NaoVision Concise Document</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#Project-Summary"><span class="nav-number">1.1.</span> <span class="nav-text">Project Summary</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#Introduction"><span class="nav-number">1.1.1.</span> <span class="nav-text">Introduction</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Main-Component"><span class="nav-number">1.1.2.</span> <span class="nav-text">Main Component</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Brief-Process-Introduction"><span class="nav-number">1.1.3.</span> <span class="nav-text">Brief Process Introduction</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#Introduction-To-Each-Component"><span class="nav-number">1.1.3.1.</span> <span class="nav-text">Introduction To Each Component</span></a><ol class="nav-child"><li class="nav-item nav-level-5"><a class="nav-link" href="#1-NAOFastTools-Core-Toolset"><span class="nav-number">1.1.3.1.1.</span> <span class="nav-text">1. NAOFastTools Core Toolset</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#2-NFTGUI-Debugging-Interface"><span class="nav-number">1.1.3.1.2.</span> <span class="nav-text">2. NFTGUI Debugging Interface</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#3-NFTTest-Opencv-Docking-Toolset"><span class="nav-number">1.1.3.1.3.</span> <span class="nav-text">3.NFTTest Opencv Docking Toolset</span></a></li><li class="nav-item nav-level-5"><a class="nav-link" href="#4-UnitTest"><span class="nav-number">1.1.3.1.4.</span> <span class="nav-text">4.UnitTest</span></a></li></ol></li></ol></li></ol></li></ol></li></ol></div>
|
||||
|
||||
</div>
|
||||
<!--/noindex-->
|
||||
|
||||
<div class="site-overview-wrap sidebar-panel">
|
||||
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||
<p class="site-author-name" itemprop="name">Hu Yu</p>
|
||||
<div class="site-description" itemprop="description"></div>
|
||||
</div>
|
||||
<div class="site-state-wrap motion-element">
|
||||
<nav class="site-state">
|
||||
<div class="site-state-item site-state-posts">
|
||||
|
||||
<a href="/archives/">
|
||||
|
||||
<span class="site-state-item-count">1</span>
|
||||
<span class="site-state-item-name">posts</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div id="sidebar-dimmer"></div>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer id="footer" class="footer">
|
||||
<div class="footer-inner">
|
||||
<div class="copyright">© <span itemprop="copyrightYear">2019</span>
|
||||
<span class="with-love" id="animate">
|
||||
<i class="fa fa-user"></i>
|
||||
</span>
|
||||
<span class="author" itemprop="copyrightHolder">Hu Yu</span>
|
||||
</div>
|
||||
<div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> v3.9.0</div>
|
||||
<span class="post-meta-divider">|</span>
|
||||
<div class="theme-info">Theme – <a href="https://theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a> v7.4.1</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
<script src="/lib/anime.min.js?v=3.1.0"></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="/js/utils.js?v=7.4.1"></script><script src="/js/motion.js?v=7.4.1"></script>
|
||||
<script src="/js/schemes/muse.js?v=7.4.1"></script>
|
||||
<script src="/js/next-boot.js?v=7.4.1"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
391
archives/2019/10/index.html
Normal file
@ -0,0 +1,391 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
|
||||
<meta name="theme-color" content="#222">
|
||||
<meta name="generator" content="Hexo 3.9.0">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=7.4.1">
|
||||
<link rel="mask-icon" href="/images/logo.svg?v=7.4.1" color="#222">
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css?v=7.4.1">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css?v=4.7.0">
|
||||
|
||||
|
||||
<script id="hexo-configurations">
|
||||
var NexT = window.NexT || {};
|
||||
var CONFIG = {
|
||||
root: '/',
|
||||
scheme: 'Muse',
|
||||
version: '7.4.1',
|
||||
exturl: false,
|
||||
sidebar: {"position":"left","display":"post","offset":12,"onmobile":false},
|
||||
copycode: {"enable":false,"show_result":false,"style":null},
|
||||
back2top: {"enable":true,"sidebar":false,"scrollpercent":false},
|
||||
bookmark: {"enable":false,"color":"#222","save":"auto"},
|
||||
fancybox: false,
|
||||
mediumzoom: false,
|
||||
lazyload: false,
|
||||
pangu: false,
|
||||
algolia: {
|
||||
appID: '',
|
||||
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"}
|
||||
},
|
||||
localsearch: {"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},
|
||||
path: '',
|
||||
motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
|
||||
translation: {
|
||||
copy_button: 'Copy',
|
||||
copy_success: 'Copied',
|
||||
copy_failure: 'Copy failed'
|
||||
},
|
||||
sidebarPadding: 40
|
||||
};
|
||||
</script>
|
||||
|
||||
<meta name="keywords" content="Software, Computing">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Hu Yu's Personal Blog">
|
||||
<meta property="og:url" content="http://saturneric.cn/archives/2019/10/index.html">
|
||||
<meta property="og:site_name" content="Hu Yu's Personal Blog">
|
||||
<meta property="og:locale" content="en">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="Hu Yu's Personal Blog">
|
||||
<link rel="canonical" href="http://saturneric.cn/archives/2019/10/">
|
||||
|
||||
|
||||
<script id="page-configurations">
|
||||
// https://hexo.io/docs/variables.html
|
||||
CONFIG.page = {
|
||||
sidebar: "",
|
||||
isHome: false,
|
||||
isPost: false,
|
||||
isPage: false,
|
||||
isArchive: true
|
||||
};
|
||||
</script>
|
||||
|
||||
<title>Archive | Hu Yu's Personal Blog</title>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<noscript>
|
||||
<style>
|
||||
.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-header { 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>
|
||||
|
||||
</head>
|
||||
|
||||
<body itemscope itemtype="http://schema.org/WebPage">
|
||||
<div class="container use-motion">
|
||||
<div class="headband"></div>
|
||||
|
||||
<header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
|
||||
<div class="header-inner"><div class="site-brand-container">
|
||||
<div class="site-meta">
|
||||
|
||||
<div>
|
||||
<a href="/" class="brand" rel="start">
|
||||
<span class="logo-line-before"><i></i></span>
|
||||
<span class="site-title">Hu Yu's Personal Blog</span>
|
||||
<span class="logo-line-after"><i></i></span>
|
||||
</a>
|
||||
</div>
|
||||
<p class="site-subtitle">Technical Articles about Computing and Software.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="site-nav-toggle">
|
||||
<div class="toggle" aria-label="Toggle navigation bar">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<nav class="site-nav">
|
||||
|
||||
<ul id="menu" class="menu">
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-home">
|
||||
|
||||
|
||||
|
||||
<a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-archives">
|
||||
|
||||
|
||||
|
||||
<a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
<div class="back-to-top">
|
||||
<i class="fa fa-arrow-up"></i>
|
||||
<span>0%</span>
|
||||
</div>
|
||||
|
||||
|
||||
<main id="main" class="main">
|
||||
<div class="main-inner">
|
||||
<div class="content-wrap">
|
||||
<div id="content" class="content">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-block">
|
||||
<div class="posts-collapse">
|
||||
<div class="collection-title">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="collection-header">Um..! 1 post. Keep on posting.</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="collection-year">
|
||||
<h1 class="collection-header">2019</h1>
|
||||
</div>
|
||||
|
||||
|
||||
<article itemscope itemtype="http://schema.org/Article">
|
||||
<header class="post-header">
|
||||
|
||||
<div class="post-meta">
|
||||
<time itemprop="dateCreated"
|
||||
datetime="2019-10-09T23:22:44+08:00"
|
||||
content="2019-10-09">
|
||||
10-09
|
||||
</time>
|
||||
</div>
|
||||
|
||||
<h2 class="post-title">
|
||||
|
||||
<a class="post-title-link" href="/2019/10/09/NaoVision-General-Introduction/" itemprop="url">
|
||||
<span itemprop="name">NaoVision</span>
|
||||
</a>
|
||||
|
||||
</h2>
|
||||
|
||||
</header>
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="toggle sidebar-toggle">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-inner">
|
||||
|
||||
<ul class="sidebar-nav motion-element">
|
||||
<li class="sidebar-nav-toc">
|
||||
Table of Contents
|
||||
</li>
|
||||
<li class="sidebar-nav-overview">
|
||||
Overview
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!--noindex-->
|
||||
<div class="post-toc-wrap sidebar-panel">
|
||||
</div>
|
||||
<!--/noindex-->
|
||||
|
||||
<div class="site-overview-wrap sidebar-panel">
|
||||
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||
<p class="site-author-name" itemprop="name">Hu Yu</p>
|
||||
<div class="site-description" itemprop="description"></div>
|
||||
</div>
|
||||
<div class="site-state-wrap motion-element">
|
||||
<nav class="site-state">
|
||||
<div class="site-state-item site-state-posts">
|
||||
|
||||
<a href="/archives/">
|
||||
|
||||
<span class="site-state-item-count">1</span>
|
||||
<span class="site-state-item-name">posts</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div id="sidebar-dimmer"></div>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer id="footer" class="footer">
|
||||
<div class="footer-inner">
|
||||
<div class="copyright">© <span itemprop="copyrightYear">2019</span>
|
||||
<span class="with-love" id="animate">
|
||||
<i class="fa fa-user"></i>
|
||||
</span>
|
||||
<span class="author" itemprop="copyrightHolder">Hu Yu</span>
|
||||
</div>
|
||||
<div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> v3.9.0</div>
|
||||
<span class="post-meta-divider">|</span>
|
||||
<div class="theme-info">Theme – <a href="https://theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a> v7.4.1</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
<script src="/lib/anime.min.js?v=3.1.0"></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="/js/utils.js?v=7.4.1"></script><script src="/js/motion.js?v=7.4.1"></script>
|
||||
<script src="/js/schemes/muse.js?v=7.4.1"></script>
|
||||
<script src="/js/next-boot.js?v=7.4.1"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
391
archives/2019/index.html
Normal file
@ -0,0 +1,391 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
|
||||
<meta name="theme-color" content="#222">
|
||||
<meta name="generator" content="Hexo 3.9.0">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=7.4.1">
|
||||
<link rel="mask-icon" href="/images/logo.svg?v=7.4.1" color="#222">
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css?v=7.4.1">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css?v=4.7.0">
|
||||
|
||||
|
||||
<script id="hexo-configurations">
|
||||
var NexT = window.NexT || {};
|
||||
var CONFIG = {
|
||||
root: '/',
|
||||
scheme: 'Muse',
|
||||
version: '7.4.1',
|
||||
exturl: false,
|
||||
sidebar: {"position":"left","display":"post","offset":12,"onmobile":false},
|
||||
copycode: {"enable":false,"show_result":false,"style":null},
|
||||
back2top: {"enable":true,"sidebar":false,"scrollpercent":false},
|
||||
bookmark: {"enable":false,"color":"#222","save":"auto"},
|
||||
fancybox: false,
|
||||
mediumzoom: false,
|
||||
lazyload: false,
|
||||
pangu: false,
|
||||
algolia: {
|
||||
appID: '',
|
||||
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"}
|
||||
},
|
||||
localsearch: {"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},
|
||||
path: '',
|
||||
motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
|
||||
translation: {
|
||||
copy_button: 'Copy',
|
||||
copy_success: 'Copied',
|
||||
copy_failure: 'Copy failed'
|
||||
},
|
||||
sidebarPadding: 40
|
||||
};
|
||||
</script>
|
||||
|
||||
<meta name="keywords" content="Software, Computing">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Hu Yu's Personal Blog">
|
||||
<meta property="og:url" content="http://saturneric.cn/archives/2019/index.html">
|
||||
<meta property="og:site_name" content="Hu Yu's Personal Blog">
|
||||
<meta property="og:locale" content="en">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="Hu Yu's Personal Blog">
|
||||
<link rel="canonical" href="http://saturneric.cn/archives/2019/">
|
||||
|
||||
|
||||
<script id="page-configurations">
|
||||
// https://hexo.io/docs/variables.html
|
||||
CONFIG.page = {
|
||||
sidebar: "",
|
||||
isHome: false,
|
||||
isPost: false,
|
||||
isPage: false,
|
||||
isArchive: true
|
||||
};
|
||||
</script>
|
||||
|
||||
<title>Archive | Hu Yu's Personal Blog</title>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<noscript>
|
||||
<style>
|
||||
.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-header { 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>
|
||||
|
||||
</head>
|
||||
|
||||
<body itemscope itemtype="http://schema.org/WebPage">
|
||||
<div class="container use-motion">
|
||||
<div class="headband"></div>
|
||||
|
||||
<header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
|
||||
<div class="header-inner"><div class="site-brand-container">
|
||||
<div class="site-meta">
|
||||
|
||||
<div>
|
||||
<a href="/" class="brand" rel="start">
|
||||
<span class="logo-line-before"><i></i></span>
|
||||
<span class="site-title">Hu Yu's Personal Blog</span>
|
||||
<span class="logo-line-after"><i></i></span>
|
||||
</a>
|
||||
</div>
|
||||
<p class="site-subtitle">Technical Articles about Computing and Software.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="site-nav-toggle">
|
||||
<div class="toggle" aria-label="Toggle navigation bar">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<nav class="site-nav">
|
||||
|
||||
<ul id="menu" class="menu">
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-home">
|
||||
|
||||
|
||||
|
||||
<a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-archives">
|
||||
|
||||
|
||||
|
||||
<a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
<div class="back-to-top">
|
||||
<i class="fa fa-arrow-up"></i>
|
||||
<span>0%</span>
|
||||
</div>
|
||||
|
||||
|
||||
<main id="main" class="main">
|
||||
<div class="main-inner">
|
||||
<div class="content-wrap">
|
||||
<div id="content" class="content">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-block">
|
||||
<div class="posts-collapse">
|
||||
<div class="collection-title">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="collection-header">Um..! 1 post. Keep on posting.</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="collection-year">
|
||||
<h1 class="collection-header">2019</h1>
|
||||
</div>
|
||||
|
||||
|
||||
<article itemscope itemtype="http://schema.org/Article">
|
||||
<header class="post-header">
|
||||
|
||||
<div class="post-meta">
|
||||
<time itemprop="dateCreated"
|
||||
datetime="2019-10-09T23:22:44+08:00"
|
||||
content="2019-10-09">
|
||||
10-09
|
||||
</time>
|
||||
</div>
|
||||
|
||||
<h2 class="post-title">
|
||||
|
||||
<a class="post-title-link" href="/2019/10/09/NaoVision-General-Introduction/" itemprop="url">
|
||||
<span itemprop="name">NaoVision</span>
|
||||
</a>
|
||||
|
||||
</h2>
|
||||
|
||||
</header>
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="toggle sidebar-toggle">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-inner">
|
||||
|
||||
<ul class="sidebar-nav motion-element">
|
||||
<li class="sidebar-nav-toc">
|
||||
Table of Contents
|
||||
</li>
|
||||
<li class="sidebar-nav-overview">
|
||||
Overview
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!--noindex-->
|
||||
<div class="post-toc-wrap sidebar-panel">
|
||||
</div>
|
||||
<!--/noindex-->
|
||||
|
||||
<div class="site-overview-wrap sidebar-panel">
|
||||
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||
<p class="site-author-name" itemprop="name">Hu Yu</p>
|
||||
<div class="site-description" itemprop="description"></div>
|
||||
</div>
|
||||
<div class="site-state-wrap motion-element">
|
||||
<nav class="site-state">
|
||||
<div class="site-state-item site-state-posts">
|
||||
|
||||
<a href="/archives/">
|
||||
|
||||
<span class="site-state-item-count">1</span>
|
||||
<span class="site-state-item-name">posts</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div id="sidebar-dimmer"></div>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer id="footer" class="footer">
|
||||
<div class="footer-inner">
|
||||
<div class="copyright">© <span itemprop="copyrightYear">2019</span>
|
||||
<span class="with-love" id="animate">
|
||||
<i class="fa fa-user"></i>
|
||||
</span>
|
||||
<span class="author" itemprop="copyrightHolder">Hu Yu</span>
|
||||
</div>
|
||||
<div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> v3.9.0</div>
|
||||
<span class="post-meta-divider">|</span>
|
||||
<div class="theme-info">Theme – <a href="https://theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a> v7.4.1</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
<script src="/lib/anime.min.js?v=3.1.0"></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="/js/utils.js?v=7.4.1"></script><script src="/js/motion.js?v=7.4.1"></script>
|
||||
<script src="/js/schemes/muse.js?v=7.4.1"></script>
|
||||
<script src="/js/next-boot.js?v=7.4.1"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
391
archives/index.html
Normal file
@ -0,0 +1,391 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
|
||||
<meta name="theme-color" content="#222">
|
||||
<meta name="generator" content="Hexo 3.9.0">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=7.4.1">
|
||||
<link rel="mask-icon" href="/images/logo.svg?v=7.4.1" color="#222">
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css?v=7.4.1">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css?v=4.7.0">
|
||||
|
||||
|
||||
<script id="hexo-configurations">
|
||||
var NexT = window.NexT || {};
|
||||
var CONFIG = {
|
||||
root: '/',
|
||||
scheme: 'Muse',
|
||||
version: '7.4.1',
|
||||
exturl: false,
|
||||
sidebar: {"position":"left","display":"post","offset":12,"onmobile":false},
|
||||
copycode: {"enable":false,"show_result":false,"style":null},
|
||||
back2top: {"enable":true,"sidebar":false,"scrollpercent":false},
|
||||
bookmark: {"enable":false,"color":"#222","save":"auto"},
|
||||
fancybox: false,
|
||||
mediumzoom: false,
|
||||
lazyload: false,
|
||||
pangu: false,
|
||||
algolia: {
|
||||
appID: '',
|
||||
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"}
|
||||
},
|
||||
localsearch: {"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},
|
||||
path: '',
|
||||
motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
|
||||
translation: {
|
||||
copy_button: 'Copy',
|
||||
copy_success: 'Copied',
|
||||
copy_failure: 'Copy failed'
|
||||
},
|
||||
sidebarPadding: 40
|
||||
};
|
||||
</script>
|
||||
|
||||
<meta name="keywords" content="Software, Computing">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Hu Yu's Personal Blog">
|
||||
<meta property="og:url" content="http://saturneric.cn/archives/index.html">
|
||||
<meta property="og:site_name" content="Hu Yu's Personal Blog">
|
||||
<meta property="og:locale" content="en">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="Hu Yu's Personal Blog">
|
||||
<link rel="canonical" href="http://saturneric.cn/archives/">
|
||||
|
||||
|
||||
<script id="page-configurations">
|
||||
// https://hexo.io/docs/variables.html
|
||||
CONFIG.page = {
|
||||
sidebar: "",
|
||||
isHome: false,
|
||||
isPost: false,
|
||||
isPage: false,
|
||||
isArchive: true
|
||||
};
|
||||
</script>
|
||||
|
||||
<title>Archive | Hu Yu's Personal Blog</title>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<noscript>
|
||||
<style>
|
||||
.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-header { 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>
|
||||
|
||||
</head>
|
||||
|
||||
<body itemscope itemtype="http://schema.org/WebPage">
|
||||
<div class="container use-motion">
|
||||
<div class="headband"></div>
|
||||
|
||||
<header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
|
||||
<div class="header-inner"><div class="site-brand-container">
|
||||
<div class="site-meta">
|
||||
|
||||
<div>
|
||||
<a href="/" class="brand" rel="start">
|
||||
<span class="logo-line-before"><i></i></span>
|
||||
<span class="site-title">Hu Yu's Personal Blog</span>
|
||||
<span class="logo-line-after"><i></i></span>
|
||||
</a>
|
||||
</div>
|
||||
<p class="site-subtitle">Technical Articles about Computing and Software.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="site-nav-toggle">
|
||||
<div class="toggle" aria-label="Toggle navigation bar">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<nav class="site-nav">
|
||||
|
||||
<ul id="menu" class="menu">
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-home">
|
||||
|
||||
|
||||
|
||||
<a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-archives">
|
||||
|
||||
|
||||
|
||||
<a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
<div class="back-to-top">
|
||||
<i class="fa fa-arrow-up"></i>
|
||||
<span>0%</span>
|
||||
</div>
|
||||
|
||||
|
||||
<main id="main" class="main">
|
||||
<div class="main-inner">
|
||||
<div class="content-wrap">
|
||||
<div id="content" class="content">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-block">
|
||||
<div class="posts-collapse">
|
||||
<div class="collection-title">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="collection-header">Um..! 1 post. Keep on posting.</span>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="collection-year">
|
||||
<h1 class="collection-header">2019</h1>
|
||||
</div>
|
||||
|
||||
|
||||
<article itemscope itemtype="http://schema.org/Article">
|
||||
<header class="post-header">
|
||||
|
||||
<div class="post-meta">
|
||||
<time itemprop="dateCreated"
|
||||
datetime="2019-10-09T23:22:44+08:00"
|
||||
content="2019-10-09">
|
||||
10-09
|
||||
</time>
|
||||
</div>
|
||||
|
||||
<h2 class="post-title">
|
||||
|
||||
<a class="post-title-link" href="/2019/10/09/NaoVision-General-Introduction/" itemprop="url">
|
||||
<span itemprop="name">NaoVision</span>
|
||||
</a>
|
||||
|
||||
</h2>
|
||||
|
||||
</header>
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="toggle sidebar-toggle">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-inner">
|
||||
|
||||
<ul class="sidebar-nav motion-element">
|
||||
<li class="sidebar-nav-toc">
|
||||
Table of Contents
|
||||
</li>
|
||||
<li class="sidebar-nav-overview">
|
||||
Overview
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!--noindex-->
|
||||
<div class="post-toc-wrap sidebar-panel">
|
||||
</div>
|
||||
<!--/noindex-->
|
||||
|
||||
<div class="site-overview-wrap sidebar-panel">
|
||||
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||
<p class="site-author-name" itemprop="name">Hu Yu</p>
|
||||
<div class="site-description" itemprop="description"></div>
|
||||
</div>
|
||||
<div class="site-state-wrap motion-element">
|
||||
<nav class="site-state">
|
||||
<div class="site-state-item site-state-posts">
|
||||
|
||||
<a href="/archives/">
|
||||
|
||||
<span class="site-state-item-count">1</span>
|
||||
<span class="site-state-item-name">posts</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div id="sidebar-dimmer"></div>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer id="footer" class="footer">
|
||||
<div class="footer-inner">
|
||||
<div class="copyright">© <span itemprop="copyrightYear">2019</span>
|
||||
<span class="with-love" id="animate">
|
||||
<i class="fa fa-user"></i>
|
||||
</span>
|
||||
<span class="author" itemprop="copyrightHolder">Hu Yu</span>
|
||||
</div>
|
||||
<div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> v3.9.0</div>
|
||||
<span class="post-meta-divider">|</span>
|
||||
<div class="theme-info">Theme – <a href="https://theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a> v7.4.1</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
<script src="/lib/anime.min.js?v=3.1.0"></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="/js/utils.js?v=7.4.1"></script><script src="/js/motion.js?v=7.4.1"></script>
|
||||
<script src="/js/schemes/muse.js?v=7.4.1"></script>
|
||||
<script src="/js/next-boot.js?v=7.4.1"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
2269
css/main.css
Normal file
9
images/algolia_logo.svg
Normal file
@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1366 362">
|
||||
<linearGradient id="a" x1="428.258" x2="434.145" y1="404.15" y2="409.85" gradientUnits="userSpaceOnUse" gradientTransform="matrix(94.045 0 0 -94.072 -40381.527 38479.52)">
|
||||
<stop offset="0" stop-color="#00aeff"/>
|
||||
<stop offset="1" stop-color="#3369e7"/>
|
||||
</linearGradient>
|
||||
<path fill="url(#a)" d="M61.8 15.4h242.8c23.9 0 43.4 19.4 43.4 43.4v242.9c0 23.9-19.4 43.4-43.4 43.4H61.8c-23.9 0-43.4-19.4-43.4-43.4v-243c0-23.9 19.4-43.3 43.4-43.3z"/>
|
||||
<path fill="#FFF" d="M187 98.7c-51.4 0-93.1 41.7-93.1 93.2S135.6 285 187 285s93.1-41.7 93.1-93.2-41.6-93.1-93.1-93.1zm0 158.8c-36.2 0-65.6-29.4-65.6-65.6s29.4-65.6 65.6-65.6 65.6 29.4 65.6 65.6-29.3 65.6-65.6 65.6zm0-117.8v48.9c0 1.4 1.5 2.4 2.8 1.7l43.4-22.5c1-.5 1.3-1.7.8-2.7-9-15.8-25.7-26.6-45-27.3-1 0-2 .8-2 1.9zm-60.8-35.9l-5.7-5.7c-5.6-5.6-14.6-5.6-20.2 0l-6.8 6.8c-5.6 5.6-5.6 14.6 0 20.2l5.6 5.6c.9.9 2.2.7 3-.2 3.3-4.5 6.9-8.8 10.9-12.8 4.1-4.1 8.3-7.7 12.9-11 1-.6 1.1-2 .3-2.9zM217.5 89V77.7c0-7.9-6.4-14.3-14.3-14.3h-33.3c-7.9 0-14.3 6.4-14.3 14.3v11.6c0 1.3 1.2 2.2 2.5 1.9 9.3-2.7 19.1-4.1 29-4.1 9.5 0 18.9 1.3 28 3.8 1.2.3 2.4-.6 2.4-1.9z"/>
|
||||
<path fill="#182359" d="M842.5 267.6c0 26.7-6.8 46.2-20.5 58.6-13.7 12.4-34.6 18.6-62.8 18.6-10.3 0-31.7-2-48.8-5.8l6.3-31c14.3 3 33.2 3.8 43.1 3.8 15.7 0 26.9-3.2 33.6-9.6s10-15.9 10-28.5v-6.4c-3.9 1.9-9 3.8-15.3 5.8-6.3 1.9-13.6 2.9-21.8 2.9-10.8 0-20.6-1.7-29.5-5.1-8.9-3.4-16.6-8.4-22.9-15-6.3-6.6-11.3-14.9-14.8-24.8s-5.3-27.6-5.3-40.6c0-12.2 1.9-27.5 5.6-37.7 3.8-10.2 9.2-19 16.5-26.3 7.2-7.3 16-12.9 26.3-17s22.4-6.7 35.5-6.7c12.7 0 24.4 1.6 35.8 3.5 11.4 1.9 21.1 3.9 29 6.1v155.2zm-108.7-77.2c0 16.4 3.6 34.6 10.8 42.2 7.2 7.6 16.5 11.4 27.9 11.4 6.2 0 12.1-.9 17.6-2.6 5.5-1.7 9.9-3.7 13.4-6.1v-97.1c-2.8-.6-14.5-3-25.8-3.3-14.2-.4-25 5.4-32.6 14.7-7.5 9.3-11.3 25.6-11.3 40.8zm294.3 0c0 13.2-1.9 23.2-5.8 34.1s-9.4 20.2-16.5 27.9c-7.1 7.7-15.6 13.7-25.6 17.9s-25.4 6.6-33.1 6.6c-7.7-.1-23-2.3-32.9-6.6-9.9-4.3-18.4-10.2-25.5-17.9-7.1-7.7-12.6-17-16.6-27.9s-6-20.9-6-34.1c0-13.2 1.8-25.9 5.8-36.7 4-10.8 9.6-20 16.8-27.7s15.8-13.6 25.6-17.8c9.9-4.2 20.8-6.2 32.6-6.2s22.7 2.1 32.7 6.2c10 4.2 18.6 10.1 25.6 17.8 7.1 7.7 12.6 16.9 16.6 27.7 4.2 10.8 6.3 23.5 6.3 36.7zm-40 .1c0-16.9-3.7-31-10.9-40.8-7.2-9.9-17.3-14.8-30.2-14.8-12.9 0-23 4.9-30.2 14.8-7.2 9.9-10.7 23.9-10.7 40.8 0 17.1 3.6 28.6 10.8 38.5 7.2 10 17.3 14.9 30.2 14.9 12.9 0 23-5 30.2-14.9 7.2-10 10.8-21.4 10.8-38.5zm127.1 86.4c-64.1.3-64.1-51.8-64.1-60.1L1051 32l39.1-6.2v183.6c0 4.7 0 34.5 25.1 34.6v32.9zm68.9 0h-39.3V108.1l39.3-6.2v175zm-19.7-193.5c13.1 0 23.8-10.6 23.8-23.7S1177.6 36 1164.4 36s-23.8 10.6-23.8 23.7 10.7 23.7 23.8 23.7zm117.4 18.6c12.9 0 23.8 1.6 32.6 4.8 8.8 3.2 15.9 7.7 21.1 13.4s8.9 13.5 11.1 21.7c2.3 8.2 3.4 17.2 3.4 27.1v100.6c-6 1.3-15.1 2.8-27.3 4.6s-25.9 2.7-41.1 2.7c-10.1 0-19.4-1-27.7-2.9-8.4-1.9-15.5-5-21.5-9.3-5.9-4.3-10.5-9.8-13.9-16.6-3.3-6.8-5-16.4-5-26.4 0-9.6 1.9-15.7 5.6-22.3 3.8-6.6 8.9-12 15.3-16.2 6.5-4.2 13.9-7.2 22.4-9s17.4-2.7 26.6-2.7c4.3 0 8.8.3 13.6.8s9.8 1.4 15.2 2.7v-6.4c0-4.5-.5-8.8-1.6-12.8-1.1-4.1-3-7.6-5.6-10.7-2.7-3.1-6.2-5.5-10.6-7.2s-10-3-16.7-3c-9 0-17.2 1.1-24.7 2.4-7.5 1.3-13.7 2.8-18.4 4.5l-4.7-32.1c4.9-1.7 12.2-3.4 21.6-5.1s19.5-2.6 30.3-2.6zm3.3 141.9c12 0 20.9-.7 27.1-1.9v-39.8c-2.2-.6-5.3-1.3-9.4-1.9-4.1-.6-8.6-1-13.6-1-4.3 0-8.7.3-13.1 1-4.4.6-8.4 1.8-11.9 3.5s-6.4 4.1-8.5 7.2c-2.2 3.1-3.2 4.9-3.2 9.6 0 9.2 3.2 14.5 9 18 5.9 3.6 13.7 5.3 23.6 5.3zM512.9 103c12.9 0 23.8 1.6 32.6 4.8 8.8 3.2 15.9 7.7 21.1 13.4 5.3 5.8 8.9 13.5 11.1 21.7 2.3 8.2 3.4 17.2 3.4 27.1v100.6c-6 1.3-15.1 2.8-27.3 4.6-12.2 1.8-25.9 2.7-41.1 2.7-10.1 0-19.4-1-27.7-2.9-8.4-1.9-15.5-5-21.5-9.3-5.9-4.3-10.5-9.8-13.9-16.6-3.3-6.8-5-16.4-5-26.4 0-9.6 1.9-15.7 5.6-22.3 3.8-6.6 8.9-12 15.3-16.2 6.5-4.2 13.9-7.2 22.4-9s17.4-2.7 26.6-2.7c4.3 0 8.8.3 13.6.8 4.7.5 9.8 1.4 15.2 2.7v-6.4c0-4.5-.5-8.8-1.6-12.8-1.1-4.1-3-7.6-5.6-10.7-2.7-3.1-6.2-5.5-10.6-7.2-4.4-1.7-10-3-16.7-3-9 0-17.2 1.1-24.7 2.4-7.5 1.3-13.7 2.8-18.4 4.5l-4.7-32.1c4.9-1.7 12.2-3.4 21.6-5.1 9.4-1.8 19.5-2.6 30.3-2.6zm3.4 142c12 0 20.9-.7 27.1-1.9v-39.8c-2.2-.6-5.3-1.3-9.4-1.9-4.1-.6-8.6-1-13.6-1-4.3 0-8.7.3-13.1 1-4.4.6-8.4 1.8-11.9 3.5s-6.4 4.1-8.5 7.2c-2.2 3.1-3.2 4.9-3.2 9.6 0 9.2 3.2 14.5 9 18s13.7 5.3 23.6 5.3zm158.5 31.9c-64.1.3-64.1-51.8-64.1-60.1L610.6 32l39.1-6.2v183.6c0 4.7 0 34.5 25.1 34.6v32.9z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 4.3 KiB |
BIN
images/apple-touch-icon-next.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
images/avatar.gif
Normal file
After Width: | Height: | Size: 1.8 KiB |
121
images/cc-by-nc-nd.svg
Normal file
@ -0,0 +1,121 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="80"
|
||||
height="15"
|
||||
id="svg2279"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45+devel"
|
||||
version="1.0"
|
||||
sodipodi:docname="by-nc-nd.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs2281">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3442">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3444"
|
||||
width="20.614058"
|
||||
height="12.483703"
|
||||
x="171.99832"
|
||||
y="239.1203" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.5125"
|
||||
inkscape:cx="40"
|
||||
inkscape:cy="7.5"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
width="80px"
|
||||
height="15px"
|
||||
showborder="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="935"
|
||||
inkscape:window-height="624"
|
||||
inkscape:window-x="50"
|
||||
inkscape:window-y="160" />
|
||||
<metadata
|
||||
id="metadata2284">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="BY-NC-ND"
|
||||
transform="matrix(0.9875019,0,0,0.9333518,-323.90064,-411.87964)">
|
||||
<g
|
||||
id="g3783"
|
||||
transform="translate(158,204)">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.04161763;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3785"
|
||||
width="80"
|
||||
height="15"
|
||||
x="170.5"
|
||||
y="237.86218" />
|
||||
<rect
|
||||
y="239.36218"
|
||||
x="172"
|
||||
height="12"
|
||||
width="77"
|
||||
id="rect3787"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#abb1aa;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.46913578"
|
||||
d="M 171.99996,239.37505 L 171.99996,251.37505 L 192.33474,251.37505 C 193.64339,249.62474 194.52652,247.59057 194.52652,245.37505 C 194.52652,243.17431 193.65859,241.1179 192.36599,239.37505 L 171.99996,239.37505 z"
|
||||
id="path3789"
|
||||
sodipodi:nodetypes="cccscc" />
|
||||
<g
|
||||
id="g3791"
|
||||
transform="matrix(0.9612533,0,0,0.9612533,6.8341566,9.5069994)"
|
||||
clip-path="url(#clipPath3442)">
|
||||
<path
|
||||
id="path3793"
|
||||
cx="296.35416"
|
||||
ry="22.939548"
|
||||
cy="264.3577"
|
||||
type="arc"
|
||||
rx="22.939548"
|
||||
d="M 190.06417,245.36206 C 190.06667,249.25405 186.91326,252.41072 183.02153,252.41323 C 179.12979,252.41572 175.97262,249.26256 175.97036,245.3706 C 175.97036,245.36783 175.97036,245.36507 175.97036,245.36206 C 175.9681,241.47007 179.12126,238.3134 183.013,238.31113 C 186.90524,238.30864 190.06191,241.46181 190.06417,245.3538 C 190.06417,245.35628 190.06417,245.35929 190.06417,245.36206 z"
|
||||
style="opacity:1;fill:#ffffff" />
|
||||
<path
|
||||
d="M 188.74576,239.62226 C 190.30843,241.18492 191.08988,243.09869 191.08988,245.36206 C 191.08988,247.62592 190.32197,249.51913 188.78615,251.04165 C 187.15627,252.64521 185.22995,253.44672 183.00722,253.44672 C 180.81132,253.44672 178.91837,252.65172 177.32887,251.06174 C 175.73912,249.47198 174.94436,247.57226 174.94436,245.36206 C 174.94436,243.15235 175.73912,241.23908 177.32887,239.62226 C 178.87799,238.0591 180.77094,237.27764 183.00722,237.27764 C 185.2706,237.27764 187.18312,238.05909 188.74576,239.62226 z M 178.38093,240.67355 C 177.05978,242.008 176.39945,243.57116 176.39945,245.36429 C 176.39945,247.15694 177.05326,248.70682 178.36062,250.01393 C 179.66822,251.32153 181.22487,251.97509 183.03105,251.97509 C 184.83724,251.97509 186.40716,251.31502 187.74161,249.99412 C 189.0086,248.76725 189.64234,247.22467 189.64234,245.36429 C 189.64234,243.51799 188.99831,241.95084 187.71101,240.66354 C 186.42396,239.37649 184.86406,238.7327 183.03105,238.7327 C 181.19804,238.73271 179.64767,239.37975 178.38093,240.67355 z M 181.85761,244.57559 C 181.65573,244.13545 181.35354,243.91525 180.95051,243.91525 C 180.23802,243.91525 179.8819,244.39501 179.8819,245.35404 C 179.8819,246.31328 180.23802,246.79255 180.95051,246.79255 C 181.421,246.79255 181.75705,246.55908 181.95869,246.09111 L 182.94629,246.61701 C 182.47555,247.45339 181.76934,247.87168 180.82763,247.87168 C 180.10136,247.87168 179.51953,247.64899 179.08265,247.20409 C 178.64502,246.7587 178.42684,246.14477 178.42684,245.36206 C 178.42684,244.59313 178.65204,243.98271 179.10271,243.53056 C 179.55338,243.07838 180.11463,242.8524 180.7875,242.8524 C 181.78288,242.8524 182.49561,243.24465 182.92647,244.02835 L 181.85761,244.57559 z M 186.50398,244.57559 C 186.30184,244.13545 186.00567,243.91525 185.61517,243.91525 C 184.88839,243.91525 184.52474,244.39501 184.52474,245.35404 C 184.52474,246.31328 184.88839,246.79255 185.61517,246.79255 C 186.08642,246.79255 186.41644,246.55908 186.6048,246.09111 L 187.61447,246.61701 C 187.14448,247.45339 186.43926,247.87168 185.49931,247.87168 C 184.77403,247.87168 184.19346,247.64899 183.75683,247.20409 C 183.32096,246.7587 183.10254,246.14477 183.10254,245.36206 C 183.10254,244.59313 183.32422,243.98271 183.76737,243.53056 C 184.21026,243.07838 184.77404,242.8524 185.4592,242.8524 C 186.45282,242.8524 187.16455,243.24465 187.5939,244.02835 L 186.50398,244.57559 z"
|
||||
id="path3795"
|
||||
style="opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="text3797"
|
||||
d="M 357.4197,448.68503 C 357.66518,448.68504 357.85131,448.63146 357.9781,448.52428 C 358.10488,448.41712 358.16827,448.25905 358.16828,448.05008 C 358.16827,447.84378 358.10488,447.68705 357.9781,447.57988 C 357.85131,447.47004 357.66518,447.41512 357.4197,447.41511 L 356.55784,447.41511 L 356.55784,448.68503 L 357.4197,448.68503 M 357.4723,451.30929 C 357.78522,451.30929 358.0199,451.24364 358.17637,451.11236 C 358.33552,450.98109 358.4151,450.78283 358.4151,450.51759 C 358.4151,450.25771 358.33686,450.06347 358.18041,449.93488 C 358.02396,449.80359 357.78792,449.73796 357.4723,449.73795 L 356.55784,449.73795 L 356.55784,451.30929 L 357.4723,451.30929 M 358.92089,449.15122 C 359.25538,449.24767 359.51434,449.42583 359.69779,449.68571 C 359.88121,449.94559 359.97293,450.26441 359.97294,450.64217 C 359.97293,451.22087 359.776,451.65222 359.38217,451.93621 C 358.98833,452.2202 358.38947,452.36219 357.5856,452.36219 L 355.00001,452.36219 L 355.00001,446.3622 L 357.33878,446.3622 C 358.17771,446.36221 358.78466,446.48813 359.15962,446.73996 C 359.53727,446.99181 359.7261,447.39502 359.7261,447.9496 C 359.7261,448.24164 359.65732,448.4908 359.51975,448.69709 C 359.38217,448.90072 359.18255,449.05209 358.92089,449.15122 M 359.83746,446.3622 L 361.54096,446.3622 L 362.91671,448.50018 L 364.29245,446.3622 L 366,446.3622 L 363.69764,449.8344 L 363.69764,452.36219 L 362.13982,452.36219 L 362.13982,449.8344 L 359.83746,446.3622 M 365.15837,449.40842 L 367.69946,449.40842 L 367.69946,450.57787 L 365.15837,450.57787 L 365.15837,449.40842 M 368.9174,446.3622 L 370.65732,446.3622 L 372.85447,450.47741 L 372.85447,446.3622 L 374.33138,446.3622 L 374.33138,452.36219 L 372.59146,452.36219 L 370.3943,448.24699 L 370.3943,452.36219 L 368.9174,452.36219 L 368.9174,446.3622 M 380.65173,452.03266 C 380.36579,452.18002 380.0677,452.2912 379.75749,452.36622 C 379.44727,452.44123 379.12357,452.47875 378.78638,452.47875 C 377.78019,452.47875 376.98307,452.20011 376.395,451.64284 C 375.80693,451.08289 375.5129,450.32469 375.5129,449.36823 C 375.5129,448.40909 375.80693,447.65089 376.395,447.09361 C 376.98307,446.53367 377.78019,446.2537 378.78638,446.25369 C 379.12357,446.2537 379.44727,446.29121 379.75749,446.36621 C 380.0677,446.44124 380.36579,446.55243 380.65173,446.69977 L 380.65173,447.94157 C 380.36309,447.746 380.0785,447.60266 379.79796,447.51156 C 379.5174,447.42047 379.22203,447.37493 378.91181,447.37493 C 378.35611,447.37493 377.91911,447.55175 377.6008,447.9054 C 377.28249,448.25905 377.12333,448.74666 377.12333,449.36823 C 377.12333,449.98712 377.28249,450.47339 377.6008,450.82703 C 377.91911,451.18069 378.35611,451.35751 378.91181,451.35751 C 379.22203,451.35751 379.5174,451.31197 379.79796,451.22087 C 380.0785,451.12978 380.36309,450.98644 380.65173,450.79086 L 380.65173,452.03266 M 381.82921,449.40842 L 384.3703,449.40842 L 384.3703,450.57787 L 381.82921,450.57787 L 381.82921,449.40842 M 385.58824,446.3622 L 387.32815,446.3622 L 389.52531,450.47741 L 389.52531,446.3622 L 391.00222,446.3622 L 391.00222,452.36219 L 389.26229,452.36219 L 387.06515,448.24699 L 387.06515,452.36219 L 385.58824,452.36219 L 385.58824,446.3622 M 394.08956,447.53165 L 394.08956,451.19274 L 394.64795,451.19274 C 395.28456,451.19274 395.77013,451.03602 396.10462,450.72255 C 396.44181,450.40909 396.61041,449.95363 396.61042,449.35617 C 396.61041,448.7614 396.44317,448.30862 396.10867,447.99783 C 395.77417,447.68705 395.28726,447.53166 394.64795,447.53165 L 394.08956,447.53165 M 392.53172,446.3622 L 394.17453,446.3622 C 395.09169,446.36221 395.77417,446.42784 396.22197,446.55912 C 396.67245,446.68772 397.0582,446.90742 397.37922,447.2182 C 397.66246,447.48879 397.87286,447.80092 398.01044,448.15456 C 398.14801,448.50822 398.2168,448.90875 398.21681,449.35617 C 398.2168,449.80896 398.14801,450.21351 398.01044,450.56983 C 397.87286,450.92349 397.66246,451.23561 397.37922,451.50621 C 397.05551,451.81699 396.66706,452.03802 396.21387,452.1693 C 395.76069,452.29789 395.0809,452.36219 394.17453,452.36219 L 392.53172,452.36219 L 392.53172,446.3622"
|
||||
style="font-size:8.25858784px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:'Bitstream Vera Sans'" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
121
images/cc-by-nc-sa.svg
Normal file
@ -0,0 +1,121 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="80"
|
||||
height="15"
|
||||
id="svg2279"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45+devel"
|
||||
version="1.0"
|
||||
sodipodi:docname="by-nc-sa.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs2281">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3442">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3444"
|
||||
width="20.614058"
|
||||
height="12.483703"
|
||||
x="171.99832"
|
||||
y="239.1203" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.5125"
|
||||
inkscape:cx="40"
|
||||
inkscape:cy="7.5"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
width="80px"
|
||||
height="15px"
|
||||
showborder="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="935"
|
||||
inkscape:window-height="624"
|
||||
inkscape:window-x="50"
|
||||
inkscape:window-y="160" />
|
||||
<metadata
|
||||
id="metadata2284">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="BY-NC-SA"
|
||||
transform="matrix(0.9875019,0,0,0.9333518,-323.90064,-331.6114)">
|
||||
<g
|
||||
transform="translate(158,118)"
|
||||
id="g3729">
|
||||
<rect
|
||||
y="237.86218"
|
||||
x="170.5"
|
||||
height="15"
|
||||
width="80"
|
||||
id="rect3731"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.04161763;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3733"
|
||||
width="77"
|
||||
height="12"
|
||||
x="172"
|
||||
y="239.36218" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccscc"
|
||||
id="path3735"
|
||||
d="M 171.99996,239.37505 L 171.99996,251.37505 L 192.33474,251.37505 C 193.64339,249.62474 194.52652,247.59057 194.52652,245.37505 C 194.52652,243.17431 193.65859,241.1179 192.36599,239.37505 L 171.99996,239.37505 z"
|
||||
style="fill:#abb1aa;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.46913578" />
|
||||
<g
|
||||
clip-path="url(#clipPath3442)"
|
||||
transform="matrix(0.9612533,0,0,0.9612533,6.8341566,9.5069994)"
|
||||
id="g3737">
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff"
|
||||
d="M 190.06417,245.36206 C 190.06667,249.25405 186.91326,252.41072 183.02153,252.41323 C 179.12979,252.41572 175.97262,249.26256 175.97036,245.3706 C 175.97036,245.36783 175.97036,245.36507 175.97036,245.36206 C 175.9681,241.47007 179.12126,238.3134 183.013,238.31113 C 186.90524,238.30864 190.06191,241.46181 190.06417,245.3538 C 190.06417,245.35628 190.06417,245.35929 190.06417,245.36206 z"
|
||||
rx="22.939548"
|
||||
type="arc"
|
||||
cy="264.3577"
|
||||
ry="22.939548"
|
||||
cx="296.35416"
|
||||
id="path3739" />
|
||||
<path
|
||||
style="opacity:1"
|
||||
id="path3741"
|
||||
d="M 188.74576,239.62226 C 190.30843,241.18492 191.08988,243.09869 191.08988,245.36206 C 191.08988,247.62592 190.32197,249.51913 188.78615,251.04165 C 187.15627,252.64521 185.22995,253.44672 183.00722,253.44672 C 180.81132,253.44672 178.91837,252.65172 177.32887,251.06174 C 175.73912,249.47198 174.94436,247.57226 174.94436,245.36206 C 174.94436,243.15235 175.73912,241.23908 177.32887,239.62226 C 178.87799,238.0591 180.77094,237.27764 183.00722,237.27764 C 185.2706,237.27764 187.18312,238.05909 188.74576,239.62226 z M 178.38093,240.67355 C 177.05978,242.008 176.39945,243.57116 176.39945,245.36429 C 176.39945,247.15694 177.05326,248.70682 178.36062,250.01393 C 179.66822,251.32153 181.22487,251.97509 183.03105,251.97509 C 184.83724,251.97509 186.40716,251.31502 187.74161,249.99412 C 189.0086,248.76725 189.64234,247.22467 189.64234,245.36429 C 189.64234,243.51799 188.99831,241.95084 187.71101,240.66354 C 186.42396,239.37649 184.86406,238.7327 183.03105,238.7327 C 181.19804,238.73271 179.64767,239.37975 178.38093,240.67355 z M 181.85761,244.57559 C 181.65573,244.13545 181.35354,243.91525 180.95051,243.91525 C 180.23802,243.91525 179.8819,244.39501 179.8819,245.35404 C 179.8819,246.31328 180.23802,246.79255 180.95051,246.79255 C 181.421,246.79255 181.75705,246.55908 181.95869,246.09111 L 182.94629,246.61701 C 182.47555,247.45339 181.76934,247.87168 180.82763,247.87168 C 180.10136,247.87168 179.51953,247.64899 179.08265,247.20409 C 178.64502,246.7587 178.42684,246.14477 178.42684,245.36206 C 178.42684,244.59313 178.65204,243.98271 179.10271,243.53056 C 179.55338,243.07838 180.11463,242.8524 180.7875,242.8524 C 181.78288,242.8524 182.49561,243.24465 182.92647,244.02835 L 181.85761,244.57559 z M 186.50398,244.57559 C 186.30184,244.13545 186.00567,243.91525 185.61517,243.91525 C 184.88839,243.91525 184.52474,244.39501 184.52474,245.35404 C 184.52474,246.31328 184.88839,246.79255 185.61517,246.79255 C 186.08642,246.79255 186.41644,246.55908 186.6048,246.09111 L 187.61447,246.61701 C 187.14448,247.45339 186.43926,247.87168 185.49931,247.87168 C 184.77403,247.87168 184.19346,247.64899 183.75683,247.20409 C 183.32096,246.7587 183.10254,246.14477 183.10254,245.36206 C 183.10254,244.59313 183.32422,243.98271 183.76737,243.53056 C 184.21026,243.07838 184.77404,242.8524 185.4592,242.8524 C 186.45282,242.8524 187.16455,243.24465 187.5939,244.02835 L 186.50398,244.57559 z" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="text3743"
|
||||
d="M 357.4197,362.68502 C 357.66518,362.68502 357.85131,362.63144 357.9781,362.52427 C 358.10488,362.41711 358.16827,362.25904 358.16828,362.05005 C 358.16827,361.84377 358.10488,361.68704 357.9781,361.57986 C 357.85131,361.47002 357.66518,361.4151 357.4197,361.4151 L 356.55784,361.4151 L 356.55784,362.68502 L 357.4197,362.68502 M 357.4723,365.30926 C 357.78522,365.30926 358.0199,365.24363 358.17637,365.11235 C 358.33552,364.98107 358.4151,364.78281 358.4151,364.51758 C 358.4151,364.2577 358.33686,364.06346 358.18041,363.93485 C 358.02396,363.80358 357.78792,363.73793 357.4723,363.73793 L 356.55784,363.73793 L 356.55784,365.30926 L 357.4723,365.30926 M 358.92089,363.15119 C 359.25538,363.24765 359.51434,363.42581 359.69779,363.68569 C 359.88121,363.94557 359.97293,364.26439 359.97294,364.64215 C 359.97293,365.22086 359.776,365.6522 359.38217,365.93619 C 358.98833,366.22019 358.38947,366.36218 357.5856,366.36218 L 355.00001,366.36218 L 355.00001,360.36218 L 357.33878,360.36218 C 358.17771,360.36218 358.78466,360.48811 359.15962,360.73994 C 359.53727,360.99179 359.7261,361.39501 359.7261,361.94959 C 359.7261,362.24162 359.65732,362.49078 359.51975,362.69708 C 359.38217,362.9007 359.18255,363.05207 358.92089,363.15119 M 359.83746,360.36218 L 361.54096,360.36218 L 362.91671,362.50016 L 364.29245,360.36218 L 366,360.36218 L 363.69764,363.83438 L 363.69764,366.36218 L 362.13982,366.36218 L 362.13982,363.83438 L 359.83746,360.36218 M 365.15837,363.40839 L 367.69946,363.40839 L 367.69946,364.57785 L 365.15837,364.57785 L 365.15837,363.40839 M 368.9174,360.36218 L 370.65732,360.36218 L 372.85447,364.47738 L 372.85447,360.36218 L 374.33138,360.36218 L 374.33138,366.36218 L 372.59146,366.36218 L 370.3943,362.24698 L 370.3943,366.36218 L 368.9174,366.36218 L 368.9174,360.36218 M 380.65173,366.03264 C 380.36579,366.17999 380.0677,366.29118 379.75749,366.3662 C 379.44727,366.44122 379.12357,366.47872 378.78638,366.47872 C 377.78019,366.47872 376.98307,366.20009 376.395,365.64282 C 375.80693,365.08288 375.5129,364.32468 375.5129,363.36821 C 375.5129,362.40907 375.80693,361.65087 376.395,361.0936 C 376.98307,360.53366 377.78019,360.25368 378.78638,360.25367 C 379.12357,360.25368 379.44727,360.29119 379.75749,360.3662 C 380.0677,360.44122 380.36579,360.55241 380.65173,360.69976 L 380.65173,361.94156 C 380.36309,361.74597 380.0785,361.60265 379.79796,361.51155 C 379.5174,361.42046 379.22203,361.37492 378.91181,361.37491 C 378.35611,361.37492 377.91911,361.55174 377.6008,361.90538 C 377.28249,362.25904 377.12333,362.74665 377.12333,363.36821 C 377.12333,363.9871 377.28249,364.47337 377.6008,364.82702 C 377.91911,365.18067 378.35611,365.35749 378.91181,365.35749 C 379.22203,365.35749 379.5174,365.31195 379.79796,365.22086 C 380.0785,365.12976 380.36309,364.98643 380.65173,364.79085 L 380.65173,366.03264 M 381.82921,363.40839 L 384.3703,363.40839 L 384.3703,364.57785 L 381.82921,364.57785 L 381.82921,363.40839 M 389.79236,360.55107 L 389.79236,361.82099 C 389.46056,361.67364 389.13686,361.56245 388.82125,361.48743 C 388.50563,361.41242 388.20756,361.37492 387.92701,361.37491 C 387.55475,361.37492 387.2796,361.42581 387.10156,361.52762 C 386.92352,361.62943 386.8345,361.7875 386.83451,362.00183 C 386.8345,362.16259 386.89385,362.28851 387.01255,362.3796 C 387.13393,362.46801 387.35244,362.54437 387.66804,362.60866 L 388.33165,362.74129 C 389.00333,362.87525 389.4808,363.07886 389.76405,363.35214 C 390.04728,363.62541 390.1889,364.01389 390.18891,364.51758 C 390.1889,365.17933 389.99063,365.67229 389.5941,365.99647 C 389.20025,366.31797 388.59735,366.47872 387.78539,366.47872 C 387.40234,366.47872 387.01794,366.44255 386.63219,366.37022 C 386.24644,366.29788 385.86069,366.19072 385.47494,366.04871 L 385.47494,364.74262 C 385.86069,364.94624 386.23295,365.10029 386.59173,365.20478 C 386.9532,365.30658 387.30118,365.35749 387.63567,365.35749 C 387.97556,365.35749 388.23588,365.30123 388.41662,365.18871 C 388.59735,365.07618 388.68771,364.91543 388.68772,364.70646 C 388.68771,364.51891 388.62567,364.37424 388.50159,364.27242 C 388.38019,364.17062 388.13607,364.07954 387.76921,363.99915 L 387.1663,363.86653 C 386.56205,363.73793 386.11965,363.53298 385.83911,363.25167 C 385.56127,362.97035 385.42234,362.59125 385.42234,362.11435 C 385.42234,361.51691 385.61656,361.05743 386.00501,360.73592 C 386.39346,360.41443 386.95185,360.25368 387.68019,360.25367 C 388.01198,360.25368 388.35322,360.27914 388.70391,360.33003 C 389.05459,360.37826 389.4174,360.45194 389.79236,360.55107 M 395.22657,365.26908 L 392.79069,365.26908 L 392.40629,366.36218 L 390.84037,366.36218 L 393.07798,360.36218 L 394.93524,360.36218 L 397.17286,366.36218 L 395.60693,366.36218 L 395.22657,365.26908 M 393.17914,364.15588 L 394.83409,364.15588 L 394.00863,361.76875 L 393.17914,364.15588"
|
||||
style="font-size:8.25858784px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:'Bitstream Vera Sans'" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
121
images/cc-by-nc.svg
Normal file
@ -0,0 +1,121 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="80"
|
||||
height="15"
|
||||
id="svg2279"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45+devel"
|
||||
version="1.0"
|
||||
sodipodi:docname="by-nc.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs2281">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3442">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3444"
|
||||
width="20.614058"
|
||||
height="12.483703"
|
||||
x="171.99832"
|
||||
y="239.1203" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.5125"
|
||||
inkscape:cx="40"
|
||||
inkscape:cy="7.5"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
width="80px"
|
||||
height="15px"
|
||||
showborder="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="935"
|
||||
inkscape:window-height="624"
|
||||
inkscape:window-x="50"
|
||||
inkscape:window-y="160" />
|
||||
<metadata
|
||||
id="metadata2284">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="BY-NC"
|
||||
transform="matrix(0.9875019,0,0,0.9333518,-323.90064,-302.67749)">
|
||||
<g
|
||||
id="g3711"
|
||||
transform="translate(158,87)">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.04161763;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3713"
|
||||
width="80"
|
||||
height="15"
|
||||
x="170.5"
|
||||
y="237.86218" />
|
||||
<rect
|
||||
y="239.36218"
|
||||
x="172"
|
||||
height="12"
|
||||
width="77"
|
||||
id="rect3715"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#abb1aa;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.46913578"
|
||||
d="M 171.99996,239.37505 L 171.99996,251.37505 L 192.33474,251.37505 C 193.64339,249.62474 194.52652,247.59057 194.52652,245.37505 C 194.52652,243.17431 193.65859,241.1179 192.36599,239.37505 L 171.99996,239.37505 z"
|
||||
id="path3717"
|
||||
sodipodi:nodetypes="cccscc" />
|
||||
<g
|
||||
id="g3719"
|
||||
transform="matrix(0.9612533,0,0,0.9612533,6.8341566,9.5069994)"
|
||||
clip-path="url(#clipPath3442)">
|
||||
<path
|
||||
id="path3721"
|
||||
cx="296.35416"
|
||||
ry="22.939548"
|
||||
cy="264.3577"
|
||||
type="arc"
|
||||
rx="22.939548"
|
||||
d="M 190.06417,245.36206 C 190.06667,249.25405 186.91326,252.41072 183.02153,252.41323 C 179.12979,252.41572 175.97262,249.26256 175.97036,245.3706 C 175.97036,245.36783 175.97036,245.36507 175.97036,245.36206 C 175.9681,241.47007 179.12126,238.3134 183.013,238.31113 C 186.90524,238.30864 190.06191,241.46181 190.06417,245.3538 C 190.06417,245.35628 190.06417,245.35929 190.06417,245.36206 z"
|
||||
style="opacity:1;fill:#ffffff" />
|
||||
<path
|
||||
d="M 188.74576,239.62226 C 190.30843,241.18492 191.08988,243.09869 191.08988,245.36206 C 191.08988,247.62592 190.32197,249.51913 188.78615,251.04165 C 187.15627,252.64521 185.22995,253.44672 183.00722,253.44672 C 180.81132,253.44672 178.91837,252.65172 177.32887,251.06174 C 175.73912,249.47198 174.94436,247.57226 174.94436,245.36206 C 174.94436,243.15235 175.73912,241.23908 177.32887,239.62226 C 178.87799,238.0591 180.77094,237.27764 183.00722,237.27764 C 185.2706,237.27764 187.18312,238.05909 188.74576,239.62226 z M 178.38093,240.67355 C 177.05978,242.008 176.39945,243.57116 176.39945,245.36429 C 176.39945,247.15694 177.05326,248.70682 178.36062,250.01393 C 179.66822,251.32153 181.22487,251.97509 183.03105,251.97509 C 184.83724,251.97509 186.40716,251.31502 187.74161,249.99412 C 189.0086,248.76725 189.64234,247.22467 189.64234,245.36429 C 189.64234,243.51799 188.99831,241.95084 187.71101,240.66354 C 186.42396,239.37649 184.86406,238.7327 183.03105,238.7327 C 181.19804,238.73271 179.64767,239.37975 178.38093,240.67355 z M 181.85761,244.57559 C 181.65573,244.13545 181.35354,243.91525 180.95051,243.91525 C 180.23802,243.91525 179.8819,244.39501 179.8819,245.35404 C 179.8819,246.31328 180.23802,246.79255 180.95051,246.79255 C 181.421,246.79255 181.75705,246.55908 181.95869,246.09111 L 182.94629,246.61701 C 182.47555,247.45339 181.76934,247.87168 180.82763,247.87168 C 180.10136,247.87168 179.51953,247.64899 179.08265,247.20409 C 178.64502,246.7587 178.42684,246.14477 178.42684,245.36206 C 178.42684,244.59313 178.65204,243.98271 179.10271,243.53056 C 179.55338,243.07838 180.11463,242.8524 180.7875,242.8524 C 181.78288,242.8524 182.49561,243.24465 182.92647,244.02835 L 181.85761,244.57559 z M 186.50398,244.57559 C 186.30184,244.13545 186.00567,243.91525 185.61517,243.91525 C 184.88839,243.91525 184.52474,244.39501 184.52474,245.35404 C 184.52474,246.31328 184.88839,246.79255 185.61517,246.79255 C 186.08642,246.79255 186.41644,246.55908 186.6048,246.09111 L 187.61447,246.61701 C 187.14448,247.45339 186.43926,247.87168 185.49931,247.87168 C 184.77403,247.87168 184.19346,247.64899 183.75683,247.20409 C 183.32096,246.7587 183.10254,246.14477 183.10254,245.36206 C 183.10254,244.59313 183.32422,243.98271 183.76737,243.53056 C 184.21026,243.07838 184.77404,242.8524 185.4592,242.8524 C 186.45282,242.8524 187.16455,243.24465 187.5939,244.02835 L 186.50398,244.57559 z"
|
||||
id="path3723"
|
||||
style="opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="text3725"
|
||||
d="M 357.4197,331.68502 C 357.66518,331.68502 357.85131,331.63144 357.9781,331.52427 C 358.10488,331.4171 358.16827,331.25904 358.16828,331.05005 C 358.16827,330.84377 358.10488,330.68703 357.9781,330.57986 C 357.85131,330.47002 357.66518,330.41509 357.4197,330.41509 L 356.55784,330.41509 L 356.55784,331.68502 L 357.4197,331.68502 M 357.4723,334.30926 C 357.78522,334.30926 358.0199,334.24363 358.17637,334.11235 C 358.33552,333.98107 358.4151,333.7828 358.4151,333.51757 C 358.4151,333.25769 358.33686,333.06346 358.18041,332.93485 C 358.02396,332.80358 357.78792,332.73793 357.4723,332.73793 L 356.55784,332.73793 L 356.55784,334.30926 L 357.4723,334.30926 M 358.92089,332.15119 C 359.25538,332.24765 359.51434,332.42581 359.69779,332.68569 C 359.88121,332.94557 359.97293,333.26439 359.97294,333.64215 C 359.97293,334.22085 359.776,334.6522 359.38217,334.93619 C 358.98833,335.22018 358.38947,335.36218 357.5856,335.36218 L 355.00001,335.36218 L 355.00001,329.36218 L 357.33878,329.36218 C 358.17771,329.36218 358.78466,329.48811 359.15962,329.73994 C 359.53727,329.99178 359.7261,330.395 359.7261,330.94958 C 359.7261,331.24162 359.65732,331.49078 359.51975,331.69708 C 359.38217,331.9007 359.18255,332.05207 358.92089,332.15119 M 359.83746,329.36218 L 361.54096,329.36218 L 362.91671,331.50015 L 364.29245,329.36218 L 366,329.36218 L 363.69764,332.83438 L 363.69764,335.36218 L 362.13982,335.36218 L 362.13982,332.83438 L 359.83746,329.36218 M 365.15837,332.40839 L 367.69946,332.40839 L 367.69946,333.57785 L 365.15837,333.57785 L 365.15837,332.40839 M 368.9174,329.36218 L 370.65732,329.36218 L 372.85447,333.47738 L 372.85447,329.36218 L 374.33138,329.36218 L 374.33138,335.36218 L 372.59146,335.36218 L 370.3943,331.24698 L 370.3943,335.36218 L 368.9174,335.36218 L 368.9174,329.36218 M 380.65173,335.03264 C 380.36579,335.17999 380.0677,335.29118 379.75749,335.36619 C 379.44727,335.44122 379.12357,335.47872 378.78638,335.47872 C 377.78019,335.47872 376.98307,335.20009 376.395,334.64282 C 375.80693,334.08288 375.5129,333.32467 375.5129,332.36821 C 375.5129,331.40907 375.80693,330.65087 376.395,330.0936 C 376.98307,329.53365 377.78019,329.25368 378.78638,329.25367 C 379.12357,329.25368 379.44727,329.29118 379.75749,329.3662 C 380.0677,329.44122 380.36579,329.55241 380.65173,329.69975 L 380.65173,330.94155 C 380.36309,330.74597 380.0785,330.60263 379.79796,330.51154 C 379.5174,330.42046 379.22203,330.37491 378.91181,330.3749 C 378.35611,330.37491 377.91911,330.55174 377.6008,330.90538 C 377.28249,331.25904 377.12333,331.74665 377.12333,332.36821 C 377.12333,332.9871 377.28249,333.47336 377.6008,333.82701 C 377.91911,334.18066 378.35611,334.35749 378.91181,334.35749 C 379.22203,334.35749 379.5174,334.31194 379.79796,334.22085 C 380.0785,334.12976 380.36309,333.98643 380.65173,333.79085 L 380.65173,335.03264"
|
||||
style="font-size:8.25858784px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:'Bitstream Vera Sans'" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 9.4 KiB |
117
images/cc-by-nd.svg
Normal file
@ -0,0 +1,117 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="80"
|
||||
height="15"
|
||||
id="svg2279"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45+devel"
|
||||
version="1.0"
|
||||
sodipodi:docname="by-nd.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs2281">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3442">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3444"
|
||||
width="20.614058"
|
||||
height="12.483703"
|
||||
x="171.99832"
|
||||
y="239.1203" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.5125"
|
||||
inkscape:cx="40"
|
||||
inkscape:cy="7.5"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
width="80px"
|
||||
height="15px"
|
||||
showborder="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="935"
|
||||
inkscape:window-height="624"
|
||||
inkscape:window-x="50"
|
||||
inkscape:window-y="160" />
|
||||
<metadata
|
||||
id="metadata2284">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="BY-ND"
|
||||
transform="matrix(0.9875019,0,0,0.9333518,-323.90064,-384.81244)">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.04161763;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3767"
|
||||
width="80"
|
||||
height="15"
|
||||
x="328.5"
|
||||
y="412.86218" />
|
||||
<rect
|
||||
y="414.36218"
|
||||
x="330"
|
||||
height="12"
|
||||
width="77"
|
||||
id="rect3769"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#abb1aa;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.46913578"
|
||||
d="M 329.99996,414.36218 L 329.99996,426.36218 L 350.33474,426.36218 C 351.64339,424.61187 352.52652,422.5777 352.52652,420.36218 C 352.52652,418.16144 351.65859,416.10503 350.36599,414.36218 L 329.99996,414.36218 z"
|
||||
id="path3771"
|
||||
sodipodi:nodetypes="cccscc" />
|
||||
<g
|
||||
id="g3773"
|
||||
transform="matrix(0.9612533,0,0,0.9612533,164.83416,184.507)"
|
||||
clip-path="url(#clipPath3442)">
|
||||
<path
|
||||
id="path3775"
|
||||
cx="296.35416"
|
||||
ry="22.939548"
|
||||
cy="264.3577"
|
||||
type="arc"
|
||||
rx="22.939548"
|
||||
d="M 190.06417,245.36206 C 190.06667,249.25405 186.91326,252.41072 183.02153,252.41323 C 179.12979,252.41572 175.97262,249.26256 175.97036,245.3706 C 175.97036,245.36783 175.97036,245.36507 175.97036,245.36206 C 175.9681,241.47007 179.12126,238.3134 183.013,238.31113 C 186.90524,238.30864 190.06191,241.46181 190.06417,245.3538 C 190.06417,245.35628 190.06417,245.35929 190.06417,245.36206 z"
|
||||
style="opacity:1;fill:#ffffff" />
|
||||
<path
|
||||
d="M 188.74576,239.62226 C 190.30843,241.18492 191.08988,243.09869 191.08988,245.36206 C 191.08988,247.62592 190.32197,249.51913 188.78615,251.04165 C 187.15627,252.64521 185.22995,253.44672 183.00722,253.44672 C 180.81132,253.44672 178.91837,252.65172 177.32887,251.06174 C 175.73912,249.47198 174.94436,247.57226 174.94436,245.36206 C 174.94436,243.15235 175.73912,241.23908 177.32887,239.62226 C 178.87799,238.0591 180.77094,237.27764 183.00722,237.27764 C 185.2706,237.27764 187.18312,238.05909 188.74576,239.62226 z M 178.38093,240.67355 C 177.05978,242.008 176.39945,243.57116 176.39945,245.36429 C 176.39945,247.15694 177.05326,248.70682 178.36062,250.01393 C 179.66822,251.32153 181.22487,251.97509 183.03105,251.97509 C 184.83724,251.97509 186.40716,251.31502 187.74161,249.99412 C 189.0086,248.76725 189.64234,247.22467 189.64234,245.36429 C 189.64234,243.51799 188.99831,241.95084 187.71101,240.66354 C 186.42396,239.37649 184.86406,238.7327 183.03105,238.7327 C 181.19804,238.73271 179.64767,239.37975 178.38093,240.67355 z M 181.85761,244.57559 C 181.65573,244.13545 181.35354,243.91525 180.95051,243.91525 C 180.23802,243.91525 179.8819,244.39501 179.8819,245.35404 C 179.8819,246.31328 180.23802,246.79255 180.95051,246.79255 C 181.421,246.79255 181.75705,246.55908 181.95869,246.09111 L 182.94629,246.61701 C 182.47555,247.45339 181.76934,247.87168 180.82763,247.87168 C 180.10136,247.87168 179.51953,247.64899 179.08265,247.20409 C 178.64502,246.7587 178.42684,246.14477 178.42684,245.36206 C 178.42684,244.59313 178.65204,243.98271 179.10271,243.53056 C 179.55338,243.07838 180.11463,242.8524 180.7875,242.8524 C 181.78288,242.8524 182.49561,243.24465 182.92647,244.02835 L 181.85761,244.57559 z M 186.50398,244.57559 C 186.30184,244.13545 186.00567,243.91525 185.61517,243.91525 C 184.88839,243.91525 184.52474,244.39501 184.52474,245.35404 C 184.52474,246.31328 184.88839,246.79255 185.61517,246.79255 C 186.08642,246.79255 186.41644,246.55908 186.6048,246.09111 L 187.61447,246.61701 C 187.14448,247.45339 186.43926,247.87168 185.49931,247.87168 C 184.77403,247.87168 184.19346,247.64899 183.75683,247.20409 C 183.32096,246.7587 183.10254,246.14477 183.10254,245.36206 C 183.10254,244.59313 183.32422,243.98271 183.76737,243.53056 C 184.21026,243.07838 184.77404,242.8524 185.4592,242.8524 C 186.45282,242.8524 187.16455,243.24465 187.5939,244.02835 L 186.50398,244.57559 z"
|
||||
id="path3777"
|
||||
style="opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
id="text3779"
|
||||
d="M 357.4197,419.68502 C 357.66518,419.68502 357.85131,419.63145 357.9781,419.52427 C 358.10488,419.41711 358.16827,419.25904 358.16828,419.05006 C 358.16827,418.84377 358.10488,418.68704 357.9781,418.57987 C 357.85131,418.47002 357.66518,418.4151 357.4197,418.4151 L 356.55784,418.4151 L 356.55784,419.68502 L 357.4197,419.68502 M 357.4723,422.30927 C 357.78522,422.30927 358.0199,422.24363 358.17637,422.11235 C 358.33552,421.98107 358.4151,421.78281 358.4151,421.51758 C 358.4151,421.2577 358.33686,421.06346 358.18041,420.93485 C 358.02396,420.80358 357.78792,420.73794 357.4723,420.73794 L 356.55784,420.73794 L 356.55784,422.30927 L 357.4723,422.30927 M 358.92089,420.1512 C 359.25538,420.24766 359.51434,420.42582 359.69779,420.6857 C 359.88121,420.94558 359.97293,421.2644 359.97294,421.64215 C 359.97293,422.22086 359.776,422.65221 359.38217,422.93619 C 358.98833,423.22019 358.38947,423.36218 357.5856,423.36218 L 355.00001,423.36218 L 355.00001,417.36219 L 357.33878,417.36219 C 358.17771,417.36219 358.78466,417.48812 359.15962,417.73994 C 359.53727,417.99179 359.7261,418.39501 359.7261,418.94959 C 359.7261,419.24162 359.65732,419.49079 359.51975,419.69708 C 359.38217,419.90071 359.18255,420.05208 358.92089,420.1512 M 359.83746,417.36219 L 361.54096,417.36219 L 362.91671,419.50016 L 364.29245,417.36219 L 366,417.36219 L 363.69764,420.83439 L 363.69764,423.36218 L 362.13982,423.36218 L 362.13982,420.83439 L 359.83746,417.36219 M 365.15837,420.4084 L 367.69946,420.4084 L 367.69946,421.57785 L 365.15837,421.57785 L 365.15837,420.4084 M 368.9174,417.36219 L 370.65732,417.36219 L 372.85447,421.47739 L 372.85447,417.36219 L 374.33138,417.36219 L 374.33138,423.36218 L 372.59146,423.36218 L 370.3943,419.24698 L 370.3943,423.36218 L 368.9174,423.36218 L 368.9174,417.36219 M 377.41872,418.53164 L 377.41872,422.19273 L 377.97711,422.19273 C 378.61373,422.19273 379.09929,422.03599 379.43379,421.72253 C 379.77098,421.40907 379.93957,420.95361 379.93957,420.35616 C 379.93957,419.76138 379.77232,419.3086 379.43783,418.99782 C 379.10333,418.68704 378.61643,418.53164 377.97711,418.53164 L 377.41872,418.53164 M 375.86089,417.36219 L 377.50369,417.36219 C 378.42085,417.36219 379.10333,417.42783 379.55113,417.5591 C 380.00162,417.68771 380.38736,417.9074 380.70838,418.21818 C 380.99161,418.48878 381.20202,418.8009 381.3396,419.15455 C 381.47717,419.5082 381.54596,419.90874 381.54597,420.35616 C 381.54596,420.80894 381.47717,421.21349 381.3396,421.56982 C 381.20202,421.92347 380.99161,422.23559 380.70838,422.5062 C 380.38466,422.81697 379.99622,423.038 379.54304,423.16928 C 379.08984,423.29788 378.41007,423.36218 377.50369,423.36218 L 375.86089,423.36218 L 375.86089,417.36219"
|
||||
style="font-size:8.25858784px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:'Bitstream Vera Sans'" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 9.2 KiB |
121
images/cc-by-sa.svg
Normal file
@ -0,0 +1,121 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="80"
|
||||
height="15"
|
||||
id="svg2279"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45+devel"
|
||||
version="1.0"
|
||||
sodipodi:docname="by-sa.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs2281">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3442">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3444"
|
||||
width="20.614058"
|
||||
height="12.483703"
|
||||
x="171.99832"
|
||||
y="239.1203" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.5125"
|
||||
inkscape:cx="40"
|
||||
inkscape:cy="7.5"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
width="80px"
|
||||
height="15px"
|
||||
showborder="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="935"
|
||||
inkscape:window-height="624"
|
||||
inkscape:window-x="50"
|
||||
inkscape:window-y="160" />
|
||||
<metadata
|
||||
id="metadata2284">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="BY-SA"
|
||||
transform="matrix(0.9875019,0,0,0.9333518,-323.90064,-356.81188)">
|
||||
<g
|
||||
id="g3747"
|
||||
transform="translate(158,145)">
|
||||
<rect
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.04161763;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3749"
|
||||
width="80"
|
||||
height="15"
|
||||
x="170.5"
|
||||
y="237.86218" />
|
||||
<rect
|
||||
y="239.36218"
|
||||
x="172"
|
||||
height="12"
|
||||
width="77"
|
||||
id="rect3751"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#abb1aa;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.46913578"
|
||||
d="M 171.99996,239.37505 L 171.99996,251.37505 L 192.33474,251.37505 C 193.64339,249.62474 194.52652,247.59057 194.52652,245.37505 C 194.52652,243.17431 193.65859,241.1179 192.36599,239.37505 L 171.99996,239.37505 z"
|
||||
id="path3753"
|
||||
sodipodi:nodetypes="cccscc" />
|
||||
<g
|
||||
id="g3755"
|
||||
transform="matrix(0.9612533,0,0,0.9612533,6.8341566,9.5069994)"
|
||||
clip-path="url(#clipPath3442)">
|
||||
<path
|
||||
id="path3757"
|
||||
cx="296.35416"
|
||||
ry="22.939548"
|
||||
cy="264.3577"
|
||||
type="arc"
|
||||
rx="22.939548"
|
||||
d="M 190.06417,245.36206 C 190.06667,249.25405 186.91326,252.41072 183.02153,252.41323 C 179.12979,252.41572 175.97262,249.26256 175.97036,245.3706 C 175.97036,245.36783 175.97036,245.36507 175.97036,245.36206 C 175.9681,241.47007 179.12126,238.3134 183.013,238.31113 C 186.90524,238.30864 190.06191,241.46181 190.06417,245.3538 C 190.06417,245.35628 190.06417,245.35929 190.06417,245.36206 z"
|
||||
style="opacity:1;fill:#ffffff" />
|
||||
<path
|
||||
d="M 188.74576,239.62226 C 190.30843,241.18492 191.08988,243.09869 191.08988,245.36206 C 191.08988,247.62592 190.32197,249.51913 188.78615,251.04165 C 187.15627,252.64521 185.22995,253.44672 183.00722,253.44672 C 180.81132,253.44672 178.91837,252.65172 177.32887,251.06174 C 175.73912,249.47198 174.94436,247.57226 174.94436,245.36206 C 174.94436,243.15235 175.73912,241.23908 177.32887,239.62226 C 178.87799,238.0591 180.77094,237.27764 183.00722,237.27764 C 185.2706,237.27764 187.18312,238.05909 188.74576,239.62226 z M 178.38093,240.67355 C 177.05978,242.008 176.39945,243.57116 176.39945,245.36429 C 176.39945,247.15694 177.05326,248.70682 178.36062,250.01393 C 179.66822,251.32153 181.22487,251.97509 183.03105,251.97509 C 184.83724,251.97509 186.40716,251.31502 187.74161,249.99412 C 189.0086,248.76725 189.64234,247.22467 189.64234,245.36429 C 189.64234,243.51799 188.99831,241.95084 187.71101,240.66354 C 186.42396,239.37649 184.86406,238.7327 183.03105,238.7327 C 181.19804,238.73271 179.64767,239.37975 178.38093,240.67355 z M 181.85761,244.57559 C 181.65573,244.13545 181.35354,243.91525 180.95051,243.91525 C 180.23802,243.91525 179.8819,244.39501 179.8819,245.35404 C 179.8819,246.31328 180.23802,246.79255 180.95051,246.79255 C 181.421,246.79255 181.75705,246.55908 181.95869,246.09111 L 182.94629,246.61701 C 182.47555,247.45339 181.76934,247.87168 180.82763,247.87168 C 180.10136,247.87168 179.51953,247.64899 179.08265,247.20409 C 178.64502,246.7587 178.42684,246.14477 178.42684,245.36206 C 178.42684,244.59313 178.65204,243.98271 179.10271,243.53056 C 179.55338,243.07838 180.11463,242.8524 180.7875,242.8524 C 181.78288,242.8524 182.49561,243.24465 182.92647,244.02835 L 181.85761,244.57559 z M 186.50398,244.57559 C 186.30184,244.13545 186.00567,243.91525 185.61517,243.91525 C 184.88839,243.91525 184.52474,244.39501 184.52474,245.35404 C 184.52474,246.31328 184.88839,246.79255 185.61517,246.79255 C 186.08642,246.79255 186.41644,246.55908 186.6048,246.09111 L 187.61447,246.61701 C 187.14448,247.45339 186.43926,247.87168 185.49931,247.87168 C 184.77403,247.87168 184.19346,247.64899 183.75683,247.20409 C 183.32096,246.7587 183.10254,246.14477 183.10254,245.36206 C 183.10254,244.59313 183.32422,243.98271 183.76737,243.53056 C 184.21026,243.07838 184.77404,242.8524 185.4592,242.8524 C 186.45282,242.8524 187.16455,243.24465 187.5939,244.02835 L 186.50398,244.57559 z"
|
||||
id="path3759"
|
||||
style="opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="text3761"
|
||||
d="M 357.4197,389.68502 C 357.66518,389.68502 357.85131,389.63144 357.9781,389.52427 C 358.10488,389.4171 358.16827,389.25904 358.16828,389.05005 C 358.16827,388.84376 358.10488,388.68703 357.9781,388.57986 C 357.85131,388.47002 357.66518,388.4151 357.4197,388.41509 L 356.55784,388.41509 L 356.55784,389.68502 L 357.4197,389.68502 M 357.4723,392.30926 C 357.78522,392.30926 358.0199,392.24363 358.17637,392.11235 C 358.33552,391.98107 358.4151,391.78281 358.4151,391.51756 C 358.4151,391.25769 358.33686,391.06345 358.18041,390.93485 C 358.02396,390.80357 357.78792,390.73793 357.4723,390.73793 L 356.55784,390.73793 L 356.55784,392.30926 L 357.4723,392.30926 M 358.92089,390.15119 C 359.25538,390.24764 359.51434,390.42581 359.69779,390.68568 C 359.88121,390.94557 359.97293,391.26439 359.97294,391.64215 C 359.97293,392.22086 359.776,392.6522 359.38217,392.93619 C 358.98833,393.22018 358.38947,393.36218 357.5856,393.36218 L 355.00001,393.36218 L 355.00001,387.36218 L 357.33878,387.36218 C 358.17771,387.36218 358.78466,387.4881 359.15962,387.73994 C 359.53727,387.99178 359.7261,388.395 359.7261,388.94959 C 359.7261,389.24162 359.65732,389.49078 359.51975,389.69708 C 359.38217,389.90069 359.18255,390.05206 358.92089,390.15119 M 359.83746,387.36218 L 361.54096,387.36218 L 362.91671,389.50015 L 364.29245,387.36218 L 366,387.36218 L 363.69764,390.83438 L 363.69764,393.36218 L 362.13982,393.36218 L 362.13982,390.83438 L 359.83746,387.36218 M 365.15837,390.40839 L 367.69946,390.40839 L 367.69946,391.57785 L 365.15837,391.57785 L 365.15837,390.40839 M 373.12153,387.55105 L 373.12153,388.82099 C 372.78973,388.67363 372.46602,388.56245 372.15042,388.48743 C 371.8348,388.41241 371.53671,388.3749 371.25618,388.3749 C 370.88391,388.3749 370.60877,388.42581 370.43073,388.52761 C 370.25268,388.62943 370.16367,388.7875 370.16367,389.00183 C 370.16367,389.16259 370.22301,389.28851 370.3417,389.37959 C 370.4631,389.46801 370.68159,389.54436 370.99721,389.60866 L 371.66081,389.74127 C 372.33249,389.87524 372.80996,390.07886 373.0932,390.35213 C 373.37644,390.62541 373.51806,391.01389 373.51807,391.51756 C 373.51806,392.17933 373.3198,392.67229 372.92326,392.99647 C 372.52941,393.31797 371.92651,393.47872 371.11455,393.47872 C 370.7315,393.47872 370.3471,393.44255 369.96136,393.37021 C 369.5756,393.29788 369.18985,393.1907 368.80411,393.04871 L 368.80411,391.74262 C 369.18985,391.94624 369.56211,392.10029 369.92089,392.20477 C 370.28236,392.30658 370.63034,392.35749 370.96484,392.35749 C 371.30473,392.35749 371.56504,392.30123 371.74578,392.1887 C 371.92651,392.07618 372.01688,391.91542 372.01688,391.70645 C 372.01688,391.51891 371.95484,391.37423 371.83076,391.27242 C 371.70936,391.17062 371.46523,391.07952 371.09837,390.99915 L 370.49547,390.86653 C 369.89122,390.73793 369.44882,390.53297 369.16827,390.25166 C 368.89042,389.97035 368.7515,389.59125 368.7515,389.11435 C 368.7515,388.51691 368.94572,388.05743 369.33418,387.73592 C 369.72262,387.41442 370.28101,387.25367 371.00935,387.25367 C 371.34115,387.25367 371.68238,387.27912 372.03307,387.33003 C 372.38374,387.37826 372.74656,387.45193 373.12153,387.55105 M 378.55573,392.26907 L 376.11985,392.26907 L 375.73545,393.36218 L 374.16953,393.36218 L 376.40714,387.36218 L 378.2644,387.36218 L 380.50201,393.36218 L 378.93609,393.36218 L 378.55573,392.26907 M 376.5083,391.15588 L 378.16324,391.15588 L 377.3378,388.76874 L 376.5083,391.15588"
|
||||
style="font-size:8.25858784px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:'Bitstream Vera Sans'" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
121
images/cc-by.svg
Normal file
@ -0,0 +1,121 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="80"
|
||||
height="15"
|
||||
id="svg2279"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45+devel"
|
||||
version="1.0"
|
||||
sodipodi:docname="by.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs2281">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath3442">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3444"
|
||||
width="20.614058"
|
||||
height="12.483703"
|
||||
x="171.99832"
|
||||
y="239.1203" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#999999"
|
||||
borderopacity="1"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="10.5125"
|
||||
inkscape:cx="40"
|
||||
inkscape:cy="7.5"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
width="80px"
|
||||
height="15px"
|
||||
showborder="true"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:window-width="935"
|
||||
inkscape:window-height="624"
|
||||
inkscape:window-x="50"
|
||||
inkscape:window-y="160" />
|
||||
<metadata
|
||||
id="metadata2284">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="BY"
|
||||
transform="matrix(0.9875019,0,0,0.9333518,-323.90064,-271.87688)">
|
||||
<g
|
||||
transform="translate(158,54)"
|
||||
id="g3693">
|
||||
<rect
|
||||
y="237.86218"
|
||||
x="170.5"
|
||||
height="15"
|
||||
width="80"
|
||||
id="rect3695"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.04161763;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.92243534;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3697"
|
||||
width="77"
|
||||
height="12"
|
||||
x="172"
|
||||
y="239.36218" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccscc"
|
||||
id="path3699"
|
||||
d="M 171.99996,239.37505 L 171.99996,251.37505 L 192.33474,251.37505 C 193.64339,249.62474 194.52652,247.59057 194.52652,245.37505 C 194.52652,243.17431 193.65859,241.1179 192.36599,239.37505 L 171.99996,239.37505 z"
|
||||
style="fill:#abb1aa;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.46913578" />
|
||||
<g
|
||||
clip-path="url(#clipPath3442)"
|
||||
transform="matrix(0.9612533,0,0,0.9612533,6.8341566,9.5069994)"
|
||||
id="g3701">
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff"
|
||||
d="M 190.06417,245.36206 C 190.06667,249.25405 186.91326,252.41072 183.02153,252.41323 C 179.12979,252.41572 175.97262,249.26256 175.97036,245.3706 C 175.97036,245.36783 175.97036,245.36507 175.97036,245.36206 C 175.9681,241.47007 179.12126,238.3134 183.013,238.31113 C 186.90524,238.30864 190.06191,241.46181 190.06417,245.3538 C 190.06417,245.35628 190.06417,245.35929 190.06417,245.36206 z"
|
||||
rx="22.939548"
|
||||
type="arc"
|
||||
cy="264.3577"
|
||||
ry="22.939548"
|
||||
cx="296.35416"
|
||||
id="path3703" />
|
||||
<path
|
||||
style="opacity:1"
|
||||
id="path3705"
|
||||
d="M 188.74576,239.62226 C 190.30843,241.18492 191.08988,243.09869 191.08988,245.36206 C 191.08988,247.62592 190.32197,249.51913 188.78615,251.04165 C 187.15627,252.64521 185.22995,253.44672 183.00722,253.44672 C 180.81132,253.44672 178.91837,252.65172 177.32887,251.06174 C 175.73912,249.47198 174.94436,247.57226 174.94436,245.36206 C 174.94436,243.15235 175.73912,241.23908 177.32887,239.62226 C 178.87799,238.0591 180.77094,237.27764 183.00722,237.27764 C 185.2706,237.27764 187.18312,238.05909 188.74576,239.62226 z M 178.38093,240.67355 C 177.05978,242.008 176.39945,243.57116 176.39945,245.36429 C 176.39945,247.15694 177.05326,248.70682 178.36062,250.01393 C 179.66822,251.32153 181.22487,251.97509 183.03105,251.97509 C 184.83724,251.97509 186.40716,251.31502 187.74161,249.99412 C 189.0086,248.76725 189.64234,247.22467 189.64234,245.36429 C 189.64234,243.51799 188.99831,241.95084 187.71101,240.66354 C 186.42396,239.37649 184.86406,238.7327 183.03105,238.7327 C 181.19804,238.73271 179.64767,239.37975 178.38093,240.67355 z M 181.85761,244.57559 C 181.65573,244.13545 181.35354,243.91525 180.95051,243.91525 C 180.23802,243.91525 179.8819,244.39501 179.8819,245.35404 C 179.8819,246.31328 180.23802,246.79255 180.95051,246.79255 C 181.421,246.79255 181.75705,246.55908 181.95869,246.09111 L 182.94629,246.61701 C 182.47555,247.45339 181.76934,247.87168 180.82763,247.87168 C 180.10136,247.87168 179.51953,247.64899 179.08265,247.20409 C 178.64502,246.7587 178.42684,246.14477 178.42684,245.36206 C 178.42684,244.59313 178.65204,243.98271 179.10271,243.53056 C 179.55338,243.07838 180.11463,242.8524 180.7875,242.8524 C 181.78288,242.8524 182.49561,243.24465 182.92647,244.02835 L 181.85761,244.57559 z M 186.50398,244.57559 C 186.30184,244.13545 186.00567,243.91525 185.61517,243.91525 C 184.88839,243.91525 184.52474,244.39501 184.52474,245.35404 C 184.52474,246.31328 184.88839,246.79255 185.61517,246.79255 C 186.08642,246.79255 186.41644,246.55908 186.6048,246.09111 L 187.61447,246.61701 C 187.14448,247.45339 186.43926,247.87168 185.49931,247.87168 C 184.77403,247.87168 184.19346,247.64899 183.75683,247.20409 C 183.32096,246.7587 183.10254,246.14477 183.10254,245.36206 C 183.10254,244.59313 183.32422,243.98271 183.76737,243.53056 C 184.21026,243.07838 184.77404,242.8524 185.4592,242.8524 C 186.45282,242.8524 187.16455,243.24465 187.5939,244.02835 L 186.50398,244.57559 z" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="text3707"
|
||||
d="M 357.4197,298.68502 C 357.66518,298.68503 357.85131,298.63145 357.9781,298.52427 C 358.10488,298.41711 358.16827,298.25904 358.16828,298.05007 C 358.16827,297.84377 358.10488,297.68704 357.9781,297.57987 C 357.85131,297.47003 357.66518,297.41511 357.4197,297.4151 L 356.55784,297.4151 L 356.55784,298.68502 L 357.4197,298.68502 M 357.4723,301.30928 C 357.78522,301.30928 358.0199,301.24363 358.17637,301.11235 C 358.33552,300.98108 358.4151,300.78282 358.4151,300.51758 C 358.4151,300.2577 358.33686,300.06346 358.18041,299.93486 C 358.02396,299.80358 357.78792,299.73795 357.4723,299.73794 L 356.55784,299.73794 L 356.55784,301.30928 L 357.4723,301.30928 M 358.92089,299.15121 C 359.25538,299.24766 359.51434,299.42582 359.69779,299.6857 C 359.88121,299.94558 359.97293,300.26439 359.97294,300.64216 C 359.97293,301.22086 359.776,301.6522 359.38217,301.9362 C 358.98833,302.22019 358.38947,302.36218 357.5856,302.36218 L 355.00001,302.36218 L 355.00001,296.36218 L 357.33878,296.36218 C 358.17771,296.36219 358.78466,296.48811 359.15962,296.73995 C 359.53727,296.9918 359.7261,297.39501 359.7261,297.94959 C 359.7261,298.24163 359.65732,298.49079 359.51975,298.69708 C 359.38217,298.9007 359.18255,299.05208 358.92089,299.15121 M 359.83746,296.36218 L 361.54096,296.36218 L 362.91671,298.50016 L 364.29245,296.36218 L 366,296.36218 L 363.69764,299.83439 L 363.69764,302.36218 L 362.13982,302.36218 L 362.13982,299.83439 L 359.83746,296.36218"
|
||||
style="font-size:8.25858784px;font-style:normal;font-weight:bold;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:'Bitstream Vera Sans'" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.1 KiB |
72
images/cc-zero.svg
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="80px" height="15px" viewBox="0 0 80 15" enable-background="new 0 0 80 15" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<rect fill="#FFFFFF" width="80" height="15"/>
|
||||
</g>
|
||||
<path d="M22.797,2C23.8,3.595,24.39,5.477,24.39,7.501c0,2.023-0.589,3.904-1.592,5.499H80V2H22.797z"/>
|
||||
<g>
|
||||
<path id="text2809_5_" d="M12.42,2.031c-3.137,0-3.926,2.959-3.926,5.469s0.787,5.469,3.926,5.469
|
||||
c3.137,0,3.924-2.959,3.924-5.469S15.557,2.031,12.42,2.031z M12.42,4.094c0.127,0,0.242,0.02,0.352,0.047
|
||||
c0.227,0.193,0.336,0.463,0.121,0.838l-2.09,3.838C10.738,8.33,10.729,7.855,10.729,7.5C10.729,6.395,10.807,4.094,12.42,4.094z
|
||||
M13.982,5.863c0.111,0.588,0.127,1.203,0.127,1.637c0,1.105-0.076,3.406-1.689,3.406c-0.127,0-0.244-0.012-0.354-0.039
|
||||
c-0.02-0.006-0.039-0.014-0.061-0.021c-0.031-0.01-0.066-0.02-0.098-0.031c-0.359-0.154-0.586-0.43-0.26-0.92L13.982,5.863z"/>
|
||||
<path d="M21.229,3.848c-0.465-1.152-1.143-2.172-2.035-3.066C18.907,0.496,18.607,0.241,18.302,0h-3.708
|
||||
c1.248,0.348,2.367,1.009,3.354,1.998c0.736,0.736,1.299,1.576,1.684,2.516s0.578,1.936,0.578,2.986
|
||||
c0,2.184-0.746,3.994-2.227,5.441c-0.771,0.746-1.635,1.32-2.596,1.717c-0.344,0.143-0.694,0.251-1.046,0.342h3.892
|
||||
c0.336-0.257,0.664-0.529,0.972-0.834c0.895-0.871,1.57-1.871,2.021-3c0.465-1.143,0.693-2.363,0.693-3.666
|
||||
C21.92,6.211,21.691,4.99,21.229,3.848z M6.957,12.975c-0.746-0.746-1.322-1.59-1.729-2.527c-0.396-0.951-0.6-1.93-0.6-2.947
|
||||
c0-1.029,0.203-2.016,0.6-2.955c0.406-0.949,0.982-1.803,1.729-2.561C7.916,1.004,9.021,0.346,10.268,0H6.58
|
||||
C6.289,0.235,6.004,0.484,5.732,0.762C4.816,1.676,4.117,2.721,3.631,3.887C3.156,5.041,2.92,6.244,2.92,7.5
|
||||
c0,1.268,0.236,2.471,0.711,3.613s1.164,2.17,2.068,3.086C5.994,14.49,6.305,14.752,6.623,15h3.88
|
||||
c-0.345-0.088-0.686-0.191-1.019-0.328C8.547,14.277,7.705,13.711,6.957,12.975z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M80,0v15H0V0H80 M79.25,0.75H0.75v13.5h78.5V0.75L79.25,0.75z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M30.514,8.106c-0.279,0.233-0.678,0.35-1.197,0.35h-0.993v1.717h-0.991V5.398h2.05
|
||||
c0.473,0,0.849,0.123,1.13,0.369s0.422,0.628,0.422,1.144C30.934,7.475,30.794,7.873,30.514,8.106z M29.753,6.387
|
||||
c-0.127-0.106-0.304-0.159-0.531-0.159h-0.898v1.406h0.898c0.228,0,0.404-0.058,0.531-0.172c0.126-0.114,0.189-0.296,0.189-0.544
|
||||
C29.942,6.669,29.879,6.492,29.753,6.387z"/>
|
||||
<path fill="#FFFFFF" d="M31.733,5.398h1.015v2.933c0,0.328,0.038,0.567,0.116,0.718c0.12,0.268,0.383,0.401,0.787,0.401
|
||||
c0.402,0,0.664-0.134,0.784-0.401c0.077-0.15,0.116-0.39,0.116-0.718V5.398h1.014v2.935c0,0.508-0.079,0.902-0.236,1.186
|
||||
c-0.293,0.519-0.853,0.777-1.678,0.777c-0.826,0-1.387-0.259-1.682-0.777c-0.157-0.283-0.236-0.678-0.236-1.186V5.398z"/>
|
||||
<path fill="#FFFFFF" d="M40.085,5.907c0.146,0.203,0.219,0.446,0.219,0.729c0,0.292-0.074,0.526-0.221,0.703
|
||||
c-0.083,0.1-0.204,0.19-0.364,0.272c0.243,0.088,0.427,0.229,0.551,0.421s0.187,0.425,0.187,0.699
|
||||
c0,0.283-0.071,0.537-0.213,0.761c-0.09,0.149-0.203,0.274-0.338,0.376c-0.152,0.117-0.332,0.196-0.539,0.24
|
||||
c-0.208,0.043-0.433,0.064-0.675,0.064H36.54V5.398h2.308C39.43,5.407,39.842,5.577,40.085,5.907z M37.492,6.228V7.28h1.16
|
||||
c0.208,0,0.376-0.039,0.505-0.118c0.13-0.079,0.194-0.219,0.194-0.419c0-0.223-0.086-0.369-0.257-0.44
|
||||
c-0.147-0.05-0.335-0.075-0.563-0.075H37.492z M37.492,8.07v1.273h1.159c0.207,0,0.368-0.028,0.483-0.084
|
||||
c0.209-0.104,0.313-0.303,0.313-0.597c0-0.248-0.101-0.419-0.304-0.512C39.031,8.1,38.872,8.073,38.667,8.07H37.492z"/>
|
||||
<path fill="#FFFFFF" d="M41.313,5.398h0.998v3.916h2.384v0.858h-3.382V5.398z"/>
|
||||
<path fill="#FFFFFF" d="M46.275,10.173h-0.991V5.398h0.991V10.173z"/>
|
||||
<path fill="#FFFFFF" d="M47.665,5.897c0.385-0.393,0.874-0.59,1.468-0.59c0.795,0,1.376,0.264,1.743,0.791
|
||||
c0.203,0.296,0.312,0.593,0.327,0.891h-0.998c-0.063-0.229-0.145-0.402-0.244-0.519c-0.178-0.207-0.441-0.311-0.79-0.311
|
||||
c-0.355,0-0.636,0.146-0.841,0.438s-0.308,0.707-0.308,1.242s0.108,0.937,0.324,1.203c0.217,0.267,0.492,0.4,0.826,0.4
|
||||
c0.342,0,0.603-0.114,0.782-0.344c0.1-0.123,0.182-0.308,0.247-0.554h0.991c-0.086,0.521-0.304,0.943-0.655,1.27
|
||||
s-0.802,0.489-1.351,0.489c-0.68,0-1.214-0.221-1.603-0.661c-0.389-0.442-0.583-1.049-0.583-1.82
|
||||
C47.002,6.991,47.224,6.349,47.665,5.897z"/>
|
||||
<path fill="#FFFFFF" d="M54.797,5.502c0.335,0.11,0.606,0.312,0.813,0.606c0.167,0.237,0.28,0.494,0.341,0.771
|
||||
s0.091,0.54,0.091,0.79c0,0.635-0.128,1.173-0.383,1.613c-0.346,0.594-0.88,0.891-1.602,0.891h-2.059V5.398h2.059
|
||||
C54.354,5.403,54.601,5.438,54.797,5.502z M52.968,6.228v3.116h0.922c0.471,0,0.8-0.232,0.985-0.696
|
||||
c0.102-0.255,0.152-0.559,0.152-0.91c0-0.486-0.076-0.859-0.229-1.119s-0.455-0.391-0.909-0.391H52.968z"/>
|
||||
<path fill="#FFFFFF" d="M60.466,9.749c-0.36,0.371-0.882,0.557-1.564,0.557s-1.204-0.186-1.564-0.557
|
||||
c-0.483-0.456-0.726-1.112-0.726-1.97c0-0.875,0.242-1.531,0.726-1.97c0.36-0.371,0.882-0.557,1.564-0.557
|
||||
s1.204,0.186,1.564,0.557c0.481,0.438,0.722,1.095,0.722,1.97C61.188,8.637,60.947,9.293,60.466,9.749z M59.842,9.023
|
||||
c0.232-0.292,0.349-0.706,0.349-1.244c0-0.535-0.116-0.949-0.349-1.242c-0.231-0.293-0.545-0.438-0.94-0.438
|
||||
s-0.711,0.146-0.946,0.437c-0.235,0.292-0.353,0.706-0.353,1.244s0.117,0.952,0.353,1.244c0.235,0.291,0.551,0.437,0.946,0.437
|
||||
S59.61,9.314,59.842,9.023z"/>
|
||||
<path fill="#FFFFFF" d="M65.116,5.398h1.436v4.774h-0.929V6.943c0-0.093,0.001-0.223,0.003-0.39
|
||||
c0.002-0.168,0.003-0.297,0.003-0.388l-0.904,4.007h-0.97l-0.898-4.007c0,0.091,0.001,0.22,0.003,0.388
|
||||
c0.003,0.167,0.004,0.297,0.004,0.39v3.229h-0.93V5.398h1.451l0.869,3.754L65.116,5.398z"/>
|
||||
<path fill="#FFFFFF" d="M68.84,5.398h1.129l1.689,4.774h-1.082l-0.314-0.981h-1.759l-0.323,0.981h-1.044L68.84,5.398z
|
||||
M68.774,8.369h1.223L69.395,6.49L68.774,8.369z"/>
|
||||
<path fill="#FFFFFF" d="M73.175,10.173h-0.991V5.398h0.991V10.173z"/>
|
||||
<path fill="#FFFFFF" d="M74.093,5.398h1.046l1.895,3.329V5.398h0.93v4.774h-0.997l-1.943-3.388v3.388h-0.93V5.398z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.1 KiB |
BIN
images/favicon-16x16-next.png
Normal file
After Width: | Height: | Size: 435 B |
BIN
images/favicon-32x32-next.png
Normal file
After Width: | Height: | Size: 640 B |
23
images/logo.svg
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xml:space="preserve"
|
||||
enable-background="new 0 0 512 512"
|
||||
viewBox="0 0 512 512"
|
||||
height="512px"
|
||||
width="512px"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="NexT"
|
||||
version="1.1"><metadata
|
||||
id="metadata3390"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs3388" /><path
|
||||
style="fill:#222222;fill-opacity:1"
|
||||
id="path3384"
|
||||
d="M 256.4,25.8 56.4,141.3 56,371.5 255.6,486.2 455.6,370.7 456,140.5 Z m 92.6,328.8 -18.4,10.7 -18.6,-11 0,0 -112,-142.3 0,142.6 -18.4,10.7 -18.6,-11 0,-197 18.5,-10.6 18.5,10.8 0,0 112,144.5 0,-144.6 18.5,-10.6 18.5,10.8 z" /></svg>
|
After Width: | Height: | Size: 1.0 KiB |
13
images/quote-l.svg
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- License Agreement at http://iconmonstr.com/license/ -->
|
||||
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path id="quote-5-icon" d="M55.178,332.895c-22.22-79.435,26.876-198.974,151.004-223.472l16.886,36.498
|
||||
c-38.022,14.331-63.218,47.064-66.943,81.466c42.757,6.73,75.459,43.737,75.459,88.385
|
||||
C231.583,415.014,85.181,440.162,55.178,332.895z M285.595,332.895c-22.22-79.435,26.876-198.974,151.004-223.472l16.886,36.498
|
||||
c-38.022,14.331-63.218,47.064-66.943,81.466c42.757,6.73,75.459,43.737,75.459,88.385C462,415.014,315.598,440.162,285.595,332.895
|
||||
z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 879 B |
12
images/quote-r.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- License Agreement at http://iconmonstr.com/license/ -->
|
||||
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
|
||||
<path id="quote-6-icon" d="M456.822,179.107c22.219,79.434-26.877,198.973-151.004,223.471l-16.887-36.498
|
||||
c38.023-14.33,63.219-47.064,66.943-81.465c-42.756-6.73-75.459-43.739-75.459-88.385
|
||||
C280.416,96.986,426.818,71.837,456.822,179.107z M226.405,179.107c22.22,79.434-26.876,198.973-151.004,223.471L58.515,366.08
|
||||
c38.022-14.33,63.218-47.064,66.943-81.465C82.702,277.885,50,240.876,50,196.23C50,96.986,196.402,71.837,226.405,179.107z"/>
|
||||
</svg>
|
After Width: | Height: | Size: 868 B |
436
index.html
Normal file
@ -0,0 +1,436 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
|
||||
<meta name="theme-color" content="#222">
|
||||
<meta name="generator" content="Hexo 3.9.0">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png?v=7.4.1">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png?v=7.4.1">
|
||||
<link rel="mask-icon" href="/images/logo.svg?v=7.4.1" color="#222">
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css?v=7.4.1">
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css?v=4.7.0">
|
||||
|
||||
|
||||
<script id="hexo-configurations">
|
||||
var NexT = window.NexT || {};
|
||||
var CONFIG = {
|
||||
root: '/',
|
||||
scheme: 'Muse',
|
||||
version: '7.4.1',
|
||||
exturl: false,
|
||||
sidebar: {"position":"left","display":"post","offset":12,"onmobile":false},
|
||||
copycode: {"enable":false,"show_result":false,"style":null},
|
||||
back2top: {"enable":true,"sidebar":false,"scrollpercent":false},
|
||||
bookmark: {"enable":false,"color":"#222","save":"auto"},
|
||||
fancybox: false,
|
||||
mediumzoom: false,
|
||||
lazyload: false,
|
||||
pangu: false,
|
||||
algolia: {
|
||||
appID: '',
|
||||
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"}
|
||||
},
|
||||
localsearch: {"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},
|
||||
path: '',
|
||||
motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
|
||||
translation: {
|
||||
copy_button: 'Copy',
|
||||
copy_success: 'Copied',
|
||||
copy_failure: 'Copy failed'
|
||||
},
|
||||
sidebarPadding: 40
|
||||
};
|
||||
</script>
|
||||
|
||||
<meta name="keywords" content="Software, Computing">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Hu Yu's Personal Blog">
|
||||
<meta property="og:url" content="http://saturneric.cn/index.html">
|
||||
<meta property="og:site_name" content="Hu Yu's Personal Blog">
|
||||
<meta property="og:locale" content="en">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="Hu Yu's Personal Blog">
|
||||
<link rel="canonical" href="http://saturneric.cn/">
|
||||
|
||||
|
||||
<script id="page-configurations">
|
||||
// https://hexo.io/docs/variables.html
|
||||
CONFIG.page = {
|
||||
sidebar: "",
|
||||
isHome: true,
|
||||
isPost: false,
|
||||
isPage: false,
|
||||
isArchive: false
|
||||
};
|
||||
</script>
|
||||
|
||||
<title>Hu Yu's Personal Blog</title>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<noscript>
|
||||
<style>
|
||||
.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-header { 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>
|
||||
|
||||
</head>
|
||||
|
||||
<body itemscope itemtype="http://schema.org/WebPage">
|
||||
<div class="container use-motion">
|
||||
<div class="headband"></div>
|
||||
|
||||
<header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
|
||||
<div class="header-inner"><div class="site-brand-container">
|
||||
<div class="site-meta">
|
||||
|
||||
<div>
|
||||
<a href="/" class="brand" rel="start">
|
||||
<span class="logo-line-before"><i></i></span>
|
||||
<span class="site-title">Hu Yu's Personal Blog</span>
|
||||
<span class="logo-line-after"><i></i></span>
|
||||
</a>
|
||||
</div>
|
||||
<p class="site-subtitle">Technical Articles about Computing and Software.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="site-nav-toggle">
|
||||
<div class="toggle" aria-label="Toggle navigation bar">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<nav class="site-nav">
|
||||
|
||||
<ul id="menu" class="menu">
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-home">
|
||||
|
||||
|
||||
|
||||
<a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>
|
||||
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="menu-item menu-item-archives">
|
||||
|
||||
|
||||
|
||||
<a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
<div class="back-to-top">
|
||||
<i class="fa fa-arrow-up"></i>
|
||||
<span>0%</span>
|
||||
</div>
|
||||
|
||||
|
||||
<main id="main" class="main">
|
||||
<div class="main-inner">
|
||||
<div class="content-wrap">
|
||||
<div id="content" class="content">
|
||||
|
||||
|
||||
<div class="posts-expand">
|
||||
|
||||
|
||||
|
||||
<article itemscope itemtype="http://schema.org/Article" class="post-block home" lang="en">
|
||||
<link itemprop="mainEntityOfPage" href="http://saturneric.cn/2019/10/09/NaoVision-General-Introduction/">
|
||||
|
||||
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||
<meta itemprop="name" content="Hu Yu">
|
||||
<meta itemprop="description" content="">
|
||||
<meta itemprop="image" content="/images/avatar.gif">
|
||||
</span>
|
||||
|
||||
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
|
||||
<meta itemprop="name" content="Hu Yu's Personal Blog">
|
||||
</span>
|
||||
<header class="post-header">
|
||||
<h1 class="post-title" itemprop="name headline">
|
||||
|
||||
<a href="/2019/10/09/NaoVision-General-Introduction/" class="post-title-link" itemprop="url">NaoVision</a>
|
||||
|
||||
</h1>
|
||||
|
||||
<div class="post-meta">
|
||||
<span class="post-meta-item">
|
||||
<span class="post-meta-item-icon">
|
||||
<i class="fa fa-calendar-o"></i>
|
||||
</span>
|
||||
<span class="post-meta-item-text">Posted on</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<time title="Created: 2019-10-09 23:22:44" itemprop="dateCreated datePublished" datetime="2019-10-09T23:22:44+08:00">2019-10-09</time>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="post-meta-item">
|
||||
<span class="post-meta-item-icon">
|
||||
<i class="fa fa-calendar-check-o"></i>
|
||||
</span>
|
||||
<span class="post-meta-item-text">Edited on</span>
|
||||
<time title="Modified: 2019-10-25 14:35:45" itemprop="dateModified" datetime="2019-10-25T14:35:45+08:00">2019-10-25</time>
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="post-body" itemprop="articleBody">
|
||||
|
||||
|
||||
<h1 id="NaoVision-Concise-Document"><a href="#NaoVision-Concise-Document" class="headerlink" title="NaoVision Concise Document"></a>NaoVision Concise Document</h1><h2 id="Project-Summary"><a href="#Project-Summary" class="headerlink" title="Project Summary"></a>Project Summary</h2><h3 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h3><p>NaoVision is a dedicated NAO group of dedicated vision method solutions for NAO robots in the RoboCup competition. NaoVision was written in C++ and is designed to solve the problem that NAO robots in the Bhuman system under the original fixed threshold scheme for the color discrimination of the field is easily interfered by light and other factors, resulting in the actual game NAO robot for the objects in the field (especially football) The identification is not fast enough and accurate.</p>
|
||||
<p>Correspondingly, for the judgment of the football field, NaoVision adopts the OTSU algorithm to realize the automatic adjustment of the image processing threshold, and is able to correctly identify and mark the field pixels in most cases without being affected by the light shadow.</p>
|
||||
<p>Based on the color discrimination of the site, NaoVision creates a scan line in the picture. The boundary between the site and the non-site is determined by sampling and scanning the pixels where the scan line is located. The picture is then divided into part and non-site parts by connecting between the demarcation points.</p>
|
||||
<p>In general, in order to reduce the computational overhead, NaoVision only calculates the picture pixels belonging to the site part. After determining the calculation range, NaoVison will create smaller scan lines within the calculation range for more detailed scanning and detection of objects within the calculation range.</p>
|
||||
<p>Then, NaoVision limited the detection of circular objects in the field. The program will perform a uniform skip scan on the scan line. After detecting pixels that do not belong to the field within the calculation range, three non-collinear points are randomly selected around the pixel. Based on these three points, the scanning is performed in eight directions, and it is known that the pixels of the field are detected and returned. Then judge whether the 24 effective points are on a circle, and simultaneously calculate the center coordinates of the circle and its radius. After the circle is added to the candidate queue, the program will continue to scan the rest of the calculation area.</p>
|
||||
<p>(To be continued)</p>
|
||||
<h3 id="Main-Component"><a href="#Main-Component" class="headerlink" title="Main Component"></a>Main Component</h3><p>Under NaoVision’s solution (developed with Visual Studio 2019), there is</p>
|
||||
<ul>
|
||||
<li><strong>NAOFastTools</strong> Core Toolset</li>
|
||||
<li><strong>NFTCommandLineTools</strong> Common Command Line Tools</li>
|
||||
<li><strong>NFTDeamon</strong> Daemon</li>
|
||||
<li><strong>NFTGUI</strong> Debugging Interface</li>
|
||||
<li><strong>NFTTest</strong> OpenCV Docking Toolset</li>
|
||||
<li><strong>UnitTest</strong> Unit Test Project</li>
|
||||
</ul>
|
||||
<h3 id="Brief-Process-Introduction"><a href="#Brief-Process-Introduction" class="headerlink" title="Brief Process Introduction"></a>Brief Process Introduction</h3><p>Problem Description: Due to various problems with the direct embedding scheme of NFT and BHuman, this project intends to adopt the independent process with BHuman.</p>
|
||||
<p>In the actual game process, the <strong>NAOFastTools Framework</strong> is driven by the <strong>NFTDeamon</strong>, running in parallel with Nao qi and BHuman in the NAO robot system. <strong>NFTDeamon</strong> communicates with BHuman by sharing memory. Camera data is obtained from BHuman. After calculation, visual correction information is transmitted to BHuman. In the usual debugging process, you can use the <strong>NFTCommandLineTools ** or **NFTGUI Debug Interface</strong> to establish a connection with the <strong>NFTDeamon</strong> to monitor and adjust the <strong>NAOFastTools Framework</strong> or *<em>BHuman *</em> Operating status and related parameters.</p>
|
||||
<p>(To be continued)</p>
|
||||
<h4 id="Introduction-To-Each-Component"><a href="#Introduction-To-Each-Component" class="headerlink" title="Introduction To Each Component"></a>Introduction To Each Component</h4><h5 id="1-NAOFastTools-Core-Toolset"><a href="#1-NAOFastTools-Core-Toolset" class="headerlink" title="1. NAOFastTools Core Toolset"></a>1. NAOFastTools Core Toolset</h5><p>The core framework for image processing and storage of the solution and the corresponding graphics processing module stored in the NAOFastTools Core Tools Group (hereinafter referred to as NFT) is the core project of the solution. The project follows the C++14 standard, and a small portion of the code contains C++14 features (the system with BHuman2018 has libstdc++.so that supports C++14). NFT eventually generates a static link library (NAOFastTools.lib and NAOFastTools.a) that corresponds to Windows and Linux. NFT works by linking with other programs. In addition to compiling in the VS environment, the NFT framework can also be compiled in a Linux environment, provided that the clang, make, and cmake tools are properly installed. The following is an extremely simple introduction to several of the most important common classes and functions in the NFT (including not limited to the following) (the actual use requires code understanding).</p>
|
||||
<p>OperaMatrix is a proxy class that is a layer of proxy access to the Matrix class of the Eigen linear algebra library. In addition to providing proxy access services, it also provides a smart pointer service that automatically creates and releases Matrix objects based on reference counts. One or more OperaMatrix corresponds to a Matrix object. OperaMatrix objects provide a variety of constructors to meet the needs of users in most situations. The elements in OperaMatrix are stored in memory in a column-first manner, and the user can directly get a pointer to the first element of the matrix via the getData() interface. The number of rows and columns of the matrix corresponding to OperaMatrix can be obtained using getRows() and getCols().</p>
|
||||
<p>The Image class is a storage vector for images that contains one or more OpreaMatrix objects, corresponding to multiple channels of the image. An OperaMatrix stores pixel data for a corresponding channel. Normally, the type of pixel data (PIXEL_TYPE) is defined in NFT.h. The number of channels in an image can be obtained using the getColumns() method, and a reference to a channel can be obtained directly using the [] operator. The height and width of the image are obtained using the getHeight() and getWidth() methods.</p>
|
||||
<p>The ImageYUV422 class inherits from the Image class, which provides storage for the compressed color space YUV422. Need to note that it has one and only one channel. In a specific memory implementation, it compresses the pixel data of three channels into one channel for storage. If you need to get the Y, Cr, and Cb values of a pixel, you can call getY(int, int), getCr(int, int), getCb(int, int) to access it. Further, if it is necessary to modify the Y, Cr, and Cb values of a certain pixel in the picture, the corresponding setter is called and the coordinate parameters of the pixel are provided.</p>
|
||||
<p>The ImageColored class inherits from the ImageYUV422 class and has one and only one channel. It mainly provides a single-channel image storage function and is a storage carrier for the output of the site color discrimination module. It is also a storage carrier for input data for many other vision modules. It disables all of the features of the ImageYUV422 parent class that have operations on the YUV color space.</p>
|
||||
<p>The ImageSaver class is a storage service class for the Image class. It can store the data in the Image object correctly in a file on a Windows or Linux system (.nftd suffix). It can also build the corresponding Image object by reading the file in .nftd format.</p>
|
||||
<p>(To be continued)</p>
|
||||
<h5 id="2-NFTGUI-Debugging-Interface"><a href="#2-NFTGUI-Debugging-Interface" class="headerlink" title="2. NFTGUI Debugging Interface"></a>2. NFTGUI Debugging Interface</h5><p>The NFTGUI debugging interface is based on Qt5. It is a visual debugging interface for NAOFastTools. It can output intermediate results and internal related parameters for processing each graphics processing module.</p>
|
||||
<p>(To be continued)</p>
|
||||
<h5 id="3-NFTTest-Opencv-Docking-Toolset"><a href="#3-NFTTest-Opencv-Docking-Toolset" class="headerlink" title="3.NFTTest Opencv Docking Toolset"></a>3.NFTTest Opencv Docking Toolset</h5><p>The NFTTest Opencv Docking Toolset is a bridge between the NaoVision framework and the OpenCV framework. It provides a conversion function between the main data structures between the two frameworks. In addition, the project is also used for the most basic debugging information output during the development process. .</p>
|
||||
<p>(To be continued)</p>
|
||||
<h5 id="4-UnitTest"><a href="#4-UnitTest" class="headerlink" title="4.UnitTest"></a>4.UnitTest</h5><p>Based on the Google Test test framework, the unit test code of the core framework in NAOFastTools is stored. This code will ensure that the core framework can run efficiently and accurately, and it is convenient to discover the loopholes in the framework in time.</p>
|
||||
<p>(To be continued)</p>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<footer class="post-footer">
|
||||
<div class="post-eof"></div>
|
||||
|
||||
</footer>
|
||||
</article>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="toggle sidebar-toggle">
|
||||
<span class="toggle-line toggle-line-first"></span>
|
||||
<span class="toggle-line toggle-line-middle"></span>
|
||||
<span class="toggle-line toggle-line-last"></span>
|
||||
</div>
|
||||
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-inner">
|
||||
|
||||
<ul class="sidebar-nav motion-element">
|
||||
<li class="sidebar-nav-toc">
|
||||
Table of Contents
|
||||
</li>
|
||||
<li class="sidebar-nav-overview">
|
||||
Overview
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!--noindex-->
|
||||
<div class="post-toc-wrap sidebar-panel">
|
||||
</div>
|
||||
<!--/noindex-->
|
||||
|
||||
<div class="site-overview-wrap sidebar-panel">
|
||||
<div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
|
||||
<p class="site-author-name" itemprop="name">Hu Yu</p>
|
||||
<div class="site-description" itemprop="description"></div>
|
||||
</div>
|
||||
<div class="site-state-wrap motion-element">
|
||||
<nav class="site-state">
|
||||
<div class="site-state-item site-state-posts">
|
||||
|
||||
<a href="/archives/">
|
||||
|
||||
<span class="site-state-item-count">1</span>
|
||||
<span class="site-state-item-name">posts</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</aside>
|
||||
<div id="sidebar-dimmer"></div>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer id="footer" class="footer">
|
||||
<div class="footer-inner">
|
||||
<div class="copyright">© <span itemprop="copyrightYear">2019</span>
|
||||
<span class="with-love" id="animate">
|
||||
<i class="fa fa-user"></i>
|
||||
</span>
|
||||
<span class="author" itemprop="copyrightHolder">Hu Yu</span>
|
||||
</div>
|
||||
<div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> v3.9.0</div>
|
||||
<span class="post-meta-divider">|</span>
|
||||
<div class="theme-info">Theme – <a href="https://theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Muse</a> v7.4.1</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
<script src="/lib/anime.min.js?v=3.1.0"></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="/js/utils.js?v=7.4.1"></script><script src="/js/motion.js?v=7.4.1"></script>
|
||||
<script src="/js/schemes/muse.js?v=7.4.1"></script>
|
||||
<script src="/js/next-boot.js?v=7.4.1"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
109
js/algolia-search.js
Normal file
@ -0,0 +1,109 @@
|
||||
/* global instantsearch, CONFIG */
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
const algoliaSettings = CONFIG.algolia;
|
||||
|
||||
let search = instantsearch({
|
||||
appId : algoliaSettings.appID,
|
||||
apiKey : algoliaSettings.apiKey,
|
||||
indexName : algoliaSettings.indexName,
|
||||
searchFunction: helper => {
|
||||
let searchInput = document.querySelector('#search-input input');
|
||||
if (searchInput.value) {
|
||||
helper.search();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
window.pjax && search.on('render', () => {
|
||||
window.pjax.refresh(document.getElementById('algolia-hits'));
|
||||
});
|
||||
|
||||
// Registering Widgets
|
||||
[
|
||||
instantsearch.widgets.searchBox({
|
||||
container : '#search-input',
|
||||
placeholder: algoliaSettings.labels.input_placeholder
|
||||
}),
|
||||
|
||||
instantsearch.widgets.stats({
|
||||
container: '#algolia-stats',
|
||||
templates: {
|
||||
body: data => {
|
||||
let stats = algoliaSettings.labels.hits_stats
|
||||
.replace(/\$\{hits}/, data.nbHits)
|
||||
.replace(/\$\{time}/, data.processingTimeMS);
|
||||
return `${stats}
|
||||
<span class="algolia-powered">
|
||||
<img src="${CONFIG.root}images/algolia_logo.svg" alt="Algolia">
|
||||
</span>
|
||||
<hr>`;
|
||||
}
|
||||
}
|
||||
}),
|
||||
|
||||
instantsearch.widgets.hits({
|
||||
container : '#algolia-hits',
|
||||
hitsPerPage: algoliaSettings.hits.per_page || 10,
|
||||
templates : {
|
||||
item: data => {
|
||||
let link = data.permalink ? data.permalink : CONFIG.root + data.path;
|
||||
return `<a href="${link}" class="algolia-hit-item-link">${data._highlightResult.title.value}</a>`;
|
||||
},
|
||||
empty: data => {
|
||||
return `<div id="algolia-hits-empty">
|
||||
${algoliaSettings.labels.hits_empty.replace(/\$\{query}/, data.query)}
|
||||
</div>`;
|
||||
}
|
||||
},
|
||||
cssClasses: {
|
||||
item: 'algolia-hit-item'
|
||||
}
|
||||
}),
|
||||
|
||||
instantsearch.widgets.pagination({
|
||||
container : '#algolia-pagination',
|
||||
scrollTo : false,
|
||||
showFirstLast: false,
|
||||
labels : {
|
||||
first : '<i class="fa fa-angle-double-left"></i>',
|
||||
last : '<i class="fa fa-angle-double-right"></i>',
|
||||
previous: '<i class="fa fa-angle-left"></i>',
|
||||
next : '<i class="fa fa-angle-right"></i>'
|
||||
},
|
||||
cssClasses: {
|
||||
root : 'pagination',
|
||||
item : 'pagination-item',
|
||||
link : 'page-number',
|
||||
active : 'current',
|
||||
disabled: 'disabled-item'
|
||||
}
|
||||
})
|
||||
].forEach(search.addWidget, search);
|
||||
|
||||
search.start();
|
||||
|
||||
// Handle and trigger popup window
|
||||
document.querySelector('.popup-trigger').addEventListener('click', () => {
|
||||
document.body.style.overflow = 'hidden';
|
||||
document.querySelector('.search-pop-overlay').style.display = 'block';
|
||||
document.querySelector('.popup').style.display = 'block';
|
||||
document.querySelector('#search-input input').focus();
|
||||
});
|
||||
|
||||
// Monitor main search box
|
||||
const onPopupClose = () => {
|
||||
document.body.style.overflow = '';
|
||||
document.querySelector('.search-pop-overlay').style.display = 'none';
|
||||
document.querySelector('.popup').style.display = 'none';
|
||||
};
|
||||
|
||||
document.querySelector('.search-pop-overlay').addEventListener('click', onPopupClose);
|
||||
document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose);
|
||||
window.addEventListener('pjax:success', onPopupClose);
|
||||
window.addEventListener('keyup', event => {
|
||||
if (event.which === 27) {
|
||||
onPopupClose();
|
||||
}
|
||||
});
|
||||
});
|
58
js/bookmark.js
Normal file
@ -0,0 +1,58 @@
|
||||
/* global CONFIG */
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
'use strict';
|
||||
|
||||
var doSaveScroll = () => {
|
||||
localStorage.setItem('bookmark' + location.pathname, window.scrollY);
|
||||
};
|
||||
|
||||
var scrollToMark = () => {
|
||||
var top = localStorage.getItem('bookmark' + location.pathname);
|
||||
top = parseInt(top, 10);
|
||||
// If the page opens with a specific hash, just jump out
|
||||
if (!isNaN(top) && location.hash === '') {
|
||||
// Auto scroll to the position
|
||||
window.anime({
|
||||
targets : [document.documentElement, document.body],
|
||||
duration : 200,
|
||||
easing : 'linear',
|
||||
scrollTop: top
|
||||
});
|
||||
}
|
||||
};
|
||||
// Register everything
|
||||
var init = function(trigger) {
|
||||
// Create a link element
|
||||
var link = document.querySelector('.book-mark-link');
|
||||
// Scroll event
|
||||
window.addEventListener('scroll', () => {
|
||||
window.scrollY === 0 ? link.classList.add('book-mark-link-fixed') : link.classList.remove('book-mark-link-fixed');
|
||||
});
|
||||
// Register beforeunload event when the trigger is auto
|
||||
if (trigger === 'auto') {
|
||||
// Register beforeunload event
|
||||
window.addEventListener('beforeunload', doSaveScroll);
|
||||
window.addEventListener('pjax:send', doSaveScroll);
|
||||
}
|
||||
// Save the position by clicking the icon
|
||||
link.addEventListener('click', () => {
|
||||
doSaveScroll();
|
||||
window.anime({
|
||||
targets : link,
|
||||
duration: 200,
|
||||
easing : 'linear',
|
||||
top : -30,
|
||||
complete: () => {
|
||||
setTimeout(() => {
|
||||
link.style.top = '';
|
||||
}, 400);
|
||||
}
|
||||
});
|
||||
});
|
||||
scrollToMark();
|
||||
window.addEventListener('pjax:success', scrollToMark);
|
||||
};
|
||||
|
||||
init(CONFIG.bookmark.save);
|
||||
});
|
318
js/local-search.js
Normal file
@ -0,0 +1,318 @@
|
||||
/* global CONFIG */
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
// Popup Window
|
||||
let isfetched = false;
|
||||
let datas;
|
||||
let isXml = true;
|
||||
// Search DB path
|
||||
let searchPath = CONFIG.path;
|
||||
if (searchPath.length === 0) {
|
||||
searchPath = 'search.xml';
|
||||
} else if (/json$/i.test(searchPath)) {
|
||||
isXml = false;
|
||||
}
|
||||
const path = CONFIG.root + searchPath;
|
||||
const input = document.getElementById('search-input');
|
||||
const resultContent = document.getElementById('search-result');
|
||||
|
||||
// Ref: https://github.com/ForbesLindesay/unescape-html
|
||||
const unescapeHtml = html => {
|
||||
return String(html)
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, '\'')
|
||||
.replace(/:/g, ':')
|
||||
// Replace all the other &#x; chars
|
||||
.replace(/&#(\d+);/g, (m, p) => {
|
||||
return String.fromCharCode(p);
|
||||
})
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/&/g, '&');
|
||||
};
|
||||
|
||||
const getIndexByWord = (word, text, caseSensitive) => {
|
||||
let wordLen = word.length;
|
||||
if (wordLen === 0) {
|
||||
return [];
|
||||
}
|
||||
let startPosition = 0;
|
||||
let position = [];
|
||||
let 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;
|
||||
};
|
||||
|
||||
// Merge hits into slices
|
||||
const mergeIntoSlice = (start, end, index, searchText) => {
|
||||
let item = index[index.length - 1];
|
||||
let position = item.position;
|
||||
let word = item.word;
|
||||
let hits = [];
|
||||
let searchTextCountInSlice = 0;
|
||||
while (position + word.length <= end && index.length !== 0) {
|
||||
if (word === searchText) {
|
||||
searchTextCountInSlice++;
|
||||
}
|
||||
hits.push({
|
||||
position: position,
|
||||
length : word.length
|
||||
});
|
||||
let 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
hits : hits,
|
||||
start : start,
|
||||
end : end,
|
||||
searchTextCount: searchTextCountInSlice
|
||||
};
|
||||
};
|
||||
|
||||
// Highlight title and content
|
||||
const highlightKeyword = (text, slice) => {
|
||||
let result = '';
|
||||
let prevEnd = slice.start;
|
||||
slice.hits.forEach(hit => {
|
||||
result += text.substring(prevEnd, hit.position);
|
||||
let 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;
|
||||
};
|
||||
|
||||
const inputEventFunction = () => {
|
||||
let searchText = input.value.trim().toLowerCase();
|
||||
let keywords = searchText.split(/[-\s]+/);
|
||||
if (keywords.length > 1) {
|
||||
keywords.push(searchText);
|
||||
}
|
||||
let resultItems = [];
|
||||
if (searchText.length > 0) {
|
||||
// Perform local searching
|
||||
datas.forEach(data => {
|
||||
// Only match articles with not empty titles
|
||||
if (!data.title) {
|
||||
return;
|
||||
}
|
||||
let searchTextCount = 0;
|
||||
let title = data.title.trim();
|
||||
let titleInLowerCase = title.toLowerCase();
|
||||
let content = data.content ? data.content.trim().replace(/<[^>]+>/g, '') : '';
|
||||
if (CONFIG.localsearch.unescape) {
|
||||
content = unescapeHtml(content);
|
||||
}
|
||||
let contentInLowerCase = content.toLowerCase();
|
||||
let articleUrl = decodeURIComponent(data.url).replace(/\/{2,}/g, '/');
|
||||
let indexOfTitle = [];
|
||||
let indexOfContent = [];
|
||||
keywords.forEach(keyword => {
|
||||
indexOfTitle = indexOfTitle.concat(getIndexByWord(keyword, titleInLowerCase, false));
|
||||
indexOfContent = indexOfContent.concat(getIndexByWord(keyword, contentInLowerCase, false));
|
||||
});
|
||||
|
||||
// Show search results
|
||||
if (indexOfTitle.length > 0 || indexOfContent.length > 0) {
|
||||
let hitCount = indexOfTitle.length + indexOfContent.length;
|
||||
// Sort index by position of keyword
|
||||
[indexOfTitle, indexOfContent].forEach(index => {
|
||||
index.sort((itemLeft, itemRight) => {
|
||||
if (itemRight.position !== itemLeft.position) {
|
||||
return itemRight.position - itemLeft.position;
|
||||
}
|
||||
return itemLeft.word.length - itemRight.word.length;
|
||||
});
|
||||
});
|
||||
|
||||
let slicesOfTitle = [];
|
||||
if (indexOfTitle.length !== 0) {
|
||||
let tmp = mergeIntoSlice(0, title.length, indexOfTitle, searchText);
|
||||
searchTextCount += tmp.searchTextCountInSlice;
|
||||
slicesOfTitle.push(tmp);
|
||||
}
|
||||
|
||||
let slicesOfContent = [];
|
||||
while (indexOfContent.length !== 0) {
|
||||
let item = indexOfContent[indexOfContent.length - 1];
|
||||
let position = item.position;
|
||||
let word = item.word;
|
||||
// Cut out 100 characters
|
||||
let start = position - 20;
|
||||
let end = position + 80;
|
||||
if (start < 0) {
|
||||
start = 0;
|
||||
}
|
||||
if (end < position + word.length) {
|
||||
end = position + word.length;
|
||||
}
|
||||
if (end > content.length) {
|
||||
end = content.length;
|
||||
}
|
||||
let tmp = mergeIntoSlice(start, end, indexOfContent, searchText);
|
||||
searchTextCount += tmp.searchTextCountInSlice;
|
||||
slicesOfContent.push(tmp);
|
||||
}
|
||||
|
||||
// Sort slices in content by search text's count and hits' count
|
||||
slicesOfContent.sort((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;
|
||||
}
|
||||
return sliceLeft.start - sliceRight.start;
|
||||
});
|
||||
|
||||
// Select top N slices in content
|
||||
let upperBound = parseInt(CONFIG.localsearch.top_n_per_article, 10);
|
||||
if (upperBound >= 0) {
|
||||
slicesOfContent = slicesOfContent.slice(0, upperBound);
|
||||
}
|
||||
|
||||
let 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(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((resultLeft, resultRight) => {
|
||||
if (resultLeft.searchTextCount !== resultRight.searchTextCount) {
|
||||
return resultRight.searchTextCount - resultLeft.searchTextCount;
|
||||
} else if (resultLeft.hitCount !== resultRight.hitCount) {
|
||||
return resultRight.hitCount - resultLeft.hitCount;
|
||||
}
|
||||
return resultRight.id - resultLeft.id;
|
||||
});
|
||||
let searchResultList = '<ul class="search-result-list">';
|
||||
resultItems.forEach(result => {
|
||||
searchResultList += result.item;
|
||||
});
|
||||
searchResultList += '</ul>';
|
||||
resultContent.innerHTML = searchResultList;
|
||||
window.pjax && window.pjax.refresh(resultContent);
|
||||
}
|
||||
};
|
||||
|
||||
const fetchData = callback => {
|
||||
fetch(path)
|
||||
.then(response => response.text())
|
||||
.then(res => {
|
||||
// Get the contents from search data
|
||||
isfetched = true;
|
||||
datas = isXml ? [...new DOMParser().parseFromString(res, 'text/xml').querySelectorAll('entry')].map(item => {
|
||||
return {
|
||||
title : item.querySelector('title').innerHTML,
|
||||
content: item.querySelector('content').innerHTML,
|
||||
url : item.querySelector('url').innerHTML
|
||||
};
|
||||
}) : JSON.parse(res);
|
||||
|
||||
// Remove loading animation
|
||||
document.querySelector('.search-pop-overlay').innerHTML = '';
|
||||
document.body.style.overflow = '';
|
||||
|
||||
if (callback) {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
if (CONFIG.localsearch.preload) {
|
||||
fetchData();
|
||||
}
|
||||
|
||||
const proceedSearch = () => {
|
||||
document.body.style.overflow = 'hidden';
|
||||
document.querySelector('.search-pop-overlay').style.display = 'block';
|
||||
document.querySelector('.popup').style.display = 'block';
|
||||
document.getElementById('search-input').focus();
|
||||
};
|
||||
|
||||
// Search function
|
||||
const searchFunc = () => {
|
||||
document.querySelector('.search-pop-overlay').style.display = '';
|
||||
document.querySelector('.search-pop-overlay').innerHTML = '<div class="search-loading-icon"><i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i></div>';
|
||||
fetchData(proceedSearch);
|
||||
};
|
||||
|
||||
if (CONFIG.localsearch.trigger === 'auto') {
|
||||
input.addEventListener('input', inputEventFunction);
|
||||
} else {
|
||||
document.querySelector('.search-icon').addEventListener('click', inputEventFunction);
|
||||
input.addEventListener('keypress', event => {
|
||||
if (event.keyCode === 13) {
|
||||
inputEventFunction();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Handle and trigger popup window
|
||||
document.querySelector('.popup-trigger').addEventListener('click', () => {
|
||||
if (isfetched === false) {
|
||||
searchFunc();
|
||||
} else {
|
||||
proceedSearch();
|
||||
}
|
||||
});
|
||||
|
||||
// Monitor main search box
|
||||
const onPopupClose = () => {
|
||||
document.body.style.overflow = '';
|
||||
document.querySelector('.search-pop-overlay').style.display = 'none';
|
||||
document.querySelector('.popup').style.display = 'none';
|
||||
};
|
||||
|
||||
document.querySelector('.search-pop-overlay').addEventListener('click', onPopupClose);
|
||||
document.querySelector('.popup-btn-close').addEventListener('click', onPopupClose);
|
||||
window.addEventListener('pjax:success', onPopupClose);
|
||||
window.addEventListener('keyup', event => {
|
||||
if (event.which === 27) {
|
||||
onPopupClose();
|
||||
}
|
||||
});
|
||||
});
|
171
js/motion.js
Normal file
@ -0,0 +1,171 @@
|
||||
/* global NexT, CONFIG, Velocity */
|
||||
|
||||
if (window.$ && window.$.Velocity) window.Velocity = window.$.Velocity;
|
||||
|
||||
NexT.motion = {};
|
||||
|
||||
NexT.motion.integrator = {
|
||||
queue : [],
|
||||
cursor: -1,
|
||||
init : function() {
|
||||
this.queue = [];
|
||||
this.cursor = -1;
|
||||
return this;
|
||||
},
|
||||
add: function(fn) {
|
||||
this.queue.push(fn);
|
||||
return this;
|
||||
},
|
||||
next: function() {
|
||||
this.cursor++;
|
||||
var fn = this.queue[this.cursor];
|
||||
typeof fn === 'function' && fn(NexT.motion.integrator);
|
||||
},
|
||||
bootstrap: function() {
|
||||
this.next();
|
||||
}
|
||||
};
|
||||
|
||||
NexT.motion.middleWares = {
|
||||
logo: function(integrator) {
|
||||
var sequence = [];
|
||||
var brand = document.querySelector('.brand');
|
||||
var image = document.querySelector('.custom-logo-image');
|
||||
var title = document.querySelector('.site-title');
|
||||
var subtitle = document.querySelector('.site-subtitle');
|
||||
var logoLineTop = document.querySelector('.logo-line-before i');
|
||||
var logoLineBottom = document.querySelector('.logo-line-after i');
|
||||
|
||||
brand && sequence.push({
|
||||
e: brand,
|
||||
p: {opacity: 1},
|
||||
o: {duration: 200}
|
||||
});
|
||||
|
||||
function getMistLineSettings(element, translateX) {
|
||||
return {
|
||||
e: element,
|
||||
p: {translateX: translateX},
|
||||
o: {
|
||||
duration : 500,
|
||||
sequenceQueue: false
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function pushImageToSequence() {
|
||||
sequence.push({
|
||||
e: image,
|
||||
p: {opacity: 1, top: 0},
|
||||
o: {duration: 200}
|
||||
});
|
||||
}
|
||||
|
||||
NexT.utils.isMist() && logoLineTop && logoLineBottom
|
||||
&& sequence.push(
|
||||
getMistLineSettings(logoLineTop, '100%'),
|
||||
getMistLineSettings(logoLineBottom, '-100%')
|
||||
);
|
||||
|
||||
NexT.utils.isMuse() && image && pushImageToSequence();
|
||||
|
||||
title && sequence.push({
|
||||
e: title,
|
||||
p: {opacity: 1, top: 0},
|
||||
o: {duration: 200}
|
||||
});
|
||||
|
||||
subtitle && sequence.push({
|
||||
e: subtitle,
|
||||
p: {opacity: 1, top: 0},
|
||||
o: {duration: 200}
|
||||
});
|
||||
|
||||
(NexT.utils.isPisces() || NexT.utils.isGemini()) && image && pushImageToSequence();
|
||||
|
||||
if (sequence.length > 0) {
|
||||
sequence[sequence.length - 1].o.complete = function() {
|
||||
integrator.next();
|
||||
};
|
||||
Velocity.RunSequence(sequence);
|
||||
} else {
|
||||
integrator.next();
|
||||
}
|
||||
|
||||
if (CONFIG.motion.async) {
|
||||
integrator.next();
|
||||
}
|
||||
},
|
||||
|
||||
menu: function(integrator) {
|
||||
|
||||
Velocity(document.querySelectorAll('.menu-item'), 'transition.slideDownIn', {
|
||||
display : null,
|
||||
duration: 200,
|
||||
complete: function() {
|
||||
integrator.next();
|
||||
}
|
||||
});
|
||||
|
||||
if (CONFIG.motion.async) {
|
||||
integrator.next();
|
||||
}
|
||||
},
|
||||
|
||||
postList: function(integrator) {
|
||||
|
||||
var postBlock = document.querySelectorAll('.post-block, .pagination, .comments');
|
||||
var postBlockTransition = CONFIG.motion.transition.post_block;
|
||||
var postHeader = document.querySelectorAll('.post-header');
|
||||
var postHeaderTransition = CONFIG.motion.transition.post_header;
|
||||
var postBody = document.querySelectorAll('.post-body');
|
||||
var postBodyTransition = CONFIG.motion.transition.post_body;
|
||||
var collHeader = document.querySelectorAll('.collection-header');
|
||||
var collHeaderTransition = CONFIG.motion.transition.coll_header;
|
||||
var hasPost = postBlock.length > 0;
|
||||
|
||||
if (hasPost) {
|
||||
var postMotionOptions = window.postMotionOptions || {
|
||||
stagger : 100,
|
||||
drag : true,
|
||||
complete: function() {
|
||||
integrator.next();
|
||||
}
|
||||
};
|
||||
|
||||
if (CONFIG.motion.transition.post_block) {
|
||||
Velocity(postBlock, 'transition.' + postBlockTransition, postMotionOptions);
|
||||
}
|
||||
if (CONFIG.motion.transition.post_header) {
|
||||
Velocity(postHeader, 'transition.' + postHeaderTransition, postMotionOptions);
|
||||
}
|
||||
if (CONFIG.motion.transition.post_body) {
|
||||
Velocity(postBody, 'transition.' + postBodyTransition, postMotionOptions);
|
||||
}
|
||||
if (CONFIG.motion.transition.coll_header) {
|
||||
Velocity(collHeader, 'transition.' + collHeaderTransition, postMotionOptions);
|
||||
}
|
||||
}
|
||||
if (NexT.utils.isPisces() || NexT.utils.isGemini()) {
|
||||
integrator.next();
|
||||
}
|
||||
},
|
||||
|
||||
sidebar: function(integrator) {
|
||||
NexT.utils.updateSidebarPosition();
|
||||
var sidebarAffix = document.querySelector('.sidebar-inner');
|
||||
var sidebarAffixTransition = CONFIG.motion.transition.sidebar;
|
||||
// Only for Pisces | Gemini.
|
||||
if (CONFIG.motion.transition.sidebar && (NexT.utils.isPisces() || NexT.utils.isGemini())) {
|
||||
Velocity(sidebarAffix, 'transition.' + sidebarAffixTransition, {
|
||||
display : null,
|
||||
duration: 200,
|
||||
complete: function() {
|
||||
// After motion complete need to remove transform from sidebar to let affix work on Pisces | Gemini.
|
||||
sidebarAffix.style.transform = 'initial';
|
||||
}
|
||||
});
|
||||
}
|
||||
integrator.next();
|
||||
}
|
||||
};
|
114
js/next-boot.js
Normal file
@ -0,0 +1,114 @@
|
||||
/* global NexT, CONFIG, Velocity */
|
||||
|
||||
NexT.boot = {};
|
||||
|
||||
NexT.boot.registerEvents = function() {
|
||||
|
||||
NexT.utils.registerScrollPercent();
|
||||
NexT.utils.registerCanIUseTag();
|
||||
|
||||
// Mobile top menu bar.
|
||||
document.querySelector('.site-nav-toggle .toggle').addEventListener('click', () => {
|
||||
event.currentTarget.classList.toggle('toggle-close');
|
||||
var siteNav = document.querySelector('.site-nav');
|
||||
var animateAction = siteNav.classList.contains('site-nav-on') ? 'slideUp' : 'slideDown';
|
||||
|
||||
if (typeof Velocity === 'function') {
|
||||
Velocity(siteNav, animateAction, {
|
||||
duration: 200,
|
||||
complete: function() {
|
||||
siteNav.classList.toggle('site-nav-on');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
siteNav.classList.toggle('site-nav-on');
|
||||
}
|
||||
});
|
||||
|
||||
var TAB_ANIMATE_DURATION = 200;
|
||||
document.querySelectorAll('.sidebar-nav li').forEach((element, index) => {
|
||||
element.addEventListener('click', event => {
|
||||
var item = event.currentTarget;
|
||||
var activeTabClassName = 'sidebar-nav-active';
|
||||
var activePanelClassName = 'sidebar-panel-active';
|
||||
if (item.classList.contains(activeTabClassName)) return;
|
||||
|
||||
var targets = document.querySelectorAll('.sidebar-panel');
|
||||
var target = targets[index];
|
||||
var currentTarget = targets[1 - index];
|
||||
window.anime({
|
||||
targets : currentTarget,
|
||||
duration: TAB_ANIMATE_DURATION,
|
||||
easing : 'linear',
|
||||
opacity : 0,
|
||||
complete: () => {
|
||||
// Prevent adding TOC to Overview if Overview was selected when close & open sidebar.
|
||||
currentTarget.classList.remove(activePanelClassName);
|
||||
target.style.opacity = 0;
|
||||
target.classList.add(activePanelClassName);
|
||||
window.anime({
|
||||
targets : target,
|
||||
duration: TAB_ANIMATE_DURATION,
|
||||
easing : 'linear',
|
||||
opacity : 1
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
[...item.parentNode.children].forEach(element => {
|
||||
element.classList.remove(activeTabClassName);
|
||||
});
|
||||
item.classList.add(activeTabClassName);
|
||||
});
|
||||
});
|
||||
|
||||
window.addEventListener('resize', NexT.utils.initSidebarDimension);
|
||||
|
||||
window.addEventListener('hashchange', () => {
|
||||
var tHash = location.hash;
|
||||
if (tHash !== '' && !tHash.match(/%\S{2}/)) {
|
||||
var target = document.querySelector(`.tabs ul.nav-tabs li a[href="${tHash}"]`);
|
||||
target && target.click();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
NexT.boot.refresh = function() {
|
||||
|
||||
/**
|
||||
* Register JS handlers by condition option.
|
||||
* Need to add config option in Front-End at 'layout/_partials/head.swig' file.
|
||||
*/
|
||||
CONFIG.fancybox && NexT.utils.wrapImageWithFancyBox();
|
||||
CONFIG.mediumzoom && window.mediumZoom('.post-body :not(a) > img, .post-body > img');
|
||||
CONFIG.lazyload && window.lozad('.post-body img').observe();
|
||||
CONFIG.pangu && window.pangu.spacingPage();
|
||||
|
||||
CONFIG.exturl && NexT.utils.registerExtURL();
|
||||
CONFIG.copycode.enable && NexT.utils.registerCopyCode();
|
||||
NexT.utils.registerTabsTag();
|
||||
NexT.utils.registerActiveMenuItem();
|
||||
NexT.utils.registerSidebarTOC();
|
||||
NexT.utils.wrapTableWithBox();
|
||||
NexT.utils.registerVideoIframe();
|
||||
};
|
||||
|
||||
NexT.boot.motion = function() {
|
||||
// Define Motion Sequence & Bootstrap Motion.
|
||||
if (CONFIG.motion.enable) {
|
||||
NexT.motion.integrator
|
||||
.add(NexT.motion.middleWares.logo)
|
||||
.add(NexT.motion.middleWares.menu)
|
||||
.add(NexT.motion.middleWares.postList)
|
||||
.add(NexT.motion.middleWares.sidebar)
|
||||
.bootstrap();
|
||||
} else {
|
||||
NexT.utils.updateSidebarPosition();
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
NexT.boot.registerEvents();
|
||||
NexT.boot.refresh();
|
||||
NexT.boot.motion();
|
||||
});
|
133
js/schemes/muse.js
Normal file
@ -0,0 +1,133 @@
|
||||
/* global NexT, CONFIG, Velocity */
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
var isRight = CONFIG.sidebar.position === 'right';
|
||||
var SIDEBAR_WIDTH = CONFIG.sidebar.width || 320;
|
||||
var SIDEBAR_DISPLAY_DURATION = 400;
|
||||
var mousePos = {}; var touchPos = {};
|
||||
|
||||
var sidebarToggleLines = {
|
||||
lines: document.querySelector('.sidebar-toggle'),
|
||||
init : function() {
|
||||
this.lines.classList.remove('toggle-arrow', 'toggle-close');
|
||||
},
|
||||
arrow: function() {
|
||||
this.lines.classList.remove('toggle-close');
|
||||
this.lines.classList.add('toggle-arrow');
|
||||
},
|
||||
close: function() {
|
||||
this.lines.classList.remove('toggle-arrow');
|
||||
this.lines.classList.add('toggle-close');
|
||||
}
|
||||
};
|
||||
|
||||
var sidebarToggleMotion = {
|
||||
sidebarEl : document.querySelector('.sidebar'),
|
||||
isSidebarVisible: false,
|
||||
init : function() {
|
||||
sidebarToggleLines.init();
|
||||
|
||||
window.addEventListener('mousedown', this.mousedownHandler.bind(this));
|
||||
window.addEventListener('mouseup', this.mouseupHandler.bind(this));
|
||||
document.querySelector('#sidebar-dimmer').addEventListener('click', this.clickHandler.bind(this));
|
||||
document.querySelector('.sidebar-toggle').addEventListener('click', this.clickHandler.bind(this));
|
||||
document.querySelector('.sidebar-toggle').addEventListener('mouseenter', this.mouseEnterHandler.bind(this));
|
||||
document.querySelector('.sidebar-toggle').addEventListener('mouseleave', this.mouseLeaveHandler.bind(this));
|
||||
this.sidebarEl.addEventListener('touchstart', this.touchstartHandler.bind(this));
|
||||
this.sidebarEl.addEventListener('touchend', this.touchendHandler.bind(this));
|
||||
this.sidebarEl.addEventListener('touchmove', event => event.preventDefault());
|
||||
window.addEventListener('sidebar:show', this.showSidebar.bind(this));
|
||||
window.addEventListener('sidebar:hide', this.hideSidebar.bind(this));
|
||||
},
|
||||
mousedownHandler: function(event) {
|
||||
mousePos.X = event.pageX;
|
||||
mousePos.Y = event.pageY;
|
||||
},
|
||||
mouseupHandler: function(event) {
|
||||
var deltaX = event.pageX - mousePos.X;
|
||||
var deltaY = event.pageY - mousePos.Y;
|
||||
var clickingBlankPart = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY)) < 20 && event.target.matches('.main');
|
||||
if (this.isSidebarVisible && (clickingBlankPart || event.target.matches('img.medium-zoom-image, .fancybox img'))) {
|
||||
this.hideSidebar();
|
||||
}
|
||||
},
|
||||
clickHandler: function() {
|
||||
this.isSidebarVisible ? this.hideSidebar() : this.showSidebar();
|
||||
},
|
||||
mouseEnterHandler: function() {
|
||||
if (!this.isSidebarVisible) {
|
||||
sidebarToggleLines.arrow();
|
||||
}
|
||||
},
|
||||
mouseLeaveHandler: function() {
|
||||
if (!this.isSidebarVisible) {
|
||||
sidebarToggleLines.init();
|
||||
}
|
||||
},
|
||||
touchstartHandler: function(event) {
|
||||
touchPos.X = event.touches[0].clientX;
|
||||
touchPos.Y = event.touches[0].clientY;
|
||||
},
|
||||
touchendHandler: function(event) {
|
||||
var deltaX = event.changedTouches[0].clientX - touchPos.X;
|
||||
var deltaY = event.changedTouches[0].clientY - touchPos.Y;
|
||||
var effectiveSliding = Math.abs(deltaY) < 20 && ((deltaX > 30 && isRight) || (deltaX < -30 && !isRight));
|
||||
if (this.isSidebarVisible && effectiveSliding) {
|
||||
this.hideSidebar();
|
||||
}
|
||||
},
|
||||
showSidebar: function() {
|
||||
this.isSidebarVisible = true;
|
||||
this.sidebarEl.classList.add('sidebar-active');
|
||||
if (typeof Velocity === 'function') {
|
||||
Velocity(document.querySelectorAll('.sidebar .motion-element'), isRight ? 'transition.slideRightIn' : 'transition.slideLeftIn', {
|
||||
stagger: 50,
|
||||
drag : true
|
||||
});
|
||||
}
|
||||
|
||||
sidebarToggleLines.close();
|
||||
NexT.utils.isDesktop() && window.anime(Object.assign({
|
||||
targets : document.body,
|
||||
duration: SIDEBAR_DISPLAY_DURATION,
|
||||
easing : 'linear'
|
||||
}, isRight ? {
|
||||
'padding-right': SIDEBAR_WIDTH
|
||||
} : {
|
||||
'padding-left': SIDEBAR_WIDTH
|
||||
}));
|
||||
},
|
||||
hideSidebar: function() {
|
||||
this.isSidebarVisible = false;
|
||||
this.sidebarEl.classList.remove('sidebar-active');
|
||||
|
||||
sidebarToggleLines.init();
|
||||
NexT.utils.isDesktop() && window.anime(Object.assign({
|
||||
targets : document.body,
|
||||
duration: SIDEBAR_DISPLAY_DURATION,
|
||||
easing : 'linear'
|
||||
}, isRight ? {
|
||||
'padding-right': 0
|
||||
} : {
|
||||
'padding-left': 0
|
||||
}));
|
||||
}
|
||||
};
|
||||
sidebarToggleMotion.init();
|
||||
|
||||
function updateFooterPosition() {
|
||||
var containerHeight = document.querySelector('.container').offsetHeight;
|
||||
var footer = document.getElementById('footer');
|
||||
if (footer.classList.contains('footer-fixed')) containerHeight += footer.outerHeight(true);
|
||||
if (containerHeight > window.innerHeight) {
|
||||
footer.classList.remove('footer-fixed');
|
||||
} else {
|
||||
footer.classList.add('footer-fixed');
|
||||
}
|
||||
}
|
||||
|
||||
updateFooterPosition();
|
||||
window.addEventListener('resize', updateFooterPosition);
|
||||
window.addEventListener('scroll', updateFooterPosition);
|
||||
});
|
86
js/schemes/pisces.js
Normal file
@ -0,0 +1,86 @@
|
||||
/* global NexT, CONFIG */
|
||||
|
||||
var Affix = {
|
||||
init: function(element, options) {
|
||||
this.element = element;
|
||||
this.offset = options || 0;
|
||||
this.affixed = null;
|
||||
this.unpin = null;
|
||||
this.pinnedOffset = null;
|
||||
this.checkPosition();
|
||||
window.addEventListener('scroll', this.checkPosition.bind(this));
|
||||
window.addEventListener('click', this.checkPositionWithEventLoop.bind(this));
|
||||
window.matchMedia('(min-width: 992px)').addListener(event => {
|
||||
if (event.matches) {
|
||||
this.offset = NexT.utils.getAffixParam();
|
||||
this.checkPosition();
|
||||
}
|
||||
});
|
||||
},
|
||||
getState: function(scrollHeight, height, offsetTop, offsetBottom) {
|
||||
let scrollTop = window.scrollY;
|
||||
let targetHeight = window.innerHeight;
|
||||
if (offsetTop != null && this.affixed === 'top') return scrollTop < offsetTop ? 'top' : false;
|
||||
if (this.affixed === 'bottom') {
|
||||
if (offsetTop != null) return this.unpin <= this.element.getBoundingClientRect().top ? false : 'bottom';
|
||||
return scrollTop + targetHeight <= scrollHeight - offsetBottom ? false : 'bottom';
|
||||
}
|
||||
let initializing = this.affixed === null;
|
||||
let colliderTop = initializing ? scrollTop : this.element.getBoundingClientRect().top + scrollTop;
|
||||
let colliderHeight = initializing ? targetHeight : height;
|
||||
if (offsetTop != null && scrollTop <= offsetTop) return 'top';
|
||||
if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom';
|
||||
return false;
|
||||
},
|
||||
getPinnedOffset: function() {
|
||||
if (this.pinnedOffset) return this.pinnedOffset;
|
||||
this.element.classList.remove('affix-top', 'affix-bottom');
|
||||
this.element.classList.add('affix');
|
||||
return (this.pinnedOffset = this.element.getBoundingClientRect().top);
|
||||
},
|
||||
checkPositionWithEventLoop() {
|
||||
setTimeout(this.checkPosition.bind(this), 1);
|
||||
},
|
||||
checkPosition: function() {
|
||||
if (window.getComputedStyle(this.element).display === 'none') return;
|
||||
let height = this.element.offsetHeight - CONFIG.sidebarPadding;
|
||||
let offset = this.offset;
|
||||
let offsetTop = offset.top;
|
||||
let offsetBottom = offset.bottom;
|
||||
let scrollHeight = document.body.scrollHeight;
|
||||
let affix = this.getState(scrollHeight, height, offsetTop, offsetBottom);
|
||||
if (this.affixed !== affix) {
|
||||
if (this.unpin != null) this.element.style.top = '';
|
||||
let affixType = 'affix' + (affix ? '-' + affix : '');
|
||||
this.affixed = affix;
|
||||
this.unpin = affix === 'bottom' ? this.getPinnedOffset() : null;
|
||||
this.element.classList.remove('affix', 'affix-top', 'affix-bottom');
|
||||
this.element.classList.add(affixType);
|
||||
}
|
||||
if (affix === 'bottom') {
|
||||
this.element.style.top = scrollHeight - height - offsetBottom + 'px';
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
NexT.utils.getAffixParam = function() {
|
||||
const sidebarOffset = CONFIG.sidebar.offset || 12;
|
||||
|
||||
let headerOffset = document.querySelector('.header-inner').offsetHeight + sidebarOffset;
|
||||
let footer = document.querySelector('#footer');
|
||||
let footerInner = document.querySelector('.footer-inner');
|
||||
let footerMargin = footer.offsetHeight - footerInner.offsetHeight;
|
||||
let footerOffset = footer.offsetHeight + footerMargin;
|
||||
|
||||
document.querySelector('.sidebar').style.marginTop = headerOffset + 'px';
|
||||
|
||||
return {
|
||||
top : headerOffset - sidebarOffset,
|
||||
bottom: footerOffset
|
||||
};
|
||||
};
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
Affix.init(document.querySelector('.sidebar-inner'), NexT.utils.getAffixParam());
|
||||
});
|
415
js/utils.js
Normal file
@ -0,0 +1,415 @@
|
||||
/* global NexT, CONFIG */
|
||||
|
||||
HTMLElement.prototype.outerHeight = function(flag) {
|
||||
var height = this.offsetHeight;
|
||||
if (!flag) return height;
|
||||
var style = window.getComputedStyle(this);
|
||||
height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);
|
||||
return height;
|
||||
};
|
||||
|
||||
HTMLElement.prototype.wrap = function(wrapper) {
|
||||
this.parentNode.insertBefore(wrapper, this);
|
||||
this.parentNode.removeChild(this);
|
||||
wrapper.appendChild(this);
|
||||
};
|
||||
|
||||
NexT.utils = {
|
||||
|
||||
/**
|
||||
* Wrap images with fancybox.
|
||||
*/
|
||||
wrapImageWithFancyBox: function() {
|
||||
document.querySelectorAll('.post-body :not(a) > img, .post-body > img').forEach(element => {
|
||||
var $image = $(element);
|
||||
var imageLink = $image.attr('data-src') || $image.attr('src');
|
||||
var $imageWrapLink = $image.wrap(`<a class="fancybox fancybox.image" href="${imageLink}" itemscope itemtype="http://schema.org/ImageObject" itemprop="url"></a>`).parent('a');
|
||||
if ($image.is('.post-gallery img')) {
|
||||
$imageWrapLink.addClass('post-gallery-img');
|
||||
$imageWrapLink.attr('data-fancybox', 'gallery').attr('rel', 'gallery');
|
||||
} else if ($image.is('.group-picture img')) {
|
||||
$imageWrapLink.attr('data-fancybox', 'group').attr('rel', 'group');
|
||||
} else {
|
||||
$imageWrapLink.attr('data-fancybox', 'default').attr('rel', 'default');
|
||||
}
|
||||
|
||||
var imageTitle = $image.attr('title') || $image.attr('alt');
|
||||
if (imageTitle) {
|
||||
$imageWrapLink.append(`<p class="image-caption">${imageTitle}</p>`);
|
||||
// Make sure img title tag will show correctly in fancybox
|
||||
$imageWrapLink.attr('title', imageTitle).attr('data-caption', imageTitle);
|
||||
}
|
||||
});
|
||||
|
||||
$.fancybox.defaults.hash = false;
|
||||
$('.fancybox').fancybox({
|
||||
loop : true,
|
||||
helpers: {
|
||||
overlay: {
|
||||
locked: false
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
registerExtURL: function() {
|
||||
document.querySelectorAll('.exturl').forEach(element => {
|
||||
element.addEventListener('click', event => {
|
||||
var exturl = event.currentTarget.getAttribute('data-url');
|
||||
var decurl = decodeURIComponent(escape(window.atob(exturl)));
|
||||
window.open(decurl, '_blank', 'noopener');
|
||||
return false;
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* One-click copy code support.
|
||||
*/
|
||||
registerCopyCode: function() {
|
||||
document.querySelectorAll('figure.highlight').forEach(e => {
|
||||
const initButton = button => {
|
||||
if (CONFIG.copycode.style === 'mac') {
|
||||
button.innerHTML = '<i class="fa fa-clipboard"></i>';
|
||||
} else {
|
||||
button.innerText = CONFIG.translation.copy_button;
|
||||
}
|
||||
};
|
||||
const box = document.createElement('div');
|
||||
box.classList.add('highlight-wrap');
|
||||
e.wrap(box);
|
||||
e.parentNode.insertAdjacentHTML('beforeend', '<div class="copy-btn"></div>');
|
||||
var button = e.parentNode.querySelector('.copy-btn');
|
||||
button.addEventListener('click', event => {
|
||||
var target = event.currentTarget;
|
||||
var code = [...target.parentNode.querySelectorAll('.code .line')].map(element => {
|
||||
return element.innerText;
|
||||
}).join('\n');
|
||||
var ta = document.createElement('textarea');
|
||||
var yPosition = window.scrollY;
|
||||
ta.style.top = yPosition + 'px'; // Prevent page scrolling
|
||||
ta.style.position = 'absolute';
|
||||
ta.style.opacity = '0';
|
||||
ta.readOnly = true;
|
||||
ta.value = code;
|
||||
document.body.append(ta);
|
||||
const selection = document.getSelection();
|
||||
const selected = selection.rangeCount > 0 ? selection.getRangeAt(0) : false;
|
||||
ta.select();
|
||||
ta.setSelectionRange(0, code.length);
|
||||
ta.readOnly = false;
|
||||
var result = document.execCommand('copy');
|
||||
if (CONFIG.copycode.show_result) {
|
||||
target.innerText = result ? CONFIG.translation.copy_success : CONFIG.translation.copy_failure;
|
||||
}
|
||||
ta.blur(); // For iOS
|
||||
target.blur();
|
||||
if (selected) {
|
||||
selection.removeAllRanges();
|
||||
selection.addRange(selected);
|
||||
}
|
||||
document.body.removeChild(ta);
|
||||
});
|
||||
button.addEventListener('mouseleave', event => {
|
||||
setTimeout(() => {
|
||||
initButton(event.target);
|
||||
}, 300);
|
||||
});
|
||||
initButton(button);
|
||||
});
|
||||
},
|
||||
|
||||
wrapTableWithBox: function() {
|
||||
document.querySelectorAll('table').forEach(table => {
|
||||
const box = document.createElement('div');
|
||||
box.className = 'table-container';
|
||||
table.wrap(box);
|
||||
});
|
||||
},
|
||||
|
||||
registerVideoIframe: function() {
|
||||
document.querySelectorAll('iframe').forEach(element => {
|
||||
const SUPPORTED_PLAYERS = [
|
||||
'www.youtube.com',
|
||||
'player.vimeo.com',
|
||||
'player.youku.com',
|
||||
'player.bilibili.com',
|
||||
'www.tudou.com'
|
||||
];
|
||||
const pattern = new RegExp(SUPPORTED_PLAYERS.join('|'));
|
||||
if (!element.parentNode.matches('.video-container') && element.src.search(pattern) > 0) {
|
||||
const box = document.createElement('div');
|
||||
box.className = 'video-container';
|
||||
element.wrap(box);
|
||||
let width = Number(element.width); let height = Number(element.height);
|
||||
if (width && height) {
|
||||
element.parentNode.style.paddingTop = (height / width * 100) + '%';
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
registerScrollPercent: function() {
|
||||
var THRESHOLD = 50;
|
||||
var backToTop = document.querySelector('.back-to-top');
|
||||
var readingProgressBar = document.querySelector('.reading-progress-bar');
|
||||
// For init back to top in sidebar if page was scrolled after page refresh.
|
||||
window.addEventListener('scroll', () => {
|
||||
var scrollPercent;
|
||||
if (backToTop || readingProgressBar) {
|
||||
var docHeight = document.querySelector('.container').offsetHeight;
|
||||
var winHeight = window.innerHeight;
|
||||
var contentVisibilityHeight = docHeight > winHeight ? docHeight - winHeight : document.body.scrollHeight - winHeight;
|
||||
var scrollPercentRounded = Math.round(100 * window.scrollY / contentVisibilityHeight);
|
||||
scrollPercent = Math.min(scrollPercentRounded, 100) + '%';
|
||||
}
|
||||
if (backToTop) {
|
||||
window.scrollY > THRESHOLD ? backToTop.classList.add('back-to-top-on') : backToTop.classList.remove('back-to-top-on');
|
||||
backToTop.querySelector('span').innerText = scrollPercent;
|
||||
}
|
||||
if (readingProgressBar) {
|
||||
readingProgressBar.style.width = scrollPercent;
|
||||
}
|
||||
});
|
||||
|
||||
backToTop && backToTop.addEventListener('click', () => {
|
||||
window.anime({
|
||||
targets : [document.documentElement, document.body],
|
||||
duration : 500,
|
||||
easing : 'linear',
|
||||
scrollTop: 0
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Tabs tag listener (without twitter bootstrap).
|
||||
*/
|
||||
registerTabsTag: function() {
|
||||
// Binding `nav-tabs` & `tab-content` by real time permalink changing.
|
||||
document.querySelectorAll('.tabs ul.nav-tabs .tab').forEach(tab => {
|
||||
tab.addEventListener('click', event => {
|
||||
event.preventDefault();
|
||||
var target = event.currentTarget;
|
||||
// Prevent selected tab to select again.
|
||||
if (!target.classList.contains('active')) {
|
||||
// Add & Remove active class on `nav-tabs` & `tab-content`.
|
||||
[...target.parentNode.children].forEach(item => {
|
||||
item.classList.remove('active');
|
||||
});
|
||||
target.classList.add('active');
|
||||
var tActive = document.getElementById(target.querySelector('a').getAttribute('href').replace('#', ''));
|
||||
[...tActive.parentNode.children].forEach(item => {
|
||||
item.classList.remove('active');
|
||||
});
|
||||
tActive.classList.add('active');
|
||||
// Trigger event
|
||||
tActive.dispatchEvent(new Event('tabs:click', {
|
||||
bubbles: true
|
||||
}));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
window.dispatchEvent(new Event('tabs:register'));
|
||||
},
|
||||
|
||||
registerCanIUseTag: function() {
|
||||
// Get responsive height passed from iframe.
|
||||
window.addEventListener('message', e => {
|
||||
var data = e.data;
|
||||
if ((typeof data === 'string') && (data.indexOf('ciu_embed') > -1)) {
|
||||
var featureID = data.split(':')[1];
|
||||
var height = data.split(':')[2];
|
||||
document.querySelector(`iframe[data-feature=${featureID}]`).style.height = parseInt(height, 10) + 'px';
|
||||
}
|
||||
}, false);
|
||||
},
|
||||
|
||||
registerActiveMenuItem: function() {
|
||||
document.querySelectorAll('.menu-item').forEach(element => {
|
||||
var target = element.querySelector('a[href]');
|
||||
if (!target) return;
|
||||
var isSamePath = target.pathname === location.pathname || target.pathname === location.pathname.replace('index.html', '');
|
||||
var isSubPath = target.pathname !== CONFIG.root && location.pathname.indexOf(target.pathname) === 0;
|
||||
if (target.hostname === location.hostname && (isSamePath || isSubPath)) {
|
||||
element.classList.add('menu-item-active');
|
||||
} else {
|
||||
element.classList.remove('menu-item-active');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
registerSidebarTOC: function() {
|
||||
const navItems = document.querySelectorAll('.post-toc li');
|
||||
const sections = [...navItems].map(element => {
|
||||
var link = element.querySelector('a.nav-link');
|
||||
// TOC item animation navigate.
|
||||
link.addEventListener('click', event => {
|
||||
event.preventDefault();
|
||||
var target = document.getElementById(event.currentTarget.getAttribute('href').replace('#', ''));
|
||||
var offset = target.getBoundingClientRect().top + window.scrollY;
|
||||
window.anime({
|
||||
targets : [document.documentElement, document.body],
|
||||
duration : 500,
|
||||
easing : 'linear',
|
||||
scrollTop: offset + 10
|
||||
});
|
||||
});
|
||||
return document.getElementById(link.getAttribute('href').replace('#', ''));
|
||||
});
|
||||
|
||||
var tocElement = document.querySelector('.post-toc-wrap');
|
||||
function activateNavByIndex(target) {
|
||||
if (target.classList.contains('active-current')) return;
|
||||
|
||||
document.querySelectorAll('.post-toc .active').forEach(element => {
|
||||
element.classList.remove('active', 'active-current');
|
||||
});
|
||||
target.classList.add('active', 'active-current');
|
||||
var parent = target.parentNode;
|
||||
while (!parent.matches('.post-toc')) {
|
||||
if (parent.matches('li')) parent.classList.add('active');
|
||||
parent = parent.parentNode;
|
||||
}
|
||||
// Scrolling to center active TOC element if TOC content is taller then viewport.
|
||||
window.anime({
|
||||
targets : tocElement,
|
||||
duration : 200,
|
||||
easing : 'linear',
|
||||
scrollTop: tocElement.scrollTop - (tocElement.offsetHeight / 2) + target.getBoundingClientRect().top - tocElement.getBoundingClientRect().top
|
||||
});
|
||||
}
|
||||
|
||||
function findIndex(entries) {
|
||||
let index = 0;
|
||||
let entry = entries[index];
|
||||
if (entry.boundingClientRect.top > 0) {
|
||||
index = sections.indexOf(entry.target);
|
||||
return index === 0 ? 0 : index - 1;
|
||||
}
|
||||
for (;index < entries.length; index++) {
|
||||
if (entries[index].boundingClientRect.top <= 0) {
|
||||
entry = entries[index];
|
||||
} else {
|
||||
return sections.indexOf(entry.target);
|
||||
}
|
||||
}
|
||||
return sections.indexOf(entry.target);
|
||||
}
|
||||
|
||||
function createIntersectionObserver(marginTop) {
|
||||
marginTop = Math.floor(marginTop + 10000);
|
||||
let intersectionObserver = new IntersectionObserver((entries, observe) => {
|
||||
let scrollHeight = document.documentElement.scrollHeight + 100;
|
||||
if (scrollHeight > marginTop) {
|
||||
observe.disconnect();
|
||||
createIntersectionObserver(scrollHeight);
|
||||
return;
|
||||
}
|
||||
let index = findIndex(entries);
|
||||
activateNavByIndex(navItems[index]);
|
||||
}, {
|
||||
rootMargin: marginTop + 'px 0px -100% 0px',
|
||||
threshold : 0
|
||||
});
|
||||
sections.forEach(item => intersectionObserver.observe(item));
|
||||
}
|
||||
createIntersectionObserver(document.documentElement.scrollHeight);
|
||||
},
|
||||
|
||||
hasMobileUA: function() {
|
||||
var ua = navigator.userAgent;
|
||||
var pa = /iPad|iPhone|Android|Opera Mini|BlackBerry|webOS|UCWEB|Blazer|PSP|IEMobile|Symbian/g;
|
||||
|
||||
return pa.test(ua);
|
||||
},
|
||||
|
||||
isTablet: function() {
|
||||
return window.screen.width < 992 && window.screen.width > 767 && this.hasMobileUA();
|
||||
},
|
||||
|
||||
isMobile: function() {
|
||||
return window.screen.width < 767 && this.hasMobileUA();
|
||||
},
|
||||
|
||||
isDesktop: function() {
|
||||
return !this.isTablet() && !this.isMobile();
|
||||
},
|
||||
|
||||
isMuse: function() {
|
||||
return CONFIG.scheme === 'Muse';
|
||||
},
|
||||
|
||||
isMist: function() {
|
||||
return CONFIG.scheme === 'Mist';
|
||||
},
|
||||
|
||||
isPisces: function() {
|
||||
return CONFIG.scheme === 'Pisces';
|
||||
},
|
||||
|
||||
isGemini: function() {
|
||||
return CONFIG.scheme === 'Gemini';
|
||||
},
|
||||
|
||||
/**
|
||||
* Init Sidebar & TOC inner dimensions on all pages and for all schemes.
|
||||
* Need for Sidebar/TOC inner scrolling if content taller then viewport.
|
||||
*/
|
||||
initSidebarDimension: function() {
|
||||
var sidebarNav = document.querySelector('.sidebar-nav');
|
||||
var sidebarNavHeight = sidebarNav.style.display !== 'none' ? sidebarNav.outerHeight(true) : 0;
|
||||
var sidebarOffset = CONFIG.sidebar.offset || 12;
|
||||
var sidebarb2tHeight = CONFIG.back2top.enable && CONFIG.back2top.sidebar ? document.querySelector('.back-to-top').offsetHeight : 0;
|
||||
var sidebarSchemePadding = CONFIG.sidebarPadding + sidebarNavHeight + sidebarb2tHeight;
|
||||
// Margin of sidebar b2t: 8px -10px -20px, brings a different of 12px.
|
||||
if (NexT.utils.isPisces() || NexT.utils.isGemini()) sidebarSchemePadding += (sidebarOffset * 2) - 12;
|
||||
// Initialize Sidebar & TOC Height.
|
||||
var sidebarWrapperHeight = document.body.offsetHeight - sidebarSchemePadding + 'px';
|
||||
document.querySelector('.site-overview-wrap').style.maxHeight = sidebarWrapperHeight;
|
||||
document.querySelector('.post-toc-wrap').style.maxHeight = sidebarWrapperHeight;
|
||||
},
|
||||
|
||||
updateSidebarPosition: function() {
|
||||
var sidebarNav = document.querySelector('.sidebar-nav');
|
||||
var hasTOC = document.querySelector('.post-toc');
|
||||
if (hasTOC) {
|
||||
sidebarNav.style.display = '';
|
||||
sidebarNav.classList.add('motion-element');
|
||||
document.querySelector('.sidebar-nav-toc').click();
|
||||
} else {
|
||||
sidebarNav.style.display = 'none';
|
||||
sidebarNav.classList.remove('motion-element');
|
||||
document.querySelector('.sidebar-nav-overview').click();
|
||||
}
|
||||
NexT.utils.initSidebarDimension();
|
||||
if (!this.isDesktop() || this.isPisces() || this.isGemini()) return;
|
||||
// Expand sidebar on post detail page by default, when post has a toc.
|
||||
var display = CONFIG.page.sidebar;
|
||||
if (typeof display !== 'boolean') {
|
||||
// There's no definition sidebar in the page front-matter.
|
||||
display = CONFIG.sidebar.display === 'always' || (CONFIG.sidebar.display === 'post' && hasTOC);
|
||||
}
|
||||
if (display) {
|
||||
window.dispatchEvent(new Event('sidebar:show'));
|
||||
}
|
||||
},
|
||||
|
||||
getScript: function(url, callback, condition) {
|
||||
if (condition) {
|
||||
callback();
|
||||
} else {
|
||||
var script = document.createElement('script');
|
||||
script.onload = script.onreadystatechange = function(_, isAbort) {
|
||||
if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {
|
||||
script.onload = script.onreadystatechange = null;
|
||||
script = undefined;
|
||||
if (!isAbort && callback) setTimeout(callback, 0);
|
||||
}
|
||||
};
|
||||
script.src = url;
|
||||
document.head.appendChild(script);
|
||||
}
|
||||
}
|
||||
};
|
8
lib/anime.min.js
vendored
Normal file
7
lib/font-awesome/HELP-US-OUT.txt
Normal file
@ -0,0 +1,7 @@
|
||||
I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
|
||||
Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
|
||||
comprehensive icon sets or copy and paste your own.
|
||||
|
||||
Please. Check it out.
|
||||
|
||||
-Dave Gandy
|
1
lib/font-awesome/bower.json
Normal file
@ -0,0 +1 @@
|
||||
{"name":"font-awesome","description":"Font Awesome","keywords":[],"homepage":"http://fontawesome.io","dependencies":{},"devDependencies":{},"license":["OFL-1.1","MIT","CC-BY-3.0"],"main":["less/font-awesome.less","scss/font-awesome.scss"],"ignore":["*/.*","*.json","src","*.yml","Gemfile","Gemfile.lock","*.md"]}
|