i18n
xaoxuu 6 years ago
parent c583b86ec9
commit 76019efac4
  1. 82
      source/js/search.js
  2. 4
      source/less/_header.less

@ -8,7 +8,7 @@ var SearchService = "";
*/ */
SearchService = function(options) { SearchService = function(options) {
var self = this; var self = this;
self.config = $.extend({ self.config = $.extend({
per_page: 10, per_page: 10,
selectors: { selectors: {
@ -70,7 +70,7 @@ var SearchService = "";
self.dom.modal_ajax_content.removeClass('loaded'); self.dom.modal_ajax_content.removeClass('loaded');
self.startLoading(); self.startLoading();
}; };
self.afterQuery = function() { self.afterQuery = function() {
self.dom.modal_body.scrollTop(0); self.dom.modal_body.scrollTop(0);
self.dom.modal_ajax_content.addClass('loaded'); self.dom.modal_ajax_content.addClass('loaded');
@ -109,19 +109,19 @@ var SearchService = "";
self.dom.modal_error.html(errMsg); self.dom.modal_error.html(errMsg);
self.dom.modal_error.show(); self.dom.modal_error.show();
}; };
self.nextPage = function() { self.nextPage = function() {
if (self.nav.next !== -1) { if (self.nav.next !== -1) {
self.search(self.nav.next); self.search(self.nav.next);
} }
}; };
self.prevPage = function() { self.prevPage = function() {
if (self.nav.prev !== -1) { if (self.nav.prev !== -1) {
self.search(self.nav.prev); self.search(self.nav.prev);
} }
}; };
/** /**
* Generate html for one result * Generate html for one result
* @param url : (string) url * @param url : (string) url
@ -134,12 +134,12 @@ var SearchService = "";
html += "<a class='result' href='" +url+ "'>"; html += "<a class='result' href='" +url+ "'>";
html += "<span class='title'>" +title+ "</span>"; html += "<span class='title'>" +title+ "</span>";
html += "<span class='digest'>" +digest+ "</span>"; html += "<span class='digest'>" +digest+ "</span>";
html += "<span class='icon icon-chevron-thin-right'></span>"; html += "<span class='fas fa-chevron-thin-right'></span>";
html += "</a>"; html += "</a>";
html += "</li>"; html += "</li>";
return html; return html;
}; };
/** /**
* Close the modal, resume body scrolling * Close the modal, resume body scrolling
* no param * no param
@ -149,7 +149,7 @@ var SearchService = "";
self.dom.container.fadeOut(); self.dom.container.fadeOut();
self.dom.body.removeClass('modal-active'); self.dom.body.removeClass('modal-active');
}; };
/** /**
* Searchform submit event handler * Searchform submit event handler
* @param queryText : (string) the query text * @param queryText : (string) the query text
@ -161,19 +161,19 @@ var SearchService = "";
self.search(1); self.search(1);
} }
}; };
/** /**
* Start loading bar animation * Start loading bar animation
* no param * no param
*/ */
self.startLoading = function() { self.startLoading = function() {
self.dom.modal_loading_bar.show(); self.dom.modal_loading_bar.show();
self.loadingTimer = setInterval(function() { self.loadingTimer = setInterval(function() {
self.percentLoaded = Math.min(self.percentLoaded+5,95); self.percentLoaded = Math.min(self.percentLoaded+5,95);
self.dom.modal_loading_bar.css('width', self.percentLoaded+'%'); self.dom.modal_loading_bar.css('width', self.percentLoaded+'%');
}, 100); }, 100);
}; };
/** /**
* Stop loading bar animation * Stop loading bar animation
* no param * no param
@ -212,7 +212,7 @@ var SearchService = "";
self.dom.btn_prev.off('click'); self.dom.btn_prev.off('click');
self.dom.container.remove(); self.dom.container.remove();
}; };
/** /**
* Load template and register event handlers * Load template and register event handlers
* no param * no param
@ -233,7 +233,7 @@ var SearchService = "";
self.init(); self.init();
}; };
var template = '<div id="u-search"><div class="modal"> <header class="modal-header" class="clearfix"><form id="u-search-modal-form" class="u-search-form" name="uSearchModalForm"> <input type="text" id="u-search-modal-input" class="u-search-input" /> <button type="submit" id="u-search-modal-btn-submit" class="u-search-btn-submit"> <span class="icon icon-search"></span> </button></form> <a class="btn-close"> <span class="icon icon-close"></span> </a><div class="modal-loading"><div class="modal-loading-bar"></div></div> </header> <main class="modal-body"><ul class="modal-results modal-ajax-content"></ul> </main> <footer class="modal-footer clearfix"><div class="modal-metadata modal-ajax-content"> <strong class="range"></strong> of <strong class="total"></strong></div><div class="modal-error"></div> <div class="logo"></div> <a class="nav btn-next modal-ajax-content"> <span class="text">NEXT</span> <span class="icon icon-chevron-right"></span> </a> <a class="nav btn-prev modal-ajax-content"> <span class="icon icon-chevron-left"></span> <span class="text">PREV</span> </a> </footer></div><div class="modal-overlay"></div></div>'; var template = '<div id="u-search"><div class="modal"> <header class="modal-header" class="clearfix"><form id="u-search-modal-form" class="u-search-form" name="uSearchModalForm"> <input type="text" id="u-search-modal-input" class="u-search-input" /> <button type="submit" id="u-search-modal-btn-submit" class="u-search-btn-submit"> <span class="fas fa-search"></span> </button></form> <a class="btn-close"> <span class="fas fa-times"></span> </a><div class="modal-loading"><div class="modal-loading-bar"></div></div> </header> <main class="modal-body"><ul class="modal-results modal-ajax-content"></ul> </main> <footer class="modal-footer clearfix"><div class="modal-metadata modal-ajax-content"> <strong class="range"></strong> of <strong class="total"></strong></div><div class="modal-error"></div> <div class="logo"></div> <a class="nav btn-next modal-ajax-content"> <span class="text">NEXT</span> <span class="fas fa-chevron-right"></span> </a> <a class="nav btn-prev modal-ajax-content"> <span class="fas fa-chevron-left"></span> <span class="text">PREV</span> </a> </footer></div><div class="modal-overlay"></div></div>';
})(jQuery); })(jQuery);
var AlgoliaSearch; var AlgoliaSearch;
@ -250,7 +250,7 @@ var AlgoliaSearch;
var self = this; var self = this;
var endpoint = "https://" +self.config.appId+ "-dsn.algolia.net/1/indexes/" +self.config.indexName; var endpoint = "https://" +self.config.appId+ "-dsn.algolia.net/1/indexes/" +self.config.indexName;
self.addLogo('algolia'); self.addLogo('algolia');
/** /**
* Generate result list html * Generate result list html
* @param data : (array) result items * @param data : (array) result items
@ -268,7 +268,7 @@ var AlgoliaSearch;
}); });
return html; return html;
}; };
/** /**
* Generate metadata after a successful query * Generate metadata after a successful query
* @param data : (object) the raw search response data * @param data : (object) the raw search response data
@ -303,7 +303,7 @@ var AlgoliaSearch;
self.dom.btn_prev.hide(); self.dom.btn_prev.hide();
} }
}; };
/** /**
* Send a GET request * Send a GET request
* @param queryText : (string) the query text * @param queryText : (string) the query text
@ -319,7 +319,7 @@ var AlgoliaSearch;
"x-algolia-api-key": self.config.apiKey "x-algolia-api-key": self.config.apiKey
}, function(data, status) { }, function(data, status) {
if (status === 'success' && data.hits && data.hits.length > 0) { if (status === 'success' && data.hits && data.hits.length > 0) {
var results = self.buildResultList(data.hits); var results = self.buildResultList(data.hits);
self.dom.modal_results.html(results); self.dom.modal_results.html(results);
} }
else { else {
@ -331,7 +331,7 @@ var AlgoliaSearch;
} }
}); });
}; };
return self; return self;
}; };
@ -351,7 +351,7 @@ var AzureSearch;
var endpoint = "https://" +self.config.serviceName+ ".search.windows.net/indexes/" +self.config.indexName+ "/docs?api-version=2015-02-28"; var endpoint = "https://" +self.config.serviceName+ ".search.windows.net/indexes/" +self.config.indexName+ "/docs?api-version=2015-02-28";
self.nav.current = 1; self.nav.current = 1;
self.addLogo('azure'); self.addLogo('azure');
/** /**
* Generate result list html * Generate result list html
* @param data : (array) result items * @param data : (array) result items
@ -369,7 +369,7 @@ var AzureSearch;
}); });
return html; return html;
}; };
/** /**
* Generate metadata after a successful query * Generate metadata after a successful query
* @param data : (object) the raw response data * @param data : (object) the raw response data
@ -405,7 +405,7 @@ var AzureSearch;
self.dom.btn_prev.hide(); self.dom.btn_prev.hide();
} }
}; };
/** /**
* Send a GET request * Send a GET request
* @param queryText : (string) the query text * @param queryText : (string) the query text
@ -476,7 +476,7 @@ var BaiduSearch;
}); });
return html; return html;
}; };
/** /**
* Generate metadata after a successful query * Generate metadata after a successful query
* @param data : (object) the raw google custom search response data * @param data : (object) the raw google custom search response data
@ -537,7 +537,7 @@ var BaiduSearch;
}; };
self.loadScript(); self.loadScript();
return self; return self;
}; };
@ -546,7 +546,7 @@ var GoogleCustomSearch = "";
(function($) { (function($) {
'use strict'; 'use strict';
/** /**
* Search by Google Custom Search Engine JSON API * Search by Google Custom Search Engine JSON API
* @param options : (object) * @param options : (object)
@ -571,7 +571,7 @@ var GoogleCustomSearch = "";
}); });
return html; return html;
}; };
/** /**
* Generate metadata after a successful query * Generate metadata after a successful query
* @param data : (object) the raw google custom search response data * @param data : (object) the raw google custom search response data
@ -605,7 +605,7 @@ var GoogleCustomSearch = "";
self.dom.btn_prev.hide(); self.dom.btn_prev.hide();
} }
}; };
/** /**
* Send a GET request * Send a GET request
* @param queryText : (string) the query text * @param queryText : (string) the query text
@ -621,8 +621,8 @@ var GoogleCustomSearch = "";
num: self.config.per_page num: self.config.per_page
}, function(data, status) { }, function(data, status) {
if (status === 'success' && data.items && data.items.length > 0) { if (status === 'success' && data.items && data.items.length > 0) {
var results = self.buildResultList(data.items); var results = self.buildResultList(data.items);
self.dom.modal_results.html(results); self.dom.modal_results.html(results);
} }
else { else {
self.onQueryError(queryText, status); self.onQueryError(queryText, status);
@ -633,7 +633,7 @@ var GoogleCustomSearch = "";
} }
}); });
}; };
return self; return self;
}; };
})(jQuery); })(jQuery);
@ -641,7 +641,7 @@ var HexoSearch;
(function($) { (function($) {
'use strict'; 'use strict';
/** /**
* Search by Hexo generator json content * Search by Hexo generator json content
* @param options : (object) * @param options : (object)
@ -652,7 +652,7 @@ var HexoSearch;
self.config.endpoint = ROOT + ((options||{}).endpoint || "content.json"); self.config.endpoint = ROOT + ((options||{}).endpoint || "content.json");
self.config.endpoint = self.config.endpoint.replace("//","/"); //make sure the url is correct self.config.endpoint = self.config.endpoint.replace("//","/"); //make sure the url is correct
self.cache = ""; self.cache = "";
/** /**
* Search queryText in title and content of a post * Search queryText in title and content of a post
* Credit to: http://hahack.com/codes/local-search-engine-for-hexo/ * Credit to: http://hahack.com/codes/local-search-engine-for-hexo/
@ -705,7 +705,7 @@ var HexoSearch;
} }
return foundMatch; return foundMatch;
}; };
/** /**
* Generate result list html * Generate result list html
* @param data : (array) result items * @param data : (array) result items
@ -719,7 +719,7 @@ var HexoSearch;
}); });
return html; return html;
}; };
/** /**
* Generate metadata after a successful query * Generate metadata after a successful query
* @param data : (object) the raw google custom search response data * @param data : (object) the raw google custom search response data
@ -727,7 +727,7 @@ var HexoSearch;
self.buildMetadata = function(data) { self.buildMetadata = function(data) {
self.dom.modal_footer.hide(); self.dom.modal_footer.hide();
}; };
/** /**
* Send a GET request * Send a GET request
* @param queryText : (string) the query text * @param queryText : (string) the query text
@ -743,16 +743,16 @@ var HexoSearch;
start: startIndex, start: startIndex,
num: self.config.per_page num: self.config.per_page
}, function(data, status) { }, function(data, status) {
if (status !== 'success' || if (status !== 'success' ||
!data || !data ||
(!data.posts && !data.pages) || (!data.posts && !data.pages) ||
(data.posts.length < 1 && data.pages.length < 1) (data.posts.length < 1 && data.pages.length < 1)
) { ) {
self.onQueryError(queryText, status); self.onQueryError(queryText, status);
} }
else { else {
self.cache = data; self.cache = data;
var results = ""; var results = "";
results += self.buildResultList(data.pages, queryText); results += self.buildResultList(data.pages, queryText);
results += self.buildResultList(data.posts, queryText); results += self.buildResultList(data.posts, queryText);
self.dom.modal_results.html(results); self.dom.modal_results.html(results);
@ -764,7 +764,7 @@ var HexoSearch;
}); });
} }
else { else {
var results = ""; var results = "";
results += self.buildResultList(self.cache.pages, queryText); results += self.buildResultList(self.cache.pages, queryText);
results += self.buildResultList(self.cache.posts, queryText); results += self.buildResultList(self.cache.posts, queryText);
self.dom.modal_results.html(results); self.dom.modal_results.html(results);
@ -774,8 +774,8 @@ var HexoSearch;
} }
} }
}; };
return self; return self;
}; };
})(jQuery); })(jQuery);

@ -228,14 +228,14 @@
position: fixed; position: fixed;
top: @height_navbar + 2*@gap; top: @height_navbar + 2*@gap;
right: 0; right: 0;
width: 100% - 0.5*@gap; width: ~"calc(100% - 2*@{gap})";
z-index:9999 + 1; z-index:9999 + 1;
line-height: 2 * @gap; line-height: 2 * @gap;
background: white; background: white;
border-right: 0; border-right: 0;
box-shadow: @boxshadow_card_raised; box-shadow: @boxshadow_card_raised;
border-radius: @border_radius; border-radius: @border_radius;
transform: translate3d(100%, -0, 0); transform: translate3d(~"calc(100% + 2*@{gap})", -0, 0);
.enable-trans(); .enable-trans();
&:hover { &:hover {
box-shadow: @boxshadow_card_raised; box-shadow: @boxshadow_card_raised;

Loading…
Cancel
Save