(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).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);