1/*ÐÐÐУÐЬ ÐСÐÐЫÐÐЮЩÐÐÐ ÐÐÐÐ + ÐÐÐÐÐ ÐÐ "PERFECT FLOAT WINDOW" 2=========================================================== 3веÑÑÐ¸Ñ 1.3.1 4 - доÑабоÑана ÑÑнкÑÐ¸Ñ plFW.showGallery(elem) Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð° галеÑеи каÑÑинок, Ð½Ð°Ñ Ð¾Ð´ÑÑÐ¸Ñ ÑÑ Ð²Ð½ÑÑÑи ÑлеменÑа Ñ Ð¿ÐµÑедаваемÑм в ÑÑнкÑÐ¸Ñ id 5веÑÑÐ¸Ñ 1.3 6 - вÑе ÑÑнкÑии вÑплÑваÑÑего окна пеÑÐµÐ²ÐµÐ´ÐµÐ½Ñ Ð² обÑÐµÐºÑ plFW 7 - добавлена возможноÑÑÑ Ð¾ÑклÑÑиÑÑ Ð·Ð°ÐºÑÑÑие пÑи нажаÑии на Ñон (closeByBackground) 8 - добавлена возможноÑÑÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ñдвиг ÑенÑÑиÑованнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² пÑи оÑкÑÑÑии окна (fixScrollBars) 9 - макÑималÑнÑе и минималÑнÑе ÑазмеÑÑ Ð¸Ð·Ð¾Ð±Ñажений вÑнеÑÐµÐ½Ñ Ð² ÑвойÑÑва обÑекÑа plFW 10 - добавлена ÑÑнкÑÐ¸Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑиÑÐ¸Ð½Ñ Ð¿Ð¾Ð»Ð¾ÑÑ Ð¿ÑокÑÑÑки getSbWidth() 11 - добавлено ÑобÑÑие onChangeImg 12веÑÑÐ¸Ñ 1.2 13 - иÑпÑавлено повÑоÑное оÑкÑÑÑие окна пÑи Ñже имеÑÑимÑÑ 14 - Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ Ð¸ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе ÑÑандаÑÑнÑе ÑÑили ÑлеменÑов ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ 15//-------------------------------------------------------*/ 16//ÐалеÑÐµÑ 17window.plFWGallery = { 18 imgs: [],//ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ 19 alts: [],//ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ 20 curimg: -1,//ТекÑÑее изобÑажение 21 clear: function(){//ÐÑиÑÑка маÑÑивов 22 this.imgs = []; 23 this.alts = []; 24 }, 25 img: function(){//ÐолÑÑение ÑекÑÑего изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ 26 return this.imgs[this.curimg]; 27 }, 28 alt: function(){//ÐолÑÑение ÑекÑÑего Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ 29 return this.alts[this.curimg]; 30 }, 31 add: function(elem){//Ðобавление ÑлеменÑа 32 this.imgs.push(jQuery(elem).attr('data-fullimage')); 33 this.alts.push(jQuery(elem).attr('alt')); 34 }, 35 init: function(){//ÐниÑиализаÑÐ¸Ñ Ð²ÑплÑваÑÑего окна Ð´Ð»Ñ Ð³Ð°Ð»ÐµÑеи и каÑÑинок 36 jQuery('.plFW_image').each(function(){ 37 if (!jQuery(this).hasClass('finished')) {//ÐаÑÑинки (оÑделÑнÑе) 38 jQuery(this).on('click', function() { 39 plFW.showImage(jQuery(this).attr('data-fullimage'), jQuery(this).attr('alt')); 40 }); 41 jQuery(this).addClass('finished'); 42 } 43 }); 44 jQuery('.plFW_gallery').each(function(){//ÐаÑÑинки (галеÑеÑ) 45 if (!jQuery(this).hasClass('finished')) { 46 jQuery(this).on('click', function() { 47 if (jQuery(this).closest('.plFW_gallery_group').length > 0) 48 plFW.showGallery(jQuery(this).closest('.plFW_gallery_group'), jQuery(this).attr('data-fullimage')) 49 else plFW.showGallery(jQuery(this).attr('data-fullimage'), jQuery('body')); 50 }); 51 jQuery(this).addClass('finished'); 52 } 53 }); 54 jQuery(window).unbind('keydown'); 55 jQuery(window).keydown(function(event){//СобÑÑÐ¸Ñ Ð½Ð°Ð¶Ð°ÑÐ¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñ 56 if (jQuery('div').is('.plFW_window')){//ÐÑли еÑÑÑ Ð²ÑплÑваÑÑее окно 57 if (event.keyCode === 27)//esc 58 plFW.close(); 59 }; 60 if (jQuery('div').is('.plFW_slidebutton')){//ÐÑли еÑÑÑ Ð¾ÐºÐ½Ð¾ Ñо ÑлайдÑÐ¾Ñ 61 if (event.keyCode === 39)//СÑÑелка впÑаво 62 jQuery('.plFW_slideright').click(); 63 if (event.keyCode === 37)//СÑÑелка влево 64 jQuery('.plFW_slideleft').click(); 65 }; 66 }); 67 } 68}; 69//-------------------------------------------------------------------- 70//ÐÑплÑваÑÑее окно 71window.plFW = { 72 closeByBackground: true,//ÐозможноÑÑÑ Ð·Ð°ÐºÑÑÑÑ Ð¾ÐºÐ½Ð¾ нажаÑием на Ñон 73 fixScrollBars: true,//ÐозможноÑÑÑ Ð¸ÑпÑавиÑÑ ÑмеÑение вÑÑавненнÑÑ Ð¿Ð¾ ÑенÑÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² 74 fixedElements: '',//ÐлаÑÑÑ Ð²ÑÐµÑ ÑлеменÑов, к коÑоÑÑм нÑжно пÑимениÑÑ Ð¸ÑпÑавление пÑи оÑклÑÑении пÑокÑÑÑки 75 maxImgWidth: 1024, 76 minImgWidth: 320, 77 maxImgHeight: 768, 78 minImgHeight: 240, 79 windowsCount: 0, 80 getImgInfo: function(url){//ÐолÑÑение инÑоÑмаÑии об изобÑажении по ÑÑÑлке 81 return jQuery('<img/>',{ 82 src : url 83 }); 84 }, 85 onChangeImg: function(){}, 86 resizeWnd: function(){//Ðзменение ÑазмеÑов окна 87 jQuery('.plFW_fullimage').css('background-image', 'none'); 88 plFW.getImgInfo(plFWGallery.img()).on('load', function(){ 89 vWidth = this.width; 90 vHeight = this.height; 91 vRatio = vWidth/vHeight; 92 let windowWidth = window.innerWidth; 93 if (vWidth > windowWidth) { 94 vWidth = windowWidth; 95 vHeight = vWidth/vRatio; 96 }; 97 if (vWidth > plFW.maxImgWidth) {vWidth = plFW.maxImgWidth; vHeight = vWidth/vRatio;}; 98 if (vHeight > plFW.maxImgHeight) {vHeight = plFW.maxImgHeight; vWidth = vHeight*vRatio;}; 99 if (vWidth < plFW.minImgWidth) {vWidth = plFW.minImgWidth; vHeight = vWidth/vRatio;}; 100 if (vHeight < plFW.minImgHeight) {Height = plFW.minImgHeight ;vWidth = vHeight*vRatio;}; 101 jQuery('.plFW_window').stop().animate({'width': vWidth, 'height': vHeight}, 250, function(){ 102 jQuery('.plFW_fullimage').css('background-image', 'url("' + plFWGallery.img() + '")'); 103 }); 104 }); 105 }, 106 disableScrollBar: function() { 107 jQuery('html').css('overflow-y', 'hidden'); 108 if (plFW.fixScrollBars) jQuery('body' + plFW.fixedElements).css('padding-right', getSbWidth() + 'px'); 109 }, 110 enableScrollBar: function() { 111 if (plFW.windowsCount == 0) { 112 jQuery('html').css('overflow-y', 'auto'); 113 if (plFW.fixScrollBars) jQuery('body' + plFW.fixedElements).css('padding-right', '0'); 114 }; 115 }, 116 createWnd: function(filling) {//Создание окна 117 var vHtml = '<div class="plFW_background"><div class="plFW_window"><div class="plFW_header"><span class="plFW_caption"></span><div class="plFW_closebtn"></div></div>' + filling + '</div></div>'; 118 jQuery('body').append(vHtml); 119 120 var wnd = jQuery('.plFW_window').last(); 121 var bg = jQuery('.plFW_background').last(); 122 var cap = jQuery('.plFW_caption').last(); 123 var cls = jQuery('.plFW_closebtn').last(); 124 125 var elem = { 126 background: bg, 127 window: wnd, 128 caption: cap, 129 closeButton: cls,
130 closeByBackground: true, 131 onLoad: false, 132 close: function() { 133 this.background.fadeOut(200, function() { 134 jQuery(this).remove(); 135 plFW.windowsCount--; 136 plFW.enableScrollBar(); 137 }); 138 }, 139 show: function() { 140 this.window.show(); 141 }, 142 init: function() { 143 this.background.css({ 144 'width': '100%', 145 'height': '100%', 146 'position': 'fixed', 147 'top': '0px', 148 'left': '0px', 149 'display': 'none', 150 'overflow-y': 'scroll' 151 }); 152 this.window.css({ 153 'display': 'none' 154 }); 155 this.background.show(); 156 plFW.windowsCount++; 157 plFW.disableScrollBar(); 158 this.background.scrollTop(0); 159 this.caption.addClass('noselect'); 160 this.closeButton.css('cursor', 'pointer'); 161 this.background.click(function() { 162 if (elem.closeByBackground == true) elem.close(); 163 }); 164 this.window.click(function(event) { 165 event.stopPropagation(); 166 }); 167 this.closeButton.click(function(event) { 168 elem.close(); 169 }); 170 } 171 } 172 173 elem.init(); 174 175 return elem; 176 }, 177 makeImageBlock: function(){//СоздаÑÑ Ð¾ÐºÐ½Ð¾ Ñ Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð¸Ñ 178 wnd = plFW.createWnd('<div class="plFW_fullimage"></div>'); 179 wnd.window.find('.plFW_fullimage').css({ 180 'background-position': 'center center', 181 'background-repeat': 'no-repeat', 182 'background-size': '100%, 100%' 183 }); 184 return wnd; 185 }, 186 showImage: function(url, caption){//ÐÑвод окна Ñ Ð¸Ð·Ð¾Ð±Ñажением 187 wnd = plFW.makeImageBlock(); 188 wnd.window.find('.plFW_fullimage').css('background-image', "url('" + url + "')"); 189 if (caption) 190 wnd.caption.text(caption) 191 else 192 wnd.caption.remove(); 193 wnd.show(); 194 wnd.window.addClass('plFW_picture'); 195 }, 196 showGallery: function(elem, url = ''){//ÐÑкÑÑÑÑ Ð¾ÐºÐ½Ð¾ Ñ Ð³Ð°Ð»ÐµÑеей 197 function setImg(){//УÑÑановка изобÑажениÑ, заголовка и номеÑа 198 plFW.resizeWnd(); 199 plFW.onChangeImg(); 200 //ÐадпиÑи 201 jQuery('.plFW_imgnum').text((plFWGallery.curimg + 1) + ' из ' + plFWGallery.imgs.length); 202 jQuery('.plFW_caption').text(plFWGallery.alt()); 203 }; 204 //Ðаполнение маÑÑива ÑÑÑлок на изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ 205 plFWGallery.clear(); 206 jQuery(elem).find('.plFW_gallery').each(function(i, elem){ 207 plFWGallery.add(elem); 208 }); 209 if (url == '') plFWGallery.curimg = 0 210 else plFWGallery.curimg = plFWGallery.imgs.indexOf(url); 211 let wnd = plFW.makeImageBlock();//Создание окна 212 if (plFWGallery.imgs.length > 1){ 213 //Ðобавление кнопок навигаÑии и номеÑа 214 jQuery('.plFW_window').append('<div class="plFW_slidebutton plFW_slideleft"></div><div class="plFW_slideright plFW_slidebutton"></div>'); 215 //Ðобавение в заголовок окна номеÑа изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ 216 jQuery('.plFW_header').prepend('<span class="plFW_imgnum"></span>'); 217 jQuery('.plFW_imgnum').addClass('noselect'); 218 //СÑили кнопок навигаÑии в галеÑее 219 jQuery('.plFW_slidebutton').css({ 220 'position': 'absolute', 221 'cursor': 'pointer' 222 }); 223 }; 224 setImg(); 225 //plFW.show(); 226 //СобÑÑÐ¸Ñ ÐºÐ½Ð¾Ð¿Ð¾Ðº ÑлайдÑÐ¾Ñ 227 jQuery('.plFW_slideleft').click(function(){ 228 if (plFWGallery.curimg === 0) plFWGallery.curimg = plFWGallery.imgs.length - 1 229 else plFWGallery.curimg -= 1; 230 setImg(); 231 }); 232 jQuery('.plFW_slideright').click(function(){ 233 if (plFWGallery.curimg === plFWGallery.imgs.length - 1) plFWGallery.curimg = 0 234 else plFWGallery.curimg += 1; 235 setImg(); 236 }); 237 jQuery('.plFW_window').addClass('plFW_slideshow'); 238 wnd.show(); 239 return wnd; 240 }, 241 showHtml: function(html, className){//ÐÑкÑÑÑÑ Ð¾ÐºÐ½Ð¾ Ñ Ð¿ÑоизволÑной ÑазмеÑкой 242 wnd = plFW.createWnd(html); 243 className ? className = ' ' + className : className = ''; 244 wnd.window.addClass('plFW_html' + className); 245 wnd.show(); 246 return wnd; 247 }, 248 showUrl: function(url, className) {//ÐÑкÑÑÑÑ Ð¾ÐºÐ½Ð¾ Ñ Ð·Ð°Ð³ÑÑженной ÑазмеÑкой по адÑеÑÑ 249 wnd = plFW.createWnd('<div class="url_data"></div>'); 250 wnd.window.find('.url_data').load(url, function() { 251 className ? className = ' ' + className : className = ''; 252 wnd.window.addClass('plFW_url' + className); 253 wnd.show(); 254 if (wnd.onLoad) wnd.onLoad(); 255 }); 256 return wnd; 257 }, 258 showMessage: function(text, className){//ÐÑкÑÑÑÑ Ð¾ÐºÐ½Ð¾ Ñ ÑекÑÑовÑм ÑообÑением 259 wnd = plFW.createWnd("<div class='plFW_textwrapper'>
259" + text + "</div>"); 260 className ? className = ' ' + className : className = ''; 261 wnd.window.addClass('plFW_message' + className); 262 wnd.show(); 263 return wnd; 264 } 265}; 266//-------------------------------------------------------------------- 267//ÐÐÐÐÐÐÐТÐÐЬÐЫРФУÐÐЦÐÐ 268//ÐпÑеделение ÑиÑÐ¸Ð½Ñ Ð¿Ð¾Ð»Ð¾ÑÑ Ð¿ÑокÑÑÑки 269function getSbWidth(){ 270 var block = jQuery('<div>').css({'height':'50px','width':'50px'}), 271 indicator = jQuery('<div>').css({'height':'200px'}); 272 jQuery('body').append(block.append(indicator)); 273 var w1 = jQuery('div', block).innerWidth(); 274 block.css('overflow-y', 'scroll'); 275 var w2 = jQuery('div', block).innerWidth(); 276 jQuery(block).remove(); 277 return (w1 - w2); 278};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.