blob: eb3af20478542f11a639c2971be9991e3dde94b7 [file] [log] [blame]
---
---
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
function submitJiraSearchForm() {
var queryTemplate1 = '(summary ~ "%1" OR description ~ "%1" OR comment ~ "%1") AND ';
var queryTemplate2 = 'project = CB AND resolution = Unresolved %2ORDER BY created';
var componentKeywords = [
/\b(ios|iphone|ipad|ipod)\b/ig, 'iOS',
/\b(android)\b/ig, 'Android',
/\b(blackberry|rim|bb.?|bb10|webworks)\b/ig, 'BlackBerry',
/\b(webos)\b/ig, 'webOS',
/\b(wp7|windows phone)\b/ig, 'WP7',
/\b(wp8|windows phone)\b/ig, 'WP8'
];
var query = document.getElementById('jira-search-box').value;
// Check for some platform keywords:
var components = [];
for (var i = 0; i < componentKeywords.length; i += 2) {
if (query.match(componentKeywords[i])) {
query = query.replace(componentKeywords[i], '');
components.push(componentKeywords[i + 1]);
}
}
var componentsQuery = '';
if (components.length) {
// Add in components that apply to all platforms.
components.push('Docs', 'mobile-spec', 'CordovaJS');
componentsQuery = 'AND component in (' + components.join(', ') + ') ';
}
// Remove quotes since we are adding them in.
query = query.replace(/"/g, '');
var tokens = query.split(/\s+/);
query = '';
for (var i = 0; i < tokens.length; ++i) {
if (tokens[i]) {
query += queryTemplate1.replace(/%1/g, tokens[i]);
}
}
query += queryTemplate2.replace('%2', componentsQuery)
window.open('https://issues.apache.org/jira/secure/IssueNavigator.jspa?mode=show&reset=true&navType=simple&jqlQuery=' + encodeURIComponent(query), '_newtab' + new Date);
}
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + "; " + expires + "; path=/";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
}
return "";
}
var lastVisit = getCookie("visitTime");
function checkNotification() {
var dates = [];
if (lastVisit != "") {
{% for post in site.posts %}
dates.push('{{ post.date | date_to_rfc822 }}');{% endfor %}
}
var new_blog_count = 0;
for(var i = 0; i < dates.length ; i++) {
var blog_time = new Date(dates[i]).getTime();
if(blog_time > lastVisit) {
new_blog_count++;
}
else {
break;
}
}
return new_blog_count;
}
$(document).ready(function () {
// code for blog badge
$('.adorner').each(function(i) {
var blog_time = new Date($(this).attr('blogTime')).getTime();
if(lastVisit != "" && blog_time > lastVisit) {
this.style.backgroundColor = "#3992ab";
}
});
var new_blog_count = checkNotification();
if (new_blog_count) {
document.getElementById("new_blog_count").innerHTML = new_blog_count;
}
var copyButtons = document.getElementsByClassName("btn-copy");
for (var i = 0; i < copyButtons.length; i++) {
copyButtons[i].addEventListener("click", function (clickEvent) {
var id = clickEvent.target.getAttribute("data-clipboard-target");
var range = document.createRange();
range.selectNode(document.getElementById(id));
var select = window.getSelection();
select.removeAllRanges();
select.addRange(range);
try {
document.execCommand("copy");
} catch (e) {
// Silently fail for now
}
select.removeAllRanges();
});
}
// Smooth scroll to anchor links
$("a[href^='#']").on('click', function(e) {
// scroll only if there is a hash in the link's href
var hash = this.hash;
if (hash) {
// prevent default anchor click behavior
e.preventDefault();
// get the fragment without the "#" symbol because location.hash
// is returned with it
var targetName = hash.slice(1);
// escape single quotes in target name because
// we use them in the selector to find matching targets
targetName.replace(/'/g, "\\\'").replace(/"/g, "\\\"");
// check if the target exists by looking at either ID or name
// NOTE:
// we're not using "# + targetName" to select by ID
// because the ID might contain special characters that
// are annoying to escape
var targetSelector = "*[id='" + targetName + "'], *[name='" + targetName + "']";
var matchingTargets = $(targetSelector);
if (matchingTargets.length < 1) {
return;
}
if (matchingTargets.length > 1) {
console.warn("found more than one anchor to go to; will go to the first one");
}
// get resulting scroll height
var matchingTarget = matchingTargets.first();
var scrollHeight = matchingTarget.offset().top;
// add an extra offset (to account for the fixed page header),
// but only if there is no "fragment-anchor" class (because it
// already has an offset of its own for this purpose)
if (!matchingTarget.hasClass("fragment-anchor")) {
scrollHeight -= 50;
}
// animate
$('html, body').animate(
{scrollTop: scrollHeight},
300,
function () {
// when done, add hash to url (default click behaviour)
window.location.hash = hash;
}
);
}
});
// jira search code
$("#jira-search-button").on("click", submitJiraSearchForm);
$("#jira-search-box").on("keypress", function searchKeypressEventHandler (e) {
if(e.keyCode == 13) {
submitJiraSearchForm();
}
});
});