first commit
This commit is contained in:
379
admin-kalsport/themes/default/js/help.js
Normal file
379
admin-kalsport/themes/default/js/help.js
Normal file
@@ -0,0 +1,379 @@
|
||||
/**
|
||||
* Copyright since 2007 PrestaShop SA and Contributors
|
||||
* PrestaShop is an International Registered Trademark & Property of PrestaShop SA
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.md.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* https://opensource.org/licenses/OSL-3.0
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to https://devdocs.prestashop.com/ for more information.
|
||||
*
|
||||
* @author PrestaShop SA and Contributors <contact@prestashop.com>
|
||||
* @copyright Since 2007 PrestaShop SA and Contributors
|
||||
* @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
|
||||
*/
|
||||
|
||||
$(() => {
|
||||
let storage = false;
|
||||
|
||||
if (typeof (getStorageAvailable) !== 'undefined') {
|
||||
// eslint-disable-next-line
|
||||
storage = getStorageAvailable();
|
||||
}
|
||||
|
||||
window.initHelp = function () {
|
||||
$('#main').addClass('helpOpen');
|
||||
// first time only
|
||||
if ($('#help-container').length === 0) {
|
||||
// add css
|
||||
$('head').append('<link href="//help.prestashop.com/css/help.css" rel="stylesheet">');
|
||||
// add container
|
||||
$('#main').after('<div id="help-container"></div>');
|
||||
}
|
||||
// init help (it use a global javascript variable to get actual controller)
|
||||
// eslint-disable-next-line
|
||||
pushContent(help_class_name);
|
||||
$('#help-container').on('click', '.popup', (e) => {
|
||||
e.preventDefault();
|
||||
if (storage) storage.setItem('helpOpen', false);
|
||||
$('.toolbarBox a.btn-help').trigger('click');
|
||||
window.open(
|
||||
// eslint-disable-next-line
|
||||
`index.php?controller=${help_class_name}?token=${token}&ajax=1&action=OpenHelp`,
|
||||
'helpWindow',
|
||||
'width=450, height=650, scrollbars=yes',
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
// init
|
||||
$('.toolbarBox a.btn-help').on('click', (e) => {
|
||||
e.preventDefault();
|
||||
if (!$('#main').hasClass('helpOpen') && document.body.clientWidth > 1200) {
|
||||
if (storage) storage.setItem('helpOpen', true);
|
||||
$('.toolbarBox a.btn-help i').removeClass('process-icon-help').addClass('process-icon-loading');
|
||||
window.initHelp();
|
||||
} else if (!$('#main').hasClass('helpOpen') && document.body.clientWidth < 1200) {
|
||||
window.open(
|
||||
// eslint-disable-next-line
|
||||
`index.php?controller=${help_class_name}?token=${token}&ajax=1&action=OpenHelp`,
|
||||
'helpWindow',
|
||||
'width=450, height=650, scrollbars=yes',
|
||||
);
|
||||
} else {
|
||||
$('#main').removeClass('helpOpen');
|
||||
$('#help-container').html('');
|
||||
$('.toolbarBox a.btn-help i').removeClass('process-icon-close').addClass('process-icon-help');
|
||||
if (storage) storage.setItem('helpOpen', false);
|
||||
}
|
||||
});
|
||||
|
||||
// Help persistency
|
||||
if (storage && storage.getItem('helpOpen') === 'true') {
|
||||
$('a.btn-help').trigger('click');
|
||||
}
|
||||
|
||||
// switch home
|
||||
let language = window.iso_user;
|
||||
let home;
|
||||
|
||||
switch (language) {
|
||||
case 'en':
|
||||
home = '19726802';
|
||||
break;
|
||||
case 'fr':
|
||||
home = '20840479';
|
||||
break;
|
||||
default:
|
||||
language = 'en';
|
||||
home = '19726802';
|
||||
}
|
||||
|
||||
// feedback
|
||||
const arrFeedback = {};
|
||||
arrFeedback.page = 'page';
|
||||
arrFeedback.helpful = 'helpful';
|
||||
|
||||
// toc
|
||||
const toc = [];
|
||||
const lang = [
|
||||
['en', '19726802'],
|
||||
['fr', '20840479'],
|
||||
];
|
||||
|
||||
// change help icon
|
||||
function iconCloseHelp() {
|
||||
$('.toolbarBox a.btn-help i').removeClass('process-icon-loading').addClass('process-icon-close');
|
||||
}
|
||||
|
||||
// get content
|
||||
function getHelp(pageController) {
|
||||
// eslint-disable-next-line
|
||||
const request = encodeURIComponent(`getHelp=${pageController}&version=${_PS_VERSION_}&language=${iso_user}`);
|
||||
const d = new $.Deferred();
|
||||
$.ajax({
|
||||
url: `//help.prestashop.com/api/?request=${request}`,
|
||||
jsonp: 'callback',
|
||||
dataType: 'jsonp',
|
||||
success(data) {
|
||||
if (window.isCleanHtml(data)) {
|
||||
$('#help-container').html(data);
|
||||
d.resolve();
|
||||
}
|
||||
},
|
||||
});
|
||||
return d.promise();
|
||||
}
|
||||
|
||||
// update content
|
||||
function pushContent(target) {
|
||||
$('#help-container').removeClass('openHelpNav');
|
||||
$('#help-container').html('');
|
||||
// @todo: track event
|
||||
getHelp(target)
|
||||
.then(iconCloseHelp)
|
||||
.then(initToc)
|
||||
.then(initNavigation)
|
||||
.then(initSearch)
|
||||
.then(initFeedback);
|
||||
}
|
||||
|
||||
// build navigation
|
||||
function initNavigation() {
|
||||
const d = new $.Deferred();
|
||||
const request = encodeURIComponent(`api/content/${home}/child?expand=page`);
|
||||
$.ajax({
|
||||
url: `//help.prestashop.com/api/?request=${request}`,
|
||||
jsonp: 'callback',
|
||||
dataType: 'jsonp',
|
||||
success(data) {
|
||||
for (let i = 0; i < data.page.results.length; i += 1) {
|
||||
// eslint-disable-next-line
|
||||
if (window.isCleanHtml(data.page.results[i].id + data.page.results[i].title)) $('#help-container #main-nav').append(`<a href="//help.prestashop.com/${data.page.results[i].id}?version=${_PS_VERSION_}" data-target="${data.page.results[i].id}">${data.page.results[i].title}</a>`);
|
||||
}
|
||||
$('#help-container #main-nav a').on('click', function (e) {
|
||||
e.preventDefault();
|
||||
pushContent($(this).data('target'));
|
||||
});
|
||||
$('#help-container .open-menu').on('click', (e) => {
|
||||
e.preventDefault();
|
||||
$('#help-container').addClass('openHelpNav');
|
||||
});
|
||||
$('#help-container .close-menu').on('click', (e) => {
|
||||
e.preventDefault();
|
||||
$('#help-container').removeClass('openHelpNav');
|
||||
});
|
||||
d.resolve();
|
||||
},
|
||||
});
|
||||
return d.promise();
|
||||
}
|
||||
|
||||
// build toc getting children from home page recursively
|
||||
function initToc() {
|
||||
const getLinksByLang = function (item) {
|
||||
const d = new $.Deferred();
|
||||
const request = encodeURIComponent(`api/content/${item[1]}/child/page?expand=children.page&limit=100`);
|
||||
$.ajax({
|
||||
url: `//help.prestashop.com/api/?request=${request}`,
|
||||
jsonp: 'callback',
|
||||
dataType: 'jsonp',
|
||||
success(data) {
|
||||
toc[item[0]] = {
|
||||
title: `Home ${item[0]}`,
|
||||
lang: item[0],
|
||||
id: item[1],
|
||||
children: [],
|
||||
};
|
||||
data.results.forEach((page, j) => {
|
||||
const children = [];
|
||||
|
||||
page.children.page.results.forEach((child, i) => {
|
||||
children[i] = {
|
||||
title: child.title,
|
||||
// eslint-disable-next-line
|
||||
link: child._links.webui,
|
||||
id: child.id,
|
||||
lang: item[0],
|
||||
};
|
||||
});
|
||||
|
||||
toc[item[0]].children[j] = {
|
||||
title: page.title,
|
||||
// eslint-disable-next-line
|
||||
link: page._links.webui,
|
||||
id: page.id,
|
||||
children,
|
||||
lang: item[0],
|
||||
};
|
||||
});
|
||||
|
||||
d.resolve();
|
||||
},
|
||||
});
|
||||
return d.promise();
|
||||
};
|
||||
|
||||
return $.when.apply(null, lang.map(getLinksByLang)).then(() => {
|
||||
// build mapping
|
||||
const mapping = {};
|
||||
$.each(toc[language].children, (i, section) => {
|
||||
mapping[section.link] = [section.id, section.title, section.lang];
|
||||
if (typeof section.children !== 'undefined') {
|
||||
$.each(section.children, (counter, lowerSection) => {
|
||||
mapping[lowerSection.link] = [lowerSection.id, lowerSection.title, lowerSection.lang];
|
||||
});
|
||||
}
|
||||
});
|
||||
// remap links
|
||||
$("#help-container a[href^='/display/']").on('click', function (e) {
|
||||
e.preventDefault();
|
||||
const href = $(this).attr('href');
|
||||
const target = mapping[href][0];
|
||||
pushContent(target);
|
||||
});
|
||||
$("#help-container a[href^='/pages/viewpage.action?pageId=']").on('click', function (e) {
|
||||
e.preventDefault();
|
||||
const pageId = $(this).attr('href').match(/\d+$/);
|
||||
|
||||
if (pageId) {
|
||||
pushContent(pageId[0]);
|
||||
}
|
||||
});
|
||||
|
||||
// home link
|
||||
$('#help-container a.home').attr(
|
||||
'href',
|
||||
// eslint-disable-next-line
|
||||
`//help.prestashop.com/${toc[language].id}?version=${window._PS_VERSION_}`,
|
||||
).on('click', (e) => {
|
||||
e.preventDefault();
|
||||
pushContent(toc[language].id);
|
||||
});
|
||||
// target _blank external link
|
||||
$("#help-container a[href^='http://']").attr('href', function () {
|
||||
$(this).attr('target', '_blank').append(' <i class="fa fa-external-link"></i>');
|
||||
});
|
||||
// add class anchor to link from table of content
|
||||
$('#help-container .toc-indentation a').addClass('anchor');
|
||||
});
|
||||
}
|
||||
|
||||
// search
|
||||
function initSearch() {
|
||||
// replace tag from confluence search api
|
||||
function strongify(str) {
|
||||
return str.replace(/@@@hl@@@/g, '<strong>').replace(/@@@endhl@@@/g, '</strong>');
|
||||
}
|
||||
$('#help-container #search-box').on('submit', (e) => {
|
||||
e.preventDefault();
|
||||
$('#help-container #search-results').html('');
|
||||
const searchUrl = encodeURIComponent('searchv3/1.0/search?where=PS16&type=page&queryString=');
|
||||
const searchTerm = encodeURIComponent($('input[name="search"]').val());
|
||||
$.ajax({
|
||||
url: `//help.prestashop.com/api/?request=${searchUrl}${searchTerm}`,
|
||||
jsonp: 'callback',
|
||||
dataType: 'jsonp',
|
||||
success(data) {
|
||||
if (data.results.length === 0) {
|
||||
$('#search-results').addClass('hide');
|
||||
}
|
||||
for (let i = 0; i < data.results.length; i += 1) {
|
||||
if (window.isCleanHtml(data.results[i].id + data.results[i].title + data.results[i].bodyTextHighlights)) {
|
||||
$('#search-results').removeClass('hide')
|
||||
// eslint-disable-next-line
|
||||
.append(`<div class="result-item"><i class="fa fa-file-o"></i> <a href="//help.prestashop.com/${data.results[i].id}?version=${window._PS_VERSION_}" data-target="${data.results[i].id}">${strongify(data.results[i].title)}</a><p>${strongify(data.results[i].bodyTextHighlights)}</p></div>`);
|
||||
}
|
||||
}
|
||||
$('#search-results a').on('click', function (event) {
|
||||
event.preventDefault();
|
||||
pushContent($(this).data('target'));
|
||||
});
|
||||
},
|
||||
});
|
||||
});
|
||||
$('#help-container').on('click', '.search', (e) => {
|
||||
e.preventDefault();
|
||||
$('#help-container #search-box').removeClass('hide');
|
||||
$('#help-container .header-navigation').addClass('hide');
|
||||
$('#search-box input[name=search]').focus();
|
||||
});
|
||||
$('#help-container').on('click', '.close-search', () => {
|
||||
$('#help-container #search-box').addClass('hide');
|
||||
$('#help-container .header-navigation').removeClass('hide');
|
||||
});
|
||||
}
|
||||
|
||||
// feedback
|
||||
function initFeedback() {
|
||||
const defaultFeedback = {
|
||||
/* eslint-disable */
|
||||
version: _PS_VERSION_,
|
||||
controller: help_class_name,
|
||||
language: iso_user,
|
||||
helpful: null,
|
||||
reason: null,
|
||||
comment: null,
|
||||
/* eslint-enable */
|
||||
};
|
||||
$('#help-container .helpful-labels li').on('click', function () {
|
||||
const percentageMap = {
|
||||
0: 'Not at all', 25: 'Not very', 50: 'Somewhat', 75: 'Very', 100: 'Extremely',
|
||||
};
|
||||
const percentage = parseInt($(this).data('percentage'), 10);
|
||||
defaultFeedback.helpful = percentageMap[percentage];
|
||||
$('#help-container .slider-cursor').removeClass('hide');
|
||||
$('#help-container .helpful-labels li').removeClass('active');
|
||||
$('#help-container .slider-cursor').css('left', `${percentage}%`);
|
||||
$('#help-container .helpful-labels li').addClass('disabled').off();
|
||||
$(this).removeClass('disabled').addClass('active');
|
||||
if (percentage <= 25) {
|
||||
$('#help-container .feedback-reason').show();
|
||||
} else if (percentage > 25) {
|
||||
submitFeedback(defaultFeedback);
|
||||
}
|
||||
});
|
||||
$('#help-container .feedback-reason .radio label').on('click', () => {
|
||||
const reasonMap = {
|
||||
1: 'Not related', 2: 'Too complicated', 3: 'Too much', 4: 'Incorrect', 5: 'Unclear', 6: 'Incomplete',
|
||||
};
|
||||
defaultFeedback.reason = reasonMap[$('input[name=lowrating-reason]:checked').val()];
|
||||
});
|
||||
$('#help-container .feedback-submit').on('click', (e) => {
|
||||
e.preventDefault();
|
||||
defaultFeedback.comment = $('textarea[name=feedback-detail]').val();
|
||||
submitFeedback(defaultFeedback);
|
||||
});
|
||||
}
|
||||
|
||||
function submitFeedback(currentFeedback) {
|
||||
let feedback = '?';
|
||||
const keys = Object.keys(currentFeedback);
|
||||
|
||||
for (let i = 0; i < keys.length; i += 1) {
|
||||
if (i > 0) {
|
||||
feedback += '&';
|
||||
}
|
||||
feedback += `${keys[i]}=${currentFeedback[keys[i]]}`;
|
||||
}
|
||||
$.ajax({
|
||||
url: `//help.prestashop.com/api/feedback/${feedback}`,
|
||||
dataType: 'jsonp',
|
||||
jsonp: 'callback',
|
||||
success() {
|
||||
$('#help-container #helpful-feedback').hide();
|
||||
$('#help-container .thanks').removeClass('hide');
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user