(function ($) {
/* let debug = 1;
let logger = function (...args) { if (debug == 1) logger(...args || "") };*/
let open = false
let settings = {}
let defaults = {
viewType: 'inline',
spots: '',
name: '',
size: 'fit',
legend: false,
legendSpots: false,
redline: false,
canResize: false,
tearWindow: false,
target: { x: 0, y: 0, show: false },
shawAllRefs: false,
url: '',
basicWidth: 0,
basicHeight: 0,
type: 'vector',
viewBox: 'viewBox="0 0 0 0"',
ready: undefined,
rColor: '#ff0000',
rWidth: 1,
tColor: '#333333',
tWidth: 1,
hColor: '#ff0000',
hWidth: 1,
firstClick: true
}
var dmclangcodeicn = document.documentURI;
var lablelegend;
var lablehots;
var labelnext;
var labelprev;
var lablefullscreen;
var lablehome;
dmclangcodeicn = dmclangcodeicn.substr(-10, 2);
switch (dmclangcodeicn) {
case 'en':
lablehots = 'Hotspots';
labelnext = 'Next';
labelprev = 'Previous';
lablefullscreen = 'Fullscreen';
lablehome = 'Home';
lablelegend = 'Hide legend';
break;
case 'ru':
lablehots = 'Хотспоты';
labelnext = 'Вперед';
labelprev = 'Назад';
lablefullscreen = 'Полный экран';
lablehome = 'Домой';
lablelegend = 'Скрыть легенду';
break;
case 'es':
lablehots = 'Puntos calientes';
labelnext = 'Adelante';
labelprev = 'De regreso';
lablefullscreen = 'Pantalla completa';
lablehome = 'Casa';
lablelegend = 'Ocultar leyenda';
break;
}
var methods = {
init: function (options) {
//logger(options);
return this.each(function () {
var $this = $(this);//$this можно передавать глобальным функциям
// //console.log($this[0]);
data = $($this).children('img+.S1000Dhotspots').attr('src');
// Если плагин ещё не проинициализирован
if (!data && $($this).find('.imagePlayer').length == 0) {
settings = '';
//settings = options;
settings = $.extend({}, defaults, options);//расширяем стандартные настройки плагина
var CookieSettings = Cookies.getJSON('imagePlayerSettings');
if (CookieSettings != undefined) {
settings = $.extend({}, settings, CookieSettings);
}
//Cookies.getJSON('name');
//methods.saveSettings($this, settings);
//logger('START settings', defaults, options, settings);
//logger(settings);
//logger(settings.legendSpots);
$($this).children('img,svg').hide();
$($this).append(methods.create($(this), settings));//функция локальна, можно и просто $(this)
methods.saveSettings($($this), settings);
var img = new Image();
img.src = settings.url;
$($this).find('.imagePlayerImg .mainImg').append(img);
//$($this).find('.imagePlayerImg img');//.addClass('mainImg');
img.addEventListener('load', function () {
if (this.naturalWidth != undefined && this.naturalWidth != 0 && this.naturalHeight != undefined && this.naturalHeight != 0) {
//logger('HAVE NW & NH', this.naturalWidth, this.naturalHeight);
//methods.saveSettings($($this), settings);
methods.startActions($this, settings, false);
//methods.canvasRender($($this), $($this).find("canvas")[0], settings);
// $($this).find('.imagePlayerImg').append(this);
// $($this).find('.imagePlayerImg img').addClass('mainImg');
}
else {
//logger('NO NW & NH');
//если браузер не определил высоту и ширину картинки, надо сделать это за него
//methods.saveSettings($($this), settings);
methods.startActions($this, settings, true);
}
});
//события на элементы управления
//кнопки вперед и назад
//var elentList = methods.eventsList($($(this).find(".imagePlayerHotspots")[0]));
//logger('elentList',$($(this).find(".imagePlayerHotspots")[0]),elentList);
if ($(this).parent().find('.S1000Dfiguregraphic').length > 1) {
$(this).on('click', ".imagePlayerNext", function (e) { methods.showNextPlayer($this, e); });
$(this).on('click', ".imagePlayerPrev", function (e) { methods.showPrevPlayer($this, e); });
}
else {
$(this).find('.imagePlayerNext, .imagePlayerPrev').hide();
}
//полный экран
//open
if (!$($this).hasClass('init')) {
$(this).on('click', ".imagePlayerFullscreen", function (e) { open = true, methods.fullScreen($this, e); });
}
//close
if ($(this).hasClass('fullScreen')) {
$(this).on('click', ".imagePlayerFullscreen", function (e) { methods.fullScreen($this, e); });
}
//все хоты
if (!$($this).hasClass('init') && !$($this).hasClass('initFull')) {
// //console.log($this[0]);
$(this).on('click', ".imagePlayerHotspots", function (e) {
methods.redrawAllRefs($this, $($this).find(".imagePlayer .imagePlayerImg")[0], e);
$(e.target).toggleClass('active');
});
}
if ($(this).hasClass('fullScreen') && !$($this).hasClass('initFull')) {
$(this).on('click', ".imagePlayerHotspots", function (e) {
methods.redrawAllRefs($this, $($this).find(".imagePlayer .imagePlayerImg")[0], e);
$(e.target).toggleClass('active');
});
}
//рестарт плеера
if (!$($this).hasClass('init') && !$($this).hasClass('initFull')) {
logger('reinit');
$(this).on('click', ".resetPlayer", function (e) { methods.reinit($this, e); });
}
if ($(this).hasClass('fullScreen') && !$($this).hasClass('initFull')) {
$(this).on('click', ".resetPlayer", function (e) {
if ($(".imagePlayerSettingsButton.imagePlayerHotspots.active")) {
$(".imagePlayerSettingsButton.imagePlayerHotspots.active").removeClass('active')
}
if ($('.imagePlayerSettingsButton.imagePlayerTarget.active')) {
$(".imagePlayerSettingsButton.imagePlayerTarget.active").removeClass('active')
}
if ($('.imagePlayerSettingsButton.imagePlayerTear.active')) {
$('.imagePlayerMapCanvas').css({ 'display': 'none' })
$(".imagePlayerSettingsButton.imagePlayerTear.active").removeClass('active')
}
if ($('.imagePlayerSettingsButton.imagePlayerDrawer.active')) {
$(".imagePlayerSettingsButton.imagePlayerDrawer.active").removeClass('active')
}
methods.reinit($this, e); methods.startActions($this, settings, true);
});
}
if (!$($this).hasClass('init') && !$($this).hasClass('initFull')) {
if (settings.legend != false) {
$(this).parent().on('click', ".S1000DIntRefHotspot", function (e) {
if ($($this).css('display') == 'block') {
methods.RefClick($this, e);
}
});
//$(this).parent().next().next('.S1000DrandomList').find('a.S1000DIntRefHotspot')
}
}
// открылся экран
if ($(this).hasClass('fullScreen') && !$($this).hasClass('initFull') && $($this).css('display') == 'block') {
logger('thiscl', $this);
logger(' $(this).parent()', $(this).parent());
$(this).parent().on('click', ".S1000DIntRefHotspot", function (e) { logger('cl64'); methods.RefClick($this, e); });
}
if ($(this).hasClass('fullScreen') && !$($this).hasClass('initFull') && $($this).css('display') == 'block') {
$(this).parent().on('click', ".S1000DIntRefHotspot", function (e) { logger('cl5'); methods.RefClick($this, e); });
//$(this).parent().next().next('.S1000DrandomList').find('a.S1000DIntRefHotspot')
}
if (!$($this).hasClass('init') && !$($this).hasClass('initFull')) {
logger('cl2');
if (settings.legend != false) {
//$(this).parent().next().next('.S1000DrandomList').html('');
$(this).parent().on('click', ".S1000DHotspot", function (e) {
if ($($this).css('display') == 'block') {
methods.HRefClick($this, e);
}
});
//$(this).parent().next().next('.S1000DrandomList').find('a.S1000DIntRefHotspot')
}
}
if ($(this).hasClass('fullScreen') && !$($this).hasClass('initFull') && $($this).css('display') == 'block') {
if (settings.legend != false) {
//$(this).parent().next().next('.S1000DrandomList').html('');
$(this).parent().on('click', ".S1000DHotspot", function (e) { logger('cl644'); methods.HRefClick($this, e); });
//$(this).parent().next().next('.S1000DrandomList').find('a.S1000DIntRefHotspot')
}
}
//проверка на хот по наведению
if (!$($this).hasClass('init') && !$($this).hasClass('initFull')) {
if (settings.legend != false) {
$($this).on('mouseenter', ".imagePlayer canvas.imagePlayerCanvas", function (e) { methods.tryHotHoverSetOnmove($($this), $($this).find("canvas")[0], settings, e); });
$($this).on('mouseleave', ".imagePlayer canvas.imagePlayerCanvas", function (e) { methods.tryHotHoverUnsetOnmove($($this), $($this).find("canvas")[0], settings, e); });
}
}
if ($(this).hasClass('fullScreen') && !$($this).hasClass('initFull')) {
if (settings.legend != false) {
$($this).on('mouseenter', ".imagePlayer canvas.imagePlayerCanvas", function (e) { methods.tryHotHoverSetOnmove($($this), $($this).find("canvas")[0], settings, e); });
$($this).on('mouseleave', ".imagePlayer canvas.imagePlayerCanvas", function (e) { methods.tryHotHoverUnsetOnmove($($this), $($this).find("canvas")[0], settings, e); });
}
}
if (!$($this).hasClass('init') && !$($this).hasClass('initFull')) {
//проверка на наличие хота под курсором по клику
//first click: если это первое нажатие - выделение происходит
$($this).on('mousedown', ".imagePlayer canvas.imagePlayerCanvas", function (e) {
if (settings.legend != false || settings.firstClick === true) {
methods.tryHotShow($($this), $($this).find("canvas")[0], settings, e);
}
if ($(this).hasClass('fullScreen') || settings.viewType == 'fullScreen') {
settings.firstClick = true
methods.panClick($($this), $($this).find(".imagePlayer .imagePlayerImg")[0], e);
}
});
if ($(this).hasClass('fullScreen') || settings.viewType == 'fullScreen') {
$($this).on('mousemove', ".imagePlayer canvas.imagePlayerCanvas", function (e) {
methods.pan($($this), $($this).find(".imagePlayer .imagePlayerImg")[0], e);
settings.firstClick = false
});
}
$($this).closest('.popupWindowFull').on('mouseup', function (e) {
settings.firstClick = false
methods.stopPan($($this), ".imagePlayer canvas.imagePlayerCanvas", e);
methods.stopDraw($($this), $($this).find("canvas")[1], e);
});
//logger('DAS ELEMENT!', $(".imagePlayer canvas.imagePlayerCanvas"));
if ($(this).hasClass('fullScreen') || settings.viewType == 'fullScreen') {
//панорамирование
$($this).on('wheel', ".imagePlayer canvas.imagePlayerCanvas", function (e) { methods.resize($($this), $($this).find(".imagePlayer .imagePlayerImg")[0], e); });
//рисовалка
$(this).on('click', ".imagePlayerDrawer", function (e) {
methods.drawOnScreen($this, $($this).find("canvas")[1], e);
$(e.target).toggleClass('active');
});
$($this).on('mousedown', ".imagePlayer canvas.imagePlayerDrawingCanvas", function (e) {
methods.startDraw($($this), $($this).find("canvas")[1], e);
});
$($this).on('mousemove', ".imagePlayer canvas.imagePlayerDrawingCanvas", function (ev) {
methods.drawingLine($($this), $($this).find("canvas")[1], ev);
});
//таргет
$(this).on('click', ".imagePlayerTarget", function (e) {
methods.targetOnScreen($this, $($this).find("canvas")[2], e);
$(e.target).toggleClass('active');
});
$($this).on('mousedown', ".imagePlayer canvas.imagePlayerTargetCanvas", function (e) {
methods.setTarget($($this), $($this).find("canvas")[2], e);
});
//миникарта
$(this).on('click', ".imagePlayerTear", function (e) {
methods.clickToggleMap($this, $($this).find(".imagePlayerMapCanvas")[0], e);
$(e.target).toggleClass('active');
});
$($this).on('mousedown', ".imagePlayer canvas.imagePlayerMapCanvas", function (e) {
//methods.setTarget($($this), $($this).find("canvas")[3], e);
});
//показать или спрятать легенду
if (!$($this).hasClass('initFull')) {
$(this).on('click', ".imagePlayerLegend", function (e) {
methods.switchLegend($this, e);
$(e.target).toggleClass('active');
});
}
}
}
if ($(this).hasClass('fullScreen') && !$($this).hasClass('initFull')) {
//проверка на наличие хота под курсором по клику
$($this).on('mousedown', ".imagePlayer canvas.imagePlayerCanvas", function (e) {
if (settings.legend != false) {
methods.tryHotShow($($this), $($this).find("canvas")[0], settings, e);
}
if ($(this).hasClass('fullScreen') || settings.viewType == 'fullScreen') {
logger('find2');
methods.panClick($($this), $($this).find(".imagePlayer .imagePlayerImg")[0], e);
}
});
if ($(this).hasClass('fullScreen') || settings.viewType == 'fullScreen') {
$($this).on('mousemove', ".imagePlayer canvas.imagePlayerCanvas", function (e) {
methods.pan($($this), $($this).find(".imagePlayer .imagePlayerImg")[0], e);
});
}
$($this).closest('.popupWindowFull').on('mouseup', function (e) {
logger('find4');
methods.stopPan($($this), ".imagePlayer canvas.imagePlayerCanvas", e);
methods.stopDraw($($this), $($this).find("canvas")[1], e);
});
//logger('DAS ELEMENT!', $(".imagePlayer canvas.imagePlayerCanvas"));
if ($(this).hasClass('fullScreen') || settings.viewType == 'fullScreen') {
//панорамирование
$($this).on('wheel', ".imagePlayer canvas.imagePlayerCanvas", function (e) { logger('elementsss'); methods.resize($($this), $($this).find(".imagePlayer .imagePlayerImg")[0], e); });
//рисовалка
$(this).on('click', ".imagePlayerDrawer", function (e) {
methods.drawOnScreen($this, $($this).find("canvas")[1], e);
$(e.target).toggleClass('active');
});
$($this).on('mousedown', ".imagePlayer canvas.imagePlayerDrawingCanvas", function (e) {
methods.startDraw($($this), $($this).find("canvas")[1], e);
});
$($this).on('mousemove', ".imagePlayer canvas.imagePlayerDrawingCanvas", function (ev) {
methods.drawingLine($($this), $($this).find("canvas")[1], ev);
});
//таргет
$(this).on('click', ".imagePlayerTarget", function (e) {
methods.targetOnScreen($this, $($this).find("canvas")[2], e);
$(e.target).toggleClass('active');
});
$($this).on('mousedown', ".imagePlayer canvas.imagePlayerTargetCanvas", function (e) {
methods.setTarget($($this), $($this).find("canvas")[2], e);
});
//миникарта
$(this).on('click', ".imagePlayerTear", function (e) {
methods.clickToggleMap($this, $($this).find(".imagePlayerMapCanvas")[0], e);
$(e.target).toggleClass('active');
});
$($this).on('mousedown', ".imagePlayer canvas.imagePlayerMapCanvas", function (e) {
//methods.setTarget($($this), $($this).find("canvas")[3], e);
});
//показать или спрятать легенду
if (!$($this).hasClass('initFull')) {
$(this).on('click', ".imagePlayerLegend", function (e) {
methods.switchLegend($this, e);
$(e.target).toggleClass('active');
});
}
}
}
}
$(this).addClass('init');
if ($(this).hasClass('fullScreen')) {
$($this).addClass('initFull')
}
});
},
startActions: function ($this, settings, overloadSizes) {
var playerSize = methods.initiatePlayerSize($this, settings, overloadSizes);
settings.basicWidth = playerSize.width;
settings.basicHeight = playerSize.height;
//logger('basic settings of W & H', settings.basicWidth, settings.basicHeight);
var sett = methods.readSettings($this);
sett.basicWidth = playerSize.width;
sett.basicHeight = playerSize.height;
// logger('settings.type',sett.viewBox);
if (sett.viewBox == 'viewBox="0 0 0 0"' && !overloadSizes) {
logger('inside');
//logger('sett.viewBox', sett.viewBox, playerSize.real.width, playerSize.real.height);
sett.viewBox = 'viewBox="0 0 ' + playerSize.real.width + ' ' + playerSize.real.height + '"';
settings.viewBox = 'viewBox="0 0 ' + playerSize.real.width + ' ' + playerSize.real.height + '"';
// $($this).find("canvas")
logger(' sett.viewBox', sett.viewBox);
}
methods.saveSettings($($this), sett);
methods.setPlayerSize($this, playerSize.width, playerSize.height);
logger('this', $($this));
/* logger('can', $($this).find("canvas")[0]);*/
methods.canvasFirstRender($($this), $($this).find("canvas")[0], settings);
if (settings.ready != undefined) {
logger('ready function != undefined');
logger('settings', settings)
settings.ready();
};
},
create: function (parent, settings) {
logger('here');
//return $()
$(parent).attr('zoom', 1);
$(parent).attr('posX', 0);
$(parent).attr('posY', 0);
if (settings.viewType != 'inline') {
$(parent).addClass('fullScreen');
}
var tmpObj = $('
');
var tmp = $('');
var tmpImgCanvas = $('');
var tmpCanvas = $('');
var tmpDrawingCanvas = $('');
var tmpTargetCanvas = $('');
var tmpMapCanvas = $('');
var img = $('
');
// var settingsPanel = $('');
// settingsPanel = settingsPanel.append('');
// settingsPanel = settingsPanel.append('');
// settingsPanel = settingsPanel.append('');
tmp.append(tmpImgCanvas);
tmp.append(tmpCanvas);
tmp.append(tmpDrawingCanvas);
tmp.append(tmpTargetCanvas);
tmp.append(tmpMapCanvas);
tmpObj.append(tmp);
tmp = $('');
var tmpSetGr = $('');
var tmpSet = '';
if (settings.viewType != 'inline') {
tmpSet = $('');
//тут можно навесить обработчики на tmpSet
tmpSetGr.append(tmpSet);//а потом приколачиваем всё на свои места
tmp.append(tmpSetGr);
tmpSetGr = $('');//и снова
tmpSet = $('');
tmpSetGr.append(tmpSet);
tmpSet = $('');
tmpSetGr.append(tmpSet);
tmpSet = $('');
tmpSetGr.append(tmpSet);
}
if (settings.legend != false) {
tmpSet = $('');
tmpSetGr.append(tmpSet);
tmp.append(tmpSetGr);
}
tmpSetGr = $('');//и снова
tmpSet = $('');
tmpSetGr.append(tmpSet);
tmp.append(tmpSetGr);
tmpSetGr = $('');//и снова
tmpSet = $('');
tmpSetGr.append(tmpSet);
tmpSet = $('');
tmpSetGr.append(tmpSet);
tmp.append(tmpSetGr);
/*if (settings.viewType != 'inline') {
tmpSetGr = $('');//и снова
tmpSet = $('');
tmpSetGr.append(tmpSet);
tmp.append(tmpSetGr);
}*/
tmpSetGr = $('');//и снова
tmpSet = $('');
tmpSetGr.append(tmpSet);
tmp.append(tmpSetGr);
tmpObj.append(tmp);
tmpObj.append(img);
//logger("$(parent).find('.localSettingsC').length", $(parent).find('.localSettingsC'));
if ($(parent).find('.localSettingsC').length < 1) {
// logger('here');
var localSettingsC = $('');
//logger(settings);
var localSettings = JSON.stringify(settings);
localSettingsC.val(localSettings);
$(parent).append(localSettingsC);
}
logger('tmpObj', tmpObj);
return tmpObj;
},
tryHotHoverSetOnmove: function ($this, canvas, settings, e) {
//logger("SET ONMOVE", $this, canvas, settings, JSON.parse($($this).find('.localSettingsC').val()));
$($this).on('mousemove', ".imagePlayer canvas.imagePlayerCanvas", function (e) { methods.tryHotHover($($this), canvas, settings, e); });
},
tryHotHoverUnsetOnmove: function ($this, canvas, settings, e) {
//$($this).off('mouseenter',".imagePlayer canvas.imagePlayerCanvas", methods.tryHotHoverSetOnmove);
},
tryHotHover: function ($this, canvas, settings, e) {
//logger('MOUSE MOVE');
e.preventDefault();
e.stopPropagation();
//logger('settings', settings);
var element = $($($this).find('.mainImg')[0]);
//var y = window.scrollY;
var setts = $($this).find('.localSettingsC').val();
setts = JSON.parse(setts);
$this.settings = setts;
settings = setts;
//logger('settings', settings, $($this).find('.localSettingsC').val());
var offset = $(canvas).offset();
//logger("e.pageX",e.pageX);
// logger("e.pageY",e.pageY);
// logger("e.pageX",e.pageX - offset.left);
// logger("e.pageY",e.pageY - offset.top);
// logger("viewport", settings.viewBox);
//logger('settings.viewBox on try hot hover', settings.viewBox);
var svgSize = settings.viewBox.replace('"', '').split(" ");
var clickX = e.pageX - offset.left;
var clickY = e.pageY - offset.top;
// logger('e.pageY', e.pageY);
// logger('offset.top', offset.top);
// logger('scroll', y);
var viewW = $(element).outerWidth();
var viewH = $(element).outerHeight();
//var zoom = parseFloat( $($this).attr('zoom') );
//var left = parseFloat( $($this).attr('posx') );
//var top = parseFloat( $($this).attr('posy') );
// $($this).attr('posXSt',e.pageX);
// $($this).attr('posYSt',e.pageY);
//logger('to convert coords', clickX, clickY, viewW, viewH, parseFloat( svgSize[2] ), parseFloat( svgSize[3] ), left, top, zoom);
var relCoords = methods.toSvgCoordsExp(clickX, clickY, parseFloat(svgSize[2]), parseFloat(svgSize[3]), element);
////console.log(relCoords);
//var relCoords = methods.toSvgCoords(clickX, clickY, viewW, viewH, parseFloat( svgSize[2] ), parseFloat( svgSize[3] ), left, top, zoom);
//logger("relCoords", relCoords);
var forShow = false;
for (let i = 0; i < settings.legend.length; i++) {
if (methods.checkForCanvasRefClick(settings, settings.legend[i], relCoords.X, relCoords.Y, canvas)) {
forShow = true;
}
}
if (forShow == true) {
$(canvas).css({ "cursor": "pointer" });
}
else {
$(canvas).css({ "cursor": "auto" });
}
},
switchLegend: function ($this, e) {
e.preventDefault();
e.stopPropagation();
logger('legend', $($($this).closest('.S1000Dfigure, .popupWindowFull').find(".S1000Dlegend, .S1000DrandomList")));
$($($this).closest('.S1000Dfigure, .popupWindowFull').find(".S1000Dlegend, .S1000DrandomList")).toggle();
},
showNextPlayer: function ($this, e) {
e.preventDefault();
e.stopPropagation();
if ($($this).next('.S1000Dfiguregraphic').length > 0) {
open = true
/* logger('st', $('.elCircle'))
$('.elCircle').remove()
logger('st', $('.elCircle'))*/
$($this).next('.S1000Dfiguregraphic').show();
$($this).hide();
//methods.selfDestroy($this);
$($this).imagePlayer('destroy');
//methods.sizeAuto($this.next('.S1000Dfiguregraphic'));
//$($this).imagePlayer('destroy');
$($($this).next('.S1000Dfiguregraphic')).imagePlayer('destroy');
var setts = $($($this).next('.S1000Dfiguregraphic')).find('.localSettingsC').val();
$('tr').css({ 'box-shadow': 'none', '-webkit-box-shadow': 'none', '-moz-box-shadow': 'none' });
//logger('st', $($this).prev())
setts = JSON.parse(setts);
// logger('showNextPlayer', setts);
if (!$($this).hasClass('fullScreen')) {
$($($this).next('.S1000Dfiguregraphic')).imagePlayer({
viewType: 'inline',
url: setts.url,
legend: setts.legend,
legendSpots: setts.legendSpots,
type: setts.type,
viewBox: setts.viewBox,
});
}
else {
$($($this).next('.S1000Dfiguregraphic')).imagePlayer({
viewType: 'fullScreen',
url: setts.url,
legend: setts.legend,
legendSpots: setts.legendSpots,
type: setts.type,
viewBox: setts.viewBox,
});
}
// logger('self destruction', $this);
//logger("$(this).next('.S1000Dfiguregraphic').find('.localSettingsC')",$this.next('.S1000Dfiguregraphic').find('.localSettingsC'));
}
},
showPrevPlayer: function ($this, e) {
e.preventDefault();
e.stopPropagation();
if ($($this).prev('.S1000Dfiguregraphic').length > 0) {
open = true
// logger('prev', $($this).prev('.S1000Dfiguregraphic'));
$($this).prev('.S1000Dfiguregraphic').show();
$($this).hide();
//methods.selfDestroy($this);
$($this).imagePlayer('destroy');
//methods.sizeAuto($this.prev('.S1000Dfiguregraphic'));
$($($this).prev('.S1000Dfiguregraphic')).imagePlayer('destroy');
var setts = $($($this).prev('.S1000Dfiguregraphic')).find('.localSettingsC').val();
$('tr').css({ 'box-shadow': 'none', '-webkit-box-shadow': 'none', '-moz-box-shadow': 'none' });
setts = JSON.parse(setts);
//logger('showPrevPlayer', setts);
if (!$($this).hasClass('fullScreen')) {
$($($this).prev('.S1000Dfiguregraphic')).imagePlayer({
viewType: 'inline',
url: setts.url,
legend: setts.legend,
legendSpots: setts.legendSpots,
type: setts.type,
viewBox: setts.viewBox,
});
}
else {
// logger('here2');
$($($this).prev('.S1000Dfiguregraphic')).imagePlayer({
viewType: 'fullScreen',
url: setts.url,
legend: setts.legend,
legendSpots: setts.legendSpots,
type: setts.type,
viewBox: setts.viewBox,
});
}
// logger('self destruction', $this);
}
},
tryHotShow: function ($this, canvas, settings, e) {
e.preventDefault();
e.stopPropagation();
//logger('settings before save', settings);
//methods.saveSettings($this, settings);
//logger('settings after save', settings);
//var y = window.scrollY;
var setts = $($this).find('.localSettingsC').val();
setts = JSON.parse(setts);
//$this.settings = setts;
settings = setts;
//logger(settings);
var element = $($($this).find('.imagePlayerImg .mainImg')[0]);
var offset = $(canvas).offset();
// logger("e.pageX",e.pageX);
// logger("e.pageY",e.pageY);
// logger("e.pageX",e.pageX - offset.left);
// logger("e.pageY",e.pageY - offset.top);
var svgSize = settings.viewBox.replace('"', '').split(" ");
var clickX = e.pageX - offset.left;
var clickY = e.pageY - offset.top;
// logger('e.pageY', e.pageY);
//logger('offset.top', offset.top);
// logger('scroll', y);
// var viewW = $(canvas).outerWidth();
// var viewH = $(canvas).outerHeight();
// var zoom = parseFloat( $($this).attr('zoom') );
// var left = parseFloat( $($this).attr('posx') );
// var top = parseFloat( $($this).attr('posy') );
// $($this).attr('posXSt',e.pageX);
// $($this).attr('posYSt',e.pageY);
logger('to convert coords', clickX, clickY, parseFloat(svgSize[2]), parseFloat(svgSize[3]), element);
var relCoords = methods.toSvgCoordsExp(clickX, clickY, parseFloat(svgSize[2]), parseFloat(svgSize[3]), element);
//logger("relCoords", relCoords);
forShow = false;
for (var i = 0; i < settings.legend.length; i++) {
logger("checkForCanvasRefClick", methods.checkForCanvasRefClick(settings, settings.legend[i], relCoords.X, relCoords.Y, canvas));
if (methods.checkForCanvasRefClick(settings, settings.legend[i], relCoords.X, relCoords.Y, canvas)) {
//logger(`ПОПАЛ! ${settings.legend[i]}`);
/*if( ($(settings.legend[i]).attr('apsname') == toDraw) || ($(settings.legend[i]).hasClass(toDraw)) || ($(settings.legend[i]).hasClass('hotspot_' + toDraw)) ){
}*/
// logger(settings.legend.length);
for (var k = 0; k < settings.legend.length; k++) {
try {
settings.legendSpots[k].todraw = false;
}
catch (e) {
logger('Error in image hotspot ' + e.name + ":" + e.message);
}
}
// logger('leg', settings.legendSpots[i].todraw);
//if (settings.legend[i].todraw != undefined) {
settings.legendSpots[i].todraw = true;
// }
// logger('true?');
forShow = settings.legend[i];
}
/*else{
settings.legendSpots[i].todraw=false;
}*/
}
// logger('set', setts);
// logger('set', $this);
methods.saveSettings($this, setts);
methods.basicRedrawImageOld($this, canvas);
//убираем тень со всех не кликнутых элементов
if (forShow != false) {
$($this).closest('.S1000Dfigure').find('.S1000DrandomList a').closest('tr').css({ 'box-shadow': 'unset', '-webkit-box-shadow': 'unset', '-moz-box-shadow': 'unset' });
if (settings.type == 'vector') {
//ставим тень если попали по элементу
var links = $($this).closest('.S1000Dfigure').find('.S1000DrandomList a');
for (var k = 0; k < $(links).length; k++) {
// logger('TO DRAW VECTOR', $(forShow).attr('class'));
if ($(forShow)[0].tagName == 'G') {
if ($(forShow).attr('class').includes('Ø') && $(links[k]).attr('name').includes('O') && $(forShow).attr('class').replace('Ø', '') == $(links[k]).attr('name').replace('O', '')) {
$(links[k]).closest('tr').css({ 'box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-webkit-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-moz-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)' });
}
// $(links[k]).closest('tr').css({ 'box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-webkit-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-moz-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)' });
} else if (($(links[k]).attr('name') == $(forShow).attr('class')) || $(links[k]).attr('name') == $(forShow).attr('class').replace('hotspot_', '') || $(links[k]).attr('name') == $(forShow).attr('apsname')) {
//settings.legendSpots[k].todraw=true;
$(links[k]).closest('tr').css({ 'box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-webkit-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-moz-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)' });
}
}
//$($this).closest('.S1000Dfigure').find('.S1000DrandomList a').closest('tr').css({'background-color':'unset'});
} else {
//ставим тень если попали по элементу
var links = $($this).closest('.S1000Dfigure').find('.S1000DrandomList a');
//logger('links 2,3,4 ', links);
for (var k = 0; k < $(links).length; k++) {
// logger('TO DRAW RASTER', forShow);
if ($(links[k]).attr('name') == forShow.applicationstructurename || $(links[k]).attr('name') == forShow.hotspottitle) {
//settings.legendSpots[k].todraw=true;
$(links[k]).closest('tr').css({ 'box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-webkit-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-moz-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)' });
}
}
}
}
// if(settings.type == 'vector'){
// chechForCanvasRefClick(settings, element, relCoords.X, relCoords.Y);
// }
},
checkForCanvasRefClick: function (settings, element, clickX, clickY, canvas) {
if (settings.type == 'vector') {
let xCoord
let yCoord
if ($(element).attr('x') == undefined) {
let transform = $(element).attr('transform')
if (transform != undefined) {
let nums = transform.match(/\((.+?)\)/)
let arrNums = nums[1].split(' ')
xCoord = arrNums[4]
yCoord = arrNums[5]
}
} else {
if (clickX > (parseFloat($(element).attr('x')) - 5) && (clickX < (parseFloat($(element).attr('x')) + 5)) && (clickY > (parseFloat($(element).attr('y')) - 5)) && (clickY < (parseFloat($(element).attr('y')) + 5))) {
xCoord = parseFloat($(element).attr('x'));
yCoord = parseFloat($(element).attr('y'));
}
}
// logger('element xCoord',xCoord);
// logger('element yCoord',yCoord);
if (typeof (xCoord != undefined) && typeof (yCoord != undefined) && (xCoord != null) && (!isNaN(yCoord)) && (!isNaN(xCoord)) && (yCoord != null) && (xCoord != '') && (yCoord != '')) {
if ((clickX > (xCoord - 5)) && (clickX < (xCoord + 5)) && (clickY > (yCoord - 5)) && (clickY < (yCoord + 5))) {
return true;
} else {
return false;
}
} else {
if ($(element).attr('points') != undefined) {
var pts = $(element).attr('points').split(' ');
if (pts.length >= 2) {
var xSumm = 0;
var ySumm = 0;
for (var xind = 0; xind < (Math.floor(pts.length / 2) - 1); xind++) {
xSumm = xSumm + parseFloat(pts[xind * 2]);
}
for (var yind = 0; yind < (Math.floor(pts.length / 2) - 1); yind++) {
ySumm = ySumm + parseFloat(pts[yind * 2 + 1]);
}
xSumm = xSumm / (Math.floor(pts.length / 2) - 1);
ySumm = ySumm / (Math.floor(pts.length / 2) - 1);
if ((clickX > (xSumm - 5)) && (clickX < xSumm + 5) && (clickY > ySumm - 5) && (clickY < ySumm + 5)) {
//logger('ПОПАЛ!', item);
flagCollision = true;
//return true;
}
}
} else {
//logger('element',$(element)[0].childNodes);
var arr = $(element)[0].childNodes;
var flagCollision = false;
arr.forEach(function (item, i, arr) {
//alert( i + ": " + item + " (массив:" + arr + ")" );
if ($(item).attr('points') != undefined) {
var pts = $(item).attr('points').split(' ');
// logger('item points',$(item).attr('points'));
if (pts.length >= 2) {
// logger(clickX + '>' + (parseInt(pts[0]) - 5), (clickX > (parseInt(pts[0]) - 5)? true:false));
// logger(clickX + '<' + (parseInt(pts[0]) + 5), (clickX < (parseInt(pts[0]) + 5))? true:false);
// logger(clickY + '>' + (parseInt(pts[1]) - 5), (clickY > (parseInt(pts[1]) - 5))? true:false);
// logger(clickY + '<' + (parseInt(pts[1]) + 5), (clickY < (parseInt(pts[1]) + 5))? true:false);
//var ctx = canvas.getContext('2d');
// ctx.strokeStyle="#00FF00";
// ctx.moveTo(parseInt(pts[0])-2, parseInt(pts[1]) - 2);
// ctx.lineTo(parseInt(pts[0])+11, parseInt(pts[1])+11);
// ctx.moveTo(parseInt(pts[0])-2, parseInt(pts[1]) + 11);
// ctx.lineTo(parseInt(pts[0])+11, parseInt(pts[1])-2);
// ctx.stroke();
// ctx.moveTo(clickX-2, clickY - 2);
// ctx.lineTo(clickX+11, clickY+11);
// ctx.moveTo(clickX-2, clickY + 11);
// ctx.lineTo(clickX+11, clickY-2);
// ctx.stroke();
var xSumm = 0;
var ySumm = 0;
for (var xind = 0; xind < (Math.floor(pts.length / 2) - 1); xind++) {
xSumm = xSumm + parseFloat(pts[xind * 2]);
}
for (var yind = 0; yind < (Math.floor(pts.length / 2) - 1); yind++) {
ySumm = ySumm + parseFloat(pts[yind * 2 + 1]);
}
xSumm = xSumm / (Math.floor(pts.length / 2) - 1);
ySumm = ySumm / (Math.floor(pts.length / 2) - 1);
if ((clickX > (xSumm - 5)) && (clickX < xSumm + 5) && (clickY > ySumm - 5) && (clickY < ySumm + 5)) {
//logger('ПОПАЛ!', item);
flagCollision = true;
//return true;
}
//tmpAdd = '';
}
}
});
}
if (flagCollision) {
return true;
}
else {
return false;
}
}
}
else {
//RASTER GRAPHIC
var xCoord = parseFloat(element.coords[0]);
var yCoord = parseFloat(element.coords[1]);
//logger(xCoord, yCoord);
if (typeof (xCoord != undefined) && typeof (yCoord != undefined) && (xCoord != null) && (!isNaN(yCoord)) && (!isNaN(xCoord)) && (yCoord != null) && (xCoord != '') && (yCoord != '')) {
var ctx = canvas.getContext('2d');
//logger('ctx',ctx.canvas.width, settings.viewBox, xCoord, yCoord);
//tmpAdd = '';
// logger(clickX + '>' + (xCoord - 5), (clickX > (xCoord - 5)? true:false));
// logger(clickX + '<' + (xCoord + 5), (clickX < (xCoord + 5))? true:false);
// logger(clickY + '>' + (yCoord - 5), (clickY > (yCoord - 5))? true:false);
// logger(clickY + '<' + (yCoord + 5), (clickY < (yCoord + 5))? true:false);
// ctx.strokeStyle="#FF0000";
// ctx.moveTo(xCoord, yCoord );
// ctx.lineTo(xCoord+15, yCoord+15);
// ctx.moveTo(xCoord, yCoord + 15);
// ctx.lineTo(xCoord+15, yCoord);
// ctx.stroke();
// ctx.strokeStyle="#00FF00";
// ctx.moveTo(clickX, clickY);
// ctx.lineTo(clickX+15, clickY+15);
// ctx.moveTo(clickX, clickY + 15);
// ctx.lineTo(clickX+15, clickY);
// ctx.stroke();
if ((clickX > (xCoord)) && (clickX < (xCoord + 15)) && (clickY > (yCoord)) && (clickY < (yCoord + 15))) {
return true;
}
else {
return false;
}
}
}
return (false);
},
toSvgCoordsExp: function (clickX, clickY, svgW, svgH, element) {
// logger('toSvgCoordsExp',clickX, clickY, svgW, svgH, element);
var res = {};
var percClick = {};
var left = parseFloat($(element).css('left'));
var top = parseFloat($(element).css('top'));
var width = $(element).outerWidth();
var height = $(element).outerHeight();
var zoom = width / svgW;
percClick.X = (clickX - left) / width;
percClick.Y = (clickY - top) / height;
res.X = (svgW * percClick.X);
res.Y = (svgH * percClick.Y);
// logger('svg',svgW,svgH);
// logger('percClick.X', percClick.X, 'percClick.Y', percClick.Y);
// logger('res X',res.X,'res Y',res.Y);
return (res);
},
RefClick: function ($this, e) {
e.preventDefault();
e.stopPropagation()
logger('ref');
open = false
var eventElement = e.target;
// logger('ev', eventElement);
var eventElementId = $(eventElement).attr('href');
// eventElementId = eventElementId.split('h');
// eventElementId = eventElementId[0].replace('#','');
var searchName = $(eventElement).attr('name');
var parent = $(eventElement).closest('.S1000Dfigure');
var Arr = $(parent).find('.S1000Dfiguregraphic');
var findedElement = '';
var canMem = true;
$.each(Arr, function (ii, value) {
var findElRes = [];
//logger($(Arr[ii]), '.S1000DHotspot[applicationstructurename="' + searchName + '"]');
findElRes = $(Arr[ii]).find('.S1000DHotspot[applicationstructurename="' + searchName + '"]');
if (findElRes.length > 0 && canMem) {
findedElement = Arr[ii];
canMem = false;
}
});
if (findedElement != '') {
if ($(findedElement).css('display') == 'block') {
var setts = $($this).find('.localSettingsC').val();
// logger(setts);
setts = JSON.parse(setts);
//$this.settings = setts;
var settings = setts;
$('tr').css({ 'box-shadow': 'none', '-webkit-box-shadow': 'none', '-moz-box-shadow': 'none' });
$(e.currentTarget).closest('tr').css({ 'box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-webkit-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)', '-moz-box-shadow': 'inset 0px 0px 5px 1px rgba(30,136,229,0.6)' });
const gettingClass = str => {
let idxStart = str.indexOf('class="')
let firstStr = str.substr(idxStart + 'class="'.length)
let idxSEnd = firstStr.indexOf('"')
return (firstStr.substr(0, idxSEnd))
}
let idElem = ''
if (settings.type == 'vector') {
var toDraw = $(e.currentTarget).closest('tr').find('a').attr('name');
var resElem = [];
logger(settings.legend);
for (var i = 0; i < settings.legend.length; i++) {
if (($(settings.legend[i]).attr('apsname') == toDraw) || ($(settings.legend[i]).hasClass(toDraw)) || ($(settings.legend[i]).hasClass('hotspot_' + toDraw))) {
resElem = $(settings.legend[i]);
logger(resElem);
try {
settings.legendSpots[i].todraw = true;
}
catch (e) {
}
//logger(settings.legendSpots);
//methods.saveSettings($this, settings);
//$('tr').css({ 'box-shadow': 'none', '-webkit-box-shadow': 'none', '-moz-box-shadow': 'none' });
//$(e.currentTarget).closest('tr').css({ 'box-shadow': 'green', '-webkit-box-shadow': 'green', '-moz-box-shadow': 'green' });
logger("SUCCESS FIND OF HOT");
} else if (settings.legend[i].includes(' 0 && canMem){
// findedElement = Arr[ii];
// canMem = false;
// }
// });
var findedElement = $(findElRes).closest('.S1000Dfiguregraphic');
if (findElRes != '' && findElRes != undefined) {
if ($(findedElement).css('display') == 'block') {
var setts = $($this).find('.localSettingsC').val();
setts = JSON.parse(setts);
//$this.settings = setts;
var settings = setts;
if (settings.type == 'vector') {
var toDraw = $(findElRes).attr('applicationstructurename');
var resElem = [];
for (var i = 0; i < settings.legend.length; i++) {
//logger('$(settings.legend[i])',$(settings.legend[i]));
if (($(settings.legend[i]).attr('apsname') == toDraw) || ($(settings.legend[i]).hasClass(toDraw)) || ($(settings.legend[i]).hasClass('hotspot_' + toDraw))) {
resElem = $(settings.legend[i]);
settings.legendSpots[i].todraw = true;
//logger(settings.legendSpots);
//methods.saveSettings($this, settings);
logger("SUCCESS FIND OF HOT");
}
else {
settings.legendSpots[i].todraw = false;
//logger(settings.legendSpots);
//methods.saveSettings($this, settings);
}
}
logger('ss', settings);
methods.saveSettings($this, settings);
}
else {
logger('NOT VECTOR');
logger(settings.legend);
var toDraw = $(findElRes).attr('applicationstructurename');
var resElem = [];
for (var i = 0; i < settings.legend.length; i++) {
//logger('$(settings.legend[i])',$(settings.legend[i]));
if (settings.legend[i].applicationstructurename == toDraw) {
resElem = $(settings.legend[i]);
settings.legendSpots[i].todraw = true;
//logger(settings.legendSpots);
//methods.saveSettings($this, settings);
logger("SUCCESS FIND OF HOT");
}
else {
settings.legendSpots[i].todraw = false;
//logger(settings.legendSpots);
//methods.saveSettings($this, settings);
}
}
methods.saveSettings($this, settings);
}
}
else {
$($this).closest('.S1000Dfigure').find('.S1000Dfiguregraphic').css({ 'display': 'none' });
$(findedElement).css({ 'display': 'block' });
$($this).imagePlayer('destroy');
$(findedElement).imagePlayer('destroy');
var setts = $(findedElement).find('.localSettingsC').val();
setts = JSON.parse(setts);
setts.ready = function ($thisEl, target) {
setTimeout(function () {
$(target).click();
}, 500);
}
logger('show player by HOT ref', setts);
if (!$($this).hasClass('fullScreen')) {
$(findedElement).imagePlayer({
viewType: 'inline',
url: setts.url,
legend: setts.legend,
legendSpots: setts.legendSpots,
type: setts.type,
viewBox: setts.viewBox,
ready: setts.ready($(findedElement), e.target),
});
}
else {
$(findedElement).imagePlayer({
viewType: 'fullScreen',
url: setts.url,
legend: setts.legend,
legendSpots: setts.legendSpots,
type: setts.type,
viewBox: setts.viewBox,
ready: setts.ready($(findedElement), e.target),
});
}
}
}
methods.basicRedrawImageOld($this);
},
drawRefByPath: function ($this, elem, element) {
logger('drawRefByPath', $this, elem, element);
var zoom = $($this).attr('zoom');
var posX = $($this).attr('posX');
var posY = $($this).attr('posY');
var setts = $($this).find('.localSettingsC').val();
setts = JSON.parse(setts);
settings = setts;
var c = {};//canvas parameters
c.width = $($(elem).find('.mainImg')[0]).outerWidth();
c.height = $($(elem).find('.mainImg')[0]).outerHeight();
var i = {};
regex = /viewBox="(.*)\s(.*)\s(.*)\s(.*)"/gm;
var mat = regex.exec(setts.viewBox);
//logger(mat);
i.width = parseFloat(mat[3]);
i.height = parseFloat(mat[4]);
var r = c.width / i.width;
//logger('r', r);
var xCoord = element.coords[0];//element.getAttribute('x');
var yCoord = element.coords[1];//element.getAttribute('y');
//logger('xCoord, yCoord', xCoord, yCoord);
//logger('i.width, i.height', i.width, i.height, setts.viewBox);
if (typeof (xCoord != undefined) && typeof (yCoord != undefined) && (xCoord != null) && (yCoord != null)) {
//tmpAdd = '';
var cx = ((xCoord - 0) / i.width) * c.width;
var cy = ((yCoord - 0) / i.height) * c.height;
var diameter = 15 * r;
tmpAdd = '';
}
$(elem).find('.mainImg').append(tmpAdd);
},
drawRefByElement: function ($this, elem/*элемент для отрисовки главной картинки*/, element) {
// //console.log('this', $this[0]);
// //console.log('elem', elem);
// console.log('element', element);
let coeff
if ($(element).attr('style') == undefined) {
var hotspostyle = $(element).attr('font-size')
coeff = hotspostyle;
coeff = parseInt(coeff);
} else if ($(element).attr('style') != undefined && parseInt($(element).attr('font-size')) <= 1) {
var hotspostyle = $(element).attr('style');
regex = /(?<=font-size:)\d*.\d*/gm;
coeff = parseInt(regex.exec(hotspostyle));
} else if ($(element).attr('style') != undefined && $(element).attr('font-size') != 'NaNpx' && $(element).attr('font-size') != undefined) {
// //console.log($(element).attr('font-size'));
var hotspostyle = $(element).attr('font-size');
coeff = hotspostyle;
coeff = parseInt(coeff);
// //console.log('element', element);
// //console.log(coeff);
// //console.log((element.split('font-size')))
// var hotspostyle = $(element).attr('style');
// regex = /(?<=font-size:)\d*.\d*/gm;
// coeff = parseInt(regex.exec(hotspostyle));
} else {
var hotspostyle = $(element).attr('style');
regex = /(?<=font-size:)\d*.\d*/gm;
coeff = parseInt(regex.exec(hotspostyle));
}
// //console.log(coeff);
// var zoom = $($this).attr('zoom');
// var posX = $($this).attr('posX');
// var posY = $($this).attr('posY');
var setts = $($this).find('.localSettingsC').val();
setts = JSON.parse(setts);
$this.settings = setts;
var c = {};//canvas parameters
c.width = $($(elem).find('.mainImg')[0]).outerWidth();
c.height = $($(elem).find('.mainImg')[0]).outerHeight();
// logger(c);
var i = {};
regex = /viewBox="(.*)\s(.*)\s(.*)\s(.*)"/gm;
var mat = regex.exec(setts.viewBox);
let xCoord = $(element).attr('x');//element.getAttribute('x');
let yCoord = $(element).attr('y');//element.getAttribute('y');
// //console.log(xCoord);
// //console.log(yCoord);
i.width = parseFloat(mat[3]);
i.height = parseFloat(mat[4]);
logger('iw', i.width, i.height);
var xcoeffText = $(element).text().trim();
logger('xcoeffText', xcoeffText);
xcoeff = xcoeffText.length;
let r = c.width / i.width;
let coor = yCoord / i.height * 100
let resY = coor * c.height / 100
if ($(element).attr('x') == undefined && $(element).attr('cx') == undefined) {
let transform = $(element).attr('transform')
if (transform != undefined) {
let nums = transform.match(/\((.+?)\)/)
let arrNums = nums[1].split(' ')
if (xcoeff >= 2) {
xCoord = (arrNums[4] * arrNums[2]) - 3.5
yCoord = arrNums[5] * arrNums[2] - 1
} else {
xCoord = (arrNums[4] * arrNums[2]) - 3
yCoord = arrNums[5] * arrNums[2]
}
}
} else if ($(element).attr('x') == undefined) {
xCoord = $(element).attr('cx');
yCoord = $(element).attr('cy');
}
// //console.log(xCoord);
// //console.log(yCoord);
var tmpAdd = '';
if (typeof (xCoord != undefined) && typeof (yCoord != undefined) && (xCoord != null) && (yCoord != null)) {
//tmpAdd = '';
const onlyLetters = /^[A-Za-zА-Яа-я]+$/.test(xcoeffText)
const lettersAndNumbers = /^[A-Za-zА-Яа-я0-9]+$/.test(xcoeffText)
const onlyNumbers = /^\d+$/.test(xcoeffText)
let cxNum = 0.1
let cyNum = 1.2
let dNum = 0.8
let diff = xcoeff
let cxNumEllipse = 0.5
let cyNumEllipse = 1.4
let cx
let cy
let diameter
let minusNum = 0
let trans = false
if ($(element).attr('x') == undefined && $(element).attr('cx') == undefined) {
trans = true
}
// //console.log(xcoeffText);
const changeParametersCircle = () => {
if (diff - 1 != 1) {
dNum -= 0.1
cyNum += 0.15
cxNum += 0.15
diff -= 1
changeParametersCircle()
} else {
cx = (((xCoord - coeff / xcoeff * cxNum) / i.width) * c.width) - 2
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 2
diameter = coeff * xcoeff * dNum * r + 5;
if (xcoeffText.indexOf('I') != -1) {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - xcoeff
cx = (((xCoord - coeff / xcoeff * cxNum) / i.width) * c.width) - xcoeff - 3
} else if (onlyLetters || xcoeff == 2) {
if (trans == true || xcoeff != 2) {
if (xcoeff == 2 && trans == true) {
} else {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - xcoeff - 7
cx = (((xCoord - coeff / xcoeff * cxNum) / i.width) * c.width) - xcoeff - 7
}
}
}
else if (onlyNumbers) {
if (trans != true || xcoeff == 2) {
diameter = coeff * xcoeff * dNum * r + 3;
} else {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - xcoeff - 7
cx = (((xCoord - coeff / xcoeff * cxNum) / i.width) * c.width) - xcoeff - 7
}
} else if (lettersAndNumbers) {
if (trans == true) {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 15
cx = (((xCoord - coeff / xcoeff * cxNum) / i.width) * c.width) - 8
diameter = coeff * xcoeff * dNum * r + 10
if (xcoeff == 2) {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 10
}
}
} else if (xcoeffText.includes('.') || xcoeffText.includes(',') || xcoeffText.includes('/')) {
if (trans != true) {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 2
if (xcoeff == 3 && xcoeffText.includes('/')) {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 9
diameter = coeff * xcoeff * dNum * r * 4;
} else if (xcoeff == 4 && xcoeffText.includes('/')) {
// //console.log(r);
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 9
cx = (((xCoord - coeff / xcoeff * cxNum) / i.width) * c.width) - 2
diameter = coeff * xcoeff * dNum * r + 12;
}
else if (xcoeff == 4) {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 4
diameter = coeff * xcoeff * dNum * r + 6;
} else {
diameter = coeff * xcoeff * dNum * r + 2;
}
} else {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 10
cx = (((xCoord - coeff / xcoeff * cxNum) / i.width) * c.width) - 7
if (xcoeff == 4) {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 15
diameter = coeff * xcoeff * dNum * r + 6;
} else {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 2
diameter = coeff * xcoeff * dNum * r + 2;
}
}
} else if (xcoeffText.includes(')')) {
if (trans != true) {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 4
} else {
cy = (((yCoord - coeff * cyNum) / i.height) * c.height) - 10
cx = (((xCoord - coeff / xcoeff * cxNum) / i.width) * c.width) - 6
}
diameter = coeff * xcoeff * dNum * r + 10;
} else {
diameter = coeff * xcoeff * dNum * r + 2;
}
}
}
let num1 = 10
let num2 = 40
const changeParametersEllipse = () => {
// logger('diff', diff);
// //console.log(xcoeffText);
if (diff - 1 != 4) {
cyNumEllipse += 0.15
cxNumEllipse += 0.15
diff -= 1
if (minusNum < 7) { minusNum += 1 } else { minusNum = 0 }
num1 += 5
num2 += 10
changeParametersEllipse()
} else {
if (trans != true) {
if (xcoeffText.includes('.') || xcoeffText.includes(',') || xcoeffText.includes('/')) {
cx = (((xCoord - coeff / xcoeff * cxNumEllipse) / i.width) * c.width) - 5
if (xcoeff > 5 && !$($this).hasClass('fullScreen')) {
// //console.log(minusNum);
// cy = (((yCoord - coeff * cyNumEllipse) / i.height) * c.height + minusNum)
cy = (((yCoord - coeff) / i.height) * c.height) - 2
// diameter = coeff * xcoeff //* 0.3 * r;
if (coeff - r > 6) {
coeff = r + 1
cy = (((yCoord - coeff * cyNumEllipse) / i.height) * c.height + minusNum)
}
if (xcoeffText.includes('/')) {
diameter = coeff * xcoeff
} else {
diameter = coeff * r * 2;
}
// //console.log(diameter);
} else if (xcoeff == 5 && xcoeffText.includes('/')) {
cx = (((xCoord - coeff / xcoeff * cxNumEllipse) / i.width) * c.width) - 8
cy = (((yCoord - coeff) / i.height) * c.height) - 5
diameter = coeff * xcoeff
// } else if (xcoeff > 5 && xcoeffText.includes('/')) {
// // cx = (((xCoord - coeff / xcoeff * cxNumEllipse) / i.width) * c.width)
// cy = (((yCoord - coeff) / i.height) * c.height) - 5
// diameter = coeff * xcoeff
// //console.log(diameter);
}
else {
if (xcoeff >= 5 && $($this).hasClass('fullScreen')) {
cx = (((xCoord - coeff / xcoeff * cxNumEllipse) / i.width) * c.width) - 2
}
cy = (((yCoord - coeff) / i.height) * c.height) - 3
// cy = (((yCoord - coeff * cyNumEllipse) / i.height) * c.height)
if (coeff - r > 6) {
coeff = r + 1
cy = (((yCoord - coeff * cyNumEllipse) / i.height) * c.height + minusNum)
}
diameter = coeff * xcoeff //* 0.4 * r;
}
} else if (xcoeffText.includes(')')) {
cy = (((yCoord - coeff * cyNumEllipse) / i.height) * c.height)
diameter = coeff * xcoeff * 0.4 * r + 10;
} else {
cx = (((xCoord - coeff / xcoeff * cxNumEllipse) / i.width) * c.width)
cy = (((yCoord - coeff * cyNumEllipse) / i.height) * c.height)
diameter = coeff * xcoeff * 0.4 * r;
}
} else {
cx = (((xCoord - coeff / xcoeff * cxNumEllipse) / i.width) * c.width) - num1
cy = (((yCoord - coeff * cyNumEllipse) / i.height) * c.height) - num2
diameter = coeff * xcoeff * 0.6 * r;
}
}
}
if (xcoeff == 1) {
if (c.width < i.width) {
r = c.width / i.width;
}
if (onlyLetters) {
// logger(xCoord, coeff, i.width, c.width);
if (xcoeffText === "W" || xcoeffText === "Ш" || xcoeffText === "Щ" || xcoeffText === "Ж") {
cy = (((yCoord - coeff / 0.8) / i.height) * c.height)
cx = (((xCoord - coeff / 3.2) / i.width) * c.width)
} else {
cy = (((yCoord - coeff / 0.8) / i.height) * c.height)
cx = (((xCoord - coeff / 2.5) / i.width) * c.width)
}
diameter = coeff * 1.7 * r;
} else {
cx = (((xCoord - coeff / 2.2) / i.width) * c.width)
cy = (((yCoord - coeff / 0.9) / i.height) * c.height) - 2
diameter = coeff * 1.5 * r + 4;
}
// logger('dr', diameter, r);
} else if (xcoeff > 1 && xcoeff <= 4) {
logger('xcoeff', xcoeff);
changeParametersCircle()
} else if (xcoeff > 4) {
changeParametersEllipse()
} else if (xcoeff == 0) {
//console.log(1);
coeff = $(element).attr('r')
if (coeff == undefined) {
coeff = $(element).attr('rx')
}
cx = (((xCoord - coeff) / i.width) * c.width)
cy = (((yCoord - coeff) / i.height) * c.height)
diameter = coeff * 2 * r;
}
if (trans != true) {
if (xcoeff > 4) {
// //console.log('cx');
tmpAdd = '';
} else {
tmpAdd = '';
}
} else {
if (xcoeff > 4) {
tmpAdd = '';
} else {
tmpAdd = '';
}
}
}
else {
//logger('element', $(element).attr('points'));
// logger('element',$(element)[0].childNodes);
if ($(element).attr('points') != undefined) {
var pts = $(element).attr('points').split(' ');
if (pts.length >= 2) {
var xSumm = 0;
var ySumm = 0;
for (var xind = 0; xind < (Math.floor(pts.length / 2) - 1); xind++) {
xSumm = xSumm + parseFloat(pts[xind * 2]);
}
for (var yind = 0; yind < (Math.floor(pts.length / 2) - 1); yind++) {
ySumm = ySumm + parseFloat(pts[yind * 2 + 1]);
}
xSumm = xSumm / (Math.floor(pts.length / 2) - 1);
ySumm = ySumm / (Math.floor(pts.length / 2) - 1);
//logger(pts.length % 2, xSumm, ySumm);
var cx = ((xSumm - 3.75) / i.width) * c.width;
var cy = ((ySumm - 3.75) / i.height) * c.height;
var diameter = 7.5 * r;
//console.log(12);
tmpAdd = '';
//tmpAdd = '';
}
} else {
var arr = $(element)[0].childNodes;
arr.forEach(function (item, k, arr) {
//alert( i + ": " + item + " (массив:" + arr + ")" );
if ($(item).attr('points') != undefined) {
var pts = $(item).attr('points').split(' ');
if (pts.length >= 2) {
var xSumm = 0;
var ySumm = 0;
for (var xind = 0; xind < (Math.floor(pts.length / 2) - 1); xind++) {
xSumm = xSumm + parseFloat(pts[xind * 2]);
}
for (var yind = 0; yind < (Math.floor(pts.length / 2) - 1); yind++) {
ySumm = ySumm + parseFloat(pts[yind * 2 + 1]);
}
xSumm = xSumm / (Math.floor(pts.length / 2) - 1);
ySumm = ySumm / (Math.floor(pts.length / 2) - 1);
var cx = ((xSumm - 3.75) / i.width) * c.width;
var cy = ((ySumm - 3.75) / i.height) * c.height;
var diameter = 7.5 * r;
//console.log(1);
tmpAdd = '';
// tmpAdd = '';
}
}
});
}
}
// //console.log(tmpAdd);
$(elem).find('.mainImg').append(tmpAdd);
},
redrawAllRefs: function ($this, element, e) {
var setts = $($this).find('.localSettingsC').val();
setts = JSON.parse(setts);
settings = setts;
// //console.log('redrawAllRefs', settings);
// //console.log($this);
//methods.basicRedrawImageOld($this);
$(element).find('.elCircle').remove();
if (!settings.shawAllRefs) {
var resElem = [];
//logger('redrawRefs settings', $this.settings);
if (settings.type == 'vector') {
//logger('$(resElem[0])',resElem[0]);
if (settings.legend.length > 0) {
//logger('$(resElem[0])',resElem[0]);
var arr = settings.legend;
arr.forEach(function (item, i, arr) {
methods.drawRefByElement($this, element, item);
});
// for (var i = 0; i < settings.legend.length; i++) {
// //logger('resElem[i]',$(resElem[i]));
// var drawUrl = methods.drawRefByElement($this, element, settings.legend[i]);
// //logger(drawUrl);
// }
}
}
else {
logger('DRAW HOT FOR RASTER');
if (settings.legend.length > 0) {
//logger('$(resElem[0])',resElem[0]);
var arr = settings.legend;
arr.forEach(function (item, i, arr) {
methods.drawRefByPath($this, element, item);
});
// for (var i = 0; i < settings.legend.length; i++) {
// //logger('resElem[i]',settings.legend[i]);
// methods.drawRefByPath($this, element, settings.legend[i]);
// //logger(drawUrl);
// }
//methods.drawRefByUrl($this, canvas, toDrawUrl);
}
}
settings.shawAllRefs = true;
methods.saveSettings($this, settings);
} else {
settings.shawAllRefs = false;
methods.saveSettings($this, settings);
}
},
redrawRefs: function ($this, element) {
//logger("element", element);
//logger('redraw');
var setts = $($this).find('.localSettingsC').val();
logger(setts);
// logger($($this).find('.localSettingsC').val());
$(element).find('.elCircle').remove();
setts = JSON.parse(setts);
$this.settings = setts;
var settings = setts;
var resElem = [];
if (settings.type == 'vector') {
//var toDraw = $(e.currentTarget).closest('tr').find('a').attr('name');
for (var i = 0; i < settings.legendSpots.length; i++) {
if (settings.legendSpots[i].todraw == true) {
resElem.push(settings.legend[i]);
}
}
//logger('$(resElem[0])',resElem[0]);
if (resElem.length > 0) {
//logger('$(resElem[0])',resElem[0]);
for (var i = 0; i < resElem.length; i++) {
// logger('resElem[i]',$(resElem[i]));
logger($this, element, resElem[i]);
methods.drawRefByElement($this, element, resElem[i]);
//logger(drawUrl);
}
}
}
else {
for (var i = 0; i < settings.legendSpots.length; i++) {
//logger('$(settings.legend[i])',$(settings.legend[i]));
if (settings.legendSpots[i].todraw == true) {
resElem.push(settings.legend[i]);
}
}
//logger('$(resElem[0])',resElem[0]);
if (resElem.length > 0) {
//logger('$(resElem[0])',resElem[0]);
for (var i = 0; i < resElem.length; i++) {
//logger('resElem[i]',$(resElem[i]));
methods.drawRefByPath($this, element, resElem[i]);
//logger(drawUrl);
}
}
}
/*else{
//var toDraw = $(e.currentTarget).closest('tr').find('a').attr('name');
//logger('DRAW HOT FOR RASTER');
for (var i = 0; i < settings.legendSpots.length; i++) {
if(settings.legendSpots[i].todraw == true){
resElem.push( settings.legend[i]);
}
}
//logger('$(resElem[0])',resElem[0]);
if(resElem.length > 0){
//logger('$(resElem[0])',resElem[0]);
for (var i = 0; i < resElem.length; i++) {
//logger('resElem[i]',resElem[i]);
methods.drawRefByPath($this, element, resElem[i]);
//logger(drawUrl);
}
//methods.drawRefByUrl($this, canvas, toDrawUrl);
}
}*/
},
clickToggleMap: function ($this, element, e) {
e.preventDefault();
e.stopPropagation();
$(element).toggle();
$(element).css({ 'width': ($(element).prev().outerWidth() / 6) + 'px', 'height': ($(element).prev().outerHeight() / 6) + 'px' });
// $('.elCircle').css({ 'border': "0px" })
// $('tr').css({ 'box-shadow': 'none', '-webkit-box-shadow': 'none', '-moz-box-shadow': 'none' });
/*var ctx = canvas.getContext('2d');
ctx.canvas.width = $(canvas).prev().prev().prev().outerWidth();
ctx.canvas.height = $(canvas).prev().prev().prev().outerHeight();
if($(canvas).css('display') == 'block'){
methods.renderMap($this);
}*/
if ($(element).css('display') == 'block') {
methods.renderMap($this);
}
},
renderMap: function ($this) {
logger('render');
var zoom = $($this).attr('zoom');
var posX = $($this).attr('posX') / 6;
var posY = $($this).attr('posY') / 6;
//imagePlayerMapCanvas">';
//$($this).find('.elCircle').remove;
// methods.basicRedrawImageOld($this);
$('body').append('');
$($this).parent().clone().appendTo('.popupWindowFull .popupImagePlayer');
for (var i = 0; i < $('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic').length; i++) {
if ($($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).css('display') != 'none') {
$($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).attr('canpan', false);
$($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).imagePlayer('destroy');
var setts = $($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).find('.localSettingsC').val();
//logger(setts);
setts = JSON.parse(setts);
//logger('setts to fullScreen', setts);
setts.viewType = 'fullScreen';
//logger('inside');
// methods.tryHotShow($($this), $($this).find("canvas")[0], settings, e);
//logger('fullScreen initial setts', setts);
$($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).find('.localSettingsC').val(JSON.stringify(setts));
/* let event = new Event("click");
logger('e', e);
methods.RefClick($('.S1000Dfiguregraphic init fullScreen initFull', e))*/
$($('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic')[i]).imagePlayer({
viewType: 'fullScreen',
url: setts.url,
legend: setts.legend,
legendSpots: setts.legendSpots,
type: setts.type,
viewBox: setts.viewBox,
spots: setts.spots,
name: setts.name,
size: setts.size,
redline: false,
canResize: false,
tearWindow: false,
target: { x: 0, y: 0, show: false },
shawAllRefs: false,
});
}
}
}
else {
$('.popupWindowFull .popupImagePlayer .S1000Dfiguregraphic').imagePlayer('destroy');
$('body .popupWindowFull').remove();
}
$('tr').css({ 'box-shadow': 'none', '-webkit-box-shadow': 'none', '-moz-box-shadow': 'none' });
},
resize: function ($this, tmpCanvas, e) {
e.preventDefault();
e.stopPropagation();
logger('resize');
var delta = e.originalEvent.deltaY;
//var canvas = tmpCanvas;
if (delta > 0) {//scroll down
//logger('scroll down');
if ($($this).attr('zoom') > 0.1) {
$($this).attr('zoom', ($($this).attr('zoom') * 0.95).toFixed(3));
}
} else {//scroll up
//logger('scroll up');
$($this).attr('zoom', ($($this).attr('zoom') / 0.95).toFixed(3));
}
methods.basicRedrawImageOld($this);
if ($($($this).find(".imagePlayerMapCanvas")[0]).css('display') == 'block') {//если отображается миникарта - перерисовать её
methods.renderMap($this);
}
if (open == true) {
logger('nie');
$('.elCircle').remove()
}
},
panClick: function ($this, element, e) {
e.preventDefault();
e.stopPropagation();
logger('PAN CLICK');
if (e.which != 1) { // если клик правой кнопкой мыши
return; // то он не запускает перенос
} else {
open = false
}
//logger('startPan', e.pageX, e.pageY);
$($this).attr('posxst', e.pageX);
$($this).attr('posyst', e.pageY);
$($this).attr('canpan', true);
},
pan: function ($this, element, e) {
e.preventDefault();
// e.stopPropagation();
//var canvas = tmpCanvas;
if ($($this).attr('canpan') == 'true') {
// logger('PAN', e.pageX - parseFloat($($this).attr('posxst')), e.pageY - parseFloat($($this).attr('posyst')));
var moveX = e.pageX - parseFloat($($this).attr('posxst'));
var moveY = e.pageY - parseFloat($($this).attr('posyst'));
$($this).attr('posxst', e.pageX);
$($this).attr('posyst', e.pageY);
$($this).attr('posx', (parseFloat($($this).attr('posx')) + moveX));
$($this).attr('posy', (parseFloat($($this).attr('posy')) + moveY));
methods.basicRedrawImageOld($this);
if ($($($this).find(".imagePlayerMapCanvas")[0]).css('display') == 'block') {//если отображается миникарта - перерисовать её
methods.renderMap($this);
}
}
else {
//logger('cantMove');
return false;
}
},
stopPan: function ($this, element, e) {
e.preventDefault();
e.stopPropagation();
//logger('stopPan');
//logger('CAN NOT PAN', $($this));
$($this).attr('canpan', false);
$($this).off('mousemove', ".imagePlayer canvas.imagePlayerCanvas", methods.pan);
// чтобы не появлялся кружок при нажатие на посторонние элементы
// methods.basicRedrawImageOld($this);
//$($($this).find(".imagePlayer")).unbind('mousedown mousemove');
if ($($($this).find(".imagePlayerMapCanvas")[0]).css('display') == 'block') {//если отображается миникарта - перерисовать её
methods.renderMap($this);
}
return;
},
canvasFirstRender: function ($this, tmpCanvas, settings) {
var element = $($this).find('.imagePlayerImg');
// logger('element', element);
var imgImg = $($this).find('.imagePlayerImg .mainImg');
var left = ($(element).outerWidth() - $(imgImg).outerWidth()) / 2;
var top = 0;
var canvas = tmpCanvas;
//$(canvas).css({"width":"100%"});
var c = {};//canvas parameters
c.width = $(canvas).outerWidth();
c.height = $(canvas).outerHeight();
//logger('canvas',c);
var ctx = canvas.getContext('2d');
/*var img = new Image(); // Новый объект
img.crossOrigin = "anonymous";
img.src = settings.url;
settings.img = img;
$($this).img = img;*/
ctx.canvas.width = c.width;
ctx.canvas.height = c.height;
// чтобы при переключении вперед назад - ничего не было выделено
methods.basicDrawOld(element[0], imgImg[0], left, top, $(imgImg).outerWidth(), $(imgImg).outerHeight(), $this, settings);
},
destroy: function () {
var $this = $(this);
//open = false
/*return this.each(function() {
var $this = $(this);
$($this).find("*").unbind().off().removeData();
$($this).find(".imagePlayer")[0].remove();
});*/
$($this).off('click', ".imagePlayerNext", methods.showNextPlayer);
$($this).off('click', ".imagePlayerPrev", methods.showPrevPlayer);
$($this).find(".imagePlayerNext").unbind('click');
$($this).find(".imagePlayerPrev").unbind('click');
//полный экран
$($this).off('click', ".imagePlayerFullscreen", methods.fullScreen);
//все хоты
$($this).off('click', ".imagePlayerHotspots", methods.redrawAllRefs);
$($this).find(".imagePlayerHotspots").unbind('click');
//рестарт плеера
$($this).off('click', ".resetPlayer", methods.reinit);
$($this).parent().off('click', ".S1000DIntRefHotspot", methods.RefClick);
//проверка на хот по наведению
$($this).off('mouseenter', ".imagePlayer canvas.imagePlayerCanvas", methods.tryHotHoverSetOnmove);
$($this).off('mouseleave', ".imagePlayer canvas.imagePlayerCanvas", methods.tryHotHoverUnsetOnmove);
//проверка на наличие хота под курсором по клику
$($this).off('mousedown', ".imagePlayer canvas.imagePlayerCanvas", methods.tryHotShow);
$($this).off('mousedown', ".imagePlayer canvas.imagePlayerCanvas", methods.panClick);
$($this).off('mousemove', ".imagePlayer canvas.imagePlayerCanvas", methods.pan);
//панорамирование
$($this).off('wheel', ".imagePlayer canvas.imagePlayerCanvas", methods.resize);
$('body').off('mouseup', '.popupWindowFull', methods.stopPan);
//рисовалка
$($this).off('click', ".imagePlayerDrawer", methods.drawOnScreen);
$($this).off('mousedown', ".imagePlayer canvas.imagePlayerDrawingCanvas", methods.startDraw);
$($this).off('mousemove', ".imagePlayer canvas.imagePlayerDrawingCanvas", methods.drawingLine);
$('body').off('mouseup', methods.stopDraw);
//таргет
$($this).off('click', ".imagePlayerTarget", methods.targetOnScreen);
$($this).off('mousedown', ".imagePlayer canvas.imagePlayerTargetCanvas", methods.setTarget);
//миникарта
$($this).off('click', ".imagePlayerTear", methods.clickToggleMap);
//показать или спрятать легенду
$($this).off('click', ".imagePlayerLegend", methods.switchLegend);
$($this).find("*").unbind().off();
$($this).find(".imagePlayer").remove();
//$(this).removeClass('init');
$($this).closest('.S1000Dfigure').removeClass('imagePlayer-init');
},
selfDestroy: function ($this) {
logger('selfDestroy');
/*return this.each(function() {
var $this = $(this);
$($this).find("*").unbind().off().removeData();
$($this).find(".imagePlayer")[0].remove();
});*/
$($this).off('click', ".imagePlayerNext", methods.showNextPlayer);
$($this).off('click', ".imagePlayerPrev", methods.showPrevPlayer);
//полный экран
$($this).off('click', ".imagePlayerFullscreen", methods.fullScreen);
//все хоты
$($this).off('click', ".imagePlayerHotspots", methods.redrawAllRefs);
//рестарт плеера
$($this).off('click', ".resetPlayer", methods.reinit);
$($this).parent().off('click', ".S1000DIntRefHotspot", methods.RefClick);
//проверка на хот по наведению
$($this).off('mouseenter', ".imagePlayer canvas.imagePlayerCanvas", methods.tryHotHoverSetOnmove);
$($this).off('mouseleave', ".imagePlayer canvas.imagePlayerCanvas", methods.tryHotHoverUnsetOnmove);
//проверка на наличие хота под курсором по клику
$($this).off('mousedown', ".imagePlayer canvas.imagePlayerCanvas", methods.tryHotShow);
$($this).off('mousedown', ".imagePlayer canvas.imagePlayerCanvas", methods.panClick);
$($this).off('mousemove', ".imagePlayer canvas.imagePlayerCanvas", methods.pan);
//панорамирование
$($this).off('wheel', ".imagePlayer canvas.imagePlayerCanvas", methods.resize);
$('body').off('mouseup', '.popupWindowFull', methods.stopPan);
//рисовалка
$($this).off('click', ".imagePlayerDrawer", methods.drawOnScreen);
$($this).off('mousedown', ".imagePlayer canvas.imagePlayerDrawingCanvas", methods.startDraw);
$($this).off('mousemove', ".imagePlayer canvas.imagePlayerDrawingCanvas", methods.drawingLine);
$('body').off('mouseup', methods.stopDraw);
//таргет
$($this).off('click', ".imagePlayerTarget", methods.targetOnScreen);
$($this).off('mousedown', ".imagePlayer canvas.imagePlayerTargetCanvas", methods.setTarget);
//миникарта
$($this).off('click', ".imagePlayerTear", methods.clickToggleMap);
//показать или спрятать легенду
$($this).off('click', ".imagePlayerLegend", methods.switchLegend);
$($this).find("*").unbind().off();
$($this).find(".imagePlayer").remove();
$($this).closest('.S1000Dfigure').removeClass('imagePlayer-init');
},
reinit: function ($this) {
logger('REINIT $this', $this);
var setts = $($this).find('.localSettingsC').val();
setts = JSON.parse(setts);
for (var index = 0; index < setts.legendSpots.length; index++) {
setts.legendSpots[index] = { todraw: false };
}
setts.shawAllRefs = false;
methods.saveSettings($this, setts);
// logger('REINIT',setts);
// logger('SETTINGS',$($this).find('.localSettingsC').val());
$($this).attr('posx', 0);
$($this).attr('posy', 0);
$($this).attr('zoom', 1);
var allCanvas = $($this).find('canvas');
for (var i = 1; i < allCanvas.length; i++) {
$(allCanvas[i]).hide();
}
// methods.basicRedrawImageOld($this);
var element = $($this).find('.imagePlayerImg')[0];
//logger('element',element);
var img = $($this).find('.imagePlayerImg .mainImg')[0];
$($this).attr('posx', ($(element).outerWidth() - $(img).outerWidth()) / 2);
methods.basicRedrawImageOld($this);
$('tr').css({ 'box-shadow': 'none', '-webkit-box-shadow': 'none', '-moz-box-shadow': 'none' });
},
basicDrawOld: function (element, img, coordX, coordY, imgW, imgH, $this, settings) {
/* if ($(this).hasClass('fullScreen') && !$($this).hasClass('initFull')) {
logger('logg');
//чтобы не отображалось при закрытии
methods.basicRedrawImageOld($this);
}*/
coordX = typeof coordX !== 'undefined' ? coordX : 0;
coordY = typeof coordY !== 'undefined' ? coordY : 0;
imgW = typeof imgW !== 'undefined' ? imgW : false;
imgH = typeof imgH !== 'undefined' ? imgH : false;
$this = typeof $this !== 'undefined' ? $this : false;
settings = typeof settings !== 'undefined' ? settings : JSON.parse($($this).find('.localSettingsC').val());
element = typeof element !== 'undefined' ? element : $($this).find('.imagePlayerImg');
logger('canvas draw');
//logger('basicDrawOld', element, img, coordX, coordY, imgW, imgH, $this, settings);
if (imgW != 'auto' && $(element).outerWidth() > imgW) {
//coordX = ($(element).outerWidth() - imgW)/2;
$($this).attr('posx', coordX);
}
if (imgH == 'auto' || imgW == 'auto') {
if (imgH == 'auto') {
$(img).css({ 'left': coordX, 'top': coordY, 'width': imgW, 'height': 'auto' });
}
if (imgW == 'auto') {
$(img).css({ 'left': coordX, 'top': coordY, 'width': 'auto', 'height': imgH });
}
}
else {
$(img).css({ 'left': coordX, 'top': coordY, 'width': imgW, 'height': imgH });
$('.elCircle').remove()
}
},
basicRedrawImageOld: function ($this) {
logger('basicRedrawImageOld');
// //console.log($this);
//var canvas = tmpCanvas;
var zoom = $($this).attr('zoom');
var posX = $($this).attr('posx');
var posY = $($this).attr('posy');
var sett = methods.readSettings($this);
//$($this).find('.imagePlayerImg').css({"width":"100%"});
logger($($this).find('.imagePlayerImg'));
var element = $($this).find('.imagePlayerImg')[0];
// //console.log($($this).find('.imagePlayerImg')[0]);
var img = $($this).find('.imagePlayerImg .mainImg')[0];
var c = {};//canvas parameters
c.width = sett.basicWidth;
c.height = sett.basicHeight;
methods.basicDrawImageOld(element, img,
parseFloat($($this).attr('posx')) - ((zoom * c.width - c.width) / 2),
parseFloat($($this).attr('posy')) - ((zoom * c.height - c.height) / 2),
zoom * c.width,
zoom * c.height,
$this);
methods.redrawRefs($this, element);
if (sett.shawAllRefs) {
// redrawAllRefs()
var resElem = [];
//logger('redrawRefs settings', $this.settings);
if (sett.type == 'vector') {
//logger('$(resElem[0])',resElem[0]);
if (sett.legend.length > 0) {
//logger('$(resElem[0])',resElem[0]);
for (var i = 0; i < sett.legend.length; i++) {
//logger('resElem[i]',$(resElem[i]));
methods.drawRefByElement($this, element, sett.legend[i]);
//logger(drawUrl);
}
}
}
}
},
basicDrawImageOld: function (element, img, coordX, coordY, imgW, imgH, $this, settings) {
coordX = typeof coordX !== 'undefined' ? coordX : 0;
coordY = typeof coordY !== 'undefined' ? coordY : 0;
imgW = typeof imgW !== 'undefined' ? imgW : false;
imgH = typeof imgH !== 'undefined' ? imgH : false;
$this = typeof $this !== 'undefined' ? $this : false;
settings = typeof settings !== 'undefined' ? settings : JSON.parse($($this).find('.localSettingsC').val());
element = typeof element !== 'undefined' ? element : $($this).find('.imagePlayerImg');
// logger('basicDrawImageOld', coordX, coordY, imgW, imgH);
if (imgH == 'auto' || imgW == 'auto') {
if (imgH == 'auto') {
$(img).css({ 'left': coordX, 'top': coordY, 'width': imgW, 'height': 'auto' });
}
if (imgW == 'auto') {
$(img).css({ 'left': coordX, 'top': coordY, 'width': 'auto', 'height': imgH });
}
}
else {
$(img).css({ 'left': coordX, 'top': coordY, 'width': imgW, 'height': imgH });
}
},
saveSettings: function ($this, settings) {
var setts = $($this).closest('.S1000Dfiguregraphic').find('.localSettingsC').val();
// logger("$($this).find('.localSettingsC').val()", $($this).closest('S1000Dfiguregraphic').find('.localSettingsC'));
setts = JSON.parse(setts);
// logger('js', setts);
setts = $.extend({}, setts, settings);
setts = JSON.stringify(setts);
$($this).closest('.S1000Dfiguregraphic').find('.localSettingsC').val(setts);
//logger("$($this).find('.localSettingsC').val()", $($this).closest('S1000Dfiguregraphic').find('.localSettingsC').val(setts));
},
readSettings: function ($this) {
var setts = $($this).find('.localSettingsC').val();
//logger('read settings',$($this).find('.localSettingsC').val());
//logger(setts);
setts = JSON.parse(setts);
// //console.log(setts);
return setts;
},
update: function ($this) {
// logger($(this));
// logger($($this));
},
initiatePlayerSize: function ($this, settings, overloadSizes) {
// //console.log($this[0]);
$($this).find('canvas').css({ 'width': '100%' });
var cWidth = $($($this).find('canvas')[0]).outerWidth();
$($($this).find('.imagePlayerImg')[0]).css({ 'width': cWidth + 'px' });
var real = {};
var vw = window.innerWidth;
var vh = window.innerHeight;
//logger('window.innerWidth, window.innerHeight', window.innerWidth, window.innerHeight);
var maxHeight = vh / 2;
var maxWidth = cWidth;
regex = /viewBox="(.*)\s(.*)\s(.*)\s(.*)"/gm;
var mat = regex.exec(settings.viewBox);
//logger('viewBox from settings', settings.viewBox, parseFloat(mat[3]), parseFloat(mat[4]));
if ($($this).hasClass('fullScreen')) {
$('.imagePlayerMapCanvas').css({ 'background-color': 'white' })
maxHeight = $($this).outerHeight() - $($($this).find('.imagePlayerSettingsPanel')[0]).outerHeight();
$($this).find('canvas').css({ 'height': maxHeight + 'px' });
$($($this).find('.imagePlayerImg')[0]).css({ 'height': maxHeight + 'px' });
}
if (!overloadSizes) {
// $('tr').css({ 'box-shadow': 'none', '-webkit-box-shadow': 'none', '-moz-box-shadow': 'none' });
//logger('NATURAL W & H', $($this).find('.imagePlayerImg img')[0], $($this).find('.imagePlayerImg img')[0].naturalWidth, $($this).find('.imagePlayerImg img')[0].naturalHeight);
if ($($this).find('.imagePlayerImg img')[0].naturalWidth != undefined && $($this).find('.imagePlayerImg img')[0].naturalWidth != 0
&& $($this).find('.imagePlayerImg img')[0].naturalHeight != undefined && $($this).find('.imagePlayerImg img')[0].naturalHeight != 0) {
real.width = $($this).find('.imagePlayerImg img')[0].naturalWidth;
real.height = $($this).find('.imagePlayerImg img')[0].naturalHeight;
}
else {
real.width = $($($this).find('.imagePlayerImg img')[0]).outerWidth();
real.height = $($($this).find('.imagePlayerImg img')[0]).outerHeight();
}
/*if(settings.viewBox == 'viewBox="0 0 0 0"'){
settings.viewBox = 'viewBox="0 0 '+ real.width + ' ' + real.height +'"';
}*/
}
else {
real.width = cWidth;
var tmpW = parseFloat(mat[3]);
var tmpH = parseFloat(mat[4]);
var r = real.width / tmpW;
real.height = tmpH * r;
}
//logger(mat);
var i = {};
i.width = real.width;
i.height = real.height;
// logger('max sizes', maxWidth, maxHeight);
// logger('i.width, i.height', i.width, i.height);
//var relCanvas = maxWidth/maxHeight;
//var relI = i.width/i.height;
//logger('rel sizes', relCanvas, relI);
var res = {};
var rel = maxWidth / i.width;
res.real = real;
if (i.height * rel <= maxHeight) {
//logger('i.height * rel <= maxHeight', i.height * rel, maxHeight);
res.width = maxWidth;
//var tmp = maxWidth / i.width;
res.height = i.height * rel;
}
else {
res.height = maxHeight;
var tmp = maxHeight / i.height;
res.width = i.width * tmp;
//logger('i.height * rel > maxHeight', maxHeight, maxHeight / i.height, i.width * tmp);
}
//logger('real',real);
//window content area sizes
//logger('initial size', res);
return res;
//var maxWidth = cWidth;
/*if($($($this).find('.imagePlayerImg img')[0]).outerHeight() > maxHeight && !$(this).hasClass('fullScreen')){
$($($this).find('.imagePlayerImg img')[0]).css({'height': maxHeight+'px', 'width': 'auto'});
}*/
// var initWidth = $($($this).find('.imagePlayerImg img')[0]).outerWidth();
// var initHeight = $($($this).find('.imagePlayerImg img')[0]).outerHeight();
//$($this).find('.imagePlayerImg').css({'width': initWidth+'px', 'height': initHeight+'px'});
//$($this).find('canvas').css({'height': initHeight+'px'});
},
setPlayerSize: function ($this, xSize, ySize) {
//logger('setPlayerSize',$this, xSize, ySize);
if ($($this).hasClass('fullScreen')) {
maxHeight = $($this).outerHeight() - $($($this).find('.imagePlayerSettingsPanel')[0]).outerHeight();
$($this).find('canvas').css({ 'height': maxHeight + 'px' });
$($($this).find('.imagePlayerImg')[0]).css({ 'height': maxHeight + 'px' });
$($($this).find('.imagePlayerImg .mainImg')[0]).css({ 'height': ySize + 'px', 'width': xSize + 'px' });
}
else {
$($this).find('canvas').css({ 'width': '100%', 'height': ySize + 'px' });
$($this).find('.imagePlayerImg').css({ 'width': '100%', 'height': ySize + 'px' });
$($($this).find('.imagePlayerImg .mainImg')[0]).css({ 'height': ySize + 'px', 'width': xSize + 'px' });
}
//logger($($($this).find('.imagePlayerImg .mainImg')[0]));
},
eventsList: function (element) {
// В разных версиях jQuery список событий получается по-разному
var events = element.data('events');
if (events !== undefined) return events;
events = $.data(element, 'events');
if (events !== undefined) return events;
events = $._data(element, 'events');
if (events !== undefined) return events;
events = $._data(element[0], 'events');
if (events !== undefined) return events;
return false;
},
checkEvent: function (element, eventname) {
var events,
ret = false;
events = eventsList(element);
if (events) {
$.each(events, function (evName, e) {
if (evName == eventname) {
ret = true;
}
});
}
return ret;
},
/* forBtn(){
$('button[imagePlayerSettingsButton imagePlayerHotspots active]').attr('imagePlayerSettingsButton imagePlayerHotspots active', 'imagePlayerSettingsButton imagePlayerHotspots')
}*/
};
$.fn.imagePlayer = function (method) {
//logger('imagePlayer вызван');
logger('method', method);
//logger('this', this);
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
}
else if (typeof method === 'object' || !method) {
logger('инициализация');
logger('arguments', arguments);
return methods.init.apply(this, arguments);
}
else {
$.error('Метод с именем ' + method + ' не существует для jQuery.imagePlayer');
}
};
})(jQuery);