- // ==UserScript==
- // @name Google Images Enhancer
- // @author Keyser Söze
- // @namespace http://userscripts.org/users/KeyserSoze
- // @homepageURL https://userscripts.org/scripts/show/150950
- // @website http://userscripts.org/scripts/show/150950
- // @icon http://files.myopera.com/TrikiTran/albums/11598242/avatar117399_1.gif
- // @description Mejora Tu Experiencia Al Navegar En Google IMÁGENES | Improves Your Browsing Experience In Google IMAGES.
- // @grant GM_addStyle
- // @version 2.0
- // @include htt*://*.google.*/*tbm=isch*
- // @include htt*://*.google.*/images?*
- // @include htt*://images.google.*/search?*imghp*
- // @include htt*://*.google.*/search?*
- // @include htt*://*.google.*/
- // @include htt*://*.google.*/firefox
- // @exclude htt*://*.google.com/
- // @exclude htt*://*.google.tld/
- // @exclude htt*://*.google.*/mail/*
- // Basado en "Google Enlarge", "PicViewer" & "Greased LightBox"... Así que, muchas gracias a los autores originales!
- // Based on "Google Enlarge", "PicViewer" & "Greased LightBox"... So, many thanks to original authors
- // ==/UserScript==
-
- (function() {
-
- /*
- =============================
- || Google From Dusk 2 Dawn ||
- =============================
- */
-
- { var css = "#pmocntr2,#gt-bbar{display:none!important}select,select > button{-moz-appearance:none!important;-webkit-appearance:none!important}*{color:hsl(0,0%,80%);outline:none!important}h1,h2,h3,h4,h5,h6,strong,span,select,#rhs *,.jfk-button-standard,#sections-header,div[style=\"display:table-cell;padding-left:16px;font-size:13px;color:#222\"],.cell-header-label,.header-label,.sllabel,.goog-slider li,#srchButton,.ksb,.ab_button{color:hsl(0,0%,80%)!important}a{color:hsl(240,99%,73%)!important}a:hover,a:active,#gbz .gbts:hover{color:hsl(0,0%,85%)!important;text-shadow:0 0 5px hsla(0,0%,90%,.9)!important;-moz-transition:text-shadow .2s ease!important;-webkit-transition:text-shadow .2s ease!important} a:visited{color:hsla(105,66%,39%,.6)!important} .f,#pocs,.gt-baf-word{color:hsl(240,96%,90%)!important} .goog-menuitem-highlight div,.goog-option-selected .goog-menuitem-content{color:hsl(0,0%,99%)!important} b,em,.gt-baf-pos,#lc a,.tbou > a.q, #tbpi,#tbtro,.tbt label,#prc_opt,#set_location_section a,.tbtctlabel,#swr a{color:hsl(240,99%,80%)!important} #gt-src-wrap *,#gt-res-wrap *{color:hsl(0,0%,0%)!important}html,body,div[style=\"border-bottom:1px solid #dedede;height:57px\"],#gbx1,#gbx2,.rg_hv,.uh_hv,li.g.psgi:hover,#il_m,#il_ic{background:hsl(0,0%,5%)!important} .c,.gssb_c,.gssb_c td,#nycp,select{background-color:hsl(0,0%,17%)!important} select > button,.gbxms{background-color:hsla(0,0%,17%,.6)!important} select > optgroup{background-color:hsl(0,0%,6%)!important} #nycp{background-color:hsl(0,0%,28%)!important} #gt-src-wrap{background-color:hsl(0,0%,66%)!important} #gt-res-wrap,.close_lk{background-color:hsl(0,0%,77%)!important} .gssb_a span *,.gbto #gbs,#gbx3,#gbx4,.lst-d,.lst-t,.ab_wrp,#appbar,.lhshdr,.tphdr,#tbbcc,.rshdr{background:transparent!important} #header,#footer,.signin-box,.accountchooser-box,.google-header-bar,#leftnav,#tbdi,#hidden_modes,#hmp,#sc-block .sc,#leftnav a,#gt-appbar,#gt-ft-res,.goog-menuitem-content,div.bottom-links-wrapper,.gssb_m,.gbgt-hvr #gbgs3,#gbg3:focus #gbgs3,#gbg3:active #gbgs3,.flyr-o,.flyr-w,#advd-search-header h1{background-color:transparent!important}#bms *,#gbx1,#gbx2,div[style=\"border-bottom:1px solid #dedede;height:57px\"],.google-header-bar,#footer,#footer > div,.google-footer-bar,#top-content,#header,#gt-ft-res,#nycp,.gstl_0.gssb_c *,.lst-d,.lst-d:hover{border-color:transparent!important}.gbm ol *,.c,.appbar_b,div.splitter,.ab_dropdownrule,.ab_wrp{border-color:hsla(0,0%,6%,.6)!important}.gsq_a tr{border:2px solid transparent!important} button:not(#nycx):not(.eswd),.vsh.nyc_opening .vsc:hover .vspii,.vsh.nyc_open .vsc:hover .vspii,.vso .vspii,.jfk-button-standard,.jfk-button,.g-button,select,.cpbb,.kpbb,.kprb,.kpgb,.kpgrb,.ksb,.ab_button{border:hsl(0,0%,70%) 2px ridge!important}button,select,select > optgroup,select > option,.vsh.nyc_opening .vsc:hover .vspii,.vsh.nyc_open .vsc:hover .vspii,.vso .vspii,.mitem,.msel .kls,.c,.gbmc,.gssb_c,.gssb_c table,.goog-flat-menu-button,.gsq_a span,.jfk-button-standard,.jfk-button,.g-button,.rgsh,.cpbb,.kpbb,.kprb,.kpgb,.kpgrb,.ksb,.ab_button,#taw div,.selector,.ab_dropdownitem,ol,ul,li,.goog-menuitem,#gt-src-wrap,#gt-res-wrap,#nycp,.rg_hv,.uh_hv,.gssb_a td,.gssb_e,#srchButton,#il_ic,#il_fi,.close_lk{border-radius:4px!important} img,.rg_i{border-radius:2px!important}.rg-hi,.rg_hv:hover,#rhs,#nycp,.uh_hv,li.g.psgi:hover{border-radius:6px!important;box-shadow:1px 1px 2px #000,-1px -1px 2px hsl(0,0%,32%),2px 6px 16px 5px hsl(0,0%,0%)!important} .lst-d:hover{box-shadow:none!important}.goog-menu,.gbmc,.ab_dropdown{-moz-appearance:none!important;-webkit-appearance:none!important;background:hsl(60,3%,6%) -moz-linear-gradient(left,hsl(0,0%,6%),hsl(0,0%,28%))!important;background:hsl(60,3%,6%) -webkit-linear-gradient(left,hsl(0,0%,6%),hsl(0,0%,28%))!important;background-repeat:repeat!important;background-position:left!important;background-attachment:fixed!important;text-shadow:1px 1px 1px hsl(0,0%,0%)!important;border-radius:6px!important;box-shadow:2px 2px 5px 5px hsl(0,0%,0%),1px 1px 3px hsl(0,0%,6%),-1px -1px 3px hsl(0,0%,28%)!important} #gbx3,#gsr .p_ksb{-moz-appearance:none!important;-webkit-appearance:none!important;background:-moz-linear-gradient(top,hsl(0,0%,33%) 48%,hsl(0,0%,20%) 49%,hsl(0,0%,0%) 85%,hsl(0,0%,20%))!important;background:-webkit-linear-gradient(top,hsl(0,0%,33%) 48%,hsl(0,0%,20%) 49%,hsl(0,0%,0%) 85%,hsl(0,0%,20%))!important;text-shadow:1px 1px 1px hsl(227,32%,28%)!important;box-shadow:0 1px 5px hsl(0,0%,0%)!important} :not(select) > button:not(#nycx):not(.eswd),.vsh.nyc_opening .vsc:hover .vspii,.vsh.nyc_open .vsc:hover .vspii,.vso .vspii,#gbgs4,.gbgs,.kpbb,.g-button,.jfk-button,.goog-flat-menu-button,.cpbb,.kpbb,.kprb,.kpgb,.kpgrb,.ksb,.ab_button,.goog-button-base-pos,#srchButton{-moz-appearance:none!important;-webkit-appearance:none!important;background:transparent!important;background-image:-moz-linear-gradient(top,hsl(0,0%,33%) 48%,hsl(0,0%,20%) 49%,hsl(0,0%,0%) 85%,hsl(0,0%,20%))!important;background-image:-webkit-linear-gradient(top,hsl(0,0%,33%) 48%,hsl(0,0%,20%) 49%,hsl(0,0%,0%) 85%,hsl(0,0%,20%))!important;text-shadow:1px 1px 3px hsl(0,0%,0%)!important;box-shadow:1px 1px 5px hsl(0,0%,0%),-1px -1px 5px hsl(219,16%,32%)!important}button:not(#nycx):not(.eswd):hover,.mitem:hover,.vsh.nyc_opening .vsc:hover .vspii,.vsh.nyc_open .vsc:hover .vspii,.vso .vspii:hover,#gbgs4:hover,.gbgs:hover,.kpbb:hover,.g-button:hover,.jfk-button:hover,.gbto .gbts,.gbmcc li:hover,.ab_dropdownlnk:hover,.ab_dropdownlnkinfo:hover,.goog-menuitem:hover,.cpbb:hover,.kpbb:hover,.kprb:hover,.kpgb:hover,.kpgrb:hover,.ksb:hover,.ab_button:hover,.scroll-tree li a:hover,.selector:hover,.lhn-section-primary:hover,.ab_dropdownitem:hover,#gsr .p_ksb:hover,#doodle-site-navigation li a:hover,.gbmcc.gbsbic li a:hover,.goog-toolbar-button:hover,.goog-flat-menu-button:hover,select > option:hover,.gssb_a td:hover,#srchButton:hover{-moz-appearance:none;-webkit-appearance:none;background:-moz-radial-gradient(center bottom,hsla(123,50%,65%,.6),transparent), -moz-linear-gradient(top,hsl(0,0%,33%) 48%,hsl(0,0%,20%) 49%,hsl(0,0%,0%) 85%,hsl(0,0%,20%))!important;background:-webkit-radial-gradient(center bottom,hsla(123,50%,65%,.6),transparent), -webkit-linear-gradient(top,hsl(0,0%,33%) 48%,hsl(0,0%,20%) 49%,hsl(0,0%,0%) 85%,hsl(0,0%,20%))!important;-moz-transition:background-color .1s ease-in!important;-webkit-transition:background-color .1s ease-in!important;outline:none!important;opacity:1.0!important;color:hsl(0,0%,99%)!important;text-shadow:1px 1px 1px hsl(0,0%,0%),0 0 2px hsla(123,50%,50%,.8)!important} button:not(#nycx):not(.eswd):hover,.mitem:hover,.vsh.nyc_opening .vsc:hover .vspii,.vsh.nyc_open .vsc:hover .vspii,.vso .vspii:hover,#gbgs4:hover,.gbgs:hover,.kpbb:hover,.g-button:hover,.jfk-button:hover,.gbto .gbts,.gbmcc li:hover,.ab_dropdownlnk:hover,.ab_dropdownlnkinfo:hover,.goog-menuitem:hover,.gsq_a tr:hover span,.cpbb:hover,.kpbb:hover,.kprb:hover,.kpgb:hover,.kpgrb:hover,.ksb:hover,.ab_button:hover,.scroll-tree li a:hover,.selector:hover,.lhn-section-primary:hover,.ab_dropdownitem:hover,#gsr .p_ksb:hover,.mitem:hover,.goog-flat-menu-button:hover,select > option:hover,#srchButton:hover,.close_lk:hover{-moz-appearance:none;-webkit-appearance:none;border-color:hsla(123,50%,75%,.6) hsla(123,50%,65%,.6) hsla(123,50%,55%,.6)!important;box-shadow:0 0 10px hsl(123,50%,75%)!important;-moz-transition:border-color .2s ease,box-shadow .3s ease!important;-webkit-transition:border-color .2s ease,box-shadow .3s ease!important} li.selected,.msel .kls,.goog-option-selected,.rgsh,#scrollable-sections .tree-link-selected,.selector.selected,#tbbc,.goog-toolbar-button-selected,.goog-toolbar-button-checked,.goog-toolbar-menu-button-open,.goog-option-selected .goog-menuitem-content{background-image:-moz-radial-gradient(center bottom,hsl(123,99%,55%),transparent),-moz-linear-gradient(top,hsl(0,0%,33%) 48%,hsl(0,0%,20%) 49%,hsl(0,0%,0%) 85%,hsl(0,0%,20%))!important;background-image:-webkit-radial-gradient(center bottom,hsl(123,99%,55%),transparent),-webkit-linear-gradient(top,hsl(0,0%,33%) 48%,hsl(0,0%,20%) 49%,hsl(0,0%,0%) 85%,hsl(0,0%,20%))!important;-moz-transition:all .3s!important;-webkit-transition:all .3s!important}.gbqfqw,#lst-ib,input[type=\"email\"],input[type=\"number\"],input[type=\"password\"],input[type=\"tel\"],input[type=\"url\"],.signin-box input[type=\"text\"],.advtable input[type=\"text\"],#newu,#search_box,.as-text-input,.as-table-cont td input[type=\"text\"],.ktf{-moz-appearance:none!important;-webkit-appearance:none!important;font-weight:bold!important;box-shadow:1px 1px 5px hsl(0,0%,0%) inset,0 -1px 1px 1px hsl(240,20%,30%) inset!important;background:hsl(0,0%,17%)!important;text-shadow:1px 1px 1px hsla(123,99%,89%,.6),-1px -1px 1px hsl(0,0%,0%)!important;color:hsl(0,0%,80%)!important;border-radius:50px!important;border:none!important;padding-left:4px!important}#lga > *{opacity:0!important}#lga {background:transparent url(\"https://lh6.ggpht.com/_6Bqt_HqYues/THR8YbT0qxI/AAAAAAAAADc/NALhWF1Xjsk/logo.png\") top center no-repeat!important;height:100%!important;top:9px!important;margin-bottom:10px!important;background-size:contain!important}";
- if (typeof GM_addStyle != "undefined") {
- GM_addStyle(css);
- } else if (typeof PRO_addStyle != "undefined") {
- PRO_addStyle(css);
- } else if (typeof addStyle != "undefined") {
- addStyle(css);
- } else {
- var heads = document.getElementsByTagName("head");
- if (heads.length > 0) {
- var node = document.createElement("style");
- node.type = "text/css";
- node.appendChild(document.createTextNode(css));
- heads[0].appendChild(node);}
- }
- var css = "*, \n* {cursor: \nurl(\"http://reloaded.site88.net/Data/aero_arrow.cur\"), \ndefault !important\n}\na, a \n* {cursor: \nurl(\"http://reloaded.site88.net/Data/aero_link.cur\"), \npointer !important\n}\nHtml, Div.Span\n, DIV.gb_yb.gb_3b, Div#LeftNav, Span.st, Div#fbar, Div.fbar, Div.gb_Ab.gb_5b, Div.gb_na.gb_5b.gb_k.gb_4b, Div.gb_t.gb_u, Div.gb_t.gb_A, UL.gb_v.gb_z, UL.gb_v.gb_Kb, Div#hdtbSum, Div#gbd, Div#gbmmb, a#gb, ol#gbmm, p.sp_cnt, Div#res.med, Div#center_col, Div#cnt.big, Div#LeftNavc, Div#gbx3, Div#hdtb_more_mn, a#hdtb_tls, Div#hdtbMenus, Box, A#ShowModes, Div#More_Link, Span.Tbpo, A#Tbpi, Div#Ms.Open, Div#Bms, Div.Insep, DIV.gb_yb.gb_Fb.gb_j, DIV.gb_fa.gb_Fb.gb_j.gb_Eb, DIV.gb_ib.gb_Fb, DIV#gb.gb_Bb.gb_1a, DIV#mngb, DIV#tphdr.tphdr,Box1, Box2, Box3, Box4, Box5, O1, Table, Div.Gbmc, #Gbmm, Li, Input, Input.Post, Body\n {\nBackground : url(\"data:image/png;base64,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\") \nFixed Repeat Center!important\n; Background-color: Black !important\n; Color : SkyBlue !important\n}\na:Link\n{\nColor: YellowGreen !important;\n}\na:Visited\n{\nColor: Plum !important;\n}\na:Hover\n{\nBackground-color: #222334 !important;\nText-decoration: none !important;\nColor: Teal !important;\n}\na.gbmt, a.gbml1, .gbmt:visited {\n background-color: transparent !important;\n color: Red !important;\n border-color: #444 !important;\n text-decoration: none !important}\n*, *:focus {outline: none !important}\n\nh1, h2, h3, h4, h5, h6, h1 *, h2 *, h3 *, .med, em, #rg_hta, .qbtt, .ss-link.ss-selected, td > font > b, #qbut b, #qbft b, a.spell, a.spell *, a.spell_orig, #gen-query .operator, .threadCountNumber, #popup_dialog_title, .settings-title, .thread-subject, .leftTitle, #conditions #temp, #conditions #condition, .mapBalloon .b {color: Yellow !important}\n#hplogo div, #ftby a, .page-title, .jhp input[type=\"submit\"], body > div[style*=\"fixed\"] > div > b, .rhsvw span > .fl, .rhsvw span > .fl b, .rhsvw span > b, .rhsvw fieldset > legend {color: #c75805 !important}\n\n.titleBox, .titleBox *, .tablib_selected .tab_content {color: #444 !important; text-shadow: 0 1px 0 #000 !important}\n\n.msel, .msel .kls, .tbos, .tbos b, .tbots, .tbotu, #leftnav > h2, .selectedTab .kdSidebarContent > div, .cb .G-G- {color: Crimson !important}\n.a, .cite, cite, cite a, cite b, #ans > i, .f .bc, cite .bc, #rg_hr, #rg_hr a {color: Orange !important}\n.gac_b *, .gssb_i *, .esc.kb, .ac-row.active, .ac-row.active *, .dropdown-box > div:hover {color: Violet !important}\n.xsm, .psgiprice, .psliprice b, .selectionTools span, .pagination-div a, .f span[style*=\"background:#aaa;border:#999 1px solid;border-radius:2px;\"] {color: #F80 !important}\n#GMmessages a, .bubble .item-body a, .mapBalloon a, .item-body a, #weather .on a, #weather a.active, #weather .active a, #conditions #obsTable .b, #conditions #obsTable .b *, #stars table .b, #conditions .b {color: Purple !important}\n#leftnav a, #leftnav a *, .cb > div, .kdSidebarContent > div, .kdSidebar > div, #talk_title, a.ss-link, .fl > span {color: DeepSkyBlue !important}\n.f, .f span, .osl, .osl a, .bc a, .gl a, .esc > a, #knavm, .pslipricecol cite > a, .goog-date-picker-other-month, .RssSummary div, .RssEntryOuterContent, #bp-bd form span.small, .thread_table .read .thread, .read .subject_and_snippet, #views .Nk.Pk *,\n.tn-snippet, .tn-time, .tn-source, #container .source, #container .source-link {color: Cyan !important}\n.msel, #leftnav > h2 {font-weight: bold !important}\n.msel, #leftnav > h2, .tbos, .selectedTab div.kdTabTitle, .selectedGadgetTitle {text-shadow: 0 1px 0 rgba(0,0,0,0.5) !important}\n.gbts, #gbgs4dn {text-shadow: 0 1px 0 #000 !important}\n#knavm {text-shadow: 0 0 2px #000 !important}\n#content .uim .title-cell strong, #content .uim .callout strong, .thread_table .unread b, .thread_table .selected b, #views .Nk.Ok b {color: #FFF !important; text-shadow: 0 0 6px rgba(255,255,200,0.8) !important}\nspan.bd, .controls > b > a, td.goog-date-picker-month, td.goog-date-picker-year, th.goog-date-picker-wday {border-bottom: 1px dotted #444 !important}\n.f span[style*=\"background:#aaa;border:#999 1px solid;border-radius:2px;\"] {border-style: dashed !important}\n\n#res a:hover img, .videobox a:hover img, .vstb, .vsbb, .vstbb, .vstbt, a:hover .newsimg {border-color: #FA0 !important}\n.f span[style*=\"background:#aaa;border:#999 1px solid;border-radius:2px;\"] {border-color: #F80 !important}\n\na:hover, a:hover *, .link:hover, #gbgs4dn:hover, .cb > div:hover, .kdSidebarContent > div:hover, #sharesLink:hover, #updatesLink:hover, #friendsLink:hover, #talk_title:hover, .as-tip-span:hover, .g a:visited:hover, .g a:visited:hover *, #footer a:hover, #leftnav a:hover, #leftnav a:hover *, .chip_x:hover, .gsib_b:hover, #rg_hta:hover, .goog-date-picker-date:hover, #add_gadget:hover, #change_theme:hover, #themes_keep_theme_link:hover, .selectionTools span:hover, #GMmessages a:hover, .bubble .item-body a:hover {\n color: LightPink !important;\n text-shadow: 0 0 6px rgba(255,255,200,0.8) !important}\na.kd-button:hover *, a.nolink:hover {text-shadow: none !important; color: #999 !important}\ntd.menulist:hover {\n color: #BBB !important;\n background: -o-linear-gradient(left, #333, #111) !important;\n background: -moz-linear-gradient(left, #333, #111) !important;\n background: -webkit-linear-gradient(left, #333, #111) !important}\n\n.vst {border-bottom: 1px dotted #666 !important}\n.g a:visited, .g a:visited * {color: DarkCyan !important}";
- if (typeof GM_addStyle != "undefined") {
- GM_addStyle(css);
- } else if (typeof PRO_addStyle != "undefined") {
- PRO_addStyle(css);
- } else if (typeof addStyle != "undefined") {
- addStyle(css);
- } else {
- var heads = document.getElementsByTagName("head");
- if (heads.length > 0) {
- var node = document.createElement("style");
- node.type = "text/css";
- node.appendChild(document.createTextNode(css));
- heads[0].appendChild(node);
- }
- }
- }{
-
- /*
- ================================
- || Google Images Enhancements ||
- ================================
- */
-
- var doubleDecodeURIComponent = function (component){
- var tmp = decodeURIComponent(component);
- tmp = decodeURIComponent(tmp);
- return tmp;
- }
-
- var parseUrl = function (url) {
- var qstr = url.split('?');
- if (qstr.length <= 1)
- return [];
- var rawparams = qstr[1].split('&');
- var par = [];
- for (var i=0 ; i<rawparams.length ; i++){
- var p = rawparams[i].split("=");
- par[p[0]] = p[1];
- }
- return par;
- }
-
- var getImageLinks = function (url) {
- var param = parseUrl(url);
- var links = new Object();
- links.toImgHref = decodeURIComponent(param["imgurl"]);
- links.toPageHref = decodeURIComponent(param["url"]);
- return links;
- }
-
- var getNewImageLinks = function (url) {
- var param = parseUrl(url);
- var links = new Object();
- links.toImgHref = doubleDecodeURIComponent(param["imgurl"]);
- links.toPageHref = decodeURIComponent(param["imgrefurl"]);
- return links;
- }
-
- var firstOrNull = function (elems) {
- return (elems.length > 0 ) ? elems[0] : null;
- }
-
- var imgTable = firstOrNull(document.getElementsByClassName('images_table'));
- if ( imgTable ) { // for basic version
- var imgCell = imgTable.getElementsByTagName('td');
- for( j=0 ; j<imgCell.length ; j++ ) {
- var imageAnchor = imgCell[j].getElementsByTagName('a')[0];
- var domainText = imgCell[j].getElementsByTagName('cite')[0];
- console.log(imageAnchor.href);
- var links = getImageLinks(imageAnchor.href);
- //links.toPageHref = imageAnchor.href; // TODO fixme
- links.toImgHref = imageAnchor.href; // TODO fixme
-
- domainText.innerHTML = '<a href="' + links.toPageHref + '">' + domainText.innerHTML + '/…<\a>';
- imageAnchor.href = links.toImgHref;
- }
- }
- else { // standard version
- console.log("standard version");
- var stopEvent = function(event){ event.stopPropagation() }
-
- var fixStyle = function(target){
- var parent = target.parentNode;
- parent.style.height = target.style.height;
- parent.style.width = target.style.width;
- parent.style.left = target.style.left;
- target.style.left = 'auto';
- }
-
- var fixBoxObserver = new MutationObserver(function(mutations){
- mutations.forEach(function(mutation) {
- var target = mutation.target;
- var parent = mutation.target.parentNode;
- if (mutation.attributeName === 'style' && target.style.left !== 'auto'){
- fixStyle(target);
- }
- });
- });
- var fixBoxMutationConfig = { attributes: true, childList: true, characterData: false, subtree: false };
-
- var fixImageBox = function(image){
- if ( /\blinkOk\b/.test(image.className) ) {
- return;
- }
- var span = image.querySelector('span.rg_ilmn');
- if (span !== null) {
- var a = firstOrNull(image.getElementsByTagName('a'));
- var links = getNewImageLinks(a.href);
- a.href = links.toImgHref;
- a.addEventListener('click', stopEvent, false);
- a.addEventListener('mousedown', stopEvent, false);
-
- var newContainer = document.createElement('div');
- newContainer.className = 'newCont';
-
- a.parentNode.appendChild(newContainer);
- newContainer.appendChild(a);
- newContainer.appendChild(span.parentNode);
-
- fixStyle(a);
-
- var desc = span.innerHTML;
- span.innerHTML = '<a style="color:#fff" href="' + links.toPageHref + '">' + desc + '</a>';
- image.className += ' linkOk'
- fixBoxObserver.observe(a, fixBoxMutationConfig);
- }
- else {
- console.log("incomplete span");
- image.className += ' notComplete';
- }
- }
-
- var fixImages = function(){
- var imagesContainer = document.getElementById('rg_s');
- if ( imagesContainer == null ) return;
- var images = imagesContainer.getElementsByClassName('rg_di');
- for (var i = 0 ; i< images.length ; i++) {
- fixImageBox(images[i]);
- }
- }
-
- var newBoxMutationConfig = { attributes: false, childList: true, characterData: false, subtree: true };
- var newBoxObserver = new MutationObserver(function(mutations){
- var needFix = false;
- mutations.forEach(function(mutation) {
- needFix = needFix || mutation.target.id == 'rg_s';
- });
- if (needFix)
- fixImages();
- });
-
- fixImages();
- newBoxObserver.observe(document.body, newBoxMutationConfig);
-
- var css = []; var i = 0;
- css[i++] = '.newCont { position: relative; }';
- css[i++] = '.newCont .rg_ilmbg { display: none; }';
- css[i++] = '.newCont:hover .rg_ilmbg { display: block; }';
-
- css[i++] = '.imgSiteLnk {'; ///img preview
- css[i++] = ' background-color: rgba(255, 255, 255, 0.77);';
- css[i++] = ' bottom: 0;';
- css[i++] = ' color: #000000;';
- css[i++] = ' display: block;';
- css[i++] = ' line-height: normal;';
- css[i++] = ' position: absolute;';
- css[i++] = ' text-decoration: none;';
- css[i++] = ' width: 100%; ';
- css[i++] = ' display: none }';
- css[i++] = '.imgPrev:hover .imgSiteLnk { display: block }';///img preview
- var style = document.createElement('style');
- style.type = 'text/css';
- style.appendChild(document.createTextNode(css.join('\n')));
- document.head.appendChild(style);
-
- ///img preview in google search (only links to page)
- var fixImagePreview = function(div){
- var images = document.getElementsByClassName('bicc');
- for (var i = 0 ; i<images.length ; i++) {
- var div = images[i];
- var el = div.getElementsByTagName('a');
- if ( el.length == 1 ) {
- div.className += ' imgPrev';
- //div.style.border = '4em solid black';
- var href = el[0].href;
- var link = doubleDecodeURIComponent(parseUrl(href)['imgil']);
- link = decodeURIComponent(link.split(';')[5]);
-
- var a = document.createElement('a');
- a.href = link;
- a.className = 'imgSiteLnk';
- a.textContent = link.split('/')[2];
- div.appendChild(a);
- }
- }
- }
- var searchObserver = new MutationObserver(function(mutations){
- fixImagePreview();
- });
- searchObserver.observe(document.body,
- {
- attributes: false,
- childList: true,
- characterData: false,
- subtree: true
- }
- );
-
- // visually similar search img preview (oly links to image)
- var similars = document.querySelectorAll('div._mj a');
- console.log(similars.length)
- for (var i = 0 ; i < similars.length ; i++){
- var a = similars[i];
- var href = getNewImageLinks(a.href);
- console.log(href)
- if ( typeof href.toImgHref === 'undefined' ) {
- console.log('skip')
- continue;
- }
- console.log(href.toImgHref)
- var newA = document.createElement('a');
- newA.href = href.toImgHref;
- newA.appendChild(a.firstChild);
- a.parentNode.replaceChild(newA, a);
- }
-
- }
-
- }{
-
- /* =================================
- || Additional Google SearchBar ||
- =================================
- */
-
- var langs = {
- '':'-'
- ,'Any Language': '-'
- ,'Spanish': 'es'
- ,'Russian': 'ru'
- ,'Portuguese': 'pt'
- ,'Italian': 'it'
- ,'Greek': 'el'
- ,'German': 'de'
- ,'French': 'fr'
- ,'English': 'en'
- ,'==========': '-'
- ,'Afrikaans': 'af'
- ,'Arabic': 'ar'
- ,'Armenian': 'hy'
- ,'Belarusian': 'be'
- ,'Bulgarian': 'bg'
- //,'Catalan': 'ca'
- ,'Chinese': 'zh-CN'
- //,'Chinese (Traditional)': 'zh-TW'
- ,'Croatian': 'hr'
- ,'Czech': 'cs'
- ,'Danish': 'da'
- ,'Dutch': 'nl'
- //,'Esperanto': 'eo'
- ,'Estonian': 'et'
- ,'Filipino': 'tl'
- ,'Finnish': 'fi'
- ,'Hebrew': 'iw'
- ,'Hindi': 'hi'
- ,'Hungarian': 'hu'
- ,'Icelandic': 'is'
- ,'Indonesian': 'id'
- ,'Japanese': 'ja'
- ,'Korean': 'ko'
- ,'Latvian': 'lv'
- ,'Lithuanian': 'lt'
- ,'Norwegian': 'no'
- ,'Persian': 'fa'
- ,'Polish': 'pl'
- ,'Romanian': 'ro'
- ,'Serbian': 'sr'
- ,'Slovak': 'sk'
- ,'Slovenian': 'sl'
- //,'Swahili': 'sw'
- ,'Swedish': 'sv'
- ,'Thai': 'th'
- ,'Turkish': 'tr'
- ,'Ukrainian': 'uk'
- ,'Vietnamese': 'vi'
- };
-
- var filetypes = {
- '':'-'
- ,'Any Format': '-'
- ,'Adobe PDF (.pdf)': 'pdf'
- ,'Adobe Postscript (.ps)': 'ps'
- ,'Autodesk DWF (.dwf)': 'dwf'
- ,'Digital Audio M4A (.m4a)': 'm4a'
- ,'Digital Audio MP3 (.mp3)': 'mp3'
- ,'Digital Video Avi (.avi)': 'avi'
- ,'Digital Video MP4 (.mp4)': 'mp4'
- ,'Digital Video MKV (.mkv)': 'mkv'
- ,'Excel Datasheet(.xls)': 'xls'
- ,'Google Earth KML (.kml)': 'kml'
- ,'Google Earth KMZ (.kmz)': 'kmz'
- ,'Metadata File (.torrent)': 'torrent'
- ,'PowerPoint (.ppt)': 'ppt'
- ,'Rich Text Format (.rtf)': 'rtf'
- ,'Shockwave Flash (.swf)': 'swf'
- ,'WinRAR Archiver (.rar)': 'rar'
- ,'Word Document (.doc)': 'doc'
- };
-
- var sitesearches = {
- '':'-'
- ,'Any Site': '-'
- ,'AvaxHome': 'avaxho.me'
- ,'Ba-K': 'ba-k.com'
- ,'EbookBrowse': 'ebookbrowse.com'
- ,'EbooksBay': 'ebooksbay.org'
- ,'Education': '.edu'
- ,'Fapdu': 'fapdu.com'
- ,'FileShut': 'fileshut.com'
- ,'Gobierno MX': '.gob.mx'
- ,'Government': '.gov'
- ,'IATE': 'iate.europa.eu'
- ,'Identi': 'identi.li'
- ,'Redalyc': 'redalyc.org'
- ,'Taringa': 'taringa.net'
- ,'Twilight': 'twilight.ws'
-
- };
-
- var holder = document.createElement('div')
- ,cboLang = document.createElement('select')
- ,cboFileType = document.createElement('select')
- ,cboSiteSearch = document.createElement('select')
- ,btnSearch = document.createElement('button')
- ,searchBoxHolderID = 'gbqfw'
- ,searchBoxID = 'gbqfq'
- ,query = location.search;
-
- /* Fill combo boxes */
- for (var l in langs) {
- cboLang.innerHTML += '<option ' +
- ((query.indexOf('&lr=lang_' + langs[l]) !== -1) ? 'selected="selected"' : '') +
- 'value="' + langs[l] + '">' + l + '</option>';
- }
-
- for (var f in filetypes) {
- cboFileType.innerHTML += '<option ' +
- ((query.indexOf('&as_filetype=' + filetypes[f]) !== -1) ? 'selected="selected"' : '') +
- 'value="' + filetypes[f] + '">' + f + '</option>';
- }
-
- for (var s in sitesearches) {
- cboSiteSearch.innerHTML += '<option ' +
- ((query.indexOf('&as_sitesearch=' + sitesearches[s]) !== -1) ? 'selected="selected"' : '') +
- 'value="' + sitesearches[s] + '">' + s + '</option>';
- }
-
- /* Add elements to the page */
- holder.setAttribute('style','background-color:inherit;border:1px solid inherit;padding:1px 5px;');
- holder.appendChild(document.createTextNode(' Language: '));
- holder.appendChild(cboLang);
- holder.appendChild(document.createTextNode(' File Type: '));
- holder.appendChild(cboFileType);
- holder.appendChild(document.createTextNode(' Site: '));
- holder.appendChild(cboSiteSearch);
- btnSearch.appendChild(document.createTextNode('Search'));
- btnSearch.setAttribute('style','margin-left:5px;');
- holder.appendChild(btnSearch);
- document.getElementById(searchBoxHolderID).appendChild(holder);
-
- /* Search with customized settings */
- btnSearch.onclick = function () {
- var selectedLang = cboLang.options[cboLang.selectedIndex].value
- ,searchTerm = document.getElementById(searchBoxID).value.replace(/ +filetype:[^ ]*/gi, '')
- ,selectedFileType = cboFileType.options[cboFileType.selectedIndex].value
- ,searchTerm = document.getElementById(searchBoxID).value.replace(/ +OR+sitesearch:[^ ]*/gi, '')
- ,selectedSiteSearch = cboSiteSearch.options[cboSiteSearch.selectedIndex].value
- ,lang = (selectedLang == '-') ? '' : ('&lr=lang_' + selectedLang)
- ,filetype = (selectedFileType == '-') ? '' : ('&as_filetype=' + selectedFileType)
- ,sitesearch = (selectedSiteSearch == '-') ? '' : ('&as_sitesearch=' + selectedSiteSearch)
- ,url = location.protocol + '//' + location.host + '/search?q=' + encodeURIComponent(searchTerm) + lang + filetype + sitesearch;
-
- window.location.replace(url);
- };
-
- }{
-
- /*
- ========================================
- || Pictures Viewer & Greased LightBox ||
- ========================================
- */
-
- (function(topObject,window,document){
- 'use strict';
-
- function init(topObject,window,document,arrayFn,envir){
- //一些设定。
- var prefs={
- floatBar:{//浮动工具栏相关设置.
- butonOrder:['actual','current','magnifier','gallery'],//按钮排列顺序'actual'(实际的图片),'current'(当前显示的图片),'magnifier'(放大镜观察),'gallery'(图集)
- showDelay:366,//浮动工具栏显示延时.单位(毫秒)
- hideDelay:566,//浮动工具栏隐藏延时.单位(毫秒)
- position:'top left',// 取值为: 'top left'(图片左上角) 或者 'top right'(图片右上角) 'bottom right'(图片右下角) 'bottom left'(图片左下角);
- offset:{//浮动工具栏偏移.单位(像素)
- x:-15,//x轴偏移(正值,向右偏移,负值向左)
- y:-15,//y轴偏移(正值,向下,负值向上)
- },
- forceShow:{//在没有被缩放的图片上,但是大小超过下面设定的尺寸时,强制显示浮动框.(以便进行旋转,放大,翻转等等操作)..
- enabled:true,//启用强制显示.
- size:{//图片尺寸.单位(像素);
- w:166,
- h:166,
- },
- },
- minSizeLimit:{//就算是图片被缩放了(看到的图片被设定了width或者height限定了大小,这种情况下),如果没有被缩放的原图片小于设定值,那么也不显示浮动工具栏.
- w:100,
- h:100,
- },
- },
-
- magnifier:{//放大镜的设置.
- radius:77,//默认半径.单位(像素).
- wheelZoom:{//滚轮缩放.
- enabled:true,
- pauseFirst:true,//需要暂停(单击暂停)后,才能缩放.(推荐,否则因为放大镜会跟着鼠标,如果放大镜过大,那么会影响滚动.)..
- range:[0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.7,1.9,2,2.5,3.0,4.0],//缩放的范围
- },
- },
-
- gallery:{//图库相关设定
- fitToScreen:false,//图片适应屏幕(适应方式为contain,非cover).
- sidebarPosition:'bottom',//'top' 'right' 'bottom' 'left' 四个可能值
- sidebarSize:130,//侧栏的高(如果是水平放置)或者宽(如果是垂直放置)
- preload:true,//对附近的图片进行预读。
- max:5,//最多预读多少张(前后各多少张)
- },
-
- imgWindow:{//图片窗相关设置
- fitToScreen:false,//适应屏幕,并且水平垂直居中(适应方式为contain,非cover).
- defaultTool:'hand',//"hand","rotate","zoom";打开窗口的时候默认选择的工具
- overlayer:{//覆盖层.
- shown:false,//显示
- color:'rgba(0,0,0,0.73)',//颜色和不透明度设置.
- clickToClose:[true,'click'],//[是否使用点击关闭窗口 "true,false",关闭触发方式,"click,dblclick"]
- },
- zoom:{//滚轮缩放
- range:[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3,1.4,1.5,1.7,1.9,2,2.5,3.0,4.0],//缩放比例.(不要出现负数,谢谢-_-!~)
- mouseWheelZoom:true,//是否允许使用滚轮缩放。
- },
- },
-
- //旋转的时候,按住shift键时,旋转的步进.单位:度.
- shiftRotateStep:15,
-
- //等图片完全载入后,才开始执行弹出,放大等等操作,
- //按住ctrl键的时候,可以临时执行和这个设定相反的设定.
- waitImgLoad:true,
-
- //框架里面的图片在顶层窗口展示出来,但是当frame与顶层窗口domain不一样的时候,可能导致图片被反盗链拦截,
- //按住shift键,可以临时执行和这个设定相反的设定
- framesPicOpenInTopWindow:true,
- };
-
-
- //各网站高级规则;
- var siteInfo=[
- {siteName:"google图片搜索",
- //网址例子.(方便测试.查看.之类的)
- siteExample:"http://www.google.com.hk/search?q=opera&tbm=isch",
- //是否启用
- enabled:true,
- //站点正则
- url:/https?:\/\/www.google(\.\w{1,3}){1,3}\/search\?.*&tbm=isch/,
- //鼠标左键点击直接打开..(这个只是当高级规则的getImage()返回图片的时候生效)
- clikToOpen:{
- enabled:true,
- preventDefault:true,//是否尝试阻止点击的默认行为(比如如果是你点的是一个链接,默认行为是打开这个链接,如果是true,js会尝试阻止链接的打开(如果想临时打开这个链接,请使用右键的打开命令))
- type:'actual',//默认的打开方式: 'actual'(弹出,原始图片) 'magnifier'(放大镜) 'current'(弹出,当前图片)
- },
- //获取图片实际地址的处理函数,
- //this 为当前鼠标悬浮图片的引用,
- //第一个参数为当前图片的引用,
- //第二个参数为包裹当前图片的第一个a元素(可能不存在).
- getImage:function(img,a){
- if(!a)return;
- return (a.href.match(/imgurl=(.*?\.\w{1,5})&/i) || [])[1];
- },
- },
- {sitename:"百度图片搜索",
- enabled:true,
- url:/^https?:\/\/image\.baidu\.com\/i\?/i,
- getImage:function(img,a){
- var origin=img.dataset['origin'];
- if(origin){
- return origin
- }else{
- if(a){
- var onclick=a.getAttribute('onclick');
- if(onclick){
- return (onclick.match(/u:'(https?:\/\/[^']+)'/i) || [])[1];
- };
- };
- };
- },
- },
- {sitename:"豆瓣",
- siteExample:"http://movie.douban.com/photos/photo/1000656155/",
- enabled:true,
- url:/^https?:\/\/[^.]*\.douban\.com/i,
- getImage:function(){
- var oldsrc=this.src;
- var newsrc=oldsrc.replace(/\/view\/photo\/photo\/public\//i,'/view/photo/raw/public/');
- if(newsrc!=oldsrc)return newsrc;
- }
- },
- {sitename:"deviantart",
- enabled:true,
- url:/^https?:\/\/[^.]*\.deviantart\.com/i,
- siteExample:"http://www.deviantart.com",
- getImage:function(){
- var oldsrc=this.src;
- var newsrc=oldsrc.replace(/(http:\/\/[^\/]+\/fs\d+\/)200H\/(.*)/i,'$1$2');
- return newsrc==oldsrc? '' : newsrc;
- },
- },
- {sitename:"opera官方论坛",
- enabled:true,
- url:/^http:\/\/bbs\.operachina\.com/i,
- siteExample:"http://bbs.operachina.com",
- getImage:function(){
- var src=this.src;
- if(/file.php\?id=\d+$/i.test(src)){
- return src+'&mode=view';
- };
- },
- },
- {sitename:"QQ微博",
- enabled:true,
- url:/^http:\/\/[^\/]*t\.qq\.com\//i,
- siteExample:"http://t.qq.com/p/news",
- getImage:function(img){
- var pic=/(\.qpic\.cn\/mblogpic\/\w+)\/\d+/i;//图片
- var head=/(\.qlogo\.cn\/mbloghead\/\w+)\/\d+/i;//头像.
- var oldsrc=this.src;
- var newsrc;
- if(pic.test(oldsrc)){
- newsrc=oldsrc.replace(pic,'$1/2000');
- return newsrc==oldsrc? '' : newsrc;;
- }else if(head.test(oldsrc)){
- newsrc=oldsrc.replace(head,'$1/0');
- return newsrc==oldsrc? '' : newsrc;;
- };
- },
- },
- {sitename:"新浪微博",
- enabled:true,
- url:/^http:\/\/weibo\.com/i,
- siteExample:"http://weibo.com/pub/?source=toptray",
- getImage:function(img){
- var oldsrc=this.src;
- var pic=/(\.sinaimg\.cn\/)(?:bmiddle|thumbnail)/i;//图片.
- var head=/(\.sinaimg\.cn\/\d+)\/50\//i;//头像.
- var photoList=/\.sinaimg\.cn\/thumb150\/\w+/i//相册
- var newsrc;
- if(pic.test(oldsrc)){
- newsrc=oldsrc.replace(pic,'$1large');
- return newsrc==oldsrc? '' : newsrc;
- }else if(head.test(oldsrc)){
- newsrc=oldsrc.replace(head,'$1/180/');
- return newsrc==oldsrc? '' : newsrc;
- }else if(photoList.test(oldsrc)){
- newsrc=oldsrc.replace('/thumb150/','/mw690/');
- return newsrc==oldsrc? '' : newsrc;
- };
- },
- },
- {sitename:"pixiv",
- enabled:true,
- url:/^http:\/\/www\.pixiv\.net/i,
- getImage:function(img){
- var oldsrc=this.src;
- var reg=/(\d+)(_\w)(\.\w{2,5})$/i
- if(reg.test(oldsrc)){
- return oldsrc.replace(reg,'$1$3');
- };
- },
- },
- {sitename:"沪江碎碎",
- enabled:true,
- url:/^https?:\/\/([^.]+\.)*(?:yeshj\.com|hjenglish\.com|hujiang\.com)/i,
- getImage:function(img){
- var oldsrc=this.src;
- var reg=/^(https?:\/\/(?:[^.]+\.)*hjfile.cn\/.+)(_(?:s|m))(\.\w+)$/i;
- if(reg.test(oldsrc)){
- return oldsrc.replace(reg,'$1$3');
- };
- },
- },
- {sitename:"百度贴吧",
- enabled:true,
- url:/^http:\/\/tieba\.baidu\.com\/.+/i,
- getImage:function(img){
- var src=img.src;
- var reg=/^(http:\/\/imgsrc\.baidu\.com\/forum\/)ab(pic\/item\/[\w.]+)/i
- var result=src.match(reg);
- if(result){
- return result[1]+result[2];
- }else{
- var id=img.id;
- if(id.indexOf('big_img_')==0){
- return src;
- };
- };
- },
- },
- {sitename:"178.com",
- enabled:true,
- url:/^https?:\/\/(?:\w+\.)+178\.com\//i,
- clikToOpen:{
- enabled:true,
- preventDefault:true,
- type:'actual',
- },
- getImage:function(img,a){
- if(!a)return;
- var reg=/^https?:\/\/(?:\w+\.)+178\.com\/.+?(https?:\/\/img\d*.178.com\/[^.]+\.(?:jpg|jpeg|png|gif|bmp))/i;
- var matched=a.href.match(reg);
- return (a.href.match(reg) || [])[1];
- },
- },
- ];
-
- //通配型规则,无视站点.
- var tprules=[
- function(img,a){//解决新的dz论坛的原图获取方式.
- var reg=/(.+\/attachments?\/.+)\.thumb\.\w{2,5}$/i;
- var oldsrc=this.src;
- var newsrc=oldsrc.replace(reg,'$1');
- if(oldsrc!=newsrc)return newsrc;
- },
- ];
-
- //图标
- prefs.icons={
- actual:'',
- magnifier:'',
- current:'',
- gallery:'',
-
-
- loading:'data:image/gif;base64,R0lGODlhGAAYALMPACgoKOnp6cnJyaamppmZmVhYWGdnZ3d3d4aGhgEBAdnZ2UNDQ/b29r29vbGx sf///yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/ IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRv YmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwg MjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8v d3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiBy ZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxu czp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0 dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9y VG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9Inht cC5paWQ6QUU5MTZGNDMxQ0E4MTFFMkE1Q0NEMTFGODU0MkUzNzUiIHhtcE1NOkRvY3VtZW50SUQ9 InhtcC5kaWQ6QUU5MTZGNDQxQ0E4MTFFMkE1Q0NEMTFGODU0MkUzNzUiPiA8eG1wTU06RGVyaXZl ZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBRTkxNkY0MTFDQTgxMUUyQTVDQ0QxMUY4 NTQyRTM3NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBRTkxNkY0MjFDQTgxMUUyQTVDQ0Qx MUY4NTQyRTM3NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4g PD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb 2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOi oaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2pp aGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEw Ly4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAUFAA8A LAAAAAAYABgAAATMMMlJq710GQQAMgBmLYMSKMuirMQiSocZnOlqH68h06qtFJhPomASEDoEwQpY MFQWM2fhEJoADkyBwDVxMBgBp6igVBAm0C8D8YqtBFWDWlHFABo2MQLMGLwkCFoCbAkAKQt1IoaL Eh2Of4WOVQUDBANiL4ENAjgJJAOViRYADoJAhZagpxgGgg11BqAtLwWbgxQABLMaiQAGLrUNXGgu JA4EVB4DDQ7AmE8DDtIDHQ4N18200dIO1dfMq3YI0dSkDQMckI1NHb+i6vARACH5BAUFAA8ALAAA AAABAAEAAAQC8EUAIfkEBQUADwAsAQABABYAFgAABJbwySkPoYtq6gILEzhsmsd8YQCS4YlK6roV meEpY0gdE0AQNQRLolBMDoMBcEiUjHzJQYFJUSwW0QtVQCkoBwbqg1A0PgBo8SSj3mRqjjhPLVAI 444cs1EOD/BhQwdlXA8HcXpDdQpaD0lMcw8ChRJTEg4NiQ4CDZYsmA0NDhINk5yeG6ANE6WTq0MZ mKMPpa9tcweoFBEAIfkEBQUADwAsAAAAAAEAAQAABALwRQAh+QQFBQAPACwBAAEAFQAVAAAEgvDJ +cAykhzKJzjEQABPwARONxXhIJImc6rP0r6lfGKqLfIDxe7Bk7gki0IHgSlKHI4BjRMIGKGpqaRq fWC1FK4BuwGbz+gOqfFgmwkKhaRBPws4dPdZ3m5ktXwUWUoqhHEdBQ0CDggZDYGFigICbgJxCncq BpKUEpZxAk4dipWYHREAIfkEBQUADwAsAAAAAAEAAQAABALwRQAh+QQFBQAPACwBAAEAFgAWAAAE n/DJKcs0C9A9FxrO8ADEQBzcBjrhWA6mlT5rS8Lmwhky+KAPQ4mgeyA6LFmqUAwEZIhGw6FMGQIM BkXaMMwkiKz2UeCKvhKFGNUAoyUDBpbwrkuK9oXuIGgIjnYTBQKEDnZOARJ+hEAzCIgPOgiEDVUz TmcPUjKNE4AzMgIKbRMCDwoSBp2lCq2mC6hpaKKukbF2BKICerFEdQsGgJ8cEQAh+QQFBQAPACwA AAAAAQABAAAEAvBFACH5BAUFAA8ALAEAAQAWABYAAASU8Mk5zyw0a9ecHM6AABrFNd3nrEMpFWf6 gKz7eq10gPmCTaiJwbYgEEgSgaBhkxQHA8ujoRQ0HwUolFT1XAnagoV6lRgG4GE5A2hTkGuKQvEg lAeMAMM+VzCvCgyCUn1lgnkTc1ZNBnoMXg9KV0ONARRqDwoBAnYSmg+YJXQBAXQSpJahGZ+lE6im TXQKSK1rcGYuEQAh+QQFBQAPACwAAAAAAQABAAAEAvBFACH5BAUFAA8ALAEAAQAWABYAAASV8MlJ 5amYkiaadI3zLJlkcEL3NaxYPqj6gO0rcQ5ChUWWSj2MYTIYkB4EhUJgkwwcOYlAqbjYoK4H1dOc QaVMQvfgeEpIx25lwVY/APCHTqs2DAiD4YTZxBdJfHI2BUV3AEgSCk0LflYkihJzGYwEhxV6FAMP DAFnQRRDnWcPAQymohlWoiSlpg9WJZqdrAwPml1pTREAIfkEBQUADwAsAAAAAAEAAQAABALwRQAh +QQFBQAPACwBAAEAFgAWAAAEi/DJKQ2iOFOhhGxCo2Gc0n1C2hjjU54PqBbZMXGihDjhxE6mloT2 cDgAGIVQ4mjkHsplxdlwPH5SyYAqMUWzVpsEmS2bywfHwGoIuL9Co4OmcAek8sHEnV1bgVeBGQUL WnoUPwEMCocGBAMEhS2KDAx3AI8DkJIalJYPmJqbcYqXjwQGZEsHBEOcGBEAIfkEBQUADwAsAAAA AAEAAQAABALwRQAh+QQFBQAPACwBAAEAFgAWAAAEk/DJSSUyNc+hnlqPoAiENh2dlIrKaKrTF7au hnlhKTV1YUuHTPBRaDRAj0Eg8JoUBQLKktkMQRuSabTqgEYR1KpF0NhKkOK0mhFgDNSOR5BBTw+M WAmdUTXgN3QBNy8ORghSZz4Vgw5xJ2cEAwQ3BwMOby8LkQOSAEmNly8Fm5yelo0DihoAB5EEppdD VQALN4MZEQAh+QQFBQAPACwAAAAAAQABAAAEAvBFADs=',
- loadingCancle:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6MzBFMjYzRTUxQ0IwMTFFMkE5RkRDMDFGNUY3NTA2OTYiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6MzBFMjYzRTYxQ0IwMTFFMkE5RkRDMDFGNUY3NTA2OTYiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozMEUyNjNFMzFDQjAxMUUyQTlG REMwMUY1Rjc1MDY5NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozMEUyNjNFNDFDQjAxMUUy QTlGREMwMUY1Rjc1MDY5NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmI2XfsAAADqSURBVHja7FTLDYMwDI1puwQr5MCJKZCy B3cklsg9GzAAEjAEezBFhRtHISr/T9VD1VgyJP68ZzsBQET2TQFP8McEaZoGJ7F6pdTMeN9KaNv2 nR3iODYLbaeX82k7nO6g67oRiBCC6VgDBABYluUIhx5hGM5w9sbgKrOARLgIfrWDQXCvgLUOVgmi KGJ2HEarqhoFJklicod8zjkriuL0iLY6OHS/jxCgrn5mtDb8lADrunabPM8fpMPe+vASAc20aZrp gT6tusOlGIpdk60PLciy7EYLKWW/dIO0P5gU2vu/qSf4QYKXAAMAJ5qBE+5PPaUAAAAASUVORK5C YII=',
-
- hand:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6QjI3OEJEQkYxQ0U3MTFFMjg5NDZFNzJBMTc5RTBBMzMiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6QjI3OEJEQzAxQ0U3MTFFMjg5NDZFNzJBMTc5RTBBMzMiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCMjc4QkRCRDFDRTcxMUUyODk0 NkU3MkExNzlFMEEzMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCMjc4QkRCRTFDRTcxMUUy ODk0NkU3MkExNzlFMEEzMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjEL5KQAAAHBSURBVHja5FRNywFhFGVmkM9EEaWQEik1 Fqws/AWJn2Dl/8haKTsW/ANljaQslLLwka98NjNOpvTkfeadUXo371k83bndOXPuufcZfT6f130D jO5L+EOi0Wg0GAxUyzhqdj6fX6/XYDDIsmytVlssFo1G43w+z2Yzh8Ph9/u1KspkMsViURRF+dHn 8+G0WCzVarVQKHygqFQqCYIwHo+Px+MrGY1GcTqdzg882mw2OMPhMOheSbvdTvY+nU7ViWCKJEmx WOx0OklPrNdrtCbHt9stnU6Xy2V1ot1uB4O8Xq/b7RafQEfJZBLB/X4/HA5YY7PZTL7CxuNxOdpu t5g0JNhsNqPRGIlE8PFUKiWrgAQ5QNcejycQCGCsqKcQ8TxfqVSsVmu/30d1NpuVaHC5XGAxmUyt VgtfpUxtuVxyHIfBJxKJer2+3+9hitL6YaFQT28N9AzDhEIhGAF1l8vFYDBQRWFLu90uKed9j3q9 HkwFF4rgJTl7EhC7Wq1U9qjT6UAzLBCVIW+Z+kI2m01MEIGgAK1EQLvdFpTxZvNvRPBoOBxS+8IQ cD+0XlpgMpnkcrmfefIak9D/53+2RjwEGAAlkHhWHev9/QAAAABJRU5ErkJggg==',
- rotate:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6RjM2M0UyRTcxQ0U3MTFFMjgxRDNEQkM4N0Q3NTg2QkMiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6RjM2M0UyRTgxQ0U3MTFFMjgxRDNEQkM4N0Q3NTg2QkMiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGMzYzRTJFNTFDRTcxMUUyODFE M0RCQzg3RDc1ODZCQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGMzYzRTJFNjFDRTcxMUUy ODFEM0RCQzg3RDc1ODZCQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlX779gAAAJXSURBVHja3JQ5a6pREIbzqbigoqBeNyI2 pghEAnZiJZZ2/gMLQZBgoYUEXIJgYyD+gYhYxcJGtDKQH6CIImKhuIAGFHHfl9yXyPV6DZoUKS6Z YjhHzzxn5p05H2EwGM6+w0hn32T/H4hy7I/RaNTpdCaTCYVCWa1W6/X617vVajV4BoPxOQgx1WpV oVCYzWa5XD6fz2k0Gn58fHxMJpMmk+n5+RlbMpm8H0UcdA0n6vX67e2tQCCIx+OlUqlQKFxeXl5f X+t0OuQokUiAttvtfD5/n3Wo0XA49Hq9r6+vgUAAFKSGLXw6nQady+WiWFx2c3OD+05lpNfrZ7MZ SsAa8R6Ph0qlLhYLv99/d3fH4XB2J/v9Pi47CtpZLpfTarVisVilUkEjsFwuFyT7avszmUyr1cLC arUul8tsNnt/f48t8kJ2yPGrIIfDgRgsNBoN2ux2u5VKZT6fh3aQ1ul0HmMdglgslsVi2Sa1NQj8 9PQUiUQwTSQSCZJXKpXPQegFhCAIYrPZNJtNeOTi8/l4PN763cBC1h9ZpH11Go0GWo6bUQK80WiE Pz8/Z7PZ0Gv9x8B6eHg4CrLZbEwm8+XlBY8ABSKATqfDq9VqeIzfDiQUCkOh0NEngmvRl0Qi0W63 RSLRwblutwsEFlKpNBgM9nq9gwNkjP92hXbIZLKrqys8js2/ViwW397eoDooyAWjeEpsDHQ0GsUL WH0w5IhROEE57BpYsVjsIwjtu7i4CIfDg8Hg2ED+LW1r4/EYg4dm7+pKpVLlchkjPp1OT3zYiJ/7 8f8twABFT5G5Yf+a5QAAAABJRU5ErkJggg==',
- zoom:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6MzI2NDFENzExQ0NBMTFFMjhDOUNGQ0NDOTYzODI4REUiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6MzI2NDFENzIxQ0NBMTFFMjhDOUNGQ0NDOTYzODI4REUiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozMjY0MUQ2RjFDQ0ExMUUyOEM5 Q0ZDQ0M5NjM4MjhERSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozMjY0MUQ3MDFDQ0ExMUUy OEM5Q0ZDQ0M5NjM4MjhERSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjUXtsUAAAHTSURBVHjazJTHakJREIZzc63YS2xYsKx0 5cYXEHwBfQb3PpgbwRdw60oXtoWoWBAL9i7mQyGERMNNWeRfXA4znO/M/GfuEZLJ5NNf6Pnpj/T/ QLK70cPhMBgMlsslC4VCodPpnE4ni++BVqsViFQqFQgEjEbjbDZrNpu5XA6cVqt9BBLD4fCHWuRy eSaT4fxOp1Ov17fbrdvtTiQSpVLpdDqJoijJo/1+n06nQTQajcvlQkXn87larbZaLeJkpZodj8fp pd/v04UgCFD46vX6Xq83nU7JSgX5/X4oarWawyFOJpP5fL7b7TQaDXGyUs2mF7ygKTafryKITSqV itKi0ajUiqjCZDJh6of48XgkTlYqaDQacUcc/nyVeNVt7fV6y+UylUoCFYtFs9nMBMES3ykYDNps NpfL1e1277LuzNFwOIzFYlarFYPokUUkEgmFQuv1+uWqQqHAncpksq9AaLFYMERs8Hg8ZNnD3dGa wWDgGIfDYbfbP7ME6e8RPw30zWbDGrOy2azP53sb9DsVPVKlUuEe+OPwiH6xkgjz9W0QqtVqsGjq xrrN6g/fI56B8XhssVgY3bdyHr5HXyufz+OOUqnkB/wVCLXb7X//Zr8KMADSBu6sAZizOwAAAABJ RU5ErkJggg==',
- flipVertical:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6Mzc5RkM3NzYxQ0Y0MTFFMkFGQzk4NzFDMzc4MTVBMTIiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6Mzc5RkM3NzcxQ0Y0MTFFMkFGQzk4NzFDMzc4MTVBMTIiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozNzlGQzc3NDFDRjQxMUUyQUZD OTg3MUMzNzgxNUExMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozNzlGQzc3NTFDRjQxMUUy QUZDOTg3MUMzNzgxNUExMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoWGg/MAAAFCSURBVHja3JTNboMwDMftaVyKVlrYCU68 Ae/Ci/MQE1JRCuok1gNCnuMExgQEJnGaUaIA8S9/fwDmeQ5H2AscZIeBXqc3Xde1bcvzppvneb7v 87wMSpIkjuOdEsqyrKpqGcSUoigQkPQgQuQZkN8gkKz0JUuALMtWQWxBEOyRQ+4csYXXUCTovYR6 IGo3lHsYFRJtgKL3SPbooSMD8TPBoDxGOYeo73snKArFGa2z4AxJpOEo7XarXKArhzac7TKEDdDb +Qw/9TGx2AFDesAG7MyRfzqtVAn/0NlsX88n6BzIhNNiGyGms+ZFm4E+H495OrYStgSq68Y0r9QK x8sCLdH0lhN0r5XeRxYCQ3bpl7gFkTOQuoNtOrQlI3HTeZl8bQCX4OICNU2z8+t3gZRSaZruBPHm VdCH2H/5Zx8G+hZgAJcamqB3G0N7AAAAAElFTkSuQmCC',
- flipHorizontal:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6NUVBRDRDOTkxQ0Y0MTFFMkI0OUU5NThEQzI4NTFGNDMiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6NUVBRDRDOUExQ0Y0MTFFMkI0OUU5NThEQzI4NTFGNDMiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1RUFENEM5NzFDRjQxMUUyQjQ5 RTk1OERDMjg1MUY0MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1RUFENEM5ODFDRjQxMUUy QjQ5RTk1OERDMjg1MUY0MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pnl92swAAAFKSURBVHja3JTJjoMwDIbxqBw6SKVAT3Di DXgX3l9cRkhFLKIjekHIk9gJoXQhB07jILPFX37bAcjz3NnDvpydbDfQYXkzjuMwDMJvhrmu63me 8K9BSZLEcWwpoSzLqqpegwSlKIogCKJLFIWXMAxOvv99PA73++/t1nVt07RN3bRd2/d9lmVL0Lsa gRhkSA75Sp7h4fUnEIhZKkhPpzhyqPBg1TVAMcBEMJnRjAJECxBKkloUlo+FWLkG8S1SU8sDPjDm M2u0UwScnJFDUCEHqIIrpR9qhHIAeZ2Tfj4rsUptlZW6RWSk2RAbIFw2Ho2nxFSN0E4RzUe9qUxi YPTZ1Agck5rqDhdbooC1gGNZbN7JWpFOEFbpb9VIBZnNrLCyj6KZT4znr7+u6zRNxcU0Tdequi4+ 7tn881kcPPkt6Ifsv/yzdwP9CTAAzDedWzss4SgAAAAASUVORK5CYII=',
- close:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAARCAIAAAAt9wkYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6Q0I3NzA1RDAxQ0Y3MTFFMkJGMTU4MTc4OEQ2N0MzQjkiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6Q0I3NzA1RDExQ0Y3MTFFMkJGMTU4MTc4OEQ2N0MzQjkiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQjc3MDVDRTFDRjcxMUUyQkYx NTgxNzg4RDY3QzNCOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQjc3MDVDRjFDRjcxMUUy QkYxNTgxNzg4RDY3QzNCOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUW1owAAADqSURBVHja5FWxCoQwDL2W+x4X/QmHujvX zV0XadHN31HUn2gR/KD2AgWRAytETpTLEF5eSfqaaEvyPH/dw97W2rtIMcY8uytKKQeiKPKTP5fS dZ0DSZKEYQhAa72SdV0japIsy3D9XPdjjIHv+96FUkpPFqV0VwrnHD3dpmm+GCHEwdEJ2VVpTlhV VdtaEB6m2H2j9oTN87yVAuFhikclviuw8TAMWykQAonuCvJeWZZlmiaHy7IE37Yt+HEc4zgOggBR EzmgVUdRFI4B4BhYwg2IpGl65ZXq+ZmvfoM838MfP4fPGNBHgAEAi7gyuvHuhZcAAAAASUVORK5C YII=',
- rotateIndicatorBG:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALoAAAC5CAYAAACfmiVfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNDQzRDlCNjE4MjRFMjExQTlDNjhCQTlBOTYy NUVGMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRDEzOEEzQTI0MjAxMUUyOTRGREE2Njky QjdBREQ5OCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRDEzOEEzOTI0MjAxMUUyOTRGREE2 NjkyQjdBREQ5OCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dz KSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjMwOTI1OTNB MUUyNEUyMTFBOUM2OEJBOUE5NjI1RUYzIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA0NDNE OUI2MTgyNEUyMTFBOUM2OEJBOUE5NjI1RUYzIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpS 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 9BnasNkcSoMAAAAASUVORK5CYII=',
- rotateIndicatorPointer:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAADxCAYAAACEXZTsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6OTQ0RjM2N0YyNDJFMTFFMjk1QkFBRDIwRTU4OTdBRDgiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6OTQ0RjM2ODAyNDJFMTFFMjk1QkFBRDIwRTU4OTdBRDgiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NDRGMzY3RDI0MkUxMUUyOTVC QUFEMjBFNTg5N0FEOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5NDRGMzY3RTI0MkUxMUUy OTVCQUFEMjBFNTg5N0FEOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/Psfyr6YAAArZSURBVHja3J1bbyNJFcfL7cT25D6Jc2Em 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',
-
- arrowTop:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAdCAYAAADsMO9vAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6QjNFMkVGMDEyQzI0MTFFMjg3QzRFMzA4RUMzNUU1M0UiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6QjNFMkVGMDIyQzI0MTFFMjg3QzRFMzA4RUMzNUU1M0UiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCM0UyRUVGRjJDMjQxMUUyODdD NEUzMDhFQzM1RTUzRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCM0UyRUYwMDJDMjQxMUUy ODdDNEUzMDhFQzM1RTUzRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlvCjVAAAAD/SURBVHja1JjRDYQgDIbZgBEYwREcgREY xREcoSMxwo3gCHc+0MQQPCgUKCT/G8r3GW0RpfoNfceHaLXYQPhvyFISJoJ/Shjp8NudKwGPucKc JeFFS9hC+KeElQLvCOBx3Mrw0yVOBnjMORoeGOExIBEeKuYP664UGIpEl67dAj9dwjDA10o0bz1K uyulmlCqV1PXpsK7Tv2jSsJ2hK+VsD1u3NpJ2dcaCc++JvXj2hnL9N5aLGBUZWAsGiAJvknCC4Gv kfC4Tchd8Bn8G7iFNXMPVJdYzzoS+bf/Sr4NThB8TuK1lB4CD6NiiaPkh0XaSRpKQOlkiceASa6f AAMADgHRdvHjSZ0AAAAASUVORK5CYII=',
- arrowBottom:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAdCAYAAADsMO9vAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6Qzg4RUFEREQyQzI0MTFFMkJGRTVENTM1RUFERUEyNjMiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6Qzg4RUFEREUyQzI0MTFFMkJGRTVENTM1RUFERUEyNjMiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDODhFQUREQjJDMjQxMUUyQkZF NUQ1MzVFQURFQTI2MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDODhFQUREQzJDMjQxMUUy QkZFNUQ1MzVFQURFQTI2MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pl7tKzkAAAEVSURBVHja1JjREYQgDES5CizhSqAES7gS UoolUAIlUcKVQAmRD5hhPBXDkRgzk79V3uK4Roz5LZ86pJ6Mnpoyk28Jl9SYW4uJAl+4liMhVCIt JrbwpWErtKnjjvBOE0fwmFltLTyCL/2tLxAom9c8Y4plY0NDuOuaGT5eZAoldVCJCQo81qmkwUQ3 fClHNDEPhJ+J8I4SpWcNA+CHrylpgm2tD/GRAjN8zEysLxUwwlupZHAX7umkE+9N+NhhY2KkxHXI a7PPJVdNUOGHz1//mLgdvncnfYdepDwxv1XB96TJiPRiKRgAD+bmgifD944eXaOBlj8pqT87FhOq 4Vujx9DRQPpIRNtJH8kEK/wLEc2TaxVgABhX1Dief8wFAAAAAElFTkSuQmCC',
- arrowLeft:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAwCAYAAADtoXHnAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6NTkwNjJDNTkyQzI0MTFFMkI0NzZFM0NEMTRCQUU4NzAiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6NTkwNjJDNUEyQzI0MTFFMkI0NzZFM0NEMTRCQUU4NzAiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1OTA2MkM1NzJDMjQxMUUyQjQ3 NkUzQ0QxNEJBRTg3MCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1OTA2MkM1ODJDMjQxMUUy QjQ3NkUzQ0QxNEJBRTg3MCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ps3mm0sAAAEHSURBVHjaxNhhDcMgEIZhMgOVMAmVMAmV gJRJQAKSJmESJoHRhSVkNIM7oC/J/WrSJ2nhA86EEMyk4WM9Yi3Fk0noDoZUr1jrbNRlYA7bWag9 APO6j0Zr4Lf8KHRrBMNncg1A1/TP2sB9NneicrDzn15VYAe6pBe1gM8iIBSoBCyDQYn2gQrUd4NC dAwoQJ1g8d+qb2tArQC0Td+sgo4HK+g2BfyDSuLNiqPlAJWAThWgP6gkT716m8hQSbzpwQw9D8zQ 88A4LoYY5OdFJhK2ZLBwwGIQC3xsa8M2cey4gh3MsCModtjGrhXIBQq7KmKXYuz6jzU6sJYO1rzC 2nRYQ7Laen0LMACbElNZVX4epQAAAABJRU5ErkJggg==',
- arrowRight:'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAwCAYAAADtoXHnAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0 NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNl SUQ9InhtcC5paWQ6N0M5MkUyMEIyQzI0MTFFMkJEREE4MzFDNDE2ODE0OTAiIHhtcE1NOkRvY3Vt ZW50SUQ9InhtcC5kaWQ6N0M5MkUyMEMyQzI0MTFFMkJEREE4MzFDNDE2ODE0OTAiPiA8eG1wTU06 RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3QzkyRTIwOTJDMjQxMUUyQkRE QTgzMUM0MTY4MTQ5MCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3QzkyRTIwQTJDMjQxMUUy QkREQTgzMUM0MTY4MTQ5MCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrqtTzoAAADVSURBVHja5NjhCYMwEAXgows4giN0BEdw hBvFETpCRsoIjuAINsIJpfgjoZf3YhN4/4QPgj6TE7leQ0pMCQJaz5QtZbdUh/ULPPOqBS4X2GfU ExtsC/eMqCcaM9EjMwPe7GXrCx494TUTjvZ8lYJoFhYGHP4CngrKw7WntQDW7uCZAbvWpdgLQ4ED o6dLYNe6vAf8kBsv+PY2C7p9MvBy0FZBt8KH/9rgIPy4Aj+YNQ1GBvhzvcEvUPCrIvxSTLmFwwcd lJEOZXhFHdPRBpKQ0etbgAEA5TXHBKbv1IkAAAAASUVORK5CYII=',
- };
-
-
- //获取位置
- function getTargetPosition(target){
- var target=target;
- var rect=target.getBoundingClientRect();
- var compStyle=getComputedStyle(target,'');
- var pFloat=parseFloat;
- var t=rect.top + pFloat(compStyle.paddingTop) + pFloat(compStyle.borderTopWidth);
- var l=rect.left + pFloat(compStyle.paddingLeft) + pFloat(compStyle.borderLeftWidth);
- var r=rect.right - pFloat(compStyle.paddingRight) - pFloat(compStyle.borderRightWidth);
- var b=rect.bottom - pFloat(compStyle.paddingBottom) - pFloat(compStyle.borderBottomWidth);
- var scrollXY={
- x:window.scrollX,
- y:window.scrollY,
- };
- return {
- t:t,
- l:l,
- r:r,
- b:b,
- top: t + scrollXY.y,
- left: l + scrollXY.x,
- right: r + scrollXY.x,
- bottom: b + scrollXY.y,
- };
- };
-
- //获取窗口大小.
- function getWindowSize(){
- //window.innerHeight;window.innerWidth;
- return {
- h:window.innerHeight,
- w:window.innerWidth,
- };
- /*
- var de=document.documentElement;
- return {
- h:document.compatMode=='BackCompat'? document.body.clientHeight : de.clientHeight,
- w:de.clientWidth,
- };
- */
- };
-
-
- function getCurrentSize(target){//获取页面上显示的图片的宽 高.
- var iCS=getComputedStyle(target,'');
- return {
- h:parseFloat(iCS.height),
- w:parseFloat(iCS.width),
- };
- };
-
-
- //xpath 获取单个元素
- function getElementByXpath(xpath,contextNode,doc){
- doc=doc || document;
- contextNode=contextNode || doc;
- return doc.evaluate(xpath,contextNode,null,9,null).singleNodeValue;
- };
-
-
- //事件支持检测.
- function eventSupported( eventName,el ){
- el = el || document.createElement("div");
- eventName = "on" + eventName;
- var isSupported = (eventName in el);
- if (!isSupported && el.setAttribute) {
- el.setAttribute(eventName, "return;");
- isSupported = typeof el[eventName] === "function";
- };
- return isSupported;
- };
-
-
- //检测属性支持.
- function attrSupported(proName,el){
- el = el || document.createElement("div");
- var isSupported = (proName in el);
- return isSupported;
- };
-
- //css属性支持
- function cssProSupported(proName,elem){
- var prefix=['','-webkit-','-o-','-moz-','-ms-'];
- elem=elem || document.createElement('div');
- var style=elem.style;
- var camelPro;
- for(var i=0,ii=prefix.length;i<ii;i++){
- camelPro=(prefix[i]+proName).replace(/-([a-z])/g,function(a,b){
- return b.toUpperCase();
- });
- if(camelPro in style){
- return camelPro;
- };
- };
- };
-
- //css属性值支持
- function cssValueSupported(proName,value,elem){
- var prefix=['','-webkit-','-o-','-moz-','-ms-'];
- elem=elem || document.createElement('div');
- var style=elem.style;
- var prefixedValue;
- for(var i=0,ii=prefix.length;i<ii;i++){
- prefixedValue=prefix[i] + value;
- style[proName]=prefixedValue;
- if(style[proName]==prefixedValue){
- return prefixedValue;
- };
- };
- };
-
- //抛出错误到错误控制台
- function throwErrorInfo(err){
- if(console && console.error){
- console.error(err.message + '\n\n' + (err.stacktrace? err.stacktrace : '') + '\n\n' , err);
- };
- };
-
-
- //支持情况.
- var support={
- cssTransform:cssProSupported('transform'),
- cssCursorValue:{
- zoomIn:cssValueSupported('cursor','zoom-in'),
- zoomOut:cssValueSupported('cursor','zoom-out'),
- },
- requestFullscreen:(function(){
- var array=['webkitRequestFullScreen','mozRequestFullScreen','requestFullscreen'];
- var tempEle=document.body;
- var ret;
- for(var i=array.length-1;i>=0;i--){
- ret=array[i];
- if(ret in tempEle){
- return ret;
- };
- };
- })(),
- };
-
-
- //console.log('浏览器的一些对象支持情况:',support);
-
- //imgReady
- var imgReady=(function(){
- var iRInterval,
- iRReadyFn=[],
- isrcs=[]
- ;
-
- var timeLimit=3 * 60 * 1000;//3分钟
-
- function checkReady(){
- var now=Date.now();
- for(var i=0,ii=iRReadyFn.length,iRReadyFn_i;i<ii;i++){
- iRReadyFn_i=iRReadyFn[i];
- //now - iRReadyFn_i.startTime >= timeLimit ||
- if(iRReadyFn_i()){
- iRReadyFn.splice(i,1);
- isrcs.splice(i,1);
- i--;
- ii--;
- };
- };
- //console.log('checkReady',iRReadyFn.length)
- if(iRReadyFn.length==0){
- clearInterval(iRInterval);
- iRInterval=null;
- };
- };
-
-
-
- var imgReady=function(img,opts){
-
- if(/NodeList|HTMLCollection/.test(Object.prototype.toString.call(img)) || Array.isArray(img)){
- arrayFn.forEach.call(img,function(img,index,array){
- if(img instanceof HTMLImageElement){
- imgReady(img,opts);
- };
- });
- return;
- };
-
- if(!(img instanceof HTMLImageElement)){
- var t_img=new Image();
- t_img.src=img;
- img=t_img;
- t_img=null;
- };
-
- var ready,load,error,loadEnd,abort,timeout,time;
- ready=opts.ready;
- load=opts.load;
- error=opts.error;
- loadEnd=opts.loadEnd;
- abort=opts.abort;
- timeout=opts.timeout;
- time=typeof opts.time=='number'? opts.time : 0;
-
- if(time){
- setTimeout(function(){
- if(!loadEndDone){
- aborted=true;
- removeListener();
- img.src='data:';
- if(timeout){
- timeout.call(img,{
- target:img,
- type:'timeout',
- });
- };
- loadEndDone=true;
- if(loadEnd){
- loadEnd.call(img,{
- target:img,
- type:'timeout',
- });
- };
-
- };
- },time);
- };
-
- var src=img.src;
- var loadEndDone;
-
- function go(type,e){
- switch(type){
- case 'load':{
- removeListener();
- go('ready');//如果直接触发load,那么先触发ready
- if(load){
- load.call(img,e);
- };
- loadEndDone=true;
- if(loadEnd){
- loadEnd.call(img,e);
- };
- }break;
- case 'ready':{
- if(!ready || readyHandler.done)return;
- readyHandler.done=true;
- ready.call(img,{
- target:img,
- type:'ready',
- });
- }break;
- case 'error':{
- removeListener();
- if(error){
- error.call(img,e);
- };
- loadEndDone=true;
- if(loadEnd){
- loadEnd.call(img,e);
- };
- }break;
- };
- };
-
- var aborted;
- var ret={
- img:img,
- abort:function(){
- if(!loadEndDone){
- aborted=true;
- removeListener();
- img.src='data:';
- if(abort){
- abort.call(img,{
- target:img,
- type:'abort',
- });
- };
- loadEndDone=true;
- if(loadEnd){
- loadEnd.call(img,{
- target:img,
- type:'abort',
- });
- };
- };
- },
- };
-
- function readyHandler(){//尽快的检测图片大小.
- if(loadEndDone || aborted)return true;
- if(img.naturalWidth==0 || img.naturalHeight==0)return;
- go('ready');
- return true;
- };
-
-
- function loadHandler(e){
- go('load',e);
- };
-
- function errorHandler(e){
- go('error',e);
- };
-
- function removeListener(){
- img.removeEventListener('load',loadHandler,true);
- img.removeEventListener('error',errorHandler,true);
- };
-
- //ready必须在load之前触发。
-
- if(img.complete){//图片已经加载完成.
- if(typeof img.width=='number' && img.width && img.height){//图片
- setTimeout(function(){
- if(aborted)return;
- go('load',{
- type:'load',
- target:img,
- });
- },0);
- }else{//这不是图片.opera会识别错误.
- setTimeout(function(){
- if(aborted)return;
- go('error',{
- type:'error',
- target:img,
- });
- },0);
- };
- return ret;
- };
-
-
- img.addEventListener('load',loadHandler,true);
- img.addEventListener('error',errorHandler,true);
-
-
- if(ready){
- var index=isrcs.indexOf(src);
- if(index==-1){
- isrcs.push(src);
- readyHandler.startTime=Date.now();
- iRReadyFn.push(readyHandler);
- }else{
- iRReadyFn[index].startTime=Date.now();
- };
-
- if(!iRInterval){
- iRInterval=setInterval(checkReady,66);
- };
- };
-
- return ret;
- };
-
- return imgReady;
- })();
-
-
- var addWheelEvent=(function(){
- var eventName;
-
- if('onwheel' in document){//w3c FF>=17 ie>=9
- eventName='wheel';
- }else if('onmousewheel' in document){//ie
- eventName='mousewheel';
- }else{// < FF17
- eventName='DOMMouseScroll';
- };
-
- return function(ele,callback,useCapture){
- ele.addEventListener(eventName,function(e){
- var type=e.type;
- var ne;
- if(type!='wheel'){
- ne={};
- for(var i in e){
- ne[i]=e[i];
- };
-
- ne.type='wheel';
- ne.deltaX=0;
- ne.deltaY=0;
- ne.deltaZ=0;
- ne.deltaMode=1;//line
- ne.preventDefault=e.preventDefault.bind(e);
- ne.stopPropagation=e.stopPropagation.bind(e);
-
- if((typeof e.axis=='number' && e.axis==2) || (typeof e.wheelDeltaY=='number' && e.wheelDeltaY!=0)){//Y轴的滚动
- ne.deltaY = e.wheelDeltaY? -e.wheelDeltaY/40 : e.detail;
- }else{
- ne.deltaX = e.wheelDeltaX? -e.wheelDeltaX/40 : e.detail;
- };
- };
-
- callback.call(this,ne? ne : e);
- },useCapture || false);
- };
- })();
-
-
- var addCusMouseEvent=(function(){
- var tele= document.documentElement || document.createElement('div');
-
- var support={
- mouseleave:'onmouseleave' in tele,
- mouseenter:'onmouseenter' in tele,
- };
-
- tele=null;
-
- var map={
- 'mouseleave':'mouseout',
- 'mouseenter':'mouseover',
- };
-
- return function(type, ele, fn){//事件类型,元素,监听函数
- type=type.toLowerCase();
- if(support[type]){
- ele.addEventListener(type,fn,false);//mouseleave,enter不冒泡
- }else{
- ele.addEventListener(map[type],function(e){
- var relatedTarget=e.relatedTarget;//mouseout,去往的元素;mouseover,来自的元素
- if(!this.contains(relatedTarget)){
- fn.call(this,e);
- };
- },true);
- };
- };
-
- })();
-
-
-
- //库
- function GalleryC(){
- this.init();
- };
-
-
- var gallery;
- var galleryMode;
- GalleryC.prototype={
- init:function(){
- this.addStyle();
- var container=document.createElement('span');
-
- this.gallery=container;
- container.className='pv-gallery-container';
- container.tabIndex=1;
- container.innerHTML=''+
- '<span class="pv-gallery-head">'+
- '<span title="弹出照片进行复杂操作" class="pv-gallery-operate">折腾</span>'+
- '<span title="一些命令菜单" class="pv-gallery-commands">命令</span>'+
- '<span title="分享" class="pv-gallery-share">分享</span>'+
- '<span title="Close | Cerrar" class="pv-gallery-close"></span>'+
- '</span>'+
- '<span class="pv-gallery-body">'+
- '<span class="pv-gallery-img-container">'+
- '<span class="pv-gallery-img-container-left-side">'+
- '<span class="pv-gallery-img-controler-pre"></span>'+
- '</span>'+
- '<span class="pv-gallery-img-content">'+
- '<span class="pv-gallery-img-parent"><!--图片放在这个里面--></span>'+
- '<span class="pv-gallery-vertical-align-helper"></span>'+
- '</span>'+
- '<span class="pv-gallery-img-container-right-side">'+
- '<span class="pv-gallery-scrollbar-v pv-gallery-img-scrollbar-v">'+
- '<span class="pv-gallery-scrollbar-v-track pv-gallery-img-scrollbar-v-track">'+
- '<span class="pv-gallery-scrollbar-v-handle pv-gallery-img-scrollbar-v-handle"></span>'+
- '</span>'+
- '</span>'+
- '<span class="pv-gallery-img-controler-next"></span>'+
- '</span>'+
- '<span class="pv-gallery-img-container-bottom-side">'+
- '<span class="pv-gallery-scrollbar-h pv-gallery-img-scrollbar-h">'+
- '<span class="pv-gallery-scrollbar-h-track pv-gallery-img-scrollbar-h-track">'+
- '<span class="pv-gallery-scrollbar-h-handle pv-gallery-img-scrollbar-h-handle"></span>'+
- '</span>'+
- '</span>'+
- '</span>'+
- '</span>'+
- '<span class="pv-gallery-sidebar-container" unselectable="on">'+
- '<span class="pv-gallery-sidebar-content" >'+
- '<span class="pv-gallery-scrollbar-h pv-gallery-thumb-scrollbar-h">'+
- '<span class="pv-gallery-scrollbar-h-track pv-gallery-thumb-scrollbar-h-track">'+
- '<span class="pv-gallery-scrollbar-h-handle pv-gallery-thumb-scrollbar-h-handle"></span>'+
- '</span>'+
- '</span>'+
- '<span class="pv-gallery-sidebar-controler-pre"></span>'+
- '<span class="pv-gallery-sidebar-thumbnails-container">'+
- '<span class="pv-gallery-sidebar-thumbnails">'+
- '<!--用innerHTML写入被span.pv-gallery-sidebar-thumb包裹的img元素,并设置宽度货高度-->'+
- '</span>'+
- '</span>'+
- '<span class="pv-gallery-scrollbar-v pv-gallery-thumb-scrollbar-v">'+
- '<span class="pv-gallery-scrollbar-v-track pv-gallery-thumb-scrollbar-v-track">'+
- '<span class="pv-gallery-scrollbar-v-handle pv-gallery-thumb-scrollbar-v-handle"></span>'+
- '</span>'+
- '</span>'+
- '<span class="pv-gallery-sidebar-controler-next"></span>'+
- '</span>'+
- '</span>'+
- '</span>';
- document.body.appendChild(container);
-
- var validPos=['top','right','bottom','left'];
- var sBarPosition=prefs.gallery.sidebarPosition.trim();
- if(validPos.indexOf(sBarPosition)==-1){
- sBarPosition='bottom';
- };
-
- this.sBarPosition=sBarPosition;
- this.selectedClassName='pv-gallery-sidebar-thumb_selected-' + sBarPosition;
-
-
- var sBarDirection;
- var isHorizontal=false;
- if(sBarPosition=='top' || sBarPosition=='bottom'){
- sBarDirection='h';//水平放置
- isHorizontal=true;
- }else{
- sBarDirection='v';//垂直放置
- };
- this.sBarDirection=sBarDirection;
- this.isHorizontal=isHorizontal;
-
- var classPrefix='pv-gallery-';
- var validClass=[
- 'close',
- 'body',
- 'img-container',
-
- 'img-scrollbar-h',
- 'img-scrollbar-h-handle',
- 'img-scrollbar-h-track',
-
- 'img-scrollbar-v',
- 'img-scrollbar-v-handle',
- 'img-scrollbar-v-track',
-
- 'thumb-scrollbar-h',
- 'thumb-scrollbar-h-handle',
- 'thumb-scrollbar-h-track',
-
- 'thumb-scrollbar-v',
- 'thumb-scrollbar-v-handle',
- 'thumb-scrollbar-v-track',
-
- 'img-content',
- 'img-parent',
-
- 'img-controler-pre',
- 'img-controler-next',
-
- 'sidebar-container',
- 'sidebar-content',
-
- 'sidebar-controler-pre',
- 'sidebar-controler-next',
-
- 'sidebar-thumbnails',
- 'sidebar-thumbnails-container',
- ];
-
- var eleMaps={};
- this.eleMaps=eleMaps;
-
- validClass.forEach(function(c){
- eleMaps[c]=container.querySelector('.'+ classPrefix + c);
- });
-
- var posClass=[//需要添加'top bottom left right'class的元素
- 'img-container',
- 'sidebar-container',
- 'sidebar-thumbnails-container',
- ];
- posClass.forEach(function(c){
- eleMaps[c].classList.add(classPrefix + c + '-' +sBarPosition);
- });
-
- var hvClass=[//需要添加'v h'class的元素
- 'sidebar-container',
- 'sidebar-content',
- 'sidebar-controler-pre',
- 'sidebar-controler-next',
- 'sidebar-thumbnails',
- ];
- hvClass.forEach(function(c){
- eleMaps[c].classList.add(classPrefix + c + '-' + sBarDirection);
- });
-
-
-
- //图片区域水平方向的滚动条
- var imgScrollbarH=new this.Scrollbar({
- bar:eleMaps['img-scrollbar-h'],
- handle:eleMaps['img-scrollbar-h-handle'],
- track:eleMaps['img-scrollbar-h-track'],
- },
- eleMaps['img-parent'],
- eleMaps['img-content'],
- true);
- this.imgScrollbarH=imgScrollbarH;
-
- //图片区域垂直方向的滚动条
- var imgScrollbarV=new this.Scrollbar({
- bar:eleMaps['img-scrollbar-v'],
- handle:eleMaps['img-scrollbar-v-handle'],
- track:eleMaps['img-scrollbar-v-track'],
- },
- eleMaps['img-parent'],
- eleMaps['img-content'],
- false);
- this.imgScrollbarV=imgScrollbarV;
-
- //缩略图区域的滚动条
- var thumbScrollbar;
- if(isHorizontal){
- thumbScrollbar=new this.Scrollbar({
- bar:eleMaps['thumb-scrollbar-h'],
- handle:eleMaps['thumb-scrollbar-h-handle'],
- track:eleMaps['thumb-scrollbar-h-track'],
- },
- eleMaps['sidebar-thumbnails'],
- eleMaps['sidebar-thumbnails-container'],
- true);
- }else{
- thumbScrollbar=new this.Scrollbar({
- bar:eleMaps['thumb-scrollbar-v'],
- handle:eleMaps['thumb-scrollbar-v-handle'],
- track:eleMaps['thumb-scrollbar-v-track'],
- },
- eleMaps['sidebar-thumbnails'],
- eleMaps['sidebar-thumbnails-container'],
- false);
- };
- this.thumbScrollbar=thumbScrollbar;
-
-
-
- var self=this;
-
- eleMaps['sidebar-thumbnails-container'].addEventListener('scroll',function(e){//发生scroll事件时加载缩略图
- self.loadThumb();
- },false);
-
- addWheelEvent(eleMaps['body'],function(e){//wheel事件
- var target=e.target;
- e.preventDefault();
- if(eleMaps['sidebar-container'].contains(target)){//缩略图区滚动滚轮翻图片
- var distance=self.sideLengthO;
- if(e.deltaY<0 || e.deltaX<0 || e.deltaZ<0){//向上滚
- distance=-distance;
- };
- thumbScrollbar.scrollBy(distance)
- }else{//图片区域滚动
- var distance=100;
- if(e.deltaY!=0){//y轴
- if(e.deltaY < 0){
- distance=-distance;
- };
- imgScrollbarV.scrollBy(distance);
- }else if(e.deltaX!=0){//x轴
- if(e.deltaX < 0){
- distance=-distance;
- };
- imgScrollbarH.scrollBy(distance);
- };
- };
-
- self.forceRepaint();
- },true);
-
-
-
- var validKeyCode=[38,39,40,37]//上右下左
- var keyUp=true;
- var keyIntervalTimer;
- container.addEventListener('keydown',function(e){//上下左右切换图片
- e.stopPropagation();
- var keyCode=e.keyCode;
- var index=validKeyCode.indexOf(keyCode);
- if(index==-1)return;
- e.preventDefault();
-
- if(!keyUp)return;//已按下。
- keyUp=false;
-
- switch(index){
- case 0:;
- case 3:{
- self.selectPrevious();
- keyIntervalTimer=setInterval(function(e){
- self.selectPrevious();
- },800);
- }break;
- case 1:;
- case 2:{
- self.selectNext();
- keyIntervalTimer=setInterval(function(e){
- self.selectNext();
- },800);
- }break;
- };
-
- function keyUpHandler(e){
- if(e.keyCode!=validKeyCode[index])return;
- this.removeEventListener('keyup',keyUpHandler,false);
- clearInterval(keyIntervalTimer);
- keyUp=true;
- };
- this.addEventListener('keyup',keyUpHandler,false);
-
- },false);
-
-
- var imgDraged;
- eleMaps['img-parent'].addEventListener('mousedown',function(e){//如果图片尺寸大于屏幕的时候按住图片进行拖移
- var target=e.target;
- if(e.button!=0 || target.nodeName!='IMG')return;
- var bigger=target.classList.contains('pv-gallery-img_zoom-out');//如果是大于屏幕
-
- var oClient={
- x:e.clientX,
- y:e.clientY,
- };
-
- var oScroll={
- left:self.imgScrollbarH.getScrolled(),
- top:self.imgScrollbarV.getScrolled(),
- };
-
- var moveHandler=function(e){
- imgDraged=true;
- if(bigger){
- target.style.cursor='pointer';
- self.imgScrollbarV.scroll(oScroll.top-(e.clientY-oClient.y));
- self.imgScrollbarH.scroll(oScroll.left-(e.clientX-oClient.x));
- };
- };
-
- var upHandler=function(){
- target.style.cursor='';
-
- //拖曳之后阻止随后可能产生click事件产生的大小切换。
- //确保在随后的click事件发生后执行
- setTimeout(function(){
- imgDraged=false;
- },0);
-
- document.removeEventListener('mousemove',moveHandler,true);
- document.removeEventListener('mouseup',upHandler,true);
- };
-
- document.addEventListener('mousemove',moveHandler,true);
- document.addEventListener('mouseup',upHandler,true);
- },true);
-
- eleMaps['img-parent'].addEventListener('click',function(e){//点击图片本身就行图片缩放处理
-
- var target=e.target;
- if(e.button!=0 || target.nodeName!='IMG')return;
-
- if(imgDraged){//在拖动后触发的click事件,取消掉。免得一拖动完就立即进行的缩放。。。
- imgDraged=false;
- return;
- };
-
- if(target.classList.contains('pv-gallery-img_zoom-in')){//放大
- self.fitContains=false;
- var zoomX = typeof e.offsetX=='undefined' ? e.layerX : e.offsetX;
- var zoomY = typeof e.offsetY=='undefined' ? e.layerY : e.offsetY;
- var scaleX=zoomX/target.clientWidth;
- var scaleY=zoomY/target.clientHeight;
- self.fitToScreen({
- x:scaleX,
- y:scaleY,
- });
- }else if(target.classList.contains('pv-gallery-img_zoom-out')){
- self.fitContains=true;
- self.fitToScreen();
- };
- },true);
-
- var mouseIntervalTimer;
- container.addEventListener('mousedown',function(e){//鼠标按在导航上,切换图片
- if(e.button!=0)return;//左键
- var target=e.target;
- if(target.nodeName=='IMG')e.preventDefault();
-
- var matched=true;
- switch(target){
- case eleMaps['img-controler-pre']:;
- case eleMaps['sidebar-controler-pre']:{//上一个
- self.selectPrevious();
- clearInterval(mouseIntervalTimer);
- mouseIntervalTimer=setInterval(function(e){
- self.selectPrevious();
- },800);
- }break;
- case eleMaps['img-controler-next']:;
- case eleMaps['sidebar-controler-next']:{//下一个
- self.selectNext();
- clearInterval(mouseIntervalTimer);
- mouseIntervalTimer=setInterval(function(e){
- self.selectNext();
- },800);
- }break;
- default:{
- matched=false;
- }break;
- };
-
- function mouseUpHandler(e){//opera,按下左键的时候,按右键然后松开不会触发mouseup,再松开左键,还是不会触发mouseup
- document.removeEventListener('mouseup',mouseUpHandler,true);
- clearInterval(mouseIntervalTimer);
- };
-
- if(matched){
- e.preventDefault();
- document.addEventListener('mouseup',mouseUpHandler,true);
- };
- },false);
-
- eleMaps['sidebar-content'].addEventListener('click',function(e){//点击缩略图切换
- if(e.button!=0)return;//左键
- var target=e.target;
- if(!target.dataset['src'])return;
- self.select((target.nodeName=='SPAN'? target : target.parentNode));
- },false);
-
- eleMaps['close'].addEventListener('click',function(e){//关闭
- self.close();
- },false);
-
- this._resizeHandler=this.resizeHandler.bind(this);
-
- this.sideLength=isHorizontal ? eleMaps['sidebar-thumbnails'].clientHeight : eleMaps['sidebar-thumbnails'].clientWidth;
- this.sideLengthO=this.sideLength + 3;//加上margin
-
- this.thumbSpanStyle=isHorizontal ? ';width:' + this.sideLength +'px;' : ';height:' + this.sideLength +'px;';
-
- container.style.display='none';
- },
- selectPrevious:function(){
- var pre;
- var _pre=this.selected.previousElementSibling;
- while(_pre){
- if(_pre.clientWidth!=0){
- pre=_pre;
- break;
- };
- _pre=_pre.previousElementSibling;
- };
-
- this.select(pre);
-
- },
- selectNext:function(){
- var next;
- var _next=this.selected.nextElementSibling;
- while(_next){
- if(_next.clientWidth!=0){
- next=_next;
- break;
- };
- _next=_next.nextElementSibling;
- };
-
- this.select(next);
-
- },
- close:function(){
- galleryMode=false;
- this.gallery.blur();
- this.gallery.style.display='none';
- var des=document.documentElement.style;
- des.overflowX=this.deOverflow.x;
- des.overflowY=this.deOverflow.y;
- window.removeEventListener('resize',this._resizeHandler,true);
- },
- selectedIntoView:function(){
- var thumBC=this.eleMaps['sidebar-thumbnails-container'];
- //需要滚动的距离。
- var needScrollDis=this.isHorizontal ? this.selected.offsetLeft : this.selected.offsetTop;
- //尽可能的居中显示
- var thumBCClient=this.isHorizontal ? thumBC.clientWidth : thumBC.clientHeight;
- var scrollCenter=Math.max((thumBCClient - this.sideLengthO)/2,0);
-
- needScrollDis=Math.max(needScrollDis-scrollCenter,0);
- this.thumbScrollbar.scroll(needScrollDis);
- },
- select:function(ele){
- if(!ele || this.selected==ele)return;
- if(this.selected){
- this.selected.classList.remove(this.selectedClassName);
- this.selected.classList.remove('pv-gallery-sidebar-thumb_selected');
- };
- ele.classList.add(this.selectedClassName);
- ele.classList.add('pv-gallery-sidebar-thumb_selected');
-
- this.selected=ele;
-
- var self=this;
- clearTimeout(this.loadImgTimer);
- this.loadImgTimer=setTimeout(function(){//快速跳转的时候不要尝试读取图片。
- self.loadImg(ele);
- },200);
-
- this.selectedIntoView();
- this.forceRepaint();
- },
- clear:function(){
-
- this.allLoading=[];//读取中的图片数组
-
- this.allImgs={//图片的总类,统计
- rule:{
- shown:true,
- number:0,
- },
- tpRule:{
- shown:true,
- number:0,
- },
- scale:{
- shown:true,
- number:0,
- },
- force:{
- shown:true,
- number:0,
- },
- };
-
- if(this.img){
- this.img.style.display='none';
- };
-
- this.img=null;
- this.selected==null;
- this.eleMaps['sidebar-thumbnails'].innerHTML='';
- this.imgScrollbarV.hide();
- this.imgScrollbarH.hide();
- this.thumbScrollbar.hide();
- window.removeEventListener('resize',this._resizeHandler,true);
- },
- load:function(img,data,from){
- this.clear();//还原对象的一些修改,以便复用。
- galleryMode=true;
-
- var gallery=this.gallery;
- var galleryStyle=gallery.style;
-
- if(galleryStyle.display=='none'){
- var des=document.documentElement.style;
- this.deOverflow={
- x:des.overflowX,
- y:des.overflowY,
- };
- des.overflow='hidden';
- galleryStyle.display='';
- gallery.focus();
- };
-
-
- var imgSrc=img.src;
- var dataSrcs=[];
- var data_i;
- var index;
- var data_i_src;
- for(var i=0,ii=data.length;i<ii;i++){//unique顺便算出img所在data中的index;
- data_i=data[i];
- data_i_src=data_i.src;
- if(dataSrcs.indexOf(data_i_src)!=-1){//已经存在
- data.splice(i,1);//移除
- i--;
- ii--;
- continue;
- };
- dataSrcs.push(data_i_src);
-
- if(imgSrc==data_i_src){
- index=i;
- };
- };
-
- if(typeof index =='undefined'){
- index=0;
- data.unshift(data.target);
- };
-
- //console.log(data);
- this.data=data;
- this.from=from;//如果来自frame,那么这个from应该保存了那个frame的窗口id,便于以后通信。
-
- var thumbnails=this.eleMaps['sidebar-thumbnails'];
-
-
- if(this.isHorizontal){
- thumbnails.style.width=this.sideLengthO * data.length + 'px';//如果是水平放置,需要设置宽度
- };
-
-
-
- var spanMark='';
- var data_i;
- for(var i=0,ii=data.length;i<ii;i++){
- data_i=data[i];
- this.allImgs[data_i.type].number++;
- spanMark +=
- '<span class="pv-gallery-sidebar-thumb-container'+
- '" data-type="' + data_i.type +
- '" data-src="' + data_i.src +
- '" data-img-src="' + data_i.imgSrc +
- '" style="'+ this.thumbSpanStyle +'">'+
- '<span class="pv-gallery-vertical-align-helper"></span>'+
- '<span class="pv-gallery-sidebar-thumb-loading" title="正在读取中......"></span>'+
- '</span>';
- };
- //console.log(this.allImgs);
-
- thumbnails.innerHTML=spanMark;
-
- //初始化滚动条
- this.thumbScrollbar.reset();
-
- this.imgSpans=thumbnails.children;
-
- this.select(this.imgSpans[index]);
- this.loadThumb();
-
- //resize监听
- window.addEventListener('resize',this._resizeHandler,true);
- },
- forceRepaint:function(){//解决opera的fixed元素,当滚动条不再最高处的时候,不重绘fixed元素的问题。
- if(envir.opera){
- window.scrollBy(0,1);
- window.scrollBy(0,-1);
- };
- },
- resizeHandler:function(){//窗口变化时,调整一些东西。
- this.fitToScreen();
- this.thumbScrollbar.reset();
- this.selectedIntoView();
- this.loadThumb();
- },
- getImg:function(ele){
- var allLoading=this.allLoading;
-
- var src=ele.dataset['src']
- var index=allLoading.indexOf(src);
- if(index!=-1){
- allLoading.splice(index,1);
- };
-
- allLoading.push(src);
-
-
- if(this.imgReady && this.img && this.imgReady.img.src!=this.img.src){
- this.imgReady.abort();
- this.imgReady.loadingIndicator.style.removeProperty('display');
- };
-
-
- var loadingIndicator=ele.querySelector('.pv-gallery-sidebar-thumb-loading');
- loadingIndicator.style.display='block';
-
- var self=this;
-
- this.imgReady=imgReady(src,{
- ready:function(){
- if(allLoading.indexOf(src)!=allLoading.length-1)return;//如果不是最后一张
-
- loadingIndicator.style.removeProperty('display');
- self.loadImg(this);
- },
- loadEnd:function(){//在loadend后开始预读。
- if(allLoading.indexOf(src)!=allLoading.length-1)return;
- if(self.preloading){//结束上次的预读。
- self.preloading.finish();
- };
- //console.log(this,'预读开始');
- if(prefs.gallery.preload){
- self.preloading=new self.Preload(ele);
- };
- },
- });
-
- this.imgReady.loadingIndicator=loadingIndicator;
- },
- Preload:function(ele){
- this.ele=ele;
- this.init();
- },
- Scrollbar:function(scrollbar,content,container,isHorizontal){
- this.scrollbar=scrollbar;
- this.content=content;
- this.container=container;
- this.isHorizontal=isHorizontal
- this.init();
- },
- loadImg:function(img){
- if(img.nodeName!='IMG'){//先读取。
- this.getImg(img);
- return;
- };
-
- if(this.img){
- this.img.style.display='none';
- };
-
- this.img=img;
- img.className='pv-gallery-img';
- this.eleMaps['img-parent'].appendChild(img);
- this.fitContains=prefs.gallery.fitToScreen;//适应屏幕
- this.fitToScreen();
- },
- fitToScreen:function(scale){
-
- var container=this.eleMaps['img-content'];
- var containerSize={
- h:container.clientHeight,
- w:container.clientWidth,
- };
-
- var img=this.img;
- img.classList.remove('pv-gallery-img_zoom-in');
- img.classList.remove('pv-gallery-img_zoom-out');
- img.removeAttribute('height');
- img.removeAttribute('width');
-
- var content=this.eleMaps['img-parent'];
- var contentSize={
- w:content.offsetWidth,
- h:content.offsetHeight,
- };
-
- var larger=contentSize.w > containerSize.w || contentSize.h > containerSize.h;
-
- if(this.fitContains){//适应屏幕
- this.imgScrollbarV.hide();
- this.imgScrollbarH.hide();
- if(larger){
- img.classList.add('pv-gallery-img_zoom-in');
- if(contentSize.h/contentSize.w >=containerSize.h/containerSize.w){
- img.height=containerSize.h-20;//20是父元素padding之和
- }else{
- img.width=containerSize.w-20;
- };
- };
- }else{//不做尺寸调整,如果大于屏幕就出现滚动条
- this.imgScrollbarV.reset();
- this.imgScrollbarH.reset();
- if(larger){
- img.classList.add('pv-gallery-img_zoom-out');
- if(scale){//通过鼠标点击进行的切换。
- this.imgScrollbarH.scroll(container.scrollWidth * scale.x - containerSize.w/2);
- this.imgScrollbarV.scroll(container.scrollHeight * scale.y - containerSize.h/2);
- };
- };
- };
- },
- loadThumb:function(){//读取可视范围里面的缩略图
-
- var self=this;
-
- function ready(){
- var naturalSize={
- h:this.naturalHeight,
- w:this.naturalWidth,
- };
- var style=this.style;
- style.removeProperty('width');
- style.removeProperty('height');
- if(naturalSize.h > self.sideLength || naturalSize.w > self.sideLength){
- if(naturalSize.h>=naturalSize.w){
- style.height='100%';
- }else{
- style.width='100%';
- };
- };
- self.forceRepaint();
- };
-
-
- var thumBC=this.eleMaps['sidebar-thumbnails-container'];
- var scrolled=this.isHorizontal ? thumBC.scrollLeft : thumBC.scrollTop;
- var thumBCClient=this.isHorizontal ? thumBC.clientWidth : thumBC.clientHeight;
-
- var loadDis=scrolled - this.sideLengthO;
- var loadIndex=Math.floor(scrolled/this.sideLengthO);//至少从第几张开始读取。
- var loadStopDis=scrolled + thumBCClient;
-
- var imgSpans=this.imgSpans;
- var span_i;
- var pro=this.isHorizontal ? 'offsetLeft' : 'offsetTop';
- var proValue;
- var thumb;
-
- for(var i=loadIndex,ii=imgSpans.length;i<ii;i++){
- span_i=imgSpans[i];
- if(span_i.clientWidth==0)continue;//隐藏的
-
- proValue=span_i[pro];
- if(proValue <= loadDis)continue;//在滚动条上面了
- if(proValue >= loadStopDis)break;//在滚动条下面了
-
- if(span_i.dataset['loaded'])continue;//已经加载了缩略图
-
- thumb=new Image();
- thumb.src=span_i.dataset['imgSrc']; //+ '?' +Math.random();
- thumb.style.cssText='\
- height:100%;\
- width:100%;\
- ';
- thumb.className='pv-gallery-sidebar-thumb';
-
- //GM环境下的dataset可读不可写。。
- thumb.setAttribute('data-src',span_i.dataset['src']);
- span_i.setAttribute('data-loaded','true');
-
- span_i.appendChild(thumb);
- imgReady(thumb,{
- ready:ready,
- });
- };
-
- },
- addStyle:function(){
- var style=document.createElement('style');
- style.type='text/css';
- style.textContent='\
- .pv-gallery-container {\
- position: fixed;\
- top: 0;\
- left: 0;\
- width: 100%;\
- height: 100%;\
- padding: 0;\
- margin: 0;\
- border: none;\
- z-index:899999999;\
- background-color: transparent;\
- }\
- .pv-gallery-container span{\
- -moz-box-sizing: border-box;\
- box-sizing: border-box;\
- }\
- .pv-gallery-head {\
- position: absolute;\
- top: 0;\
- left: 0;\
- width: 100%;\
- height:26px;\
- z-index:1;\
- background-color:rgba(0,0,0,0.96);\
- border:none;\
- border-bottom:1px solid #333333;\
- }\
- .pv-gallery-operate,\
- .pv-gallery-commands,\
- .pv-gallery-share{\
- color:#ccc;\
- display:none;\
- }\
- .pv-gallery-close{\
- cursor:pointer;\
- position:absolute;\
- top:0;\
- right:0;\
- height:100%;\
- width:40px;\
- border:none;\
- border-left: 1px solid #333333;\
- opacity:0.6;\
- background:transparent no-repeat center;\
- background-image:url("'+prefs.icons.loadingCancle+'");\
- }\
- .pv-gallery-close:hover{\
- opacity:1;\
- }\
- .pv-gallery-body {\
- display: block;\
- height: 100%;\
- width: 100%;\
- margin: 0;\
- padding: 0;\
- border: none;\
- border-top: 26px solid transparent;\
- position: relative;\
- background-clip: padding-box;\
- }\
- .pv-gallery-img-container {\
- display: block;\
- padding: 0;\
- margin: 0;\
- border: none;\
- height: 100%;\
- width: 100%;\
- background-clip: padding-box;\
- background-color: rgba(20,20,20,0.96);\
- position:relative;\
- }\
- .pv-gallery-img-container-top {\
- border-top: '+ prefs.gallery.sidebarSize +'px solid transparent;\
- }\
- .pv-gallery-img-container-right {\
- border-right: '+ prefs.gallery.sidebarSize +'px solid transparent;\
- }\
- .pv-gallery-img-container-bottom {\
- border-bottom: '+ prefs.gallery.sidebarSize +'px solid transparent;\
- }\
- .pv-gallery-img-container-left {\
- border-left: '+ prefs.gallery.sidebarSize +'px solid transparent;\
- }\
- .pv-gallery-img-container-left-side,\
- .pv-gallery-img-container-right-side{\
- position:absolute;\
- height:100%;\
- top:0;\
- z-index:2;\
- }\
- .pv-gallery-img-container-left-side{\
- left:0;\
- }\
- .pv-gallery-img-container-right-side{\
- right:0;\
- }\
- .pv-gallery-img-container-bottom-side{\
- position:absolute;\
- width:100%;\
- left:0;\
- bottom:0;\
- z-index:2;\
- }\
- .pv-gallery-img-controler-pre,\
- .pv-gallery-img-controler-next{\
- position:absolute;\
- top:50%;\
- height:120px;\
- width:50px;\
- margin-top:-60px;\
- cursor:pointer;\
- opacity:0.3;\
- }\
- .pv-gallery-img-controler-pre{\
- background:rgba(70,70,70,0.5) url("'+prefs.icons.arrowLeft+'") no-repeat center;\
- left:10px;\
- }\
- .pv-gallery-img-controler-next{\
- background:rgba(70,70,70,0.5) url("'+prefs.icons.arrowRight+'") no-repeat center;\
- right:10px;\
- }\
- .pv-gallery-img-controler-pre:hover,\
- .pv-gallery-img-controler-next:hover{\
- opacity:0.8;\
- }\
- /*滚动条样式--开始*/\
- .pv-gallery-scrollbar-h,\
- .pv-gallery-scrollbar-v{\
- display:none;\
- position:relative;\
- z-index:1;\
- opacity:0.6;\
- }\
- .pv-gallery-thumb-scrollbar-v,\
- .pv-gallery-thumb-scrollbar-h{\
- position:absolute;\
- }\
- .pv-gallery-scrollbar-h:hover,\
- .pv-gallery-scrollbar-v:hover{\
- opacity:0.95;\
- }\
- .pv-gallery-scrollbar-h{\
- width:100%;\
- overflow:hidden;\
- padding:0;\
- padding-left:2px;\
- padding-right:16px;\
- }\
- .pv-gallery-scrollbar-v{\
- height:100%;\
- padding:0;\
- padding-top:2px;\
- padding-bottom:16px;\
- }\
- .pv-gallery-thumb-scrollbar-h{\
- bottom:0;\
- left:0;\
- padding:0 2px;\
- }\
- .pv-gallery-thumb-scrollbar-v{\
- right:0;\
- top:0;\
- padding:2px 0;\
- }\
- .pv-gallery-scrollbar-h-track,\
- .pv-gallery-scrollbar-v-track{\
- position:relative;\
- display:block;\
- background-color:rgba(100,100,100,1);\
- }\
- .pv-gallery-scrollbar-h-track{\
- margin:5px 0;\
- height:10px;\
- width:100%;\
- }\
- .pv-gallery-scrollbar-h:hover .pv-gallery-scrollbar-h-track{\
- height:16px;\
- }\
- .pv-gallery-scrollbar-v-track{\
- height:100%;\
- width:10px;\
- margin:0 5px;\
- }\
- .pv-gallery-scrollbar-v:hover .pv-gallery-scrollbar-v-track{\
- width:16px;\
- }\
- .pv-gallery-scrollbar-h-handle,\
- .pv-gallery-scrollbar-v-handle{\
- position:absolute;\
- background-color:black;\
- }\
- .pv-gallery-scrollbar-h-handle:hover,\
- .pv-gallery-scrollbar-v-handle:hover{\
- background-color:#502121;\
- }\
- .pv-gallery-scrollbar-h-handle:active,\
- .pv-gallery-scrollbar-v-handle:active{\
- background-color:#391A1A;\
- }\
- .pv-gallery-scrollbar-h-handle{\
- height:100%;\
- width:20px;\
- left:10px;\
- top:0;\
- }\
- .pv-gallery-scrollbar-v-handle{\
- height:20px;\
- width:100%;\
- top:10px;\
- left:0;\
- }\
- /*滚动条样式--结束*/\
- .pv-gallery-img-content{\
- display:block;\
- width:100%;\
- height:100%;\
- overflow:hidden;\
- text-align:center;\
- padding:0;\
- border:none;\
- margin:0;\
- line-height:0;\
- font-size:0;\
- white-space:nowrap;\
- }\
- .pv-gallery-img-parent{\
- display:inline-block;\
- vertical-align:middle;\
- padding:10px;\
- border:none;\
- margin:0;\
- line-height:0;\
- font-size:0;\
- }\
- .pv-gallery-img{\
- box-shadow:0 0 10px rgba(0,0,0,0.6);\
- display:inline-block;\
- vertical-align:middle;\
- padding:0;\
- border:none;\
- margin:0;\
- }\
- .pv-gallery-img_zoom-out{\
- cursor:'+support.cssCursorValue.zoomOut+';\
- }\
- .pv-gallery-img_zoom-in{\
- cursor:'+support.cssCursorValue.zoomIn+';\
- }\
- .pv-gallery-sidebar-container {\
- position: absolute;\
- background-color:rgba(0,0,0,0.96);\
- padding:10px;\
- border:none;\
- margin:none;\
- -o-user-select: none;\
- -webkit-user-select: none;\
- -moz-user-select: -moz-none;\
- user-select: none;\
- }\
- .pv-gallery-sidebar-container-h {\
- height: '+ prefs.gallery.sidebarSize +'px;\
- width: 100%;\
- }\
- .pv-gallery-sidebar-container-v {\
- width: '+ prefs.gallery.sidebarSize +'px;\
- height: 100%;\
- }\
- .pv-gallery-sidebar-container-top {\
- top: 0;\
- left: 0;\
- border-bottom:1px solid #333333;\
- }\
- .pv-gallery-sidebar-container-right {\
- top: 0;\
- right: 0;\
- border-left:1px solid #333333;\
- }\
- .pv-gallery-sidebar-container-bottom {\
- bottom: 0;\
- left: 0;\
- border-top:1px solid #333333;\
- }\
- .pv-gallery-sidebar-container-left {\
- top: 0;\
- left: 0;\
- border-right:1px solid #333333;\
- }\
- .pv-gallery-sidebar-content {\
- display: block;\
- margin: 0;\
- padding: 0;\
- border: 0;\
- background-clip: padding-box;\
- position: relative;\
- }\
- .pv-gallery-sidebar-content-h {\
- height: 100%;\
- width: 90%;\
- margin-left: auto;\
- margin-right: auto;\
- border-left: 40px solid transparent;\
- border-right: 40px solid transparent;\
- }\
- .pv-gallery-sidebar-content-v {\
- height: 90%;\
- width: 100%;\
- top: 5%;\
- border-top: 40px solid transparent;\
- border-bottom: 40px solid transparent;\
- }\
- .pv-gallery-sidebar-controler-pre,\
- .pv-gallery-sidebar-controler-next{\
- cursor:pointer;\
- position:absolute;\
- background:rgba(255,255,255,0.1) no-repeat center;\
- }\
- .pv-gallery-sidebar-controler-pre-h,\
- .pv-gallery-sidebar-controler-next-h{\
- top:2px;\
- width:36px;\
- height:100%;\
- }\
- .pv-gallery-sidebar-controler-pre-v,\
- .pv-gallery-sidebar-controler-next-v{\
- left:2px;\
- width:100%;\
- height:36px;\
- }\
- .pv-gallery-sidebar-controler-pre-h {\
- left: -40px;\
- background-image: url("'+prefs.icons.arrowLeft+'");\
- }\
- .pv-gallery-sidebar-controler-next-h {\
- right: -40px;\
- background-image: url("'+prefs.icons.arrowRight+'");\
- }\
- .pv-gallery-sidebar-controler-pre-h:hover{\
- box-shadow:inset 22px 0 0 rgba(255,255,255,0.2) ,inset -14px 0 0 rgba(0,0,0,0.2);\
- }\
- .pv-gallery-sidebar-controler-next-h:hover{\
- box-shadow:inset -22px 0 0 rgba(255,255,255,0.2),inset 14px 0 0 rgba(0,0,0,0.2);\
- }\
- .pv-gallery-sidebar-controler-pre-v {\
- top: -40px;\
- background-image: url("'+prefs.icons.arrowTop+'");\
- }\
- .pv-gallery-sidebar-controler-next-v {\
- bottom: -40px;\
- background-image: url("'+prefs.icons.arrowBottom+'");\
- }\
- .pv-gallery-sidebar-controler-pre-v:hover{\
- box-shadow:inset 0 22px 0 rgba(255,255,255,0.2) ,inset 0 -14px 0 rgba(0,0,0,0.2);\
- }\
- .pv-gallery-sidebar-controler-next-v:hover{\
- box-shadow:inset 0 -22px 0 rgba(255,255,255,0.2),inset 0 14px 0 rgba(0,0,0,0.2);\
- }\
- .pv-gallery-sidebar-thumbnails-container {\
- display: block;\
- overflow: hidden;\
- height: 100%;\
- width: 100%;\
- margin:0;\
- border:none;\
- padding:0;\
- }\
- .pv-gallery-sidebar-thumbnails-container-top {\
- padding-bottom:5px;\
- }\
- .pv-gallery-sidebar-thumbnails-container-right {\
- padding-left:5px;\
- }\
- .pv-gallery-sidebar-thumbnails-container-bottom {\
- padding-top:5px;\
- }\
- .pv-gallery-sidebar-thumbnails-container-left {\
- padding-right:5px;\
- }\
- .pv-gallery-sidebar-thumbnails {\
- position:relative;\
- display: block;\
- padding: 0;\
- margin: 0;\
- border: none;\
- line-height:0;/*竖列时消除inline-block元素的行高*/\
- }\
- .pv-gallery-sidebar-thumbnails-h {\
- height: 100%;\
- }\
- .pv-gallery-sidebar-thumbnails-v {\
- width: 100%;\
- }\
- .pv-gallery-sidebar-thumb-container {\
- display:inline-block;\
- text-align: center;\
- border:2px solid rgb(52,52,52);\
- cursor:pointer;\
- position:relative;\
- padding:2px;\
- font-size:0;\
- line-height:0;\
- /*强制图片后面作为vertical-align参考的字符不换行,以防vertical-align:middle达不到预期效果*/\
- white-space:nowrap;\
- }\
- .pv-gallery-sidebar-container-h .pv-gallery-sidebar-thumb-container {\
- margin:0 3px 0 0;\
- height:100%;\
- }\
- .pv-gallery-sidebar-container-v .pv-gallery-sidebar-thumb-container {\
- margin:0 0 3px 0;\
- width:100%;\
- }\
- .pv-gallery-sidebar-thumb-container:hover {\
- border:2px solid rgb(57,149,211);\
- }\
- .pv-gallery-sidebar-thumb_selected {\
- border:2px solid rgb(229,59,62);\
- }\
- .pv-gallery-sidebar-thumb_selected-top {\
- bottom:-5px;\
- }\
- .pv-gallery-sidebar-thumb_selected-right {\
- left:-5px;\
- }\
- .pv-gallery-sidebar-thumb_selected-bottom {\
- top:-5px;\
- }\
- .pv-gallery-sidebar-thumb_selected-left {\
- right:-5px;\
- }\
- .pv-gallery-sidebar-thumb-loading{\
- position:absolute;\
- top:0;\
- left:0;\
- width:100%;\
- height:100%;\
- display:none;\
- opacity:0.5;\
- background:black url("'+ prefs.icons.loading + '") no-repeat center ;\
- }\
- .pv-gallery-sidebar-thumb-loading:hover{\
- opacity:0.6;\
- }\
- .pv-gallery-sidebar-thumb {\
- display: inline-block;\
- vertical-align: middle;\
- }\
- .pv-gallery-vertical-align-helper{\
- display:inline-block;\
- vertical-align:middle;\
- width:0;\
- height:100%;\
- margin:0;\
- border:0;\
- padding:0;\
- visibility:hidden;\
- white-space:nowrap;\
- }\
- ';
- document.querySelector('head').appendChild(style);
- },
- };
-
- GalleryC.prototype.Preload.prototype={//预读对象
- container:(function(){
- var div=document.createElement('div');
- div.className='pv-gallery-preloaded-img-container';
- div.style.display='none';
- document.body.appendChild(div);
- return div;
- })(),
- init:function(){
- this.max=prefs.gallery.max;
- this.nextNumber=0;
- this.nextEle=this.ele;
- this.preNumber=0;
- this.preEle=this.ele;
- this.direction='pre';
- this.preload();
- },
- preload:function(){
- var ele=this.getPreloadEle();
- if(!ele){
- //conole.log('预读正常结束');
- return;
- };
-
- //conole.log('正在预读:',ele);
- var self=this;
- this.imgReady=imgReady(ele.dataset['src'],{
- loadEnd:function(){
- if(self.finished){
- //conole.log('强制终止了');
- return;
- };
- ele.setAttribute('data-preloaded','true');
- self.container.appendChild(this);
- self.preload();
- },
- time:60 * 1000,//限时一分钟,否则强制结束并开始预读下一张。
- });
- },
- getPreloadEle:function(){
- if((this.max<=this.nextNumber && this.max<=this.preNumber) || (!this.nextEle && !this.preEle)){
- return;
- };
- var ele=this.direction=='pre'? this.getNext() : this.getPrevious();
- if(ele && !ele.dataset['preloaded']){
- return ele;
- }else{
- return this.getPreloadEle();
- };
- },
- getNext:function(){
- this.nextNumber++;
- this.direction='next';
- if(!this.nextEle)return;
-
- var next;
- var _next=this.nextEle.nextElementSibling;
- while(_next){
- if(_next.clientWidth!=0){
- next=_next;
- break;
- };
- _next=_next.nextElementSibling;
- };
- this.nextEle=next;
- return next;
- },
- getPrevious:function(){
- this.preNumber++;
- this.direction='pre';
- if(!this.preEle)return;
-
- var pre;
- var _pre=this.preEle.previousElementSibling;
- while(_pre){
- if(_pre.clientWidth!=0){
- pre=_pre;
- break;
- };
- _pre=_pre.previousElementSibling;
- };
- this.preEle=pre;
- return pre;
- },
- finish:function(){
- this.finished=true;
- if(this.imgReady){
- this.imgReady.abort();
- };
- },
- };
-
- GalleryC.prototype.Scrollbar.prototype={//滚动条对象
- init:function(){
- var self=this;
- this.scrollbar.bar.addEventListener('mousedown',function(e){//点击滚动条区域,该干点什么!
- e.preventDefault();
- var target=e.target;
- var handle=self.scrollbar.handle;
- var track=self.scrollbar.track;
- switch(target){
- case handle:{//手柄;功能,拖动手柄来滚动窗口
- var pro=self.isHorizontal ? ['left','clientX'] : ['top','clientY'];
- var oHOffset=parseFloat(handle.style[pro[0]]);
- var oClient=e[pro[1]];
-
- var moveHandler=function(e){
- self.scroll(oHOffset + e[pro[1]] - oClient,true);
- };
- var upHandler=function(){
- document.removeEventListener('mousemove',moveHandler,true);
- document.removeEventListener('mouseup',upHandler,true);
- };
- document.addEventListener('mousemove',moveHandler,true);
- document.addEventListener('mouseup',upHandler,true);
- }break;
- case track:{//轨道;功能,按住不放来连续滚动一个页面的距离
- var pro=self.isHorizontal ? ['left','offsetX','layerX','clientWidth','offsetWidth'] : ['top' , 'offsetY' ,'layerY','clientHeight','offsetHeight'];
- var clickOffset=typeof e[pro[1]]=='undefined' ? e[pro[2]] : e[pro[1]];
- var handleOffset=parseFloat(handle.style[pro[0]]);
- var handleSize=handle[pro[4]];
- var under= clickOffset > handleOffset ;//点击在滚动手柄的下方
- var containerSize=self.container[pro[3]];
-
- var scroll=function(){
- self.scrollBy(under? (containerSize - 10) : (-containerSize + 10));//滚动一个页面距离少一点
- };
- scroll();
-
- var checkStop=function(){//当手柄到达点击位置时停止
- var handleOffset=parseFloat(handle.style[pro[0]]);
- if(clickOffset >= handleOffset && clickOffset <= (handleOffset + handleSize)){
- clearInterval(scrollInterval);
- };
- };
-
- var scrollInterval=setInterval(function(){
- scroll();
- checkStop();
- },300);
-
- checkStop();
-
- var upHandler=function(){
- clearInterval(scrollInterval);
- document.removeEventListener('mouseup',upHandler,true);
- };
- document.addEventListener('mouseup',upHandler,true);
- }break;
- };
-
- },true);
- },
- reset:function(){//判断滚动条该显示还是隐藏
- var contentPro,containerPro,trackPro,handlePro;
-
- if(this.isHorizontal){
- contentPro='offsetWidth';
- containerPro='clientWidth';
- handlePro='width';
- trackPro='clientWidth';
- }else{
- contentPro='offsetHeight';
- containerPro='clientHeight';
- handlePro='height';
- trackPro='clientHeight';
- };
- //如果内容大于容器的content区域
- var contentSize=this.content[contentPro];
- var containerSize=this.container[containerPro];
- if(contentSize > containerSize){
- this.show();
- var trackSize=this.scrollbar.track[trackPro];
- this.trackSize=trackSize;
- var handleSize=Math.floor((containerSize/contentSize) * trackSize);
- handleSize=Math.max(20,handleSize);//限制手柄的最小大小;
- this.handleSize=handleSize;
- this.one=(trackSize-handleSize) / (contentSize-containerSize);//一个像素对应的滚动条长度
- this.scrollbar.handle.style[handlePro]= handleSize + 'px';
- this.scroll(this.getScrolled());
- }else{
- this.hide();
- };
- },
- show:function(){
- this.scrollbar.bar.style.display='block';
- this.shown=true;
- },
- hide:function(){
- this.scrollbar.bar.style.display='none';
- this.shown=false;
- },
- scrollBy:function(distance,handleDistance){
- this.scroll(this.getScrolled() + (handleDistance? distance / this.one : distance));
- },
- scroll:function(distance,handleDistance){
- if(!this.shown)return;
-
- var pro;
-
- //滚动实际滚动条
- var _distance=distance;
- _distance=handleDistance? distance / this.one : distance;
- if(this.isHorizontal){
- pro='left';
- this.container.scrollLeft=_distance;
- }else{
- pro='top';
- this.container.scrollTop=_distance;
- };
-
- //滚动虚拟滚动条
- //根据比例转换为滚动条上应该滚动的距离。
- distance=handleDistance? distance : this.one * distance;
- //处理非法值
- distance=Math.max(0,distance);//如果值小于0那么取0
- distance=Math.min(distance,this.trackSize - this.handleSize);//大于极限值,取极限值
- this.scrollbar.handle.style[pro]=distance + 'px';
- },
- getScrolled:function(){
- if(this.isHorizontal){
- return this.container.scrollLeft;
- }else{
- return this.container.scrollTop;
- };
- },
- };
-
-
- //放大镜
- function MagnifierC(img,data){
- this.img=img;
- this.data=data;
- this.init();
- };
-
- MagnifierC.all=[];
- MagnifierC.styleZIndex=900000000;//全局z-index;
- MagnifierC.zoomRange=prefs.magnifier.wheelZoom.range.slice(0).sort();//升序
- MagnifierC.zoomRangeR=MagnifierC.zoomRange.slice(0).reverse();//降序
-
- MagnifierC.prototype={
- init:function(){
- this.addStyle();
- MagnifierC.all.push(this);
- var container=document.createElement('span');
-
- container.className='pv-magnifier-container';
- document.body.appendChild(container);
-
- this.magnifier=container;
-
- var imgNaturalSize={
- h:this.img.naturalHeight,
- w:this.img.naturalWidth,
- };
-
- this.imgNaturalSize=imgNaturalSize;
-
- var cs=container.style;
- cs.zIndex=MagnifierC.styleZIndex++;
-
-
-
- var maxDia=Math.ceil(Math.sqrt(Math.pow(1/2*imgNaturalSize.w,2) + Math.pow(1/2*imgNaturalSize.h,2)) * 2);
- this.maxDia=maxDia;
-
- var radius=prefs.magnifier.radius;
- radius=Math.min(maxDia/2,radius);
- this.radius=radius;
- var diameter=radius * 2;
- this.diameter=diameter;
-
- cs.width=diameter + 'px';
- cs.height=diameter + 'px';
- cs.borderRadius=radius+1 + 'px';
- cs.backgroundImage='url("'+ this.img.src +'")';
- cs.marginLeft= -radius +'px';
- cs.marginTop= -radius +'px';
-
- var imgPos=getTargetPosition(this.data.img);
- var imgRange={//图片所在范围
- x:[imgPos.left , imgPos.right],
- y:[imgPos.top , imgPos.bottom],
- };
- var imgW=imgRange.x[1] - imgRange.x[0];
- var imgH=imgRange.y[1] - imgRange.y[0];
- //如果图片太小的话,进行范围扩大。
- var minSize=60;
- if(imgW < minSize){
- imgRange.x[1] +=(minSize - imgW)/2;
- imgRange.x[0] -=(minSize - imgW)/2;
- imgW=minSize;
- };
- if(imgH < minSize){
- imgRange.y[1] +=(minSize - imgH)/2;
- imgRange.y[0] -=(minSize - imgH)/2;
- imgH=minSize;
- };
- this.imgSize={
- w:imgW,
- h:imgH,
- };
- this.imgRange=imgRange;
- //console.log(this.imgRange,this.imgSize);
-
- this.setMouseRange();
-
-
- this.move({
- pageX:imgRange.x[0],
- pageY:imgRange.y[0],
- });
-
- this._focus=this.focus.bind(this);
- this._blur=this.blur.bind(this);
- this._move=this.move.bind(this);
- this._remove=this.remove.bind(this);
- this._pause=this.pause.bind(this);
- this._zoom=this.zoom.bind(this);
-
- if(prefs.magnifier.wheelZoom.enabled){
- this.zoomLevel=1;
- this.defaultDia=diameter;
- addWheelEvent(container,this._zoom,false);
- };
-
- container.addEventListener('mouseover',this._focus,false);
- container.addEventListener('mouseout',this._blur,false);
- container.addEventListener('dblclick',this._remove,false);
- container.addEventListener('click',this._pause,false);
-
-
- document.addEventListener('mousemove',this._move,true);
- },
- addStyle:function(){
- if(MagnifierC.style)return;
- var style=document.createElement('style');
- style.type='text/css';
- MagnifierC.style=style;
- style.textContent='\
- .pv-magnifier-container{\
- position:absolute;\
- padding:0;\
- margin:0;\
- background-origin:border-box;\
- -moz-box-sizing:border-box;\
- box-sizing:border-box;\
- border:3px solid #CCCCCC;\
- background:rgba(40, 40, 40, 0.9) no-repeat;\
- }\
- .pv-magnifier-container_focus{\
- box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.7);\
- }\
- .pv-magnifier-container_pause{\
- border-color:red;\
- }\
- ';
- document.querySelector('head').appendChild(style);
- },
- focus:function(){
- this.magnifier.classList.add('pv-magnifier-container_focus');
- this.magnifier.style.zIndex=MagnifierC.styleZIndex++;
- },
- blur:function(){
- this.magnifier.classList.remove('pv-magnifier-container_focus');
- },
- move:function(e){
- var mouseCoor={
- x:e.pageX,
- y:e.pageY,
- };
- var mouseRange=this.mouseRange;
- var imgRange=this.imgRange;
-
- if( !(mouseCoor.x >= mouseRange.x[0] && mouseCoor.x <= mouseRange.x[1] && mouseCoor.y >= mouseRange.y[0] && mouseCoor.y <= mouseRange.y[1]))return;//如果不再鼠标范围
- if(mouseCoor.x > imgRange.x[1]){
- mouseCoor.x = imgRange.x[1];
- }else if(mouseCoor.x < imgRange.x[0]){
- mouseCoor.x = imgRange.x[0];
- };
- if(mouseCoor.y > imgRange.y[1]){
- mouseCoor.y = imgRange.y[1];
- }else if(mouseCoor.y < imgRange.y[0]){
- mouseCoor.y = imgRange.y[0];
- };
-
- var ms=this.magnifier.style;
- ms.top= mouseCoor.y + 'px';
- ms.left= mouseCoor.x + 'px';
-
- var radius=this.radius;
- var imgSize=this.imgSize;
- var imgNaturalSize=this.imgNaturalSize;
- var px=-((mouseCoor.x-imgRange.x[0])/imgSize.w * imgNaturalSize.w) + radius +'px';
- var py=-((mouseCoor.y-imgRange.y[0])/imgSize.h * imgNaturalSize.h) + radius +'px';
- //console.log(px,py);
- ms.backgroundPosition=px + ' ' + py;
- },
- getNextZoomLevel:function(){
- var level;
- var self=this;
- if(this.zoomOut){//缩小
- MagnifierC.zoomRangeR._find(function(value){
- if(value < self.zoomLevel){
- level=value;
- return true;
- }
- })
- }else{
- MagnifierC.zoomRange._find(function(value){
- if(value > self.zoomLevel){
- level=value;
- return true;
- };
- });
- }
- return level;
- },
- zoom:function(e){
- if(e.deltaY===0)return;//非Y轴的滚动
- if(prefs.magnifier.wheelZoom.pauseFirst && !this.paused)return;
- e.preventDefault();
- if(e.deltaY < 0){//向上滚,放大;
- if(this.diameter >= this.maxDia)return;
- this.zoomOut=false;
- }else{
- this.zoomOut=true;
- };
- var level=this.getNextZoomLevel();
- if(!level)return;
-
- this.zoomLevel=level;
- var diameter=this.defaultDia * level;
- if(diameter > this.maxDia){
- diameter = this.maxDia;
- };
-
- var radius=diameter/2
- this.diameter=diameter;
- var bRadius=this.radius;
- this.radius=radius;
- this.setMouseRange();
- var ms=this.magnifier.style;
- ms.width=diameter+'px';
- ms.height=diameter+'px';
- ms.borderRadius=radius+1 + 'px';
- ms.marginLeft=-radius+'px';
- ms.marginTop=-radius+'px';
- var bBP=ms.backgroundPosition.split(' ');
- ms.backgroundPosition=parseFloat(bBP[0]) + (radius - bRadius) + 'px' + ' ' + (parseFloat(bBP[1]) + ( radius - bRadius) + 'px');
-
- },
- pause:function(){
- if(this.paused){
- this.magnifier.classList.remove('pv-magnifier-container_pause');
- document.addEventListener('mousemove',this._move,true);
- }else{
- this.magnifier.classList.add('pv-magnifier-container_pause');
- document.removeEventListener('mousemove',this._move,true);
- };
- this.paused=!this.paused;
- },
- setMouseRange:function(){
- var imgRange=this.imgRange;
- var radius=this.radius;
- this.mouseRange={//鼠标活动范围
- x:[imgRange.x[0]-radius , imgRange.x[1] + radius],
- y:[imgRange.y[0]-radius , imgRange.y[1] + radius],
- };
- },
- remove:function(){
- this.magnifier.parentNode.removeChild(this.magnifier);
- document.removeEventListener('mousemove',this._move,true);
- MagnifierC.all.splice(MagnifierC.all.indexOf(this),1);
- },
- };
-
-
-
- //图片窗口
- function ImgWindowC(img){
- this.img=img;
- this.src=img.src;
- this.init();
- };
-
- ImgWindowC.styleZIndex=1000000000;//全局z-index;
- ImgWindowC.all=[];//所有的窗口对象
- ImgWindowC.zoomRange=prefs.imgWindow.zoom.range.slice(0).sort();//升序
- ImgWindowC.zoomRangeR=ImgWindowC.zoomRange.slice(0).reverse();//降序
-
-
- ImgWindowC.prototype={
- init:function(){
- var self=this;
- //图片是否已经被打开
- if(ImgWindowC.all._find(function(iwin){
- if(iwin.src==self.src){
- iwin.firstOpen();
- return true;
- };
- }))return;
-
- this.addStyle();
- this.addRotateIndicator();
-
- var img=this.img;
- img.className='pv-pic-window-pic pv-pic-not-allowed';
- img.style.cssText='\
- top:0px;\
- left:0px;\
- ';
-
- var imgNaturalSize={
- h:img.naturalHeight,
- w:img.naturalWidth,
- };
- this.imgNaturalSize=imgNaturalSize;
-
- var container=document.createElement('span');
- container.style.cssText='\
- cursor:pointer;\
- top:0px;\
- left:0px;\
- ';
- container.className='pv-pic-window-container';
- container.innerHTML=''+
- '<span class="pv-pic-window-toolbar">'+
- '<span class="pv-pic-window-tb-hand pv-pic-window-tb-tool pv-pic-window-tb-tool-selected" title="Hand Tool"></span>'+
- '<span class="pv-pic-window-tb-tool-badge-container">'+
- '<span class="pv-pic-window-tb-rotate pv-pic-window-tb-tool" title="Rotate | Rotar"></span>'+
- '<span class="pv-pic-window-tb-tool-badge">0</span>'+
- '</span>'+
- '<span class="pv-pic-window-tb-tool-badge-container">'+
- '<span class="pv-pic-window-tb-zoom pv-pic-window-tb-tool" title="Zoom"></span>'+
- '<span class="pv-pic-window-tb-tool-badge">0</span>'+
- '</span>'+
- '<span class="pv-pic-window-tb-flip-horizontal pv-pic-window-tb-command" title="Giro HORIZONTAL Flip"></span>'+
- '<span class="pv-pic-window-tb-flip-vertical pv-pic-window-tb-command" title="Giro VERTICAL Flip"></span>'+
- '</span>'+
- '<span class="pv-pic-window-close"></span>'+
- '<span class="pv-pic-window-range"></span>';
-
- container.insertBefore(img,container.firstChild);
-
- this.imgWindow=container;
-
- var toolMap={
- 'hand':container.querySelector('.pv-pic-window-tb-hand'),
- 'rotate':container.querySelector('.pv-pic-window-tb-rotate'),
- 'zoom':container.querySelector('.pv-pic-window-tb-zoom'),
- 'fh':container.querySelector('.pv-pic-window-tb-flip-horizontal'),
- 'fv':container.querySelector('.pv-pic-window-tb-flip-vertical'),
- };
- this.toolMap=toolMap;
-
- this.viewRange=container.querySelector('.pv-pic-window-range');
-
-
-
-
- //关闭
- var closeButton=container.querySelector('.pv-pic-window-close');
- closeButton.style.cssText='\
- top: -24px;\
- right: 0px;\
- ';
- this.closeButton=closeButton;
-
- closeButton.addEventListener('click',function(e){
- self.remove();
- },false);
-
- var toolbar=container.querySelector('.pv-pic-window-toolbar');
- toolbar.style.cssText='\
- top: 0px;\
- left: -45px;\
- ';
- this.toolbar=toolbar;
-
- this.selectedTool='hand';
- this.cursor='hand';
- this.selectedToolClass='pv-pic-window-tb-tool-selected';
-
-
-
- this.hKeyUp=true;
- this.rKeyUp=true;
- this.zKeyUp=true;
-
- this.spaceKeyUp=true;
- this.ctrlKeyUp=true;
- this.altKeyUp=true;
- this.shiftKeyUp=true;
-
-
- toolbar.addEventListener('mousedown',function(e){//鼠标按下选择工具
- self.toolbarEventHandler(e);
- },false);
-
-
- toolbar.addEventListener('dblclick',function(e){//鼠标双击工具
- self.toolbarEventHandler(e);
- },false);
-
-
- //阻止浏览器对图片的默认控制行为
- img.addEventListener('mousedown',function(e){
- e.preventDefault();
- },false);
-
-
- container.addEventListener('mousedown',function(e){//当按下的时,执行平移,缩放,旋转操作
- self.imgWindowEventHandler(e);
- },false);
-
- container.addEventListener('click',function(e){//阻止opera ctrl+点击保存图片
- self.imgWindowEventHandler(e);
- },false);
-
- if(prefs.imgWindow.zoom.mouseWheelZoom){//是否使用鼠标缩放
- addWheelEvent(container,function(e){//滚轮缩放
- self.imgWindowEventHandler(e);
- },false);
- };
-
-
- if(prefs.imgWindow.overlayer.shown){//是否显示覆盖层
- var overlayer=document.createElement('span');
- this.overlayer=overlayer;
- overlayer.className='pv-pic-window-overlayer';
- overlayer.style.backgroundColor=prefs.imgWindow.overlayer.color;
- document.body.appendChild(overlayer);
- if(prefs.imgWindow.overlayer.clickToClose[0]){
- overlayer.addEventListener(prefs.imgWindow.overlayer.clickToClose[1],function(e){
- self.remove();
- },false);
- }
- };
-
- document.body.appendChild(container);
- ImgWindowC.all.push(this);
-
- this._blur=this.blur.bind(this);
- this._focusedKeydown=this.focusedKeydown.bind(this);
- this._focusedKeyup=this.focusedKeyup.bind(this);
-
- this.rotatedRadians=0;//已经旋转的角度
- this.zoomLevel=1;//缩放级别
- this.setToolBadge('zoom',1);
-
- //选中默认工具
- this.selectTool(prefs.imgWindow.defaultTool);
-
- this.firstOpen();
- },
- firstOpen:function(){
- this.focus();
- var imgWindow=this.imgWindow;
- imgWindow.style.left=-5 + window.scrollX + 'px';
- imgWindow.style.top=-5 + window.scrollY + 'px';
-
- if(prefs.imgWindow.fitToScreen){
- this.fitToScreen();
- this.center(true,true);
- }else{
- //window的尺寸
- var wSize=getWindowSize();
- //空隙
- wSize.h -= 16;
- wSize.w -= 16;
-
- var imgWindowCS=getComputedStyle(imgWindow,'');
-
- var rectSize={
- h:parseFloat(imgWindowCS.height),
- w:parseFloat(imgWindowCS.width),
- };
-
- this.center(rectSize.w <= wSize.w , rectSize.h <= wSize.h);
- };
-
- this.keepScreenInside();
- },
- addStyle:function(){
- if(ImgWindowC.style)return;
- var style=document.createElement('style');
- ImgWindowC.style=style;
- style.textContent='\
- .pv-pic-window-container {\
- position: absolute;\
- background-color: rgba(40,40,40,0.9);\
- padding: 8px;\
- border: 5px solid #ccc;\
- line-height: 0;\
- text-align: left;\
- }\
- .pv-pic-window-container_focus {\
- box-shadow: 0 0 10px rgba(0,0,0,0.6);\
- }\
- .pv-pic-window-close, .pv-pic-window-toolbar {\
- -webkit-transition: opacity 0.2s ease-in-out;\
- transition: opacity 0.2s ease-in-out;\
- }\
- .pv-pic-window-toolbar {\
- position: absolute;\
- background-color: #535353;\
- padding: 0;\
- opacity: 0.9;\
- display: none;\
- cursor: default;\
- }\
- .pv-pic-window-toolbar:hover {\
- opacity: 1;\
- }\
- .pv-pic-window-toolbar_focus {\
- display: block;\
- }\
- .pv-pic-window-close {\
- cursor: pointer;\
- position: absolute;\
- right: 0px;\
- top: -24px;\
- background: url("'+prefs.icons.close+'") no-repeat center bottom;\
- height: 17px;\
- width: 46px;\
- opacity: 0.9;\
- border:none;\
- padding:0;\
- padding-top:2px;\
- background-color:#1771FF;\
- display: none;\
- }\
- .pv-pic-window-close:hover {\
- background-color:red;\
- opacity: 1;\
- }\
- .pv-pic-window-close_focus {\
- display: block;\
- }\
- .pv-pic-window-pic {\
- position: relative;\
- display:inline-block;\/*opera把图片设置display:block会出现渲染问题,会有残影,还会引发其他各种问题,吓尿*/\
- max-width:none;\
- min-width:none;\
- max-height:none;\
- min-height:none;\
- padding:0;\
- margin:0;\
- }\
- .pv-pic-window-pic_focus {\
- box-shadow: 0 0 6px black;\
- }\
- .pv-pic-window-tb-tool, .pv-pic-window-tb-command{\
- height: 24px;\
- width: 24px;\
- padding: 12px 8px 6px 6px;\
- margin:0;\
- display: block;\
- background: transparent no-repeat center;\
- cursor: pointer;\
- position: relative;\
- border: none;\
- border-left: 2px solid transparent;\
- border-bottom: 1px solid #868686;\
- background-origin: content-box;\
- }\
- .pv-pic-window-toolbar > span:last-child {\
- border-bottom: none;\
- }\
- .pv-pic-window-tb-tool:hover, .pv-pic-window-tb-command:hover{\
- border-left: 2px solid red;\
- }\
- .pv-pic-window-tb-tool-selected{\
- box-shadow: inset 0 21px 0 rgba(255,255,255,0.3) ,inset 0 -21px 0 rgba(0,0,0,0.3);\
- border-left:2px solid #1771FF;\
- }\
- .pv-pic-window-tb-hand {\
- background-image: url("'+prefs.icons.hand+'");\
- }\
- .pv-pic-window-tb-rotate {\
- background-image: url("'+prefs.icons.rotate+'");\
- }\
- .pv-pic-window-tb-zoom {\
- background-image: url("'+prefs.icons.zoom+'");\
- }\
- .pv-pic-window-tb-flip-horizontal {\
- background-image: url("'+prefs.icons.flipHorizontal+'");\
- }\
- .pv-pic-window-tb-flip-vertical {\
- background-image: url("'+prefs.icons.flipVertical+'");\
- }\
- .pv-pic-window-tb-tool-badge-container {\
- display: block;\
- position: relative;\
- }\
- .pv-pic-window-tb-tool-badge {\
- position: absolute;\
- top: -3px;\
- right: 1px;\
- font-size: 10px;\
- line-height: 1.5;\
- padding: 0 3px;\
- background-color: #F93;\
- border-radius: 50px;\
- opacity: 0.5;\
- color: black;\
- }\
- .pv-pic-window-overlayer{\
- height:100%;\
- width:100%;\
- position:fixed;\
- z-index:999999999;\
- top:0;\
- left:0;\
- }\
- .pv-pic-window-rotate-indicator{\
- cursor: progress;\
- position:absolute;\
- z-index:1100000000;\
- width:250px;\
- height:250px;\
- padding:10px;\
- margin-top:-135px;\
- margin-left:-135px;\
- background:transparent url("'+ prefs.icons.rotateIndicatorBG +'") no-repeat center;\
- }\
- .pv-pic-window-rotate-indicator-pointer{\
- display:block;\
- margin-left:auto;\
- margin-right:auto;\
- background:transparent url("'+ prefs.icons.rotateIndicatorPointer +'") no-repeat center;\
- width:60px;\
- height:240px;\
- position:relative;\
- top:5px;\
- }\
- .pv-pic-window-range{\
- position:absolute;\
- border:none;\
- width:100px;\
- height:100px;\
- box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.8);\
- display:none;\
- padding:0;\
- background-color:rgba(255, 0, 0, 0.150);\
- }\
- ';
- document.querySelector('head').appendChild(style);
- },
- addRotateIndicator:function(){
- if(ImgWindowC.rotateIndicator)return;
- var rotateIndicator=document.createElement('span');
- rotateIndicator.className='pv-pic-window-rotate-indicator';
- ImgWindowC.rotateIndicator=rotateIndicator;
- rotateIndicator.style.cssText='\
- display:none;\
- ';
- var rotateIndicatorPointer=document.createElement('span');
- rotateIndicatorPointer.className='pv-pic-window-rotate-indicator-pointer';
- ImgWindowC.rotateIndicatorPointer=rotateIndicatorPointer;
- rotateIndicator.appendChild(rotateIndicatorPointer);
- document.body.appendChild(rotateIndicator);
- },
- keepScreenInside:function(){//保持按钮在屏幕里面.
- var imgWindow=this.imgWindow;
- var imgWindowFullSize={
- h:imgWindow.offsetHeight,
- w:imgWindow.offsetWidth,
- };
-
- var windowSize=getWindowSize();
-
- function keepSI(obj,offsetDirection,defaultValue){
- var objRect=obj.getBoundingClientRect();
- var objStyle=obj.style;
-
- while(offsetDirection.length){
- var oD=offsetDirection[0];
- var oDV=defaultValue[0];
- offsetDirection.shift();
- defaultValue.shift();
- var oValue=parseFloat(objStyle[oD]);
- var newValue;
- switch(oD){
- case 'top':{
- newValue=oValue - objRect.top;
- if(objRect.top<0){
- newValue=Math.min(newValue,imgWindowFullSize.h);
- }else{
- newValue=Math.max(newValue,oDV);
- };
- }break;
- case 'right':{
- newValue=oValue + (objRect.right - windowSize.w);
- if(objRect.right > windowSize.w){//屏幕外
- newValue=Math.min(newValue,imgWindowFullSize.w);
- }else{
- newValue=Math.max(newValue,oDV);
- };
- }break;
- case 'bottom':{
- newValue=oValue + (objRect.bottom - windowSize.h);
- if(objRect.bottom > windowSize.h){//屏幕外
- newValue=Math.min(newValue,imgWindowFullSize.h);
- }else{
- newValue=Math.max(newValue,oDV);
- };
- }break;
- case 'left':{
- newValue=oValue - objRect.left;
- if(objRect.left<0){
- newValue=Math.min(newValue,imgWindowFullSize.w);
- }else{
- newValue=Math.max(newValue,oDV);
- }
- }break;
- };
- //console.log(newValue);
- objStyle[oD]=newValue + 'px';
-
- };
- };
-
- keepSI(this.closeButton,['top','right'],[-24,0]);
- keepSI(this.toolbar,['top','left'],[0,-45]);
- },
- fitToScreen:function(){
- var wSize=getWindowSize();
- //空隙
- wSize.h -= 16;
- wSize.w -= 16;
-
- var imgWindow=this.imgWindow;
- var imgWindowCS=getComputedStyle(imgWindow,'');
- var rectSize={
- h:parseFloat(imgWindowCS.height),
- w:parseFloat(imgWindowCS.width),
- };
-
-
- var size;
- if(rectSize.w - wSize.w>0 || rectSize.h - wSize.h>0){//超出屏幕,那么缩小。
- if(rectSize.w/rectSize.h > wSize.w/wSize.h){
- size={
- w:wSize.w,
- h:wSize.w / (rectSize.w/rectSize.h),
- };
- }else{
- size={
- h:wSize.h,
- w:wSize.h * (rectSize.w/rectSize.h),
- }
- };
-
- this.zoom(this.getRotatedImgCliSize(size).w/this.imgNaturalSize.w);
- };
- },
- center:function(horizontal,vertical){
- if(!horizontal && !vertical)return;
- var wSize=getWindowSize();
- var imgWindow=this.imgWindow;
- if(horizontal)imgWindow.style.left= (wSize.w - imgWindow.offsetWidth)/2 + window.scrollX +'px';
- if(vertical)imgWindow.style.top= (wSize.h - imgWindow.offsetHeight)/2 + window.scrollY +'px';
- },
- move:function(e){
- this.working=true;
- var mouseCoor={
- x:e.pageX,
- y:e.pageY,
- };
- var imgWindow=this.imgWindow;
- var imgWStyle=imgWindow.style;
- var oriOffset={
- left:parseFloat(imgWStyle.left),
- top:parseFloat(imgWStyle.top),
- };
- var self=this;
- var moveHandler=function(e){
- imgWStyle.left=oriOffset.left+ e.pageX-mouseCoor.x +'px';
- imgWStyle.top=oriOffset.top + e.pageY-mouseCoor.y +'px';
- self.keepScreenInside();
- };
- var mouseupHandler=function(){
- e.preventDefault();
- self.working=false;
- if(self.tempHand && self.spaceKeyUp){//如果是临时切换到抓手工具,平移完成后返回上个工具
- self.tempHand=false;
- self.changeCursor(self.selectedTool);
- };
- document.removeEventListener('mousemove',moveHandler,true);
- document.removeEventListener('mouseup',mouseupHandler,true);
- };
- document.addEventListener('mousemove',moveHandler,true);
- document.addEventListener('mouseup',mouseupHandler,true);
- },
- rotate:function(origin,topLeft){
-
- var img=this.img;
- var imgWindow=this.imgWindow;
-
- var iTransform=img.style[support.cssTransform].replace(/rotate\([^)]*\)/i,'');
-
- var imgWindowCS=getComputedStyle(imgWindow,'');
- var imgRectSize={
- h:parseFloat(imgWindowCS.height),
- w:parseFloat(imgWindowCS.width),
- };
-
- var rectOffset={
- top:parseFloat(imgWindow.style.top),
- left:parseFloat(imgWindow.style.left),
- };
-
- var imgSize={
- h:img.clientHeight,
- w:img.clientWidth,
- };
-
- var imgOffset={
- top:parseFloat(img.style.top),
- left:parseFloat(img.style.left),
- };
-
-
- var self=this;
- var PI=Math.PI;
-
- var rotate=function (radians){
- if(self.rotatedRadians==radians)return;
- img.style[support.cssTransform] = ' rotate('+ radians +'rad) ' + iTransform;
- ImgWindowC.rotateIndicatorPointer.style[support.cssTransform]='rotate('+ radians +'rad)';
-
- self.rotatedRadians=radians;
- self.setToolBadge('rotate',radians/(PI/180));
-
- var afterimgRectSize=self.getRotatedImgRectSize( radians, imgSize );
- imgWindow.style.width=afterimgRectSize.w +'px';
- imgWindow.style.height=afterimgRectSize.h + 'px';
- if(!topLeft)self.setImgWindowOffset(rectOffset,imgRectSize,afterimgRectSize);
- self.setImgOffset(imgOffset,imgRectSize,afterimgRectSize);
- self.keepScreenInside();
- };
-
-
- if(typeof origin=='number'){
- rotate(origin);
- return;
- };
-
-
- this.working=true;
-
- var lastRotatedRadians=this.rotatedRadians;
- this.shiftKeyUp=true;
- var shiftRotateStep=prefs.shiftRotateStep / (180/Math.PI);//转成弧度
-
- var moveHandler=function(e){
- var radians=lastRotatedRadians + Math.atan2( e.pageY - origin.pageY, e.pageX - origin.pageX );
-
- if(radians>2*PI){
- radians-=2*PI;
- }else if(radians<0){
- radians+=2*PI;
- };
-
- if(!self.shiftKeyUp){//如果按下了shift键,那么步进缩放
- radians -= radians % shiftRotateStep;
- radians += shiftRotateStep;
- };
- rotate(radians);
- };
-
- var mouseupHandler=function(){
- self.working=false;
- ImgWindowC.rotateIndicator.style.display='none';
- document.removeEventListener('mousemove',moveHandler,true);
- document.removeEventListener('mouseup',mouseupHandler,true);
- };
-
- document.addEventListener('mousemove',moveHandler,true);
- document.addEventListener('mouseup',mouseupHandler,true);
- },
- getNextZoomLevel:function(){
- var level;
- var self=this;
- if(this.zoomOut){//缩小
- ImgWindowC.zoomRangeR._find(function(value){
- if(value < self.zoomLevel){
- level=value;
- return true;
- }
- })
- }else{
- ImgWindowC.zoomRange._find(function(value){
- if(value > self.zoomLevel){
- level=value;
- return true;
- };
- });
- }
- return level;
- },
- getZoomRatio:function(mouseCoor){
- var ibcRect=this.img.getBoundingClientRect();
- var ratio={
- x:(mouseCoor.x-ibcRect.left)/ibcRect.width,
- y:(mouseCoor.y-ibcRect.top)/ibcRect.height,
- };
- if(ratio.x<0){
- ratio.x=0
- }else if(ratio.x>1){
- ratio.x=1
- };
- if(ratio.y<0){
- ratio.y=0
- }else if(ratio.y>1){
- ratio.y=1
- };
- return ratio;
- },
- zoom:function(e,ratio){//e可能是undefined,可能是事件对象,可能是直接的缩放级别数字
- var imgWindow=this.imgWindow;
- var imgWindowCS=getComputedStyle(imgWindow,'');
- var imgRectSize={
- h:parseFloat(imgWindowCS.height),
- w:parseFloat(imgWindowCS.width),
- };
-
- var rectOffset={
- top:parseFloat(imgWindow.style.top),
- left:parseFloat(imgWindow.style.left),
- };
-
- var img=this.img;
- var self=this;
-
- var zoom=function(level){//缩放到指定级别
- if(typeof level==='undefined' || level<0 || level==self.zoomLevel)return;
-
- var afterImgSize={
- h:self.imgNaturalSize.h * level,
- w:self.imgNaturalSize.w * level,
- };
- img.width=afterImgSize.w;
- img.height=afterImgSize.h;
-
- var afterimgRectSize=self.getRotatedImgRectSize( self.rotatedRadians, afterImgSize );
- imgWindow.style.width=afterimgRectSize.w +'px';
- imgWindow.style.height=afterimgRectSize.h + 'px';
- self.setImgWindowOffset(rectOffset,imgRectSize,afterimgRectSize,ratio);
- self.setImgOffset({top:0,left:0},afterImgSize,afterimgRectSize);//如果旋转了,调整偏移
- self.zoomLevel=level;
- self.setToolBadge('zoom',level);
- self.keepScreenInside();
- };
-
- if(typeof e!='object'){
- ratio=ratio? ratio : {
- x:1/2,
- y:1/2,
- };
- zoom(e);
- return;
- };
-
- this.working=true;
-
- ratio=this.getZoomRatio({
- x:e.clientX,
- y:e.clientY,
- });
-
-
- var moved;
- var lastPageX=e.pageX;
- var currentLevel=this.zoomLevel;
- var moveHandler=function(e){
- moved=true;
- var pageX=e.pageX;
- var level;
- if(pageX > lastPageX){//向右移,zoomin扩大
- self.changeCursor('zoom',false);
- level=0.05;
- }else{//向左移,zoomout缩小
- self.changeCursor('zoom',true);
- level=-0.05;
- };
- lastPageX=pageX;
- currentLevel += level;
- zoom(currentLevel);
- };
-
- var mouseupHandler=function(e){
- self.working=false;
- document.removeEventListener('mousemove',moveHandler,true);
- document.removeEventListener('mouseup',mouseupHandler,true);
-
- var level=self.getNextZoomLevel();
-
- if(self.zoomOut && self.altKeyUp){
- self.zoomOut=false;
- };
-
- if(!moved){//如果没有平移缩放。
- zoom(level);
- };
-
- self.changeCursor('zoom',self.zoomOut);
-
- if(self.tempZoom && self.ctrlKeyUp && self.altKeyUp){
- self.tempZoom=false;
- self.changeCursor(self.selectedTool);
- };
-
- };
-
- document.addEventListener('mousemove',moveHandler,true);
- document.addEventListener('mouseup',mouseupHandler,true);
- },
- convertToValidRadians:function(radians){
- //转成0-90的等价角度。
- var PI=Math.PI;
- if(radians > PI){
- radians = 2*PI - radians;
- };
- if(radians > 1/2*PI){
- radians = PI - radians;
- };
- return radians;
- },
- getRotatedImgRectSize:function( radians, imgSize ){//通过旋转后的角度和图片的大小,求虚拟矩形的大小
- imgSize= imgSize ? imgSize :{
- h:this.img.clientHeight,
- w:this.img.clentWidth,
- };
-
- if(typeof radians==='undefined'){
- radians = this.rotatedRadians;
- };
-
- radians=this.convertToValidRadians(radians);
-
- return {
- h:imgSize.h* Math.cos(radians) + imgSize.w * Math.sin(radians),
- w:imgSize.h* Math.sin(radians) + imgSize.w * Math.cos(radians),
- };
- },
- getRotatedImgCliSize:function(rectSize,radians){//通过虚拟矩形的大小和图片的旋转角度,求图片的大小
-
- if(typeof radians==='undefined'){
- radians = this.rotatedRadians;
- };
-
- radians=this.convertToValidRadians(radians);
-
- if(radians==0){
- //radians=Math.PI/180 * 1/100;
- return rectSize;
- };
-
- var h=(rectSize.h-rectSize.w * Math.tan(radians))/(Math.cos(radians)-Math.sin(radians)*Math.tan(radians));
- var w=(rectSize.h - h*Math.cos(radians))/Math.sin(radians);
- return {
- h:h,
- w:w,
- };
-
- },
- setImgOffset:function(oriOffset,bImgSize,aImgSize){
- var imgStyle=this.img.style;
- var top=Math.floor(oriOffset.top + (aImgSize.h-bImgSize.h)*1/2) + 'px';
- var left=Math.floor(oriOffset.left + (aImgSize.w-bImgSize.w)*1/2) + 'px';
- imgStyle.top= top;
- imgStyle.left= left;
- },
- setImgWindowOffset:function(oriOffset,bImgWindowSize,aImgWidnowSize,ratio){
- ratio= ratio? ratio : {x:1/2,y:1/2};
- var imgWindowStyle=this.imgWindow.style;
- var top=oriOffset.top - (aImgWidnowSize.h-bImgWindowSize.h)*ratio.y + 'px';
- var left=oriOffset.left - (aImgWidnowSize.w-bImgWindowSize.w)*ratio.x + 'px';
- imgWindowStyle.top= top;
- imgWindowStyle.left= left;
- },
- setToolBadge:function(tool,content){
- var scale=0;
- switch(tool){
- case 'zoom':{
- scale=2;
- }break;
- case 'rotate':{
- scale=1;
- }break;
- default:break;
- }
- content=typeof content=='string'? content : content.toFixed(scale);
- this.toolMap[tool].nextElementSibling.textContent=content;
- },
- changeCursor:function(tool,zoomOut){
- if(tool=='zoom'){
- tool+=zoomOut? '-out' : '-in';
- };
- if(this.cursor==tool)return;
- this.cursor=tool;
- var imgWStyle=this.imgWindow.style;
- switch(tool){
- case 'hand':{
- imgWStyle.cursor='pointer';
- }break;
- case 'zoom-in':{
- imgWStyle.cursor=support.cssCursorValue.zoomIn;
- }break;
- case 'zoom-out':{
- imgWStyle.cursor=support.cssCursorValue.zoomOut;
- }break;
- case 'rotate':{
- imgWStyle.cursor='progress';
- }break;
- case 'default':{
- imgWStyle.removeProperty('cursor');
- }break;
- default:break;
- };
- },
- blur:function(e){
- if(!this.focused)return;
- var imgWindow =this.imgWindow;
- //点击imgWinodw的外部的时候失去焦点
- if(e!==true && (imgWindow==e.target || (imgWindow.compareDocumentPosition(e.target) & 16)))return;
- imgWindow.classList.remove('pv-pic-window-container_focus');
- this.toolbar.classList.remove('pv-pic-window-toolbar_focus');
- this.closeButton.classList.remove('pv-pic-window-close_focus');
- this.img.classList.remove('pv-pic-window-pic_focus');
- document.removeEventListener('mousedown',this._blur,true);
- document.removeEventListener('keydown',this._focusedKeydown,true);
- document.removeEventListener('keyup',this._focusedKeyup,true);
- this.changeCursor('default');
- this.focused=false;
- },
- focus:function(){
- if(this.focused)return;
- this.imgWindow.classList.add('pv-pic-window-container_focus');
- this.toolbar.classList.add('pv-pic-window-toolbar_focus');
- this.closeButton.classList.add('pv-pic-window-close_focus');
- this.img.classList.add('pv-pic-window-pic_focus');
- this.imgWindow.style.zIndex= ImgWindowC.styleZIndex;
- this.zIndex=ImgWindowC.styleZIndex;
- ImgWindowC.styleZIndex ++;
- document.addEventListener('keydown',this._focusedKeydown,true);
- document.addEventListener('keyup',this._focusedKeyup,true);
- document.addEventListener('mousedown',this._blur,true);
- this.changeCursor(this.selectedTool);//还原鼠标样式。
- this.focused=true;
- },
- focusedKeyup:function(e){
- var keyCode=e.keyCode;
- var valid=[32,18,16,72,17,72,82,90,67];
- if(valid.indexOf(keyCode)==-1)return;
-
- e.preventDefault();
-
- switch(keyCode){
- case 32:{//空格键,临时切换到移动
- this.spaceKeyUp=true;
- if(!this.tempHand)return;//如果之前没有临时切换到抓手工具(当已经在工作的时候,按下空格不会临时切换到抓手工具)
- if(!this.working){//松开按键的时候,没有在继续平移了。
- this.tempHand=false;
- this.changeCursor(this.selectedTool);
- };
- }break;
- case 18:{//alt键盘切换缩小放大。
- this.altKeyUp=true;
- if(!this.zoomOut)return;
- if(!this.working){
- this.zoomOut=false;
- this.changeCursor('zoom');
- if(this.tempZoom && this.ctrlKeyUp){
- this.tempZoom=false;
- this.changeCursor(this.selectedTool);
- };
- };
- }break;
- case 16:{//shift键,旋转的时候按住shift键,步进缩放。
- this.shiftKeyUp=true;
- }break;
- case 17:{//ctrl键
- clearTimeout(this.ctrlkeyDownTimer);
- if(!this.justCKeyUp){//如果刚才没有松开c,规避划词软件的ctrl+c松开
- this.ctrlKeyUp=true;
- if(!this.tempZoom)return;//如果没有切换到了缩放
- if(!this.working && this.altKeyUp){
- this.tempZoom=false;
- this.changeCursor(this.selectedTool);
- };
- };
- }break;
- case 67:{//c键
- this.justCKeyUp=true;
- var self=this;
- clearTimeout(this.justCKeyUpTimer);
- this.justCKeyUpTimer=setTimeout(function(){
- self.justCKeyUp=false;
- },100)
- }break;
- case 72:{//h键
- this.hKeyUp=true;
- }break;
- case 82:{//r键
- this.rKeyUp=true;
- }break;
- case 90:{//z键
- this.zKeyUp=true;
- }break;
- default:break;
- };
-
- if([72,82,90].indexOf(keyCode)!=-1){
- if(!this.working && this.restoreBeforeTool){
- this.restoreBeforeTool=false;
- this.selectTool(this.beforeTool);
- };
- };
- },
- focusedKeydown:function(e){
- var keyCode=e.keyCode;
- var valid=[32,82,72,90,18,16,17,27,67];//有效的按键
- if(valid.indexOf(keyCode)==-1) return;
-
- e.preventDefault();
-
- if(this.working){//working的时候也可以接受按下shift键,以便旋转的时候可以任何时候按下
- if(keyCode==16){//shift键
- this.shiftKeyUp=false;
- };
- return;
- };
-
- switch(keyCode){
- case 82:{//r键,切换到旋转工具
- if(this.rKeyUp){
- this.rKeyUp=false;
- this.beforeTool=this.selectedTool;
- this.selectTool('rotate');
- };
- }break;
- case 72:{//h键,切换到抓手工具
- if(this.hKeyUp){
- this.hKeyUp=false;
- this.beforeTool=this.selectedTool;
- this.selectTool('hand');
- };
- }break;
- case 90:{//z键,切换到缩放工具
- if(this.zKeyUp){
- this.zKeyUp=false;
- this.beforeTool=this.selectedTool;
- this.selectTool('zoom');
- };
- }break;
- case 32:{//空格键阻止,临时切换到抓手功能
- if(this.spaceKeyUp){
- this.spaceKeyUp=false;
- if(this.selectedTool!='hand'){
- this.tempHand=true;
- this.changeCursor('hand');
- };
- };
- }break;
- case 18:{//alt键,在当前选择是缩放工具的时候,按下的时候切换到缩小功能
- if(this.altKeyUp){
- if((this.selectedTool!='zoom' && !this.tempZoom) || this.zoomOut)return;
- this.zoomOut=true;
- this.altKeyUp=false;
- this.changeCursor('zoom',true);
- };
- }break;
- case 17:{//ctrl键临时切换到缩放工具
- if(this.ctrlKeyUp){
- var self=this;
- this.ctrlkeyDownTimer=setTimeout(function(){//规避词典软件的ctrl+c,一瞬间切换到缩放的问题
- self.ctrlKeyUp=false;
- if(self.selectedTool!='zoom'){
- self.tempZoom=true;
- self.changeCursor('zoom');
- };
- },100);
- };
- }break;
- case 67:{//c键
- clearTimeout(this.ctrlkeyDownTimer);
- }break;
- case 27:{//ese关闭窗口
- this.remove();
- }break;
- default:break;
- };
- },
- toolbarEventHandler:function(e){
- e.stopPropagation();
- var target=e.target;
- var toolMap=this.toolMap;
- for(var i in toolMap){
- if(toolMap.hasOwnProperty(i) && toolMap[i]==target){
- switch(e.type){
- case 'mousedown':{
- this.selectTool(i);
- }break;
- case 'dblclick':{
- this.dblclickCommand(i);
- }break;
- default:break;
- };
- break;
- };
- };
- },
- imgWindowEventHandler:function(e){
- e.stopPropagation();
- switch(e.type){
- case 'click':{//阻止opera的图片保存
- if(e.ctrlKey && e.target.nodeName=='IMG'){
- e.preventDefault();
- };
- }break;
- case 'mousedown':{
- if(!this.focused){//如果没有focus,先focus
- this.focus();
- this.keepScreenInside();
- };
-
- var target=e.target;
- if(e.button!=0 || (target!=this.imgWindow && target!=this.img))return;
- var selectedTool=this.selectedTool;
- if(this.tempHand){
- this.move(e);
- }else if(this.tempZoom){
- this.zoom(e);
- }else if(selectedTool=='hand'){
- this.restoreBeforeTool=!this.hKeyUp;
- if(this.hKeyUp){
- this.move(e);
- }else{//鸟瞰视图
- this.aerialView(e);
- };
- }else if(selectedTool=='rotate'){
- var rIS=ImgWindowC.rotateIndicator.style;
- rIS.display='block';
- var origin={//旋转原点
- pageX:e.pageX - 30,//稍微偏左一点。
- pageY:e.pageY,
- };
- rIS.top=origin.pageY + 'px';
- rIS.left=origin.pageX + 'px';
- ImgWindowC.rotateIndicatorPointer.style[support.cssTransform]='rotate(' + this.rotatedRadians + 'rad)';
- this.restoreBeforeTool=!this.rKeyUp;
- this.rotate(origin);
- }else if(selectedTool=='zoom'){
- this.restoreBeforeTool=!this.zKeyUp;
- this.zoom(e);
- };
- }break;
- case 'wheel':{
- if(!this.focused)return;//如果没有focus
- if(e.deltaY===0)return;//非Y轴的滚动
- e.preventDefault();
- if(this.working)return;
- var oriZoomOut=this.zoomOut;
- this.zoomOut = !!(e.deltaY > 0);
-
- var ratio=this.getZoomRatio({
- x:e.clientX,
- y:e.clientY,
- });
-
- var level=this.getNextZoomLevel();
-
- this.zoom(level,ratio);
- this.zoomOut=oriZoomOut;
- }break;
- default:break;
- };
- },
- dblclickCommand:function(tool){
- var done;
- switch(tool){
- case 'hand':{//双击居中,并且适应屏幕
- this.zoom(1);
- this.fitToScreen();
- this.center(true,true);
- this.keepScreenInside();
- }break;
- case 'rotate':{//双击还原旋转
- if(this.rotatedRadians==0)return;
- done=true;
- this.rotate(0,true);
- }break;
- case 'zoom':{//双击还原缩放
- if(this.zoomLevel==1)return;
- done=true;
- this.zoom(1,{x:0,y:0});
- }break;
- default:break;
- };
-
- if((tool=='rotate' || tool=='zoom') && done){
- var imgWindow=this.imgWindow;
- var imgWinodowRect=imgWindow.getBoundingClientRect();
- var imgWindowStyle=imgWindow.style;
- if(imgWinodowRect.left<40){
- imgWindowStyle.left=40 + window.scrollX + 'px';
- };
- if(imgWinodowRect.top<-5){
- imgWindowStyle.top=-5 + window.scrollY +'px';
- };
- this.keepScreenInside();
- };
-
- },
- doFlipCommand:function(command){
- var map={
- fv:[/scaleY\([^)]*\)/i,' scaleY(-1) '],
- fh:[/scaleX\([^)]*\)/i,' scaleX(-1) '],
- };
-
- var iTransform=this.img.style[support.cssTransform];
-
- var toolClassList=this.toolMap[command].classList;
-
- if(map[command][0].test(iTransform)){
- iTransform=iTransform.replace(map[command][0],'');
- toolClassList.remove(this.selectedToolClass);
- }else{
- iTransform += map[command][1];
- toolClassList.add(this.selectedToolClass);
- };
- this.img.style[support.cssTransform]=iTransform;
-
- },
- selectTool:function(tool){
- var command=['fv','fh'];
- if(command.indexOf(tool)==-1){//工具选择
- if(this.selectedTool==tool)return;
- var selectedTool=this.selectedTool;
- this.selectedTool=tool;
- if(this.tempHand || this.tempZoom){//临时工具中。不变鼠标
- return;
- };
- this.toolMap[selectedTool].classList.remove(this.selectedToolClass);
- this.toolMap[tool].classList.add(this.selectedToolClass);
- this.changeCursor(tool);
- }else{//命令
- this.doFlipCommand(tool);
- };
- },
- remove:function(){
- if(this.removed)return;
- this.removed=true;
- this.blur(true);
- this.img.src='';//如果在加载中取消,图片也取消读取。
- if(this.overlayer){
- this.overlayer.parentNode.removeChild(this.overlayer);
- };
- this.imgWindow.parentNode.removeChild(this.imgWindow);
-
- var index=ImgWindowC.all.indexOf(this);
- ImgWindowC.all.splice(index,1);
-
- //focus next
- var topmost=0;
- ImgWindowC.all.forEach(function(iwin){
- if(iwin.zIndex > topmost){
- topmost=iwin;
- };
- });
- if(topmost){
- topmost.focus();
- };
- },
- aerialView:function(e){
- this.working=true;
- //记住现在的缩放比例
- var cLevel=this.zoomLevel;
-
- var wSize=getWindowSize();
- wSize.h -= 16;
- wSize.w -= 16;
-
- var imgWindow=this.imgWindow;
- var imgWindowCS=getComputedStyle(imgWindow,'');
- var rectSize={
- h:parseFloat(imgWindowCS.height),
- w:parseFloat(imgWindowCS.width),
- };
- var rectRatio=rectSize.h/rectSize.w;
- var windowRatio=wSize.h/wSize.w;
-
- var size;
- var rangeSize={};
- if(rectRatio > windowRatio){
- size={
- h:wSize.h,
- w:wSize.h / rectRatio,
- };
- rangeSize.h=Math.min(wSize.h * (size.h / rectSize.h), size.h);
- rangeSize.w=Math.min(rangeSize.h / windowRatio , size.w);
- }else{
- size={
- w:wSize.w,
- h:wSize.w * rectRatio,
- };
- rangeSize.w=Math.min(wSize.w * (size.w / rectSize.w), size.w);
- rangeSize.h=Math.min(rangeSize.w * windowRatio , size.h);
- };
-
-
- this.zoom(this.getRotatedImgCliSize(size).w/this.imgNaturalSize.w);
-
- this.center(true,true);
-
- this.keepScreenInside();
-
- var viewRange=this.viewRange;
- var vRS=viewRange.style;
- vRS.display='block';
- vRS.height=rangeSize.h + 'px';
- vRS.width=rangeSize.w + 'px';
- vRS.top=0 + 'px';
- vRS.left=0 + 'px';
-
-
-
- var viewRangeRect=viewRange.getBoundingClientRect();
- var viewRangeCenterCoor={
- x:viewRangeRect.left + window.scrollX + 1/2 * rangeSize.w,
- y:viewRangeRect.top + window.scrollY + 1/2 * rangeSize.h,
- };
-
- var self=this;
-
- var moveRange={
- x:[8,8+size.w-rangeSize.w],
- y:[8,8+size.h-rangeSize.h]
- };
-
-
- function setViewRangePosition(pageXY){
- var top=pageXY.y - viewRangeCenterCoor.y;
- var left=pageXY.x - viewRangeCenterCoor.x;
- if(top<=moveRange.y[0]){
- top=moveRange.y[0];
- }else if(top>=moveRange.y[1]){
- top=moveRange.y[1];
- };
- vRS.top= top + 'px';
- if(left<=moveRange.x[0]){
- left=moveRange.x[0];
- }else if(left>=moveRange.x[1]){
- left=moveRange.x[1];
- };
- vRS.left= left + 'px';
- };
-
- setViewRangePosition({
- x:e.pageX,
- y:e.pageY,
- });
-
- var moveHandler=function(e){
- setViewRangePosition({
- x:e.pageX,
- y:e.pageY,
- });
- };
-
- var mouseupHandler=function(){
- self.working=false;
- viewRange.style.display='none';
- self.zoom(cLevel);
- imgWindow.style.top= -13 - rectSize.h * ((parseFloat(vRS.top) - moveRange.y[0])/size.h) + window.scrollY +'px';
- imgWindow.style.left= -13 - rectSize.w * ((parseFloat(vRS.left) - moveRange.x[0])/size.w) + window.scrollX +'px';
-
- //说明图片的高度没有屏幕高,居中
- //说明图片的宽度没有屏幕宽,居中
- self.center(rangeSize.w == size.w , rangeSize.h == size.h);
-
- self.keepScreenInside();
-
- document.removeEventListener('mousemove',moveHandler,true);
- document.removeEventListener('mouseup',mouseupHandler,true);
- };
- document.addEventListener('mousemove',moveHandler,true);
- document.addEventListener('mouseup',mouseupHandler,true);
- },
- };
-
-
- //载入动画
- function LoadingAnimC(data,buttonType,waitImgLoad,openInTopWindow){
- this.data=data;//data
- this.buttonType=buttonType;//点击的按钮类型
- this.openInTopWindow=openInTopWindow;//是否在顶层窗口打开,如果在frame里面的话
- this.waitImgLoad=waitImgLoad;//是否等待完全读取后打开
- this.init();
- };
-
- LoadingAnimC.all=[];
-
- LoadingAnimC.prototype={
- init:function(){
- LoadingAnimC.all.push(this);
- this.addStyle();
- var container=document.createElement('span');
-
- container.classList.add('pv-loading-container');
- this.loadingAnim=container;
-
- container.title='正在加载:' + this.data.src;
- container.innerHTML=''+
- '<span class="pv-loading-error" style="display:none;">Error</span>'+
- '<span class="pv-loading-cancle" title="取消"></span>';
-
-
- var loadingError=container.querySelector('.pv-loading-error');
- var loadingCancle=container.querySelector('.pv-loading-cancle');
-
- this.loadingError=loadingError;
- this.loadingCancle=loadingCancle;
-
- var self=this;
- loadingCancle.addEventListener('click',function(e){
- self.imgReady.abort();
- self.remove();
- },true);
-
- document.body.appendChild(container);
- this.setPosition();
-
- var img=new Image();
- img.src= this.buttonType=='current'? this.data.imgSrc : this.data.src;
-
- var opts={
- error:function(e){
- self.error(this,e);
- },
- };
-
- opts[this.waitImgLoad? 'load' : 'ready' ]=function(e){
- self.load(this,e);
- };
-
- this.imgReady=imgReady(img,opts);
- },
- addStyle:function(){
- if(LoadingAnimC.styleAdded)return;
- LoadingAnimC.styleAdded=true;
- var style=document.createElement('style');
- style.type='text/css';
- style.textContent='\
- .pv-loading-container {\
- position: absolute;\
- z-index:999999997;\
- top: 100px;\
- left: 100px;\
- background-color: black;\
- background-image: url("'+prefs.icons.loading+'");\
- background-repeat: no-repeat;\
- background-position: center;\
- background-origin: content-box;\
- border: none;\
- padding: 1px 30px 1px 2px;\
- margin: 0;\
- opacity: 0.6;\
- height: 24px;\
- min-width: 24px;\
- box-shadow: 2px 2px 0px #666;\
- -webkit-transition: opacity 0.15s ease-in-out;\
- transition: opacity 0.15s ease-in-out;\
- }\
- .pv-loading-container:hover {\
- opacity: 0.9;\
- }\
- .pv-loading-cancle {\
- cursor: pointer;\
- background-image: url("'+prefs.icons.loadingCancle+'");\
- height: 24px;\
- width: 24px;\
- position: absolute;\
- right: 0;\
- top: 0;\
- opacity: 0.2;\
- display: block;\
- -webkit-transition: opacity 0.15s ease-in-out;\
- transition: opacity 0.15s ease-in-out;\
- }\
- .pv-loading-cancle:hover {\
- opacity: 1;\
- }\
- .pv-loading-error {\
- line-height: 24px;\
- color: red;\
- font-size: 12px;\
- }\
- ';
- document.querySelector('head').appendChild(style);
- },
- remove:function(){
- if(!this.removed){
- this.removed=true;
- this.loadingAnim.parentNode.removeChild(this.loadingAnim);
- LoadingAnimC.all.splice(LoadingAnimC.all.indexOf(this),1);
- };
- },
- error:function(img,e){
- this.loadingAnim.style.backgroundImage='none';
- this.loadingError.style.removeProperty('display');
- var self=this;
- setTimeout(function(){
- self.remove();
- },2000)
- },
- setPosition:function(){
- var position=getTargetPosition(this.data.img);
- var cs=this.loadingAnim.style;
- cs.top=position.top +1 + 'px';
- cs.left=position.left +1 + 'px';
- cs.removeProperty('display');
- },
- load:function(img,e){
- this.remove();
- this.img=img;
- var buttonType=this.buttonType;
-
- if(buttonType=='gallery'){
- var allData=this.getAllValidImgs();
- allData.target=this.data;
- this.data=allData;
- };
-
- if(this.openInTopWindow && isFrame && buttonType!='magnifier'){
- var data=this.data;
- //删除不能发送的项。
- var delCantClone=function(obj){
- delete obj.img;
- delete obj.imgPA;
- };
- if(Array.isArray(data)){
- delCantClone(data.target);
- data.forEach(function(obj){
- delCantClone(obj);
- });
- }else{
- delCantClone(data);
- };
-
- window.postMessage({
- messageID:messageID,
- src:img.src,
- data:data,
- buttonType:buttonType,
- to:'top',
- },'*');
- }else{
- this.open();
- };
-
-
- },
- getAllValidImgs:function(){
- var imgs=document.getElementsByTagName('img'),//html collection
- validImgs=[]
- ;
- arrayFn.forEach.call(imgs,function(img,index,imgs){
- var result=findPic(img);
- if(result){
- validImgs.push(result);
- };
- });
- return validImgs;
- },
- open:function(){
- switch(this.buttonType){
- case 'gallery':{
- if(!gallery){
- gallery=new GalleryC();
- };
- gallery.load(this.img,this.data,this.from);
- }break;
- case 'magnifier':{
- new MagnifierC(this.img,this.data);
- }break;
- case 'actual':;
- case 'current':;
- case 'original':{//original 是为了兼容以前的规则
- new ImgWindowC(this.img);
- }break;
- };
- },
- };
-
- //工具栏
- function FloatBarC(){
- this.init();
- };
-
-
- FloatBarC.prototype={
- init:function(){
- this.addStyle();
- var container=document.createElement('span');
- container.id='pv-float-bar-container';
- //innerHTML中的span不能加空格
- container.innerHTML=''+
- '<span class="pv-float-bar-button"></span>'+
- '<span class="pv-float-bar-button"></span>'+
- '<span class="pv-float-bar-button"></span>'+
- '<span class="pv-float-bar-button"></span>';
- document.body.appendChild(container);
-
- var buttons={};
- this.buttons=buttons;
- this.children=container.children;
-
- arrayFn.forEach.call(this.children,function(child,index,children){
- var titleMap={
- actual:'Tamaño REAL Size',
- gallery:'Picture Gallery | Galeria de Imágenes',
- current:'Current Size | Tamaño Actual',
- magnifier:'Lupa | Magnifier',
- };
- var buttonName=prefs.floatBar.butonOrder[index];
- buttons[buttonName]=child;
- child.title=titleMap[buttonName];
- child.classList.add('pv-float-bar-button-' + buttonName);
- });
-
-
- this.floatBar=container;
- this.shown=true;
- this.preShownImg=null;
-
-
- var self=this;
- container.addEventListener('click',function(e){
- var buttonType;
- var target=e.target;
- for(var type in buttons){
- if(!buttons.hasOwnProperty(type))return;
- if(target==buttons[type]){
- buttonType=type;
- break;
- };
- };
- if(!buttonType)return;
-
- self.hide();
- self.open(e,buttonType);
-
- },true);
-
-
- addCusMouseEvent('mouseleave',container,function(e){
- clearTimeout(self.hideTimer);
- self.hideTimer=setTimeout(function(){
- self.hide();
- },prefs.floatBar.hideDelay);
- });
-
- addCusMouseEvent('mouseenter',container,function(e){
- clearTimeout(self.hideTimer);
- });
- },
- addStyle:function(){
- var style=document.createElement('style');
- style.type='text/css';
- style.textContent='\
- #pv-float-bar-container {\
- position: absolute;\
- z-index:999999998;\
- top: -100px;\
- left: -100px;\
- padding: 5px;\
- margin: 0;\
- border: none;\
- opacity: 0.6;\
- line-height: 0;\
- -webkit-transition: opacity 0.2s ease-in-out;\
- transition: opacity 0.2s ease-in-out;\
- }\
- #pv-float-bar-container:hover {\
- opacity: 1;\
- }\
- .pv-float-bar-button {\
- cursor: pointer;\
- width: 18px;\
- height: 18px;\
- padding: 1px;\
- margin: 0;\
- border: none;\
- display: inline-block;\
- position: relative;\
- border-radius: 100px;\
- box-shadow: 1px 1px 3px 0px black;\
- background-color: transparent;\
- background-repeat: no-repeat;\
- background-origin: content-box;\
- background-clip: content-box;\
- background-size: 100% 100%;\
- -webkit-transition: margin-left 0.15s ease-in-out, width 0.15s ease-in-out, height 0.15s ease-in-out;\
- transition: margin-left 0.15s ease-in-out, width 0.15s ease-in-out, height 0.15s ease-in-out;\
- }\
- .pv-float-bar-button:nth-child(n+2){\
- margin-left: -16px;\
- }\
- .pv-float-bar-button:first-child {\
- z-index: 4;\
- }\
- .pv-float-bar-button:nth-child(2) {\
- z-index: 3;\
- }\
- .pv-float-bar-button:nth-child(3) {\
- z-index: 2;\
- }\
- .pv-float-bar-button:last-child {\
- z-index: 1;\
- }\
- #pv-float-bar-container:hover > .pv-float-bar-button {\
- width: 24px;\
- height: 24px;\
- }\
- #pv-float-bar-container:hover > .pv-float-bar-button:nth-child(n+2) {\
- margin-left: 0;\
- }\
- .pv-float-bar-button-actual {\
- background-image:url("'+ prefs.icons.actual +'");\
- background-color: red;\
- }\
- .pv-float-bar-button-gallery {\
- background-image:url("'+ prefs.icons.gallery +'");\
- background-color: yellow;\
- }\
- .pv-float-bar-button-current {\
- background-image:url("'+ prefs.icons.current +'");\
- background-color: blue;\
- }\
- .pv-float-bar-button-magnifier {\
- background-image:url("'+ prefs.icons.magnifier +'");\
- background-color: pink;\
- }\
- ';
- document.querySelector('head').appendChild(style);
- },
- start:function(data){
-
- //读取中的图片,不显示浮动栏,调整读取图标的位置.
- if(LoadingAnimC.all._find(function(item,index,array){
- if(data.img==item.data.img){
- return true;
- };
- }))return;
-
-
- //被放大镜盯上的图片,不要显示浮动栏.
- if(MagnifierC.all._find(function(item,index,array){
- if(data.img==item.data.img){
- return true;
- };
- }))return;
-
- this.data=data;
- var self=this;
- clearTimeout(this.hideTimer);
-
- var imgOutHandler=function(e){
- document.removeEventListener('mouseout',imgOutHandler,true);
- clearTimeout(self.showTimer);
- clearTimeout(self.hideTimer);
- self.hideTimer=setTimeout(function(){
- self.hide();
- },prefs.floatBar.hideDelay);
- };
-
- clearTimeout(this.globarOutTimer);
- this.globarOutTimer=setTimeout(function(){//稍微延时。错开由于css hover样式发生的out;
- document.addEventListener('mouseout',imgOutHandler,true);
- },100);
-
-
- if(data.img==this.preShownImg && this.shown){
- this.setPosition();
- return;
- };
-
- clearTimeout(this.showTimer);
- this.showTimer=setTimeout(function(){
- self.show();
- },prefs.floatBar.showDelay);
- },
- setButton:function(){
- if(this.data.type=='force'){
- this.buttons['actual'].style.display='none';
- this.buttons['magnifier'].style.display='none';
- }else{
- this.buttons['actual'].style.removeProperty('display');
- this.buttons['magnifier'].style.removeProperty('display');
- };
-
- //如果隐藏的按钮是第一个,css弹出层叠按钮的动画会有些维和,这些修正一下。
- var firstHidden;
- arrayFn._find.call(this.children,function(child, index, children){
- var cs=child.style;
- if(index==0){
- if(cs.display=='none'){
- firstHidden=true;
- };
- };
-
- if(firstHidden){//如果第一个是隐藏的,那么去掉以后第一个非隐藏的marginleft
- if(cs.display!='none'){
- cs.marginLeft=0;
- return true;
- };
- }else{
- cs.removeProperty('margin-left');
- };
- });
- },
- setPosition:function(){
- //如果图片被删除了,或者隐藏了。
- var bCR=this.data.img.getBoundingClientRect();
-
- if((bCR.left==0 && bCR.right==0) || (bCR.top==0 && bCR.bottom==0))return false;
-
- var targetPosi=getTargetPosition(this.data.img);
- var windowSize=getWindowSize();
-
- var floatBarPosi=prefs.floatBar.position.toLowerCase().trim().split(/\s+/);
-
- var offsetX=prefs.floatBar.offset.x;
- var offsetY=prefs.floatBar.offset.y;
-
-
- var scrollXY={
- x:window.scrollX,
- y:window.scrollY,
- };
-
- var fbs=this.floatBar.style;
- var setPosition={
- top:function(){
- var top=targetPosi.top;
- if(targetPosi.t < -offsetY){//满足图标被遮住的条件.
- top=scrollXY.y;
- offsetY=0;
- };
- fbs.top=top + offsetY + 'px';
- },
- right:function(){
- var right=windowSize.w - targetPosi.r;
- if(right < offsetX){
- right= -scrollXY.x;
- offsetX=0;
- }else{
- right -=scrollXY.x;
- };
- fbs.right=right - offsetX + 'px';
- },
- bottom:function(){
- var bottom=windowSize.h-targetPosi.b;
- if(bottom <= offsetY){
- offsetY=0;
- };
- bottom -= scrollXY.y;
- fbs.bottom=bottom - offsetY + 'px';
- },
- left:function(){
- var left=targetPosi.left;
- if(targetPosi.l < -offsetX){
- left=scrollXY.x;
- offsetX=0;
- };
- fbs.left=left + offsetX + 'px';
- },
- };
-
- setPosition[floatBarPosi[0]]();
- setPosition[floatBarPosi[1]]();
- },
- show:function(){
- if(this.setPosition()===false){
- return;
- };
- this.preShownImg=this.data.img;
- this.shown=true;
- this.setButton();
- this.floatBar.style.removeProperty('display');
- clearTimeout(this.hideTimer);
- },
- hide:function(){
- clearTimeout(this.showTimer);
- this.shown=false;
- this.floatBar.style.display='none';
- },
- open:function(e,buttonType){
- var waitImgLoad=e.ctrlKey? !prefs.waitImgLoad : prefs.waitImgLoad;//按住ctrl取反向值
- var openInTopWindow=e.shiftKey? !prefs.framesPicOpenInTopWindow : prefs.framesPicOpenInTopWindow;//按住shift取反向值
-
- if(!waitImgLoad && buttonType=='magnifier' && !envir.chrome){//非chrome的background-image需要全部载入后才能显示出来
- waitImgLoad=true;
- };
- new LoadingAnimC(this.data,buttonType,waitImgLoad,openInTopWindow);
- },
- };
-
-
- var matchedRule,
- URL=location.href,
- floatBar
- ;
-
- function findPic(img){
- var imgPA=getElementByXpath('./ancestor::a[1]',img);
-
- var iPASrc=imgPA? imgPA.href : '';
- //base64字符串过场导致正则匹配卡死浏览器
- var base64Img=/^data:[^;]+;base64,/i.test(img.src);
-
-
- if(matchedRule===undefined){//找到符合站点的高级规则,并缓存.
- matchedRule=siteInfo._find(function(site,index,array){
- if(site.enabled && site.url && site.url.test(URL)){
- return true;
- };
- });
- matchedRule=matchedRule? matchedRule[0] : false;
- //console.log('匹配的规则:',matchedRule);
- };
-
- var src, type;
-
- if(!src && matchedRule){//通过高级规则获取.
- try{
- src=matchedRule.getImage.call(img,img,imgPA);
- }catch(err){
- throwErrorInfo(err);
- };
-
- if(src)type='rule';
- };
-
- if(!src && !base64Img){//遍历通配规则
- tprules._find(function(rule,index,array){
- try{
- src=rule.call(img,img,imgPA);
- if(src){
- //console.log('匹配的通配规则',rule);
- return true;
- };
- }catch(err){
- throwErrorInfo(err);
- };
- });
- if(src)type='tpRule';
- };
-
- if(!src && imgPA){//链接可能是一张图片...
- if(/\.(?:jpg|jpeg|png|gif|bmp)$/i.test(iPASrc)){
- src=iPASrc;
- };
- if(src)type='scale';
- };
-
- if(!src){//本图片是否被缩放.
- var imgAS={//实际尺寸。
- h:img.naturalHeight,
- w:img.naturalWidth,
- };
- var imgCS=getCurrentSize(img);
- if(!(imgAS.w==imgCS.w && imgAS.h==imgCS.h)){//如果不是两者完全相等,那么被缩放了.
- if(imgAS.h > prefs.floatBar.minSizeLimit.h || imgAS.w > prefs.floatBar.minSizeLimit.w){//最小限定判断.
- src=img.src;
- type='scale';
- };
- }else{
- if(prefs.floatBar.forceShow.enabled && (imgCS.w>=prefs.floatBar.forceShow.size.w && imgCS.h>=prefs.floatBar.forceShow.size.h)){
- src=img.src;
- type='force';
- };
- };
- };
-
-
- if(!src)return;
-
- var ret={
- src:src,//得到的src
- type:type,//通过哪种方式得到的
- imgSrc:img.src,//处理的图片的src
- iPASrc:iPASrc,//图片的第一个父a元素的链接地址
-
- img:img,//处理的图片
- imgPA:imgPA,//图片的第一个父a元素
- };
-
- //console.log('图片查找结果:',ret);
- return ret;
- };
-
-
- var isFrame=window!=window.parent;
-
- window.addEventListener('message',function(e){//contentscript里面的message监听,监听来自别的窗口的数据。
- var data=e.data;
- if( !data || !data.messageID || data.messageID != messageID )return;//通信ID认证
- var source=e.source;
- if(typeof source=='undefined' || source!==window){//来自别的窗口
- if(!isFrame){//顶层窗口
- //console.log('top-contentscript接收到:',e);
-
- /*
- window.postMessage({
- messageID:messageID,
- to:data.from,
- data:'hello',
- },'*');
- */
-
- var img=new Image();
- img.src=data.src;
-
-
- imgReady(img,{
- ready:function(){
- LoadingAnimC.prototype.open.call({
- img:img,
- data:data.data,
- buttonType:data.buttonType,
- from:data.from,//来自哪个窗口
- });
- },
- });
- }else{//frame窗口
- //console.log('frame-contentscript接收到',e);
- };
-
- };
- },true);
-
-
-
- //页面脚本用来转发消息
- //原因chrome的contentscript无法访问非自己外的别的窗口。都会返回undefined,自然也无法向其他的窗口发送信息,这里用pagescript做个中间代理
- //通讯逻辑..A页面的contentscript发送到A页面的pagescript,pagescript转交给B页面的contentscript
-
- var messageID='pv-0.5106795670312598';
-
- var pageScript=document.createElement('script');
-
- var pageScriptText=function(messageID){
- var frameID=Math.random();
- var frames={
- top:window.top,
- };
-
- window.addEventListener('message',function(e){
- var data=e.data;
- if( !data || !data.messageID || data.messageID != messageID )return;//通信ID认证
- var source=e.source;
- if(source===window){//来自contentscript,发送出去
- data.from=frameID;
- frames[data.to].postMessage(data,'*');
- }else{//来自别的窗口的,contentscript可以直接接收,这里保存下来自的窗口的引用
- frames[data.from]=source;
- };
- },true)
- };
-
- pageScript.textContent='(' + pageScriptText.toString() + ')('+ JSON.stringify(messageID) +')';
- document.querySelector('head').appendChild(pageScript);
-
-
- function clikToOpen(data){
-
- var preventDefault = matchedRule.clikToOpen.preventDefault;
-
- function mouseout(){
- document.removeEventListener('mouseout',mouseout,true);
- document.removeEventListener('click',click,true);
- if(data.imgPA && preventDefault){
- data.imgPA.removeEventListener('click',clickA,false);
- };
- };
-
- function click(e){
- FloatBarC.prototype.open.call({
- data:data,
- },
- e,
- matchedRule.clikToOpen.type);
- };
-
- function clickA(e){//阻止a的默认行为
- e.preventDefault();
- };
-
- document.addEventListener('click',click,true);
-
- if(data.imgPA && preventDefault){
- data.imgPA.addEventListener('click',clickA,false);
- };
-
- setTimeout(function(){//稍微延时。错开由于css hover样式发生的out;
- document.addEventListener('mouseout',mouseout,true);
- },100);
-
- return function(){
- mouseout()
- };
- };
-
- //监听 mouseover
- var canclePreCTO;
- function globalMouseoverHandler(e){
-
- if(galleryMode)return;//库模式全屏中......
-
- var target=e.target;
- if(target.nodeName!='IMG' || target.classList.contains('pv-pic-not-allowed')){
- return;
- };
-
- var result=findPic(target);
- if(result){
- if(!floatBar){
- floatBar=new FloatBarC();
- };
- if(result.type=='rule' && matchedRule.clikToOpen && matchedRule.clikToOpen.enabled){
- if(canclePreCTO){//取消上次的,防止一次点击打开多张图片
- canclePreCTO();
- };
- canclePreCTO=clikToOpen(result);
- };
- floatBar.start(result);//出现悬浮工具栏
- };
- };
-
- document.addEventListener('mouseover',globalMouseoverHandler,true);
- };
-
-
- function init2(){
- init(topObject,window,document,arrayFn,envir);
- };
-
-
- var arrayFn=(function(){
- //Array的某些方法对所有的类数组都有效,比如HTMLCollection,NodeList
-
- //添加一个当函数返回true时,返回[array[index],index],并且跳出循环的方法
- //类似做到 for 循环,在满足条件的时候直接break跳出的效果。
- if(typeof Array.prototype['_find']!='function'){
- Object.defineProperty(Array.prototype,'_find',{
- value:function(callback , thisArg){
- if (this == null){
- throw new TypeError( "this is null or not defined" );
- };
-
- if(typeof callback != 'function') {
- throw new TypeError( callback + " is not a function" );
- };
-
- var i = 0,
- l = this.length,
- value,
- hasOwnProperty=Object.prototype.hasOwnProperty
- ;
-
-
- while(i<l){
- if(hasOwnProperty.call(this,i)){
- value = this[i];
- if(callback.call( thisArg, value, i, this )===true){
- return [value,i,this];
- };
- };
- i++;
- };
- },
- writable:true,
- enumerable:false,//与原生方法一样不可枚举,维护网页和谐。。。
- configurable:true,
- });
- };
-
- var arrayProto=Array.prototype;
- return {
- _find:arrayProto._find,
- slice:arrayProto.slice,
- forEach:arrayProto.forEach,
- some:arrayProto.some,
- every:arrayProto.every,
- map:arrayProto.map,
- filter:arrayProto.filter,
- indexOf:arrayProto.indexOf,
- lastIndexOf:arrayProto.lastIndexOf,
- };
-
- })();
-
-
- //检测运行环境
- var envir={
- opera:!!window.opera,
- chrome:!!window.chrome,
- firefox:typeof XPCNativeWrapper=='function'? true : false,
- };
-
-
- if(document.readyState=='loading'){
- document.addEventListener('DOMContentLoaded',init2,true);
- }else if(document.readyState!='complete'){
- document.addEventListener('DOMContentLoaded',function(){
- window.removeEventListener('load',init2,true);
- init2();
- },true);
- window.addEventListener('load',init2,true);
- }else{
- init2();
- };
- })(this,window,document)
-
- }{ var greasedLightbox = {
-
- aspectRatio : null,
- timer : null,
- slideTime : 3,
- currentAddress : null,
- allImageLinks : [],
- currentImagePosition : 0,
- lastMove : 1,
- isShowing : false,
- isSlideShow : false,
- searchDefs : [
- // wikipedia (needs to come before 'show')
- {
- name : 'wikipedia',
- includeRegExp : /^https?:\/\/(.*?\.)?wikipedia\.org/i,
- linkRegExp : /.*?\/(Fi(le?|xter|txategi|gura|n?ch(ier|eiro))|Fa(il|sciculus)|Dat(oteka|ei)|Delwedd|Dosiero|Be(stand|rkas)|Billede|Skeudenn|Soubor|Slika|Pilt|Archivo|Mynd|Vaizdas|Tiedosto|Larawan|Resim):.*\.(jpe?g|gif|png)$/i,
- findImageRegExp : /(.+?)\/thumb\/(.+?)\.(jpe?g|gif|png).*$/i,
- replaceString : '$1/$2.$3',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'wikipedia'); return false; }
- }, // wikipedia
-
- // imagesocket (needs to come before 'show')
- {
- name : 'imagesocket',
- includeRegExp : /./, // used on every page
- linkRegExp : /^(https?:\/\/)(.*?\.)?imagesocket\.com\/(view|thumbs)\/(.*?\.(jpe?g|gif|png))$/i,
- replaceString : '$1content.imagesocket.com/images/$4',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'imagesocket'); return false; }
- }, // imagesocket
-
- // imagesocket site (needs to come before 'show')
- {
- name : 'imagesocketSite',
- includeRegExp : /^https?:\/\/(.*?\.)?imagesocket\.com/i,
- linkRegExp : /^\/view\/(.*?\.(jpe?g|gif|png))$/i,
- replaceString : 'http://content.imagesocket.com/images/$1',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'imagesocketSite'); return false; }
- }, // imagesocket site
-
- // blogger/blogspot (needs to come before 'show')
- {
- name : 'blogger',
- includeRegExp : /^https?:\/\/(.*?\.)?blog(ger|spot)\.com/i,
- linkRegExp : /^(https?:\/\/.*?\.blogger\.com\/.*?\/.*?\/.*?\/.*?)\/.*?-h(\/.*?\.(jpe?g|gif|png))$/i,
- replaceString : '$1$2',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'blogger'); return false; }
- }, // blogger/blogspot
- // radikal.ru
- {
- name : 'radikal',
- includeRegExp : /./, // used in every page
- linkRegExp : /http:\/\/(radikal.ru\/F\/)?(.*\.(jpg|png))(\.html)?$/i,
- replaceString : 'http://$2',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'radikal'); return false; }
-
- }, // radikal.ru
- // regular links to images
- {
- name : 'show',
- includeRegExp : /./, // used on every page
- linkRegExp : /.*?\.(jpe?g|gif|png)$/i,
- excludeLinkRegExp : /\?/i,
- showFunction : function(event) { greasedLightbox.show(event); return false; }
- }, // regular links to images
-
- // picasa
- /* "view in original context" is not worked propertly */
- {
- name : 'picasa',
- includeRegExp : /./, // used on every page
- linkRegExp : /https?:\/\/picasaweb\.google\..*\/.+/i,
- findImageRegExp : /^(https?:\/\/.*)\/s[0-9]+\/(.*)\.jpg$/i,
- replaceString : '$1/s1024/$2.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'picasa'); return false; }
- },
-
- // ipicture/upload
- {
- name : 'ipicture',
- includeRegExp : /./, // used on every page
- linkRegExp : /http:\/\/ipicture\.ru\/upload\/(.*(jpg|png|jpeg|gif))$/i,
- replaceString : 'http://ipicture.ru/upload/$1',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'picasa'); return false; }
- },
-
- // search engine images (google, yahoo, ask jeeves, blingo)
- {
- name : 'search',
- includeRegExp : /^https?:\/\/(.*?\.)?(google\..*|search\.yahoo\.com|blingo\.com\/images)/i,
- linkRegExp : /.*?(im(age|g)(ur(i|l)|src))=(http(s?):\/\/)?(.*?)&.*/i,
- replaceString : 'http$6://$7',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'search'); return false; }
- }, // search engine images
-
- // doubanpic
- {
- name : 'doubanpic',
- includeRegExp : /^http:\/\/www\.douban\.com\/subject\/[0-9]+\//i,
- linkRegExp : /^(http:\/\/t\.douban\.com\/)l(pic\/s[0-9]+\.jpg)/i,
- replaceString : '$1m$2',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'doubanpic'); return false; }
- }, // doubanpic
- // doubanphoto
- {
- name : 'doubanphoto',
- includeRegExp : /^http:\/\/www\.douban\.com\/photos\/album\/[0-9]+\//i,
- linkRegExp : /^http:\/\/www\.douban\.com\/photos\/photo\/([0-9]+)\/$/i,
- replaceString : 'http://t.douban.com/view/photo/photo/public/p$1.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'doubanphoto'); return false; }
- }, // doubanphoto
- // doubanevent
- {
- name : 'doubanevent',
- includeRegExp : /^http:\/\/www\.douban\.com\/event\/album\/[0-9]+\//i,
- linkRegExp : /^http:\/\/www\.douban\.com\/event\/photo\/([0-9]+)\/$/i,
- replaceString : 'http://t.douban.com/view/photo/photo/public/p$1.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'doubanevent'); return false; }
- }, // doubanevent
- // doubanonline
- {
- name : 'doubanonline',
- includeRegExp : /^http:\/\/www\.douban\.com\/online\/[0-9]+\/album\/[0-9]+\//i,
- linkRegExp : /^http:\/\/www\.douban\.com\/online\/[0-9]+\/photo\/([0-9]+)\/$/i,
- replaceString : 'http://img2.douban.com/view/photo/photo/public/p$1.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'doubanonline'); return false; }
- }, // doubanonline
- // doubanartist1
- {
- name : 'doubanartist1',
- includeRegExp : /^http:\/\/www\.douban\.com\/artist\/[a-z]+\/album\/[0-9]+\//i,
- linkRegExp : /^http:\/\/www\.douban\.com\/artist\/[a-z]+\/photo\/([0-9]+)\/$/i,
- replaceString : 'http://t.douban.com/view/photo/photo/public/p$1.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'doubanartist1'); return false; }
- }, // artist1
- // doubanartist2
- {
- name : 'doubanartist2',
- includeRegExp : /^http:\/\/www\.douban\.com\/artist\/[a-z]+\/public_album\/[0-9]+\//i,
- linkRegExp : /^http:\/\/www\.douban\.com\/artist\/[a-z]+\/public_photo\/([0-9]+)\/$/i,
- replaceString : 'http://t.douban.com/view/photo/photo/public/p$1.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'doubanartist2'); return false; }
- }, // doubanartist2
-
- // flickr
- {
- name : 'flickr',
- includeRegExp : /^https?:\/\/(.*?\.)?flickr\.com/i,
- linkRegExp : /\/photos\/[^\/]+\/[0-9]+/i,
- findImageRegExp : /_[tsm]\.jpg/i,
- replaceString : '.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'flickr'); return false; }
- }, // flickr
-
- // facebook
- /* removed support because they now have nice built-in image viewing features
- {
- name : 'facebook',
- includeRegExp : /^https?:\/\/(.*?\.)?facebook\.com/i,
- linkRegExp : /photo\.php\?pid=[0-9]+/i,
- findImageRegExp : /[st]([0-9]+.*?)\.jpg/i,
- replaceString : 'n$1.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'facebook'); return false; }
- }, // facebook
- */
-
- // myspace1
- {
- name : 'myspace1',
- includeRegExp : /^https?:\/\/(.*?\.)?myspace\.com/i,
- linkRegExp : /imageID=[0-9]+/i,
- findImageRegExp : /m_(.+)\.jpg/i,
- replaceString : 'l_$1.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'myspace1'); return false; }
- }, // myspace1
-
- // myspace2
- {
- name : 'myspace2',
- includeRegExp : /^https?:\/\/(.*?\.)?myspace\.com/i,
- linkRegExp : /imageID/i,
- findImageRegExp : /_m/i,
- replaceString : '_l',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'myspace2'); return false; }
- }, // myspace2
-
- // deviantart
- {
- name : 'deviantart',
- includeRegExp : /^https?:\/\/(.*?\.)?deviantart\.com/i,
- linkRegExp : /deviantart\.com\/(deviation|print|art)\/.+/i,
- findImageRegExp : /^http(s)?:\/\/.*?\.deviantart\.com\/([^\/]*)\/[^\/]*\/(.*?)\.(jpe?g|gif|png)$/i,
- replaceString : 'http$1://fc01.deviantart.com/$2/$3.$4',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'deviantart'); return false; }
- }, // deviantart
-
- // subvariance
- {
- name : 'subvariance',
- includeRegExp : /^https?:\/\/(.*?\.)?subvariance\.com/i,
- linkRegExp : /\/view\/[0-9]+/i,
- findImageRegExp : /\/items\/thumbs\/(.*?)\.jpg/i,
- replaceString : '/items/$1.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'subvariance'); return false; }
- }, // subvariance
-
- // gmail
- {
- name : 'gmail',
- includeRegExp : /^https?:\/\/mail\.google\..*/i,
- linkRegExp : /^(\/mail\/\?view=att&(amp;)?disp=)inline/i,
- replaceString : 'http://' + window.location.host + '$1emb',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'gmail'); return false; }
- }, // gmail
-
- // imagefap
- {
- name : 'imagefap',
- includeRegExp : /^https?:\/\/(.*?\.)?imagefap\.com/i,
- linkRegExp : /(image.php\?id=|gallery\/)[0-9]+/i,
- findImageRegExp : /\/images\/(thumb|mini)\/([0-9]+)\/([0-9]+)\/([0-9]+)\.jpg/i,
- replaceString : '/full/$2/$3/$4.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'imagefap'); return false; }
- },
-
- // ffffound!
- {
- name : 'ffffound',
- includeRegExp : /^https?:\/\/(.*?\.)?ffffound\.com/i,
- linkRegExp : /\/image\/[\w]+$/i,
- findImageRegExp : /img(-thumb)?\.ffffound\.com\/static-data\/assets\/([\w\/]+?)_[\w]+\.(jpe?g|gif|png)$/i,
- replaceString : 'img.ffffound.com/static-data/assets/$2.$3',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'ffffound'); return false; }
- },
-
- // textamerica
- /* removed support because they are now subscription-based
- {
- name : 'textamerica',
- includeRegExp : /^http(s)?:\/\/(.*?\.)?textamerica\.com/i,
- linkRegExp : /\?r=[0-9]+$/i,
- findImageRegExp : /user\.images\.x\/(.*?\/.*?)\/(.*?)\/(.*?)\.jpg(.*)$/i,
- replaceString : 'user.images.x/$1\/$3.jpg',
- showFunction : function(event) { greasedLightbox.showFrom(event, 'textamerica'); return false; }
- } // textamerica
- */
-
- // image http://bp2.blogger.com/_a7jkcMVp5Vg/SAGu9Ym-S2I/AAAAAAAAEoM/WCGF3uywJzE/s400/empty.jpg
- // link http://bp2.blogger.com/_a7jkcMVp5Vg/SAGu9Ym-S2I/AAAAAAAAEoM/WCGF3uywJzE/s1600-h/empty.jpg
- // final image http://bp2.blogger.com/_a7jkcMVp5Vg/SAGu9Ym-S2I/AAAAAAAAEoM/WCGF3uywJzE/s1600/empty.jpg
-
- ], // searchDefs[]
-
- // useLinkForShow()
- useLinkForShow : function(searchDef) {
- if (searchDef.findImageRegExp)
- return false;
- else
- return true;
- },
-
- // showFrom()
- // generic helper function that calls show() with the correct parameters
- showFrom : function(event, showName) {
- var link;
- if (event.currentTarget)
- link = event.currentTarget;
- else
- link = event;
-
- var address = unescape(unescape(greasedLightbox.getAddress(link)));
- var img = greasedLightbox.getImageToShow(link, address, showName);
-
- greasedLightbox.show(event, img, address);
- }, // showFromLink()
-
- // getImageToShow()
- getImageToShow : function(link, address, showName) {
- var searchDef = greasedLightbox.getRegExpObj(greasedLightbox.searchDefs, showName);
-
- if (greasedLightbox.useLinkForShow(searchDef)) {
- address = unescape(unescape(address));
- if (searchDef['replaceString'])
- var img = address.replace(searchDef['linkRegExp'], searchDef['replaceString']);
- else
- var img = address.match(searchDef['linkRegExp'])[0];
- } else {
- var img = greasedLightbox.containsThumb(link, greasedLightbox.getRegExpObj(greasedLightbox.searchDefs, showName), true);
- }
-
- return img;
- }, // getImageToShow()
-
- // getRegExpObj()
- // returns the requested regular expression object from the regExp array
- getRegExpObj : function(regExpObject, showName) {
- var rExObj;
-
- for (var i = 0; i < regExpObject.length; i++) {
- rExObj = regExpObject[i];
- if (rExObj['name'] == showName)
- return rExObj;
- }
- }, // getRegExpObj()
-
- // containsThumb()
- containsThumb : function(elem, rExObj, verbose) {
- var images, image, src;
- images = document.evaluate('descendant::img[@src]', elem, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
-
- for(var i = 0; i < images.snapshotLength; i++) {
- thisImage = images.snapshotItem(i);
- src = thisImage.getAttribute('src');
- if(rExObj['findImageRegExp'].test(src)) {
- if(!verbose) return true;
- return src.replace(rExObj['findImageRegExp'], rExObj['replaceString']);
- }
- }
-
- return false;
- }, // containsThumb()
-
- // getAddress()
- // extracts an address out of a linkObj
- getAddress : function(linkObj) {
- var address = linkObj.getAttribute('href');
-
- // for GreaseKit users because Safari doesn't like stopping events even though it says it does...
- if(/Safari/.test(navigator.userAgent)) {
- linkObj.onclick = function() { return false; };
- }
- return address;
- }, // getAddress()
-
- // getPageScroll()
- // Returns array with x,y page scroll values.
- // Core code from - quirksmode.org
- getPageScroll : function() {
- var xScroll, yScroll;
- if (self.pageYOffset) {
- yScroll = self.pageYOffset;
- } else if (document.documentElement && document.documentElement.scrollTop){ // Explorer 6 Strict
- yScroll = document.documentElement.scrollTop;
- } else if (document.body) {// all other Explorers
- yScroll = document.body.scrollTop;
- }
-
- if (self.pageXOffset) {
- xScroll = self.pageXOffset;
- } else if (document.documentElement && document.documentElement.scrollLeft){ // Explorer 6 Strict
- xScroll = document.documentElement.scrollLeft;
- } else if (document.body) {// all other Explorers
- xScroll = document.body.scrollLeft;
- }
-
- arrayPageScroll = new Array(xScroll,yScroll)
- return arrayPageScroll;
- }, // getPageScroll()
-
- // getPageSize()
- // Returns array with page width, height and window width, height
- // Core code from - quirksmode.org
- // Edit for Firefox by pHaez
- getPageSize : function() {
- var xScroll, yScroll;
-
- if (window.innerHeight && window.scrollMaxY) {
- xScroll = document.body.scrollWidth;
- yScroll = window.innerHeight + window.scrollMaxY;
- } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
- xScroll = document.body.scrollWidth;
- yScroll = document.body.scrollHeight;
- } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
- xScroll = document.body.offsetWidth;
- yScroll = document.body.offsetHeight;
- }
-
- var windowWidth, windowHeight;
- if (self.innerHeight) { // all except Explorer
- windowWidth = self.innerWidth;
- windowHeight = self.innerHeight;
- } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
- windowWidth = document.documentElement.clientWidth;
- windowHeight = document.documentElement.clientHeight;
- } else if (document.body) { // other Explorers
- windowWidth = document.body.clientWidth;
- windowHeight = document.body.clientHeight;
- }
-
- // for small pages with total height less then height of the viewport
- if(yScroll < windowHeight){
- pageHeight = windowHeight;
- } else {
- pageHeight = yScroll;
- }
-
- // for small pages with total width less then width of the viewport
- if(xScroll < windowWidth){
- pageWidth = windowWidth;
- } else {
- pageWidth = xScroll;
- }
-
- arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
- return arrayPageSize;
- }, // getPageSize()
-
- // center()
- // centers the object in the page
- center : function(objToCenter, arrayPageScroll, arrayPageSize) {
- var oldDisplay = new Array(objToCenter.style.visibility, objToCenter.style.display);
-
- objToCenter.style.display = 'none';
-
- var arrayPageScroll = (arrayPageScroll) ? arrayPageScroll : greasedLightbox.getPageScroll();
- var arrayPageSize = (arrayPageSize) ? arrayPageSize : greasedLightbox.getPageSize();
- objToCenter.style.visibility = 'hidden';
- objToCenter.style.display = 'block';
-
- var objTop = arrayPageScroll[1] + ((arrayPageSize[3] + 35 - objToCenter.offsetHeight) / 2);
- var objLeft = (arrayPageSize[0] - objToCenter.offsetWidth) / 2;
-
- objToCenter.style.top = (objTop < 0) ? "0px" : objTop + "px";
- objToCenter.style.left = (objLeft < 0) ? "0px" : objLeft + "px";
-
- objToCenter.style.visibility = oldDisplay[0];
- objToCenter.style.display = oldDisplay[1];
- }, // center()
-
- // centerItAll()
- // Centers the lightbox object and the loading/error object on the page
- centerItAll : function() {
- var objLightbox = document.getElementById('greasedLightbox');
- var objLoading = document.getElementById('greasedLightboxLoading');
- var arrayPageSize = greasedLightbox.getPageSize();
- var arrayPageScroll = greasedLightbox.getPageScroll();
-
- greasedLightbox.center(objLightbox, arrayPageScroll, arrayPageSize);
- greasedLightbox.center(objLoading, arrayPageScroll, arrayPageSize);
- }, // centerItAll()
-
- // show()
- // Preloads images. Pleaces new image in lightbox then centers and displays.
- show : function(event, img, context) {
- //alert(img);
- // let shift+click and ctrl+click (but not ctrl+shift+click) through without lightbox
- if ((event.shiftKey || event.ctrlKey) && !(event.shiftKey && event.ctrlKey)) return true;
-
- // if this is a real event stop the click and set the link, otherwise, just set the link
- if (event.currentTarget) {
- var link = event.currentTarget;
- greasedLightbox.stopEvents(event);
- } else {
- var link = event;
- }
-
- if (img == null || img == '') img = link.getAttribute('href');
- greasedLightbox.currentAddress = unescape(unescape(greasedLightbox.getAddress(link)));
-
- // make ctrl+shift+click follow link without lightbox
- if (event.shiftKey && event.ctrlKey) {
- window.location.href = greasedLightbox.currentAddress;
- return true;
- }
-
- // center when resized
- if (greasedLightbox.isShowing != true)
- window.addEventListener('resize', greasedLightbox.centerItAll, true);
-
- greasedLightbox.isShowing = true;
-
- // get the caption from the title attribute of the link. if that doesn't exist, look for it in the title attribute of the image.
- capt = link.getAttribute('title');
-
- if (capt == null || capt == '') {
- try {
- var imgObj = link.firstChild;
- capt = imgObj.getAttribute('title');
- } catch (e) { }
- }
- if (capt == null || capt == '') {
- try {
- var imgObj = link.firstChild;
- capt = imgObj.getAttribute('alt');
- } catch (e) { }
- }
-
- // prep objects
- var objOverlay = document.getElementById('greasedLightboxOverlay');
- var objMenu = document.getElementById('greasedLightboxMenu');
- var objLightbox = document.getElementById('greasedLightbox');
- var objCaption = document.getElementById('greasedLightboxCaption');
- var imgPreload = document.getElementById('greasedLightboxPreload');
- var objImage = document.getElementById('greasedLightboxImage');
- var objLoading = document.getElementById('greasedLightboxLoading');
-
- objOverlay.style.display = 'none'; // This will ensure that we have a correct reading of the page size
- var arrayPageSize = greasedLightbox.getPageSize();
- var arrayPageScroll = greasedLightbox.getPageScroll();
-
- // set height of Overlay to take up whole page and show
- objOverlay.style.height = (arrayPageSize[1] + 'px');
- objOverlay.style.display = 'block';
-
- // show menu
- objMenu.style.display = 'block';
-
- // center loader and error message
- objLoading.style.visibility = 'hidden';
- objLoading.style.display = 'block';
- greasedLightbox.center(objLoading, arrayPageScroll, arrayPageSize);
- objLoading.style.visibility = 'visible';
-
- var imgPreload = document.getElementById('greasedLightboxPreload');
-
- // preload image
- preloaderDone = function() {
- loaderDone = function() {
- objImage.removeAttribute('width');
- objImage.removeAttribute('height');
- greasedLightbox.aspectRatio = null;
-
- if (capt) {
- objCaption.innerHTML = capt;
- } else {
- objCaption.innerHTML = img;
- }
-
- // dimensions
- // objCaption.innerHTML = objCaption.innerHTML + '<br/><br/>(width: ' + objImage.width + 'px; height: ' + objImage.height + 'px;)';
-
- // add a link for context
- if (context) objCaption.innerHTML = objCaption.innerHTML + '<br/><br/><a href="' + context + '">' + greasedLanguage[greasedLanguage.language][0].context + '</a>';
-
- // center lightbox and make sure that the top and left values are not negative
- // and the image placed outside the viewport
- //objLightbox.style.visibility = 'hidden';
- objLightbox.style.display = 'block';
-
- greasedLightbox.aspectRatio = objImage.height / objImage.width;
-
- // if image is larger than the screen
- if (objImage.height > arrayPageSize[3] - 70) {
- var newHeight = arrayPageSize[3] - 70;
- var newWidth = (objImage.width / objImage.height) * newHeight;
- objImage.height = newHeight;
- objImage.width = newWidth;
- }
- if (objImage.width > arrayPageSize[2] - 70) {
- var newWidth = arrayPageSize[2] - 70;
- var newHeight = greasedLightbox.aspectRatio * newWidth;
- objImage.height = newHeight;
- objImage.width = newWidth;
- }
-
- greasedLightbox.center(objLightbox, arrayPageScroll, arrayPageSize);
-
- // if it went bigger than the page
- if (objLightbox.offsetHeight > objOverlay.offsetHeight) objOverlay.style.height = objLightbox.offsetHeight + 'px';
- if (objLightbox.offsetWidth > objOverlay.offsetwidth) objOverlay.style.width = objLightbox.offsetWidth + 'px';
-
- greasedLightbox.center(objLightbox, arrayPageScroll, arrayPageSize);
-
- objLoading.style.display = 'none';
- objCaption.style.display = 'block';
- objLightbox.style.visibility = 'visible';
-
- // clean it up a bit for memory's sake
- objImage.removeEventListener('load', loaderDone, false);
- imgPreload.removeEventListener('load', preloaderDone, false);
- imgPreload.removeEventListener('error', greasedLightbox.noImage, false);
- imgPreload.src = '';
-
- if (greasedLightbox.isSlideShow)
- greasedLightbox.timer = setTimeout(function(event) { greasedLightbox.moveSlide(event, 1) }, greasedLightbox.slideTime * 1000);
-
- return false;
- } // loaderDone()
-
- objImage.addEventListener('load', loaderDone, false);
- objImage.src = img;
-
- return false;
- } // preloaderDone()
-
-
- if (imgPreload.src != img) {
- imgPreload.addEventListener('load', preloaderDone, false);
- imgPreload.addEventListener('error', greasedLightbox.noImage, false);
- imgPreload.src = img;
- } else {
- preloaderDone();
- }
-
- // hides flash movies that peek through the overlay
- var obtrusives, thisObtrusive;
- obtrusives = document.evaluate('//object|//embed|//iframe', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
-
- for(var i = 0; i < obtrusives.snapshotLength; i++) {
- thisObtrusive = obtrusives.snapshotItem(i);
- thisObtrusive.style.visibility = 'hidden';
- }
-
- if (greasedLightbox.allImageLinks.length > 1) {
- // initialize slideshow
- // set currentImagePosition
- findCurrentPosition : for(var i = 0; i < greasedLightbox.allImageLinks.length; i++) {
- if (greasedLightbox.allImageLinks[i]['link'] == link) {
- greasedLightbox.currentImagePosition = i;
- break findCurrentPosition;
- }
- } // for()
-
- // pre-fetch next image
- if (!window.opera) { // for some reason this pre-fetching breaks lightbox in opera
- var imgPrefetch = document.getElementById('greasedLightboxPrefetch');
-
- var nextImagePosition = (greasedLightbox.currentImagePosition + greasedLightbox.lastMove) % greasedLightbox.allImageLinks.length;
- if (nextImagePosition < 0) nextImagePosition = greasedLightbox.allImageLinks.length - 1;
-
- var nextImage = greasedLightbox.allImageLinks[nextImagePosition];
- var nextImageSrc = greasedLightbox.getImageToShow(nextImage['link'], greasedLightbox.getAddress(nextImage['link']), nextImage['name']);
- imgPrefetch.src = nextImageSrc;
- }
- } // if()
-
- }, // show()
-
- // slideShow()
- // cycles through all of the lightboxable images
- slideShow: function(cmd) {
- var objMenuButtonShow = document.getElementById('greasedLightboxButtonSlide');
- if (cmd != 'stop') { // start the show
- greasedLightbox.isSlideShow = true;
- greasedLightbox.moveSlide(null, 1);
-
- // switch function to stop button
- objMenuButtonShow.removeEventListener('click', greasedLightbox.slideShow, false);
- objMenuButtonShow.innerHTML = '\u2169';
- objMenuButtonShow.addEventListener('click', function(event) { greasedLightbox.slideShow('stop') }, false);
- }
- else { // stop the show
- clearTimeout(greasedLightbox.timer);
- greasedLightbox.isSlideShow = false;
- objMenuButtonShow.removeEventListener('click', function(event) { greasedLightbox.slideShow('stop') }, false);
- objMenuButtonShow.innerHTML = '\u21BB';
- objMenuButtonShow.addEventListener('click', greasedLightbox.slideShow, false);
- }
- }, // slideShow()
-
- // hide()
- // Stops the preloader in case it hasn't finished and then hides all of the lightbox components
- hide : function(event) {
- greasedLightbox.stopEvents(event);
- greasedLightbox.isShowing = false;
- window.removeEventListener('resize', greasedLightbox.centerItAll, true);
-
- // get objects
- var objPreloader = document.getElementById('greasedLightboxPreload');
- var objLoading = document.getElementById('greasedLightboxLoading');
- var objError = document.getElementById('greasedLightboxError');
- var objOverlay = document.getElementById('greasedLightboxOverlay');
- var objLightbox = document.getElementById('greasedLightbox');
- var objMenu = document.getElementById('greasedLightboxMenu');
- var imgPreload = document.getElementById('greasedLightboxPreload');
-
- // stop preloader
- objPreloader.removeEventListener('load', preloaderDone, false);
- imgPreload.removeEventListener('error', greasedLightbox.noImage, false);
- //imgPreload.src = '';
-
- // show flash movies again
- var obtrusives, thisObtrusive;
- obtrusives = document.evaluate('//object|//embed|//iframe', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
-
- for(var i = 0; i < obtrusives.snapshotLength; i++) {
- thisObtrusive = obtrusives.snapshotItem(i);
- thisObtrusive.style.visibility = 'visible';
- }
-
- // hide everything
- objLoading.style.display = 'none';
- objError.style.display = 'none';
- objOverlay.style.display = 'none';
- objLightbox.style.display = 'none';
- objMenu.style.display = 'none';
-
- }, // hide()
-
- // halt()
- // stops the slideshow and hides the lightbox
- halt : function() {
- greasedLightbox.slideShow('stop');
- greasedLightbox.hide();
- },
-
- // stopEvents()
- stopEvents : function(event) {
- if (event) {
- if (event.stopPropagation) event.stopPropagation();
- if (event.preventDefault) event.preventDefault();
- }
- },
-
- // resize()
- resize : function(event, resizeByAmount) {
- greasedLightbox.stopEvents(event);
-
- // stop slidshow
- greasedLightbox.slideShow('stop');
-
- // resize the image
- var objImage = document.getElementById('greasedLightboxImage');
- var imgPreload = document.getElementById('greasedLightboxPreload');
-
- if (resizeByAmount == 0) {
- objImage.removeAttribute('width');
- objImage.removeAttribute('height');
- } else {
- var newWidth = objImage.width + (objImage.width * (resizeByAmount/100));
- var newHeight = this.aspectRatio * newWidth;
- if (newWidth > 30 || newHeight > 30) {
- objImage.width = newWidth;
- objImage.height = newHeight;
- }
- }
-
- // re-center the lightbox
- var objLightbox = document.getElementById('greasedLightbox');
- greasedLightbox.center(objLightbox);
- }, // resize()
-
- // noImage()
- // Displays a nice error message when no image can be found.
- noImage : function(event) {
- var objLoading = document.getElementById('greasedLightboxLoading');
- var objError = document.getElementById('greasedLightboxError');
- var objErrorContext = document.getElementById('greasedLightboxErrorContext');
-
- objError.style.visibility = 'hidden';
- objError.style.display = 'block';
-
- objErrorContext.innerHTML = '<a href="' + greasedLightbox.currentAddress + '">' + greasedLanguage[greasedLanguage.language][0].context + '</a>';
-
- greasedLightbox.center(objError);
-
- objLoading.style.display = 'none';
- objError.style.visibility = 'visible';
-
- if (greasedLightbox.isSlideShow)
- greasedLightbox.timer = setTimeout(function(event) { greasedLightbox.moveSlide(event, 1) }, 500);
- }, // noImage()
-
- // handleKey(event)
- // handles keypress. If 'x' is pressed then it hides the lightbox. If a left or right arrow is pressed it cycles through images on a page
- handleKey : function(event) {
- if (greasedLightbox.isShowing) {
- var keycode = event.which;
- var key = String.fromCharCode(keycode).toLowerCase();
-
- switch(key) {
- case 'x':
- greasedLightbox.halt(event);
- break;
- case '+': // increase size
- greasedLightbox.resize(event, 13);
- break;
- case '-': // decrease size
- greasedLightbox.resize(event, -13);
- break;
- case '0': // set to default size
- greasedLightbox.resize(event, 0);
- break;
- /* @todo
- case 'v': // view image in original context
-
- break;
- */
- default:
- switch(event.keyCode) {
- // esc key
- case 27:
- greasedLightbox.halt(event);
- break;
-
- // left arrow
- case 37: // firefox
- case 63234: // safari
- greasedLightbox.slideShow('stop');
- greasedLightbox.moveSlide(event, -1);
- break;
-
- // right arrow
- case 39: // firefox
- case 63235: // safari
- greasedLightbox.slideShow('stop');
- greasedLightbox.moveSlide(event, 1);
- break;
-
- } // switch(event.keyCode)
- break;
- } // switch(key)
- } // if
- }, // getKey()
-
- // moveSlide()
- // loads another image from allImageLinks[]
- moveSlide : function(event, moveByAmount) {
- if (greasedLightbox.allImageLinks.length > 1) {
- if (greasedLightbox.currentImagePosition + moveByAmount == -1) greasedLightbox.currentImagePosition = greasedLightbox.allImageLinks.length;
- var newSlidePosition = (greasedLightbox.currentImagePosition + moveByAmount) % greasedLightbox.allImageLinks.length;
- var slideToLoad = greasedLightbox.allImageLinks[newSlidePosition];
-
- greasedLightbox.hide(event);
- slideToLoad['showFunction'](slideToLoad['link']);
- greasedLightbox.lastMove = moveByAmount;
- } // if
- }, // moveSlide()
-
- // lightBulbOnIcon
- // used when an update is available
- lightBulbOnIcon :"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKgSURBVDjLlZLrS1NxGMd90ZvovdEfEBEUEhZIb0xMjdyLIuyGkiHGUFKydFKKJiRegjIyFJRwojMxzfJSaVOYeTfxtpSNuZ1tXnY2z27nsss5334uWloG9uLD7%2FA7z%2FfzPPx4IgBE7ISl3qWyelUvu9JIueZqeOdUmcCMFDgcQ3fntjSK0j%2Frwx%2BcsesIZ3jbL1j6EbCPIej5DpE3QRIoBJ3LEFb74BjIxkbXVYNdrTixS8Ca3h%2Fy6pSTfloD0UcRjCS8BJGbRdA7QRgjd1pIfhruyeewKOMdm%2BrCw2GBV1tXKZh7SIEVoqAjpwVS0AlIvhBSkCGyeQRcPYDogO1DNixvrveFBa6ZCkuAmSe1OtJpFVLATkJboWCIAE3%2BGYngI6ENgnUK%2BhcxfFiw9fWRT%2BRWEWTHEeRmyPhaMvYCgu5ZEpgkbzCCgPszBNsr8NY8iF4Ky5WnpLDArs41%2BzYnSPdF8OYi0qEcTHc6mF45mJ4M2Ftl4C1lYPU34KerwFNTWKmO%2Fj2BfbiwghmvJuPawZsUsNVHgTPlEx6ANcjJeR9r5QfhWUqEJOlhbc%2BFoV42FBY4R0sPbPbKlz2LLeQB9aCbYkJhzpIFlkoDZ8zDRk0kRHYYrm8d0JYeEyyduUd37QH9pTBqvSOV9iy0wtmZ%2BVNAOm%2BHOeM92JtlYDQN0JYcD1BtmTf%2FWqRtbJ%2FyTxtUt9fXGhPBq5MhriVBtMYhoLkMQ1Ek5sqi3eb2O4l7buIvhlRPkmsfZ%2Fibax%2BiruosnpacQUFOOq7Fn5TUypJz%2F1zlnRQr5JSypRVKZRvq6htR%2FewlriTH03vV7ilQ5NwaHRgchM1GY3p6Bq%2BbmpEii9XtWzCgqkhLuXSBTUg4L8XFxUoXk2K57obirH0L%2FocfNQ8V8wE%2BuE0AAAAASUVORK5CYII%3D')",
-
- // showUpdate()
- // shows the user that an update is available
- showUpdate : function(latestVersion) {
- var titleLink = document.getElementById('greasedLightboxTitleLink');
- titleLink.setAttribute('title', greasedLanguage[greasedLanguage.language][0].update + ' (v' + latestVersion + ')');
- titleLink.innerHTML = titleLink.innerHTML + ' - ' + greasedLanguage[greasedLanguage.language][0].update + ' (v' + latestVersion + ')';
- var cssStr = '#greasedLightboxTitleLink { background-image: ' + greasedLightbox.lightBulbOnIcon + ' !important; }';
-
- var styleSheet = document.getElementById('greasedLightboxCSS');
- var cssText = document.createTextNode(cssStr);
- styleSheet.appendChild(cssText);
- },
-
- // init()
- // Function runs on window load, going through link tags looking for links to images.
- // These links receive onclick events that enable the lightbox display for their targets.
- // The function also inserts html markup at the top of the page which will be used as a
- // container for the overlay pattern and the inline image.
- init : function() {
- // initialize localization
- greasedLanguage.init();
-
- // set up list of searchDefs to use based on how includeRegExp matches window.location.href
- var currentURL, searchDefsToUse;
- currentURL = window.location.href;
- searchDefsToUse = new Array();
-
-
- for(var i = 0; i < greasedLightbox.searchDefs.length; i++) {
- if(greasedLightbox.searchDefs[i]['includeRegExp'].test(currentURL)) searchDefsToUse.push(greasedLightbox.searchDefs[i]);
- }
-
- if(!searchDefsToUse.length) return;
-
- // set variables
- var links, thisLink, href, lightboxedLinksTotal = 0;
- links = document.evaluate('//a[@href]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
-
- for(var i = 0; i < links.snapshotLength; i++) {
- thisLink = links.snapshotItem(i);
- href = unescape(thisLink.getAttribute('href'));
-
- // check regularExpressions from searchDefsToUse
- checkLink : for (var ii = 0; ii < searchDefsToUse.length; ii++) {
-
- // for links that reveal larger image's location
- if (!searchDefsToUse[ii]['findImageRegExp']) {
- if(searchDefsToUse[ii]['linkRegExp'].test(href)) {
- if (!searchDefsToUse[ii]['excludeLinkRegExp'] || !searchDefsToUse[ii]['excludeLinkRegExp'].test(href)) {
- if (!(thisLink.getAttribute('rel') && thisLink.getAttribute('rel').toLowerCase().match('lightbox'))) // prevents doubling lightboxes
- thisLink.addEventListener('click', searchDefsToUse[ii]['showFunction'], true);
- this.allImageLinks[lightboxedLinksTotal] = new Array(3);
- this.allImageLinks[lightboxedLinksTotal]['name'] = searchDefsToUse[ii]['name'];
- this.allImageLinks[lightboxedLinksTotal]['showFunction'] = searchDefsToUse[ii]['showFunction'];
- this.allImageLinks[lightboxedLinksTotal]['link'] = thisLink;
- lightboxedLinksTotal++;
- break checkLink;
- }
- }
- // for links that contain images that reveal larger image's location
- } else if (searchDefsToUse[ii]['findImageRegExp']) {
- if(this.containsThumb(thisLink, searchDefsToUse[ii], false)) {
- if(searchDefsToUse[ii]['linkRegExp'].test(href)) {
- if (!searchDefsToUse[ii]['excludeLinkRegExp'] || !searchDefsToUse[ii]['excludeLinkRegExp'].test(href)) {
- if (!(thisLink.getAttribute('rel') && thisLink.getAttribute('rel').toLowerCase().match('lightbox'))) // prevents doubling lightboxes
- thisLink.addEventListener('click', searchDefsToUse[ii]['showFunction'], true);
- /*for (ii = 0; ii < lightboxedLinksTotal; ii++) {
- if(greasedLightbox.allImageLinks[ii]['link'] == links[i]) break checkLink;
- }*/
- this.allImageLinks[lightboxedLinksTotal] = new Array(3);
- this.allImageLinks[lightboxedLinksTotal]['name'] = searchDefsToUse[ii]['name'];
- this.allImageLinks[lightboxedLinksTotal]['showFunction'] = searchDefsToUse[ii]['showFunction'];
- this.allImageLinks[lightboxedLinksTotal]['link'] = thisLink;
- lightboxedLinksTotal++;
- break checkLink;
- }
- }
- }
- }
- } // checkLink : for()
- } // for()
-
- if (lightboxedLinksTotal == 0) return;
-
- window.addEventListener('unload', this.unload, false);
-
- var objBody = document.getElementsByTagName("body").item(0);
-
- var pngOverlay = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAPSURBVHjaYmJgYDgDEGAAANsAz1TKIeAAAAAASUVORK5CYII%3D')";
-
- var lightbulbOffIcon = "url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABGdBTUEAAK%2FINwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJOSURBVDjLlZLdTxJQGMa96K4%2FoPUHdFfrpntyZrXsoq25tlbroi6qi7ZuYsuZ0UXRWiv72NS0gjIgDQ1LS0wkwU%2FUVEREUkEIBBFE%2BV48ve%2FZICza7OLZOTt739%2FznHPeEgAlhZpyB8%2BMLa58HHL63H2zy4muycVku8UZahl2TNJ688%2F6wsbd31yBLps3BNdqFCvrMYRjSURIvOdzzdAcmozWhTaLc%2B8WADXvHHb6RhYCEdEU2kiIJu%2FaBtwEywE3k2lQKjz8NB7Sjs7vygPMDu9ddogmUliNxsWaSGfwM5sViqcy%2BBHeFCl4r6YkzwzTnXlA9%2FSSh924md25qFDszMnmfGuga4pEd3QjiTxAN%2F49xY0c10MgjsuOuSssBdfh8IdBSUG1AibTDmbzAHrhZab6IzHQq6N3xo3%2BLyqY%2B1phMmig%2F9AISolm8yyMdo9IcKtt6HcC%2Bh653uoScTsJ0K65jw5yYrWOOISrol6Kht4pcUV%2Bg0efJwx5ADXtUA3a7aMLflHQoa0VzfTSoHMBUClqwL9EM4Lrb01JOt%2BzZQ7ob%2Fc%2FN1qDDGEHBugKxO6mOS%2BqWswZRb%2Ft9F%2BDxCLHAzQovsfdEyAYXn6d4cHBa7r7NXU%2FbrwbiCpNtsNFJzEnaqp4KjufblDU4XbtJVTJL%2BBqjQynyvZl6e8P%2FnOUC1UtvehWNr%2BBUqlGXX0T7j14gpMVZcFitUUB0ivnBvQ9PQgEgrBYxvBC8QqVxyXz2wboVfKzlSeOxsrLD2VLSyXZY0ck8feN1Ze3Dfgf%2FQJBCig%2B4GhFlwAAAABJRU5ErkJggg%3D%3D')";
-
- // CSS
- var head, styleSheet, cssStr, cssText;
- head = document.getElementsByTagName('head')[0];
- styleSheet = document.createElement('style');
- styleSheet.setAttribute('id','greasedLightboxCSS');
- styleSheet.setAttribute('type','text/css');
- head.appendChild(styleSheet);
-
- cssStr = ''+
- '#greasedLightboxOverlay { position: absolute; top: 0; left: 0; z-index: 10000000; width: 100%; background-image: ' + pngOverlay + '; background-repeat: repeat; cursor: pointer; }'+
-
- '#greasedLightboxMenu { position: fixed; top: 0; left: 0; width: 100%; z-index: 10000100; background: #000; font-family: "Terbuchet MS", Tahoma, Arial, Verdana, sans-serif; font-size: 14px; font-weight: bold; height: 35px; line-height: 35px; opacity: .5; }'+
- '#greasedLightboxMenu:hover { opacity: 1; }'+
- 'a#greasedLightboxTitleLink { position: absolute; top: 0; left: 0; display: block; height: 35px; line-height: 35px; margin: 0 5px; padding: 0 5px 0 27px; background-image: ' + lightbulbOffIcon + '; background-repeat: no-repeat; background-position: 5px 55%; color: #aaa; background-color: #000; text-decoration: none; cursor: pointer; z-index: 10000450; }'+
- 'a#greasedLightboxTitleLink:hover { color: #fff; background-color: #333; }'+
- '#greasedLightboxButtons { position: absolute; top: 0; left: 0; height: 35px; width: 100%; line-height: 35px; margin: 0; padding: 0; z-index: 10000400; }'+
- '#greasedLightboxButtons a { display: block; width: 33px; height: 33px; border: 1px solid #000; background: #000; cursor: pointer; float: right; text-align: center; color: #aaa; z-index: 10000450; }'+
- '#greasedLightboxButtons a:hover { border-color: orange; background-color: #333; color: #fff; }'+
- '#greasedLightboxLoading { position: absolute; z-index: 10000050; color: #fff; font-weight: bold; font-family: "Trebuchet MS", Tahoma, Arial, Verdana, sans-serif; text-align: center; line-height: 2em; }'+
- 'p#greasedLightboxLoadingText { margin: 0; padding: 25px 0 5px 0; font-size: 45px; color: #fff; font-weight: bold; font-family: "Trebuchet MS", Tahoma, Arial, Verdana, sans-serif; line-height: 1em; text-align: center; }'+
- 'p#greasedLightboxLoadingHelp { margin: 0; padding: 5px 0; font-weight: normal; font-size: 11px; color: #fff; font-family: "Trebuchet MS", Tahoma, Arial, Verdana, sans-serif; line-height: 1em; text-align: center; }'+
- '#greasedLightboxError { position: absolute; z-index: 10000050; text-align: center; background: #000; color: #aaa; padding: 10px; border: 1px solid #444; -moz-border-radius: 10px; font-family: verdana, sans-serif; font-size: 11px; }'+
- 'p#greasedLightboxErrorMessage { color: #fff; font-size: 45px; font-weight: bold; margin: 10px 20px; font-family: "Trebuchet MS", Tahoma, Arial, Verdana, sans-serif; text-decoration: none; border: none; text-align: center; }'+
- '#greasedLightboxError a, #greasedLightbox a { color: #aaa; text-decoration: none; border-bottom: 1px solid #777; }'+
- 'p#greasedLightboxErrorContext { margin: 0; padding: 5px 0; font-weight: normal; font-size: 11px; color: #fff; font-family: "Trebuchet MS", Tahoma, Arial, Verdana, sans-serif; line-height: 1em; text-align: center; }'+
- '#greasedLightbox { position: absolute; z-index: 10000050; text-align: center; background: #000; color: #aaa; padding: 10px; border: 1px solid #444; -moz-border-radius: 10px; font-family: verdana, sans-serif; font-size: 12px; }'+
- 'img#greasedLightboxImage { border: none; cursor: pointer; }'+
- 'img#greasedLightboxImage, img#greasedLightboxPreload, img#greasedLightboxPrefetch { max-height: none; max-width: none; }'+
- '#greasedLightbox, #greasedLightboxMenu, #greasedLightboxOverlay, #greasedLightboxError, #greasedLightboxLoading, img#greasedLightboxPreload, img#greasedLightboxPrefetch { display: none; }'+
- '#greasedLightboxCaption { color: #aaa; padding: 10px 0; }';
-
- cssText = document.createTextNode(cssStr);
- styleSheet.appendChild(cssText);
-
- // overlay div
- var objOverlay = document.createElement("div");
- objOverlay.addEventListener('click', greasedLightbox.halt, false);
- objOverlay.setAttribute('id','greasedLightboxOverlay');
- objBody.appendChild(objOverlay);
-
- // menu div
- var objMenu = document.createElement("div");
- objMenu.setAttribute('id', 'greasedLightboxMenu');
- objBody.appendChild(objMenu);
-
- // title link
- var objMenuLink = document.createElement("a");
- objMenuLink.setAttribute('id', 'greasedLightboxTitleLink');
- objMenuLink.setAttribute('href', 'http://userscripts.org/users/426977/scripts');
- objMenuLink.innerHTML = 'Keyser Söze Scripts';
- objMenu.appendChild(objMenuLink);
-
- // menu buttons div
- var objMenuButtons = document.createElement("div");
- objMenuButtons.setAttribute('id', 'greasedLightboxButtons');
- objMenu.appendChild(objMenuButtons);
-
- // right button
- var objMenuButtonRight = document.createElement("a");
- objMenuButtonRight.setAttribute('id', 'greasedLightboxButtonRight');
- objMenuButtonRight.setAttribute('title', greasedLanguage[greasedLanguage.language][0].next);
- objMenuButtonRight.innerHTML = '\u2192';
- objMenuButtonRight.addEventListener('click', function(event) { greasedLightbox.slideShow('stop'); greasedLightbox.moveSlide(event, 1); }, false);
- objMenuButtons.appendChild(objMenuButtonRight);
-
- // left button
- var objMenuButtonLeft = document.createElement("a");
- objMenuButtonLeft.setAttribute('id', 'greasedLightboxButtonLeft');
- objMenuButtonLeft.setAttribute('title', greasedLanguage[greasedLanguage.language][0].previous);
- objMenuButtonLeft.innerHTML = '\u2190';
- objMenuButtonLeft.addEventListener('click', function(event) { greasedLightbox.slideShow('stop'); greasedLightbox.moveSlide(event, -1); }, false);
- objMenuButtons.appendChild(objMenuButtonLeft);
-
- // magnify button
- var objMenuButtonPlus = document.createElement("a");
- objMenuButtonPlus.setAttribute('id', 'greasedLightboxButtonPlus');
- objMenuButtonPlus.setAttribute('title', greasedLanguage[greasedLanguage.language][0].magnify);
- objMenuButtonPlus.innerHTML = '+';
- objMenuButtonPlus.addEventListener('click', function(event) { greasedLightbox.slideShow('stop'); greasedLightbox.resize(event, 13); }, false);
- objMenuButtons.appendChild(objMenuButtonPlus);
-
- // shrink button
- var objMenuButtonMinus = document.createElement("a");
- objMenuButtonMinus.setAttribute('id', 'greasedLightboxButtonMinus');
- objMenuButtonMinus.setAttribute('title', greasedLanguage[greasedLanguage.language][0].shrink);
- objMenuButtonMinus.innerHTML = '-';
- objMenuButtonMinus.addEventListener('click', function(event) { greasedLightbox.slideShow('stop'); greasedLightbox.resize(event, -13); }, false);
- objMenuButtons.appendChild(objMenuButtonMinus);
-
- // slideshow button
- var objMenuButtonShow = document.createElement('a');
- objMenuButtonShow.setAttribute('id', 'greasedLightboxButtonSlide');
- objMenuButtonShow.setAttribute('title', greasedLanguage[greasedLanguage.language][0].slideshow);
- objMenuButtonShow.innerHTML = '\u21BB';
- objMenuButtonShow.addEventListener('click', greasedLightbox.slideShow, false);
- objMenuButtons.appendChild(objMenuButtonShow);
-
- // loader div
- var objLoading = document.createElement("div");
- objLoading.setAttribute('id','greasedLightboxLoading');
- objLoading.addEventListener('click', greasedLightbox.halt, false);
- objBody.appendChild(objLoading);
-
- var loadingGif = document.createElement('img');
- loadingGif.src = "data:image/gif,GIF89a%80%00%80%00%A2%00%00%FF%FF%FF%DD%DD%DD%BB%BB%BB%99%99%99%00%00%FF%00%00%00%00%00%00%00%00%00!%FF%0BNETSCAPE2."+
- "0%03%01%00%00%00!%F9%04%05%05%00%04%00%2C%02%00%02%00%7C%00%7C%00%00%03%FFH%BA%DC%FE0%CA%06*%988%EB%CD%BB_%96%F5%8Ddibax%AEl%AB%A5%A2%2B%CF.%5C%D1x%"+
- "3E%DA%97%EE%FF%12%1EpHT%08%8B%C8G%60%190%1DI%83%E8%20%F9a2K%CF%8FTJ%E5X%AD%A4lg%BB%EDj%BE%D7%9D%0DJ%8E%9A3%E8%B4G%BCis%DF%93%B8%9CC%CF%D8%EFx%12zMsk"+
- "%1E%7FS%81%18%83%850%87%7F%8Apz%8D)%8Fv%91%92q%1D%7D%12%88%98%99%9A%1B%9C%10%88%89%9Fy%93%A2%86%1A%9E%A7%8B%8C%2F%AB%18%A5%AE%A0_%AA%8E%AC%90%B5%B6%"+
- "60%19%A3%0D%AD%BC%AF%A1(%B2%9D%BB%C3%C4h%BF%C7%A4%C9%CA%A8%A9A%CE%0E%B4%D1%BD%7B%10%C0%0A%C2%D8%D2%C5%DB%D5%0C%D7%DF%CB%B7%13%B9%C8%97x%02%EE%02%2B%"+
- "B0%D47%13%DEln%1E%EF%EF'%F2%2B%F6Zd%3A%E8%1Bhb%9A%3Fv%F7%DAp%18%C8%90%84%C1%13%D0%C6%94%CB%C0%B0%E2%08f2%14%02%2Ce%8A%FFb%C5%86U%B4%B5(%B3%91%A3%C0%"+
- "8F%20%CD%CD%E2%08h!%CA%94*%AD%B1l%99%EF%25%C1%98%0Bf%D2%1Ca%F3fL%9D%F8X%F4%D4g%0EhG%17C%F7%0D3%EA%23%A9%3B%5EL%818u%054%C9P%AA%2C%DF%D8%C4%FA%8F%CAK"+
- "%AE%08%15Y%AC%15%F6%13%D1%A5%3Bq%AA%5D%CB%B6%AD%DB%B7p%E3%CA%9DK%B7%AE%DD%BBx%F3B4%DA%F5%1B_a%7F'%16%0D%0C%89%B0%E0h%86%13%F3%FD%A9%B8qV%95%8E%23%F7"+
- "%85*%D9Me%B5%97%BB9f%1BY%AF%E7%CF%A0C%8B%1EM%BA%B4%E9%D3%A8S%AB%C6A%92r%D0Se1%C5~s8P%ED%24%26a%DF%1E2%13%EC%E4%1CUu%F7%06%12%D5wn%E0%C1%5D%0F%9FQ%1C"+
- "q%F2%83%3A1%3FO%F8Xzt%EA%C7%DB6%AFs%5D%EE%F4%95%D5%25%BEv%D1Z%7Cv%F0%BB%EB%05%CC%B8%DERz%99%BF%D5kd%11%91%C3y%F9%F3G%D4%2F%B1%DF~%FF%08%BC%F9%E9%F7_"+
- "I%EDaW%12t%01%3EP%DE3%B3%B9g%DB%80%9A-%A8%20%84%8CAha%7C%90Q%A8!%85~a%B8!%87%CE5%18%8C%88%E4%80%88%16%89%25%26%C8%A0%8A%19%A2%98%93%8B%11%B2%D8!%8C1"+
- "J%08%A0%89%9F%BC%97b%81%F8%C9x%A2%8F%F0%F1%D8%A3%8D%CA%E8%B8%23%91%2B%02)%9C%92%232y%24%92%C6%A55%E4x~%E0H%9B%95%04%60%89%A1%22%5B%06%09%E5%8D4%9Aa%"+
- "A4%97RNY%26%97X%D6x%E6%3ANv%91%A6%9ATr%D7%26%15of%19%26%99q%E6(%A4%7Fs%929%E3Q%EE%7D%89%1Eiu%AAVhj%87%A2%96%E8i%8B%9A%D6%A8%A3%7B%AE%C6'%A0%AE%24%00"+
- "%00!%F9%04%05%05%00%04%00%2C%0A%00%02%00W%000%00%00%03%FFH%BA%DC%FE0%BE%40%83%BC8%EB%3D%2B%E5%60(J%9E7%9E(WVi%EBv%EB%2B%BF%EB7%DFgm%E1%3C%A8%F7%23%8"+
- "1P%90%FA%A1%00H%40k8D%19G%C9%24%8A%C9%CC%D5N%D1%E8%89%DA%1C%3DCYi%90%2B%F4%5EEa%B1%88%DC%F5%9DAi%F5%9A-%FAn%E2%CA%14%9B%E8%8E%C1%E3.%7B!v%19x%2F%82*"+
- "o%1A%86%87%88%1A%84%12xy%8Dd%89~%8B%803%7B%7C%19%90%10%928%8E%18%9E%0F%8C%A1t%9D%8A%91%99%3C%A2%24%AA%11%A6%AD%A8%17%A4%0C%B2%B3%B4%11%B6%0A%A0%40%0"+
- "A%AE0%25%18%B8%3D%9B%B5%B0%0D%BE%BF%C0%BA%10%97%B1%AC%10%03%D4%03%81%CE%C2%C4%D2%0F%D5%D5K%D8G%DB%0D%DD%E4z%952%E2%E3%E4%E5c%5C3%E9%0C%EB%F2%EDm%E8Y"+
- "%18%F2%F3se%3CZ%19%F9%FA%98%09%04%18P%E0%2F%82%EB%0C2C%C8N!%10%86%DD%1C%1E%84HMb%0F%8A%15-%F2%C0%A8%F1%13%22%C3%8E%0F%09%82%0C%99o%E4%C4%86%26IZK%A9"+
- "!%01%00!%F9%04%05%05%00%04%00%2C%1F%00%02%00W%000%00%00%03%FFH%BA%DC%FEKH%01%AB%BD8%EB6%E7%FE%60%A8u%9Dh%9E%22%E9%A1l%5B%A9%92%2B%CF%04L%D1%F8i%E7%7"+
- "C%B8%F7%A2%81p%C0%FA%9D%02%C8%40k8D%19E%C9%24%8A%C9%D4%C1%8EQ%A9%89%DA4%3DAYm%90%2B%F4%5E%A1a%E4%89%DC%05%7D5i%F1%98%9C%3A%83%E3K%B6%CF%BE%89%2B%F3t"+
- "n%7Cpx.lD%1Fo%17~3%87%88%23%83%8B%8C%8Dz%1B%8A%15%93%94%95%19%97%0F~%7F4%87%96%91%98%859%A2%9C%A4%9E%A6%A7%9B%17%9D%0D%99%3C%A8%AF%AA%B1%AC%B3%B4%2F"+
- "%B6%0B%9F%40%0B%BA%10%B0%0A%B2%40%8E%B5*%92%B8%C6%AE%C2%24%18%C5%BF%04%C1%0F%25%CAa.%00%DA%00%18%D4(%D1!%DB%DB%DD%812%CB%20%E2%E9%17%CD%2C%E7%1A%E9%"+
- "F0%E4U8%D8%22%F0%F7%19%F39Q%26%F7%F8%D2%D2%FC%FD%03%D8C%E0%40%828%0C%C6C%C8C%A1%3A%86%09%1D%8E%83HC%E2D%8A3%2Cj%C3X%D1%14%22%C7%88%0A%3F%E6%08)r%A4%"+
- "C0%92%05%17%A2L%B9%D1D%02%00!%F9%04%05%05%00%04%00%2C%3C%00%02%00B%00B%00%00%03%FEH4%3C%FA0%CAI%AB%9D%AD%DD%CD%7B%CD%99'%8E%16%A8%91hj2i%3B%AE%8E%2B"+
- "o%F0l%7F%EB%ADG%B5%2B%FC%82%DD%A3%97%02%02%85%8B%5C%D1x%DC%11I%CC%A6%EE)%8AJo%D4%8E%F5j%CBr%B6A%A1%F7%02F%26M%D0%ADy%5C)%AF%95Z7%92%3D%91%CF%E1%1Bp%"+
- "F8%8D%8E%5B%CDCx%16v%7C%20~Q%80%81%7Ddj%89%0At%0Az%8E%8F%82u%8D%93%90%92%93%94!%8C%7F%9B%8A1%83%97.%01%A6%01%3B%84(%A7%A7%3A%A4%AB%AC%AC7%AF%22%B1%B"+
- "6%AEL)%B6%BB%A9%5C%1E%BB%BC%A0%1B%C0%C1%C2%15%C4%C5%C6%12%C8%B7%CA%14%CC%B1%CE%13%D0%B2%D2%11%D4%AD%D6%D7%D8%A8%DA%10%DC%DE%CB%D0%E1%D3%C8%E4%CF%C4%"+
- "E7%C7%CD%EA%EB%A6%ED%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FA%00%FD%FE%FF%00%03%024%26%B0%A0%C1%7F%A0%0E*4%B8i%A1%C3%81%93%1EJ%04%D0p%A2%C3%84%16%0F%12%C"+
- "C(%03PA%02%00!%F9%04%05%05%00%04%00%2CN%00%0A%000%00W%00%00%03%ECH%BA%BC%F3%A3%C9I%2B%85%D0%EA%7Dq%E6%E0%E6%7Da)%8D%A4%A9%A2%A9Z%B2%91%BB%B2%B2%0B%D"+
- "7%E6%8D%87p%BCs%BA%9F((%B4%10%8B%1D%14r%A8%5CV%8ENF%2F%9A%1CQ'%D3k%03z%E5%AA%04%60%81%91%B6%0B%87%9F%CD%9Ay%5D%C5%A8%D7%EC%B6%CF%04%AF%8F%1F%B2%BA%9"+
- "D%AA%DF%3B%FB~H%80p%7C%83fQ%86%87%7F%89%60%85%8C%8E%86Z%89Z%0A%83%94%0B%80%97%0C%81%9A%95g%9D%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA*%01%AD%AE%AF%B0%B1%B0"+
- "5%B2%B5%B6%AF.%B7%BA%B6%AC%BB%BE%B8%26%BF%C2%01%BD%C3%BB%B9%C6%B7%B4%C9%B2%AB%CE%CF%D0%D1%D2%D3%D4%D52%00%D8%00%A5%D9%DC%A2%DC%DF%DA%9D%E0%DF%E2%E3%"+
- "E4%94%E6%E3%E8%E9%E0Z%EC%ED%EE%EF%DD%F1%F2%D8%F4%F5%EB%F5%E1W%FA%FB%FC%F8%F9%D8%95K%17%8A%A0%B7s%A3%E6QH%00%00!%F9%04%05%05%00%04%00%2CN%00%1F%000%0"+
- "0W%00%00%03%E9H%BA%DC%FEn%C8%01%AB%BDmN%CC%3B%D1%A0'F%608%8Eez%8A%A9%BAb%AD%FBV%B1%3C%93%B5v%D3%B9%BE%E3%3D%CA%2F%13%94%0C%81%BD%231%A8D%B6%9A%8F%1C"+
- "%14R%9B%F2L%D6%AB0%CB%EDz%BF%E0%B0xL.%9B%CF%5C%81z%CDn%BB%DB%B3%B7%7C%CE%5E%D1%EF%F3%13~%0F%1F%F1%FF%02z%80%7Bv%83tq%86oh%8B%8C%8D%8E%8F%90%91%92%93"+
- "%0A%01%96%01f%97%9Ac%9A%9D%98%60%9E%9D%A0%A1%A2%5D%A4%A1%A6%A7%9E%5C%AA%AB%AC%AD%9B%AF%B0%96%B2%B3%A9%B3%9FY%B8%B9%10%00%BE%00%2F%B8%15%BF%BF%C1%B0%"+
- "BD%C4%C5%C6%A7%C8%C9%C07%CC%0F%CE%CA%D0%A5%D2%D3%CF%3B%B1%C3%D8b%D8%BE%DE%DDa%DF%D9_%DFc%E7%E3%E2%EA%D3%E1%EB%E6%EF%5E%E4%EE%CE%E8%F1%5D%E9%EC%F5%FA"+
- "%FB%60%F9%FE%ED%E8%11%23%D3%CF%1E%B8)%09%00%00!%F9%04%05%05%00%04%00%2C%3C%00%3C%00B%00B%00%00%03%F9H%BA%DC%FEP%8DI%AB%BD6%EA%1D%B1%FF%15'r%60%F9%8D"+
- "%E8c%AEY%EAJl%FC%BE%B1%3C%BB%B5y%CF%F9%B9%FF%C0%A0pH%2C%1A%8F%C8%A4r%C9l%3A%9F%D0%A8tJ%10X%05%D4%D7u%9B%1Dm%BF%D8%AE%06%FC%15G%C8%60%B3%03MV3%D8mw%1"+
- "5%5E%96%CF%E9W%FB%1D%1Fv%F3%F3v%7FVz%82F%01%87%017%7FD%88%88%8AxC%8D%8D%3Bt%91%92%87%40l%96%97%89%99u%11%00%A1%00%1C%9C%98A%5C%1A%A2%A2%A4%A5O%AA%AA"+
- "%1B%A5%A6L%AF%AB%B1%ADM%B5%A1%AC%B8K%BA%A3%BC%97%B9%BA%23%B2%B4%C4%22%C6%BE%C8%C9%BDH%BF(%B2%9D%CF%CC%CD%9CJ%D0%D1%CAG%D9%DA%D7%D4%B5%2F%DBE%DD%DE%C"+
- "2%DC%D5%E6%92%E8%E1%E2%E3B%E5)%EFA%F1%F2%DFD%F5%EA%8E%E4%E9.%E7%FC%EDvLb%F7J%8F%83%7Cv%10%CAQ%E8%86%A1%1A%87%0F%0B%1A%7C%00kb%83%04%00!%F9%04%05%05%"+
- "00%04%00%2C%1F%00N%00W%000%00%00%03%FFH%BA%DC%FE0%CA7%EA%988%EB%CD%89%FD%5D(%8E%CDg%5Ed%AAJ%A7%B9%BE%B0%D7%BAq%1D%CE%AD%ADkx%BE%FF%90%DE%09Ht%08i%C5"+
- "%E4%11%94%2C.-M%E5%13%15%05N5%80%2C%E0'%E8%0AFO%8CV%AB%F3z%C1%C7%C9x%5C3%9BIB%F5%3A%DBvwU8%C9%9C%1C%B3%9F%F1H%10%7Bt%13%01%86%01%18~w%2BL%11%83%5B%8"+
- "5%87%86%89%8AQ%8F%90%11%92%92%13%8A%8BE%8F%18%9A%87%94~I%97%A1%A2%88%9C%9D%9F%83%19%A9%AA%AB%A5%40%A0%AF%A9%1A%AC%3F%B5%A8%A2%B8%95%3B%BB%BC%9A%1B%B"+
- "95%A7%1A%B0%C4%C50%C1%C2%9B%CA%B3%CC%CD%91%BD%D0%D1%2B%D3%D4%C3%1C%CB)%D9%DA%CF%DC%BF*%DF%12%C9%1D%DD%22%E5%E6%B7!%E9%1C%C7%1D%E7%E8%EFX%AE%22%F3%F4"+
- "%D7%1D%F7%F8%ED%22%E3B%F4%0B%91O%9F%1BokR%144%E8%89%04%1B%85%FFF%BC%A9%E2l%14%C5(%0B%2F%FE%C8%A8Q%13%07%C7%8E5%3E%82%84!r%E4%8Bj%26%89%84K%A9%20%01%"+
- "00!%F9%04%05%05%00%04%00%2C%0A%00N%00W%000%00%00%03%FFH%BA%DC%0E%10%B8I%AB%BD8%B7%C8%B5%FF%E0%C7%8DRh%9E!9%A2lK%A9%A4%2B%B7%B0%3A%DF%60m%E3%3C%A6%C7"+
- "%BD%E0%E4%B7%12%1A%17%C4%CEq%99%8C%2C%8FM%C8%13%DA%9CR%89%A7%806%20%1Cx%07%99dv%AB%ED%7D%BF%3E%1D%8AL%C6%9D%CF%97Z%8B%BDu%BF%BDi%25%8B%5E%BF%DD%D1qN"+
- ".%7Ce%17%02%87%02%18%7FxV%04%84%5C%86%88%87%8A%8BV%8F%90%15%92%92%17%8B%8CK%8F%18%9A%88%94%7FO%97%A1%A2%89%9C%9D%9F%84%19%A9%AA%AB%A5F%A0%AF%A9%1A%A"+
- "CB%B5%A8%A2%B8%95A%BB%BC%9A%1E%B98%A7%1A%B0%C4%C53%C1%C2%9B%CA%B3%CC%CD%91%BD%D0%D1%83%AE%1F%C9%1F%CB%7B%D9%DA%B7%20%DDc%7C!%DB%DC%BF%DE%E5%E6%E1%E2"+
- "%E9%26%C7%20%E7%E8%EF%20%D3%C8%ED%EE%D7%F6%EB%26%F3%FAo%D6%F4cW%CDD%3D~mP%FC%03%E8I%60!%85%F9%0C%02jDm%18E%2B%0B%2F%0A%C9%A8%B1%12%07%C7%8E8%3E%82%9"+
- "C!r%A4%8C%82%26%8D%3C%E3%91%00%00!%F9%04%05%05%00%04%00%2C%02%00%3C%00B%00B%00%00%03%F5H%04%DC%FE%F0%A9I%AB%BD%98%C6%CD%5D%FE%E0%D5%8D%5Ch%82d*%9D%A"+
- "C%A5%BE%40%2BO%B0%3A%DF%F5x%EF%F9%B6%FF%C0%A0pH%2C%1A%8F%C8%A4r%C9l%3A%9F%D0%A8tJ%3D%05%AE%81%AA%0C%CB%D5%9A%B8%E0%AC7%13%06%8F%2F%E5%F0%99%92.%AF%0"+
- "9m%F7%3A%AE%3E%D3%CD%F6%3B%F6%AD%DF%E7%FB%7C%80%81w%3B%02%86%02Fz%85%87%86Et%3F%8C%8CDmA%91%87%8Ex%40%96%97%98WC%9B%8D%20%03%A3%03R%A0%88%A2%A4%A3P%"+
- "A7%A8%19%AA%AAO%A7!%B0%A4N%AD%B4%B5%A5M%B3%B9%B5%BC%A0'%BA%BBK%BD%BE%B0L%C6%C7%B1J%B8%C2%BA%C5%C1%2C%C3%CD%CA%CB%B6I%D6%D7%ABH%DA%DB%C4F%DE%A9%BFG%E"+
- "2%E3%C8%E1%E6%1F%D4%E9%9B%3B%ECE%D27%F0D%F23%F4%F5%91%40%F8%F9%A1%3F%FCo%26%00%0CH%60%60%40%83o%10%AEQx%86aCt%0410K%00%00!%F9%04%05%05%00%04%00%2C%0"+
- "2%00%1F%000%00W%00%00%03%E7H%BA%0C%0E%2C%CAIk%7B%CE%EAM%B1%E7%E0%E6%8Da)%8D%A8%A9%A2%A9Z%B2%AD%CB%C1%B1%AC%D1%A4%7D%E3%98.%F2%0F%DF%0E%08%11v%88E%E3"+
- "%04%A9%AC%00%9B%16%1C4%0A%9B%0E%7B%D6_%26%CB%EDz%BF%E0%B0xL.%9B%CF%A1%80z%CDn%BB%DB%B6%B7%7C%CEv%D1%EFs%15~%0F7%F1%FF%01z%80%7Bv%83tq%86oh%8B%8C%8D%"+
- "8E%8F%90%91%92%93h%02%96%02f%97%9Ac%9A%9D%98%60%9E%9D_%A1%9E%5D%A4%A1Y%A7%A8V%AA%A5S%AD%A2%AF%B0%97%A9%B3%96%AC%B6%9F%B2%B3%5C%B62%03%C0%03%16%BC.%C"+
- "1%C1%15%AD6%C6%C6%14%A7%3E%CB%C7%CD%B1%3A%D0%D1%D2%B7B%D5%C0b%DA%C2a%DD%DE%60%DD%DC%E3%DF%DA%E4%D5c%E5%E2%E7%E6%ED%EC%E9%EE%F1%F0%D0%E8%F5%F6%CB%F8%"+
- "CC%F2%F7%F4%F9%FA%DB%D4%CD%D3wf%9F%86%04%00!%F9%04%09%05%00%04%00%2C%02%00%02%00%7C%00%7C%00%00%03%FFH%BA%DC%FE0%CAI%AB%BD8%EB%CD%BB%FF%60(%8Edi%9Eh"+
- "%AA%AEl%EB%BEp%2C%CFt%0A%DC%40%AD%938%BE%FF%9E%5E%0FH%CC%08%7D%C5%24%E5%88T%3A%1D%CC%E6sJ%88%E6%A8X%2B%96%AA%DDN%BB%5E%A5%F5%1AN%82%CB%C41%DA%1C%5D%"+
- "B3%99%EEt%3B%0E%3C%D3i%EA%BB%CE%AE%8F%E5%FB3%7C%80%12%01%85%01!%82%83%0E%86%86%20%89%8A%0B%8C%92%1Fs%90%10%92%98%1D%95%96%8B%98%99%1BG%9C%11%9E%9E%1"+
- "CC%A2%A3%A4%9F%A8%26%AA%A5%AC%AD%AE%93%B0%24%B2%B3%B4%23%B6%8C%B8%B5%BA%85%BC%22%BE%BF%C0!%C2%C4%C1%B6%C7%B9%AE%CA%CB%A4%CD%BD%B7%D0%CE%87%D3%D6%D7%"+
- "D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%C0%02%E4%E5%E6%E7%E8%E7%DC%E9%EC%ED%E6%DA%EE%F1%ED%D9%F2%F5%EA%D8%F6%F9%02%F4%FA%F5%F0%FD%EE%D6%01L'%AE%A0%C1%83%08%13"+
- "*%5C%C8%B0%A1%C3%87h%06H%1C%00q%C1%C4%8B%10%2Fj%A4%D8pP%A3F%86%1E7*%0C%E9%11!%C9%92%07O%8A4%A8%F2%23%CB%96%13M%C2%94%98r%26%C7%970%13%CE%5C%98%93%E7"+
- "I%87%24%2B%AE%ACH%00%23%D1%A3H%93*%5D%CA%B4%A9%D3%A7P%A3J%9DJ%B5%AA%D5%ABX%B3j%DD%CA%B5%AB%D7%AF%60%C3%16I%00%00%3B";
- loadingGif.style.border = 'none';
-
- objLoading.appendChild(loadingGif);
-
- // loading text
- var objLoadingText = document.createElement("p");
- objLoadingText.setAttribute('id','greasedLightboxLoadingText');
- objLoadingText.innerHTML = greasedLanguage[greasedLanguage.language][0].loading;
- objLoading.appendChild(objLoadingText);
-
- // helper message
- var objLoadingHelp = document.createElement("p");
- objLoadingHelp.setAttribute('id','greasedLightboxLoadingHelp');
- objLoadingHelp.innerHTML = greasedLanguage[greasedLanguage.language][0].loadingSub;
- objLoading.appendChild(objLoadingHelp);
-
- // error div
- var objErrorBox = document.createElement("div");
- objErrorBox.setAttribute('id','greasedLightboxError');
- objBody.appendChild(objErrorBox);
-
-
- // error message
- var objError = document.createElement("p");
- objError.setAttribute('id','greasedLightboxErrorMessage');
- objError.innerHTML = greasedLanguage[greasedLanguage.language][0].error +
- '<p id="greasedLightboxErrorContext"></p>';
- objErrorBox.appendChild(objError);
- // lightbox div
- var objLightbox = document.createElement("div");
- objLightbox.setAttribute('id','greasedLightbox');
- objOverlay.appendChild(objLightbox);
-
- // empty image
- var objImage = document.createElement("img");
- objImage.addEventListener('click', greasedLightbox.halt, false);
- objImage.setAttribute('id','greasedLightboxImage');
- objLightbox.appendChild(objImage);
-
- // empty preloader
- var objPreload = document.createElement("img");
- objPreload.setAttribute('id','greasedLightboxPreload');
- objBody.appendChild(objPreload);
-
- // empty prefetcher
- var objPrefetch = document.createElement("img");
- objPrefetch.setAttribute('id','greasedLightboxPrefetch');
- objPrefetch.addEventListener('error', function() { return false; }, false);
- objBody.appendChild(objPrefetch);
-
- // empty caption
- var objCaption = document.createElement("div");
- objCaption.setAttribute('id','greasedLightboxCaption');
- objLightbox.appendChild(objCaption);
-
- document.addEventListener('keypress', greasedLightbox.handleKey, true);
-
- }, // init()
-
- // unload
- // runs onunload to clear up possible memory leaks
- unload : function () {
- var objOverlay = document.getElementById('greasedLightboxOverlay');
- objOverlay.removeEventListener('click', greasedLightbox.halt, false);
-
- var objMenuButtonRight = document.getElementById('greasedLightboxButtonRight');
- objMenuButtonRight.removeEventListener('click', function(event) { greasedLightbox.moveSlide(event, 1); }, false);
-
- var objMenuButtonLeft = document.getElementById('greasedLightboxButtonLeft');
- objMenuButtonLeft.removeEventListener('click', function(event) { greasedLightbox.moveSlide(event, -1); }, false);
-
- var objMenuButtonPlus = document.getElementById('greasedLightboxButtonPlus');
- objMenuButtonPlus.removeEventListener('click', function(event) { greasedLightbox.resize(event, 13); }, false);
-
- var objMenuButtonMinus = document.getElementById('greasedLightboxButtonMinus');
- objMenuButtonMinus.removeEventListener('click', function(event) { greasedLightbox.resize(event, -13); }, false);
-
- var objLoading = document.getElementById('greasedLightboxLoading');
- objLoading.removeEventListener('click', greasedLightbox.halt, false);
-
- var objError = document.getElementById('greasedLightboxErrorMessage');
- objError.removeEventListener('click', greasedLightbox.halt, false);
-
- var objImage = document.getElementById('greasedLightboxImage');
- objImage.removeEventListener('click', greasedLightbox.halt, false);
-
- var objPrefetch = document.getElementById('greasedLightboxPrefetch');
- objPrefetch.removeEventListener('error', function() { return false; }, false);
-
- document.removeEventListener('keypress', greasedLightbox.handleKey, true);
-
- } // unload()
- } // greasedLightbox
- var greasedLanguage = {
-
- // english
- en : [
- {
- loading : 'Loading image',
- loadingSub : 'Click anywhere to cancel',
- context : 'View image in its original context',
- error : 'Image unavailable',
- next : 'Next image (right arrow key)',
- previous : 'Previous image (left arrow key)',
- magnify : 'Magnify image (+ key)',
- shrink : 'Shrink image (- key)',
- update : 'Update available',
- slideshow : 'Start/stop slideshow'
- }
- ], // english
-
- // español
- es : [
- {
- loading : 'Cargando imagen',
- loadingSub : 'Click en cualquier sitio para cancelar',
- context : 'Ver imagen en su contexto original',
- error : 'La imagen no está disponible',
- next : 'Siguiente imagen (tecla derecha)',
- previous : 'Imagen anterior (tecla izquierda)',
- magnify : 'Aumentar tamaño (tecla +)',
- shrink : 'Reducir tamaño (tecla -)',
- update : 'Actualización disponible',
- slideshow : ''
- }
- ], // español
-
- // português (portuguese)
- pt : [
- {
- loading : 'Carregando imagem',
- loadingSub : 'Clique em qualquer lugar para cancelar',
- context : 'Imagem no contexto original',
- error : 'Imagem indisponível',
- next : 'Próxima imagem (tecle na seta da direita)',
- previous : 'Imagem anterior (tecle na seta da esquerda)',
- magnify : 'Aumente o zoom (tecle +)',
- shrink : 'Diminua o zoom (tecle -)',
- update : 'Atualização disponível',
- slideshow : 'Iniciar/cancelar apresentação'
- }
- ], // português
-
- // deutsch (german)
- de : [
- {
- loading : 'Bild wird geladen',
- loadingSub : 'Zum Abbrechen irgendwo klicken',
- context : 'Bild im ursprünglichen Kontext anzeigen',
- error : 'Bild nicht verfügbar',
- next : 'Nächstes Bild (Pfeil rechts)',
- previous : 'Vorheriges Bild (Pfeil links)',
- magnify : 'Bild vergrößern (+ Taste)',
- shrink : 'Bild verkleinern (- Taste)',
- update : 'Aktualisierung verfügbar',
- slideshow : 'Diashow starten/beenden'
- }
- ], // deutsch
-
- // français (french)
- fr : [
- {
- loading : 'Chargement de l\'image',
- loadingSub : 'Cliquez n\'importe où pour annuler',
- context : 'Voir cette image dans son contexte original',
- error : 'Image indisponible',
- next : 'Image suivante (Touche flèche droite) ',
- previous : 'Image précédente (Touche fléche gauche)',
- magnify : 'Agrandir l\'image (Touche +)',
- shrink : 'Reduire l\'image (Touche -)',
- update : 'Mise à jour disponible',
- slideshow : ''
- }
- ], // français
-
- // het Nederlands (dutch)
- nl : [
- {
- loading : 'Laden',
- loadingSub : 'Klik ergens om terug te keren',
- context : 'Bekijk het plaatje in zijn originele context',
- error : 'Plaatje niet beschikbaar',
- next : 'Volgend plaatje (rechter pijltjestoets)',
- previous : 'Vorig plaatje (linker pijltjestoets)',
- magnify : 'Vergoot plaatje (+ toets)',
- shrink : 'Verklein plaatje (- toets)',
- update : 'Update beschikbaar',
- slideshow : 'Start/stop diavoorstelling'
- }
- ], // het Nederlands
-
- // italiano (italian)
- it : [
- {
- loading : 'Scarico immagine',
- loadingSub : 'Fai clic sullo sfondo per annullare',
- context : 'Mostra nel suo contesto originale',
- error : 'Immagine non disponibile',
- next : 'Successiva (tasto freccia a destra)',
- previous : 'Precedente (tasto freccia a sinistra)',
- magnify : 'Ingrandisci (tasto +)',
- shrink : 'Riduci zoom (tasto -)',
- update : 'Aggiornamento disponibile',
- slideshow : 'Avvia/ferma presentazione'
- }
- ], // italiano
-
- // ???????? (greek)
- el : [
- {
- loading : '?????a f??t?s??',
- loadingSub : '?t?p?ste ?p??d?p?te ??a ?a a????sete',
- context : '?????a ?p???? st? a????? p?a?s?? t??',
- error : '?????a µ? d?a??s?µ?',
- next : 'Next image (right arrow key)',
- previous : 'Previous image (left arrow key)',
- magnify : 'Magnify image (+ key)',
- shrink : 'Shrink image (- key)',
- update : 'Update available',
- slideshow : ''
- }
- ], // ????????
-
- // russki (russian)
- ru : [
- {
- loading : '??????????? ????????',
- loadingSub : 'Click ???-????, ????? ????? ????????',
- context : '??????????? ??????? ? ????? ????????????? ??????',
- error : '??????????? ?????????????',
- next : 'Next image (right arrow key)',
- previous : 'Previous image (left arrow key)',
- magnify : 'Magnify image (+ key)',
- shrink : 'Shrink image (- key)',
- update : 'Update available',
- slideshow : ''
- }
- ], // russki
-
- // hungarian
- hu : [
- {
- loading : 'K\u00E9p bet\u00F6lt\u00E9se',
- loadingSub : 'Kattints a visszal\u00E9p\u00E9shez',
- context : 'Megtekint\u00E9s az eredeti k\u00F6rnyezet\u00E9ben',
- error : 'K\u00E9p nem el\u00E9rhet\u0151',
- next : 'K\u00F6vetkez\u0150 k\u00E9p (jobbra gomb)',
- previous : 'El\u0150z\u0150 k\u00E9p (balra gomb)',
- magnify : 'Nagy\u00EDtás (+ gomb)',
- shrink : 'Kicsiny\u00EDt\u00E9s (- gomb)',
- update : 'El\u00E9rhet\u0150 az \u00FAjabb verzi\u00F3',
- slideshow : ''
- }
- ], // hungarian
-
- // finnish
- fi : [
- {
- loading : 'Ladataan kuvaa',
- loadingSub : 'Napsauta kerran keskeyttääksesi',
- context : 'Näytä kuva alkuperäisessä kontekstissa',
- error : 'Kuvaa ei saatavissa',
- next : 'Seuraava kuva (oikea nuolinäppäin)',
- previous : 'Edellinen kuva (vasen nuolinäppäin)',
- magnify : 'Suurenna kuvaa (+ näppäin)',
- shrink : 'Pienennä kuvaa (- näppäin)',
- update : 'Päivitys saatavilla',
- slideshow : 'Käynnistä/Pysäytä dia esitys'
- }
- ], // finnish
-
- // japanese
- ja : [
- {
- loading : '\u8AAD\u307F\u8FBC\u307F\u4E2D',
- loadingSub : '\u30AF\u30EA\u30C3\u30AF\u3067\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3059',
- context : '\u5143\u306E\u753B\u50CF\u3092\u8868\u793A',
- error : '\u753B\u50CF\u304C\u5B58\u5728\u3057\u307E\u305B\u3093',
- next : '\u6B21\u306E\u753B\u50CF',
- previous : '\u524D\u306E\u753B\u50CF',
- magnify : '\u753B\u50CF\u3092\u62E1\u5927 (+)',
- shrink : '\u753B\u50CF\u3092\u7E2E\u5C0F (-)',
- update : '\u65B0\u3057\u3044\u66F4\u65B0\u304C\u3042\u308A\u307E\u3059',
- slideshow : '\u30B9\u30E9\u30A4\u30C9\u30B7\u30E7\u30FC\u3092\u958B\u59CB\u002F\u505C\u6B62'
- }
- ], // japanese
-
- // chinese (simplified)
- zh : [
- {
- loading : '\u8BFB\u53D6\u56FE\u7247',
- loadingSub : '\u6309\u4EFB\u610F\u952E\u6765\u53D6\u6D88',
- context : '\u4EE5\u539F\u6587\u672C\u67E5\u770B\u56FE\u7247',
- error : '\u56FE\u7247\u4E0D\u53EF\u8BFB',
- next : '\u4E0B\u4E00\u4E2A\u56FE\u7247 (\u53F3\u952E)',
- previous : '\u524D\u4E00\u4E2A\u56FE\u7247 (\u56FE\u7247)',
- magnify : '\u653E\u5927\u56FE\u7247 (+\u952E)',
- shrink : '\u7F29\u5C0F\u56FE\u7247 (-\u952E)',
- update : '\u53EF\u63D0\u4F9B\u66F4\u65B0',
- slideshow : ''
- }
- ], // chinese (simplified)
-
- // Chinese (traditional)
- tw : [
- {
- loading : '\\u8F09\\u5165\\u5716\\u7247\\u4E2D',
- loadingSub : '\\u6309\\u4EFB\\u610F\\u9375\\u53D6\\u6D88',
- context : '\\u6253\\u958B\\u5716\\u7247\\u539F\\u59CB\\u7DB2\\u5740',
- error : '\\u7121\\u6CD5\\u8F09\\u5165\\u5716\\u7247',
- next : '\\u4E0B\\u4E00\\u5F35\\u5716 (\\u53F3\\u9375)',
- previous : '\\u4E0A\\u4E00\\u5F35\\u5716 (\\u5DE6\\u9375)',
- magnify : '\\u653E\\u5927\\u5716\\u7247 (+\\u9375)',
- shrink : '\\u7E2E\\u5C0F\\u5716\\u7247 (-\\u9375)',
- update : '\\u6709\\u66F4\\u65B0\\u7248\\u672C',
- slideshow : '\\u958B\\u59CB/\\u505C\\u6B62\\u5FAA\\u5E8F\\u64AD\\u653E'
- }
- ], // Chinese (traditional)
-
- // polish
- pl : [
- {
- loading : '\u0141aduj\u0119 obraz',
- loadingSub : 'Kliknij aby przerwa\u010B',
- context : 'Zobacz obraz w oryginalnym kontek\u015Bcie',
- error : 'Obraz niedost\u0119pny',
- next : 'Nast\u0119pny obraz (klawisz \u2192)',
- previous : 'Poprzedni obraz (klawisz \u2190)',
- magnify : 'Powi\u0119ksz obraz (klawisz +)',
- shrink : 'Zmniejsz obraz (klawisz -)',
- update : 'Dost\u0119pna nowa wersja',
- slideshow : 'Uruchom/zatrzymaj pokaz slajd\u00F3w'
- }
- ], // polish
-
- // czech
- cs : [
- {
- loading : 'Nahrávám obrázek',
- loadingSub : 'Kliknete kamkoliv pro zrušení',
- context : 'Prohlížet obrázek v orignálním kontextu',
- error : 'Obrázek není dostupný',
- next : 'Další obrázek (šipka doprava)',
- previous : 'Predchozí obrázek (šipka doleva)',
- magnify : 'Priblížit obrázek (klávesa +)',
- shrink : 'Oddálit obrázek (klávesa -)',
- update : 'Je dostupná aktualizace',
- slideshow : 'Spustit/zastavit slideshow'
- }
- ], // czech
-
- // slovak
- sk : [
- {
- loading : 'Nahrávam obrázok',
- loadingSub : 'Pre zrušenie kliknite kdekolvek',
- context : 'Prezriet obrázok v orignálnom kontexte',
- error : 'Obrázok nie je dostupný',
- next : 'Další obrázok (šípka doprava)',
- previous : 'Predchádzajúci obrázok (šípka dolava)',
- magnify : 'Priblížit obrázok (klávesa +)',
- shrink : 'Oddialit obrázok (klávesa -)',
- update : 'Je dostupná aktualizácia',
- slideshow : ''
- }
- ], // slovak
-
- // swedish
- sv : [
- {
- loading : 'Laddar bild',
- loadingSub : 'Klicka för att avbryta',
- context : 'Visa originalbild',
- error : 'Bild inte tillgänglig',
- next : 'Nästa bild (höger piltangent)',
- previous : 'Föregående bild (vänster piltangent)',
- magnify : 'Förstora bild (+-tangent)',
- shrink : 'Förminska bild (–tangent)',
- update : 'Ny uppdatering tillgänglig',
- slideshow : 'Starta/stoppa bildspel'
- }
- ], // swedish
-
- /* language template
- //
- : [
- {
- loading : '',
- loadingSub : '',
- context : '',
- error : '',
- next : '',
- previous : '',
- magnify : '',
- shrink : '',
- update : '',
- slideshow : ''
- }
- ], // end
- */
-
- // lauguage
- // the correct language for localization is set in init()
- language : null,
-
- // init()
- // sets this.language to the correct value based on navigator.language
- init : function() {
- this.language = this[navigator.language.substring(0,2)] ? navigator.language.substring(0,2) : 'en';
- } // init()
- }; // greasedLanguage
- if (document.body) greasedLightbox.init();}
-
- var offInstantSearch = true;
-
- if (offInstantSearch) {
- if (top != self) return;
- var target = document.getElementById("po-off");
- if (!target) return;
-
- var className = target.className;
- if (!className) return;
-
- if (/unselected/.test(className))window.location = target.href;}
-
- })();