Skip to content

Commit

Permalink
fix/feat: massive update
Browse files Browse the repository at this point in the history
- add preserve comment option for gulp uglify
- bring up search.json generateor
- init search page template
- some small style changes
  • Loading branch information
SukkaW committed Jul 14, 2018
1 parent 810bff2 commit 0055a44
Show file tree
Hide file tree
Showing 15 changed files with 243 additions and 11 deletions.
2 changes: 1 addition & 1 deletion _config.yml
Expand Up @@ -39,7 +39,6 @@ img:
uiux:
slogan: 孰是孰非就让人评说 终不过 成王败寇
link_color:
link_hover_color:
primary_color:
secondary_color:
bg_color: '#fcfcfc'
Expand Down Expand Up @@ -92,6 +91,7 @@ vendors:
# https://github.com/SukkaW/hexo-theme-suka
suka:
style_css:
local_search_js:
# Spectre.css
# https://picturepan2.github.io/spectre/
# Version: 0.5.3
Expand Down
6 changes: 5 additions & 1 deletion gulpfile.js
Expand Up @@ -24,7 +24,11 @@ var configs = {

gulp.task('minify-js', () => {
return gulp.src('src/**/*.js')
.pipe(uglify())
.pipe(uglify({
output: {
comments: /^!/
}
}))
.pipe(rename({suffix: '.min'}))
.pipe(gulp.dest('source'));
});
Expand Down
1 change: 1 addition & 0 deletions languages/zh-CN.yml
@@ -1,6 +1,7 @@
archive: 归档
category: 分类
search: 搜索
search_placeholder: 请输入关键字....
tag: 标签
nav:
prev_page: 上一页
Expand Down
34 changes: 34 additions & 0 deletions layout/_pages/search.ejs
@@ -0,0 +1,34 @@
<div class="container">
<%- partial('_partial/header', {}, {cache: true}) %>
<div class="main-container">
<!-- # Input # -->
<div id="search-input">
<form class="input-group" autocomplete="off">
<input maxlength="80" type="search" id="search-field" name="s" class="form-input input-lg" placeholder="<%= __('search_placeholder') %>" required>
<button class="btn btn-primary input-group-btn btn-lg"><%= __('search') %></button>
</form>
</div>
<!-- # Description & Output # -->
<div id="search-output">
<!-- Import Description from markdown -->
<%- page.content %>
</div>
</div>
</div>

<script>
String.prototype.queryUrl = function (e) {
var t = this.replace(/^[^?=]*\?/ig, "").split("#")[0],
n = {};
return t.replace(/(^|&)([^&=]+)=([^&]*)/g, function (e, t, r, i) {
try {
r = decodeURIComponent(r)
} catch (s) { }
try {
i = decodeURIComponent(i)
} catch (s) { }
r in n ? n[r] instanceof Array ? n[r].push(i) : n[r] = [n[r], i] : n[r] = /\[\]$/.test(r) ? [i] : i
}), e ? n[e] : n
};
var searchQuery = location.search.queryUrl();
</script>
12 changes: 7 additions & 5 deletions layout/_partial/head/config_style.ejs
Expand Up @@ -9,7 +9,7 @@
a:active, a:focus, a:hover {
color: <% if (theme.uiux.link_color) { %><%= theme.uiux.link_color %><% } else { %>#0070ff<% } %>;
opacity: .6;
opacity: .75;
}
.post-entry .card-body a {
Expand All @@ -18,15 +18,17 @@
.navbar-link,
.navbar-link:visited,
.pagination .page-item a,
.pagination .page-item a:visited,
.timeline .timeline-item .timeline-icon.icon-lg {
color: <% if (theme.uiux.primary_color) { %><%= theme.uiux.primary_color %><% } else { %>#0070ff<% } %>;
}
.navbar-link:hover,
.pagination .page-item a:hover {
.navbar-link:hover {
color: <% if (theme.uiux.primary_color) { %><%= theme.uiux.primary_color %><% } else { %>#0070ff<% } %>;
opacity: .8;
}
#search-input .btn {
background: <% if (theme.uiux.primary_color) { %><%= theme.uiux.primary_color %><% } else { %>#727e96<% } %>;
border-color: <% if (theme.uiux.primary_color) { %><%= theme.uiux.primary_color %><% } else { %>#727e96<% } %>;
}
</style>
11 changes: 11 additions & 0 deletions layout/_partial/source/footer.ejs
Expand Up @@ -4,6 +4,16 @@
<% } else { %>
<script src="<%- url_for('lib/vanilla-lazyload/lazyload.min.js') %>"></script>
<% } %>

<!-- load local-search when using search layout -->
<% if(page.layout === 'search') { %>
<% if (theme.vendors.suka.local_search_js) { %>
<script src="<%= theme.vendors.suka.local_search_js %>"></script>
<% } else { %>
<script src="<%- url_for('js/local-search.min.js') %>"></script>
<% } %>
<% } %>

<script>
var myLazyLoad = new LazyLoad({
elements_selector: ".lazyload"
Expand All @@ -20,4 +30,5 @@ var copyrightContent = document.querySelector('span[year]')
<% } else { %>
copyrightContent.textContent = copyrightNow
<% } %>
console.log('\n %c Theme Suka (hexo-theme-suka) | © SukkaW | Verision <%= theme.verison %> %c https://github.com/SukkaW/hexo-theme-suka \n', 'color: #fff; background: #444; padding:5px 0;', 'background: #bbb; padding:5px 0;');
</script>
71 changes: 71 additions & 0 deletions layout/_plugin/search/search-json.ejs
@@ -0,0 +1,71 @@
<% var res = new Array() -%>
<% var index = 0 -%>
<% if(posts){ -%>
<% posts.each(function(post) { -%>
<% var temp_post = new Object() -%>
<% if (post.title) { -%>
<% temp_post.title = post.title -%>
<% } -%>
<% if (post.path) { -%>
<% temp_post.url = config.root + post.path -%>
<% } -%>
<% if (post._content) { -%>
<% temp_post.content = post.content.replace(new RegExp('<pre(.*?)\<\/pre\>','gs'),'').replace(new RegExp('<[^>]*>','g'),'').replace(new RegExp('\n','g'),'').replace(new RegExp('&lt;[^>]*>','g'),'') -%>
<% } -%>
<% if (post.tags && post.tags.length > 0) { -%>
<% var tags = new Array() -%>
<% var tag_index = 0 -%>
<% post.tags.each(function (tag) { -%>
<% tags[tag_index] = tag.name; -%>
<% tag_index += 1 -%>
<% }); -%>
<% temp_post.tags = tags -%>
<% } -%>
<% if (post.categories && post.categories.length > 0) { -%>
<% var categories = new Array() -%>
<% var cate_index = 0 -%>
<% post.categories.each(function (cate) { -%>
<% categories[cate_index] = cate.name; -%>
<% cate_index += 1 -%>
<% }); -%>
<% temp_post.categories = categories -%>
<% } -%>
<% res[index] = temp_post; -%>
<% index += 1; -%>
<% }); -%>
<% } -%>
<% if(pages){ -%>
<% pages.each(function(page){ -%>
<% var temp_page = new Object() -%>
<% if (page.title) { -%>
<% temp_page.title = page.title -%>
<% } -%>
<% if (page.path) { -%>
<% temp_page.url = config.root + page.path -%>
<% } -%>
<% if (page._content) { -%>
<% temp_page.content = page.content.replace(new RegExp('<pre(.*?)\<\/pre\>','gs'),'').replace(new RegExp('<[^>]*>','g'),'').replace(new RegExp('\n','g'),'').replace(new RegExp('&lt;[^>]*>','g'),'') -%>
<% } -%>
<% if (page.tags && page.tags.length > 0) { -%>
<% var tags = new Array() -%>
<% var tag_index = 0 -%>
<% page.tags.each(function (tag) { -%>
<% tags[tag_index] = tag.name; -%>
<% tag_index += 1 -%>
<% }); -%>
<% temp_page.tags = tags -%>
<% } -%>
<% if (page.categories && page.categories.length > 0) { -%>
<% var categories = new Array() -%>
<% var cate_index = 0 -%>
<% page.categories.each(function (cate) { -%>
<% categories[cate_index] = cate.name; -%>
<% cate_index += 1 -%>
<% }); -%>
<% temp_page.categories = categories -%>
<% } -%>
<% res[index] = temp_page; -%>
<% index += 1; -%>
<% }); -%>
<% } -%>
<%- stringify(res) -%>
43 changes: 43 additions & 0 deletions scripts/search/json_generator.js
@@ -0,0 +1,43 @@
var ejs = require('ejs');
var pathFn = require('path');
var fs = require('fs');
var stringify = require('json-stringify-safe');

var searchTmplSrc = pathFn.join(__dirname, '../../layout/_plugin/search/search-json.ejs');
var searchTmpl = ejs.compile(fs.readFileSync(searchTmplSrc, 'utf8'));

module.exports = function (locals) {
var config = this.config;
var searchConfig = config.search;
var template = searchTmpl;
var searchfield = searchConfig.field;

var posts, pages;

if (searchfield.trim() != '') {
searchfield = searchfield.trim();
if (searchfield == 'post') {
posts = locals.posts.sort('-date');
} else if (searchfield == 'page') {
pages = locals.pages;
} else {
posts = locals.posts.sort('-date');
pages = locals.pages;
}
} else {
posts = locals.posts.sort('-date');
}

var json = template({
config: config,
posts: posts,
pages: pages,
stringify: stringify,
feed_url: config.root + searchConfig.path,
});

return {
path: searchConfig.path,
data: json
};
};
26 changes: 26 additions & 0 deletions scripts/search/search.js
@@ -0,0 +1,26 @@
/* hexo-generator-search
* author: PaicHyperionDev
* license: MIT
*/

var merge = require('utils-merge');
var pathFn = require('path');

var config = hexo.config.search = merge({
path: 'search.json',
field: 'post'
}, hexo.config.search);

// Set default search path
if (!config.path) {
config.path = 'search.json';
}

// Add extension name if don't have
if (!pathFn.extname(config.path)) {
config.path += '.json';
}

if (pathFn.extname(config.path) == '.json') {
hexo.extend.generator.register('json', require('./json_generator'));
}
2 changes: 1 addition & 1 deletion source/css/style.min.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions source/js/local-search.min.js
@@ -0,0 +1,6 @@
/*!
* Hexo Theme Suka | local-search.js
* Author: SukkaW
* Link: https://github.com/SukkaW/hexo-theme-suka
* License: GPL-3.0
*/

0 comments on commit 0055a44

Please sign in to comment.