mx pak1VÈmbackground.htmlœ´wI css\options.cssP€ ÖšÛñdef.jsonÐ&üQÑF defaults.jsnÕ)–'xØZ icon-18.pngk-å�s †icon.pngP1ùr&"icons\icon_16.pngbKúû°#Jicons\icon_32.png\O'ØçUicons\icon_48.pngƒV- £^�includes\app.js°_ZÚƒ Ëincludes\opener.js n‰kzŸincludes\viewer.js“}y”Èä50 js\app_bg.js Pwˆpjs\background.js\g¹cà js\frames.jsÃÕMJMÎ js\options.js˜j"0G„#locale\cs-cz.iniºšFÔÕÇlocale\el-gr.ini­äd|Ì locale\en.iniäÁ5-Ï–÷locale\es-mx.iniÑ\€ŽNlocale\fi-fi.iniuãyvÞlocale\fr-ca.iniîó�lYMlocale\hu-hu.ini{& 2ò=locale\nl-nl.ini¡ –=plocale\pl-pl.iniÁ%½VÙûlocale\pt-br.ini~6­€K¼¥locale\ru-ru.ini+Ge¬ ‚“locale\uk-ua.ini�bj› )²locale\zh-cn.iniúwŠgš locales.jsn„‡£Æ¿�´ options.html'Žd :: Viewhance :: bgProcess ::-moz-selection { background: #adf; } ::selection { background: #adf; } html { cursor: default; min-height: 100%; background-color: #f3f3f5; } body { display: none; font: 13px "Lucida Grande", "Lucida Sans Unicode", "Tahoma", sans-serif; position: relative; background-color: #fff; max-width: 700px; min-height: 300px; margin: 0 auto; padding: 6px 15px 15px; border-top: 0; box-shadow: 0 0 6px #666; -webkit-box-shadow: 0 0 6px #666; } a { color: #1155ef; text-decoration: none; } a:hover { color: #000; } :focus { outline: none; } .fn { float: none; } /* http://nicolasgallagher.com/micro-clearfix-hack/ */ .cf:before, .cf:after { content: ""; display: table; } .cf:after { clear: both; } #app_version { display: block; padding-bottom: 5px; } hr { border: 1px solid #eee; margin: 10px 0; } #right_panel { position: absolute; left: 100%; top: 0; } #right_panel > aside { padding: 0 5px 3px 8px; position: fixed; top: 0; background-color: rgba(255, 255, 255, .8); text-align: center; box-shadow: 2px 2px 2px #aaa; -webkit-box-shadow: 2px 2px 2px #aaa; overflow: hidden; } #right_panel > aside, section { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .hidden, body.opera .opera, body.firefox .firefox, body.chrome .chrome, body.safari .safari, body.maxthon .maxthon { display: none; } .logo { display: block; margin-top: 5px; width: 128px; height: 128px; background: url(../icon.png) no-repeat center; -webkit-transition: -webkit-box-shadow .2s; transition: box-shadow .2s; border-radius: 10px; } .logo:hover { box-shadow: 0 0 10px #bef; -webkit-box-shadow: 0 0 10px #bef; } body > form > section { display: none; } nav { margin-bottom: 20px; text-align: center; } nav > a { -webkit-transition: border-bottom-color .5s; transition: border-bottom-color .5s; text-decoration: none; display: inline-block; color: #1155ef; padding: 5px 6px; border-bottom: 3px solid transparent; } nav > a:hover { -webkit-transition: border-bottom-color 0s; transition: border-bottom-color 0s; border-bottom: 3px solid #aaf; color: #000; } nav > .active { color: #000; border-bottom: 3px solid #000; } .prow { clear: both; padding-bottom: 3px; } .prow, .tiptop { position: relative; } .tip { overflow: hidden; position: absolute; padding: 5px 7px; left: -48px; top: -5px; border: 1px solid transparent; max-width: 100%; width: 33px; height: 25px; font: 12px/150% Verdana, sans-serif; white-space: pre-wrap; color: rgba(0, 0, 0, 0); z-index: 1; visibility: hidden; opacity: 0; -webkit-transition: visibility 0s 0.5s, opacity 0.5s, color .7s; transition: visibility 0s 0.5s, opacity 0.5s, color .7s; } .tiptop:hover > .tip:not(:empty), .tipvis > .tip:not(:empty) { -webkit-transition-delay: 0s; transition-delay: 0s; visibility: visible; opacity: 1; } .tip:hover { overflow: visible; left: -45px; background-color: rgba(245, 245, 255, .9); background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #fff), color-stop(100%, rgba(245, 245, 255, 0))); background-image: linear-gradient(to bottom, #fff, rgba(245, 245, 255, 0)); color: #000; padding: 10px; padding-left: 40px; border: 1px solid #ddd; border-left: none; border-radius: 6px; box-shadow: 0 0 10px #666; -webkit-box-shadow: 0 0 10px #666; width: auto; height: auto; } .tip::before { display: inline-block; padding: 0 6px 2px; margin-right: 20px; border: 3px solid #aaa; border-right: none; border-radius: 10px 6px 6px 10px; text-align: center; font: 700 17px Verdana, sans-serif; color: #fff; text-shadow: 0 0 3px #000, 0 0 3px #000; content: "?"; } .tip:hover::before { position: absolute; top: 5px; left: 5px; } .prow > label, .prow > span:not(.clean) { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; display: inline-block; width: 49.6%; } .prow > label { padding-top: 8px; } .prow:hover label:not(.checkbox), label:not(.checkbox):hover { color: #45f; } .prow > span:not(.clean) { float: right; margin-top: 4px; max-width: 50%; text-align: right; } .prow input[type="text"] { width: 300px; } .prow select { max-width: 308px; } .prow input[type="color"] + input[type="text"], .shorter_input { width: 242px; vertical-align: middle; } .prowone > label, .prowone > span { width: auto !important; padding: 2px 0; } .inp_tf_short { width: 100px !important; } .sub_opt { padding-left: 20px; } input, textarea, select, code, .checkbox, .pager > a { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-transition: color .2s, border-color .2s; transition: color .2s, border-color .2s; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #fff), color-stop(100%, #f5f5f5)); background-image: linear-gradient(to bottom, #fff, #f5f5f5); background-color: rgba(242, 242, 242, 0); padding: 3px; margin: 2px; border: 1px solid #ddd; border-radius: 3px; font: 13px Verdana, sans-serif; } pre, code, textarea { font: 13px Consolas, Monaco, monospace; } code { display: inline-block; background-image: linear-gradient(to bottom, #FFFFFF, #F5F5F5); border: 1px solid silver; padding: 3px 5px; } select { max-width: 100%; } textarea { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -webkit-tab-size: 4; -moz-tab-size: 4; -o-tab-size: 4; tab-size: 4; resize: none; width: 100%; } select:focus, textarea:focus, input[type="text"]:focus, input:hover, select:hover, textarea:hover, .prow:hover input, .prow:hover select, label:hover input, .pager > a:hover, .prow:hover .checkbox, label:hover > .checkbox, .checkbox:hover { border: 1px solid #888; } input[type="checkbox"] { display: none; } .checkbox { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; color: transparent; display: inline-block; vertical-align: middle; width: 20px; height: 20px; padding: 0; position: relative; } .checkbox:after { content: "✔"; font-weight: 700; position: absolute; top: 0; left: 3px; } input[type="checkbox"]:checked + .checkbox { color: #616161; } input[type="number"], input[type="color"] { width: 50px; text-align: center; } input[type="color"] { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; background: none; padding: 2px; vertical-align: middle; } input[type="number"] { width: 60px; box-shadow: none; /* Firefox marks "invalid" inputs */ } input[type="range"] { height: 24px; vertical-align: middle; } output { display: inline-block; min-width: 24px; } h3 { clear: left; } .color_helper { transition: opacity .3s; float: right; opacity: 0.3; } .color_helper:hover { opacity: 1; } .color_helper > input[type="text"] { width: 80px !important; } .shortcuts > label { display: block; } .shortcuts > label:hover input { border: 1px solid #aaa; } .shortcuts input, .sub_shortcuts input { margin: 5px; width: 35px; text-align: center; } .sub_shortcuts input { margin: 0; } .sub_shortcuts li { line-height: 200%; } .op_buttons > button, .action_buttons > span { position: relative; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0%, #fff), color-stop(100%, #f5f5f5)); background-image: linear-gradient(to bottom, #fff, #f5f5f5); cursor: pointer; color: #000; font-weight: 700; font-size: 14px; border-radius: 3px; border: 1px solid #ddd; } .op_buttons > button { -webkit-transition: border-color .3s, color .3s; transition: border-color .3s, color .3s; box-shadow: 0 1px 2px rgba(0, 0, 0, .5); -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .5); margin-bottom: 10px; font: 700 14px Arial; width: 95%; padding: 10px 0; } .op_buttons > button:hover { border: 1px solid #999; } .container_info { text-align: center; } #info_sec > pre { white-space: pre-line; } #locales_table { border-collapse: separate; border-spacing: 25px 2px; margin: 0 auto; font: 13px Consolas, Monaco; } #locales_table > tr:hover { border-collapse: separate; border-spacing: 25px 2px; margin: 0 auto; font: 13px Consolas, Monaco; } #locales_table th:first-child { text-align: left; } #locales_table td:last-child { text-align: center; }[{ "type": "extension", "frameworkVersion": "1.0.1", "guid": "{000008f5-8a32-4389-a7da-2daa0e9d7760}", "version": "0.9.6", "title": {"en": "Viewhance"}, "description": {"_t": "APP_DESCRIPTION"}, "author": { "name": "Deathamns", "email": "deathamns@gmail.com" }, "permissions": {"httpRequest": ["*"]}, "config": "options.html", "service": { "main": "background.html" }, "actions": [ { "type": "script", "entryPoints": ["doc_start"], "exclude": ["res"], "js": [ "includes/app.js", "includes/viewer.js" ], "includeFrames": true }, { "type": "script", "entryPoints": ["doc_end"], "exclude": ["res"], "js": [ "includes/opener.js" ], "includeFrames": true } ] }] // Mon, 17 Nov 2014 19:35:55 GMT { "mode": 1, "minUpscale": 0, "imgInfo": "%ow×%oh | %name (%perc%)", "favicon": "", "customCSS": "", "center": true, "wheelZoom": false, "video": true, "vidattrs": "autoplay controls", "lpDelay": 350, "lpLeft": 1, "lpRight": 0, "sendTo": [ "TinEye|https://www.tineye.com/search?sort=size&order=desc&url=%url", "Google|https://images.google.com/searchbyimage?image_url=%url", "Bing|https://www.bing.com/images/searchbyimage?cbir=sbi&imgurl=%url", "Yandex|https://images.yandex.ru/yandsearch?rpt=imagecbir&img_url=%url", "KarmaDecay|http://karmadecay.com/%url", "ZXing QRCode|http://zxing.org/w/decode?full=true&u=%url", "ImgOps|http://imgops.com/%url", "Pixlr|https://apps.pixlr.com/editor/?image=%url" ], "key_mOrig": "0", "key_mFit": "1", "key_mFitW": "2", "key_mFitH": "3", "key_rotL": "E", "key_rotR": "R", "key_flipH": "Q", "key_flipV": "W", "key_cycle": "C", "opener": 0 }‰PNG  IHDRVÎŽW¬IDAT8ÁËoTUÀñïïœ3÷NgjŸ”’ -!Z0’j�‰q>¬\¸rá^]áàëïpmŒ‰A6ŠƒI¡iJ¡¶C;ÏÛ;÷yî9~>²Ýn™”Åç¢%‚…R %"Ô�¦¬•sxÀy‡wçÎyœ÷ŒÁòðé?ÈR´Rh¥0Z£•ÆhE£Vã_7Ãb]1­ròlÞXg)ªQ�àR û?­oò]k@ìÀ‹­1es–Ë«K\¼´ÌÑ£“üúÍ/Dí!“¡peõßÞj38È�ƒo¡}gÈNÒ¡÷ØóéÇYzu‰H70Q”184�¡ª×XYhråÒ ,.&±Y·Oú,ÂZEÒîñÜñ&ï^¾Èò™%îïĬÅ%§ãs'dU�1³žcáõcôä�˜åcã”Ý:1//ÏòÑ'—ÉÍZ»Ok[zT™OxLšfô££„<¬WJ+rç9HCÞ{k‘³ç/ðÃíMnm÷Ç„Z]‘¥#²¤BC–LYY²¼@‹`­Å+P*/lw"ÊÃ÷w·�º«ë¨<øP(½§(-f¾~}vaâªB@% "h` Àƒ¼÷x<Îy¼‡g~<üêùúÊåYÊIEND®B`‚‰PNG  IHDR€€ôà‘ùPLTEííííííííííííîîîííîíííâîðÝõñàéèÜèè׿ã×åãØäãÓãàÓâàÐàÞÎßÜÌÞÛËÝÚËÜÜÈÛØÈÚØÆØÕÅÖÔÂÔÒÁÒнÏÌ¿Éß±Óç«Ûî¤Öê¡Ðé›Íä˜ÇãšÄâšÀᘾܗ¼Ú™¾Ù”ÀÛ‘¾Ø’¿Ó•ÀÔ•ÅÚ—ÆÚ“ÈߎÃÚŒ¿ÕŒ»Ô�¼ÑŒ¸Ò‰¶Õˆ´Ñˆ°Ð„³Ð‚¸Ð„¹Ò†»Ò‡¸Ñ‡¾Ô…¹Ü¸Ü~µÛx°Ùm¬Ùr¶ãqºäsÀæw¿çwÄéwÆìwÈðsÈïpÉðmÈïmÂígÄñe½ê[»èN¿êR²ÞJ¨ÏHœ¼A“¾?‘²8‰°7„¯:‚¯3‡°/‚°1°2x±-s°2p°3j¯;l®?m¯9fª5`¬0b­2Z«8X§è¼IDATx^­›}�\ÕyæÏ{o÷L«!„"a¼B ¶–äCô�Jìf‰M ;Ø©-QØFF &Á6ÆË ,Û³ŒÁìJáÊZv¼x7È"ÆÄ»§¼|H`&®,›rÊbhFf43=}Ï»Ó;÷ì©Û­AÉVžÕܹ÷V?ÏyÞ�óêV·rŸA�·E‹0ê¼- ¦$ @9BNLÿO%Á¦2ÊñP'¤ÿ'”`´L(§¨}yD!8àåAåo'^TUþ4J´ÛS@+Cy¨AÞ„.~'ñ{»ÓU5TQ€* hO0mÊŠ>²�^þ¹é�9¡·‘У€±‚©LVƒ9䑲¢"™¯„ÃÁN”Em–¤Y•; �–”�i©N_£‹?‘öÒ+€Aû%l¡ aÀ¼WB:êV01EKô1�>7¢WÀ 8¼YP�-2˜W%踠=Æ”úàd�WRÀ“€È_­9Ù÷»ÃJ>©ÑÈbæ'• ¨Z'øQP,èæOk¯Ò'¼�ƒÓ¬¯ñ¨‰F#ŸSB¯‚# >·ã  ÙwA‘¤B'VP ,üò;_îM¬¾&©  Í °¹†�<ª8ÂIúÞ›¥ Û+ò¬ôbi}y páæÕ¶¥,LEà‰,Å?I!%ar r¡Yc/¬N^°²šR9(•ÃXNÂåPáïa™ó`šglåÓ¥oÎV)y&„¨"ä]fzÉ\å÷³­V¶‚óØçLý Î?í Â!ÀË,K÷�'þp"~礨òYüÈÔ;žYKϼؒ\^ªHºù‰ü‰O¼z˜‡@YÒ)X~—ã÷ôïf¯.áï{G®$�[@Éjä$(81ÀI�±’!Î]¹/éàJÖòo×üú! TqÐNkTp„do¸ÔOSsÙ_Qì@8C0t.Ýлÿö�ÑÙ¯�ðêé�´uGV¡T¡ÆÁC1>~è�7ÆNhCR¸Êá›>÷™Ï|Æš‚£ ä@o pÈeŒ¿ Y#,Æ‘ ‡4k€À.�³÷½òÒ'×=�Ol†ÍOU¡‡ÇÆ�yOæØš@ÑQa IÒÆD”IÀ‚…+‡É9†<•9]Hü‚ < u[Mã¼EXCJŒ 8À%LœrÛ\†`9 © pPÒÉ#l¼óþOæ2½ÿpGDuÛ'ô¤‚#h‹I€˜bGNqªH�WTÁñp�1Ëÿþñþá�(áFÑ«!(VH^o±à茂/E½3X§Mð¢Óf™úÙJØf›bõøœ%ê8ðpD}Eq2 {Å®êGªYïNƒYÙe±�M©‚�±�vçu)`¯³þÂyüâÇ‚w©5$EZ�Ì’¥àî’”ÁP$@ÒömHiΤÍ>Ô‘ÿ,à·i; •FÔ~ãå¯üêððD«p¸BOe(ÏY9+EÚН1P~ {Á¡ÃÚm¸Ðñ’�Ããà>›ßÍ&¹‹ ã°® Vô¦Úvnd@Ñ Â¾†@Î)#{–�ñùU( à?ÌB³f¬ >~š±Ö=ÖÙC‚Ÿ7˜’„\² ›hô¶è³Â(Œ"{ï·˜zætÌñ'ɳ —µnB±ÇNŠ�žŒ7œ ±\DØÀÀÒ³bšÆ»{‘Ë&äBãÐøoOæ™VSÄ�ºk4sU �#ŒÐi‡ÇšX8«¸ÆØS¸�*#E`2¹c½M‡cÁ§‹÷LM� �„Q¦øñÇÃmB˜i,8fÊ–¿ ¬_¿~÷nß½{LdDô8€ÁXæ±à…ö­a›`“§¤SµÄ$mÛ¯3Þ4à]λ~ ü{ÀßG�EêížN˜àHÊV ±PÇ_póÀÿMñþªÜHÛ7¬ÞïjËè†è�õ^vòÌ+u`hÌ „õì;îÉlpûv™2VBÛyÄýßí€÷²õ&!`8@°rHüü;âC»é�¿�€x½�wÝÚÉ1ã>?‹†% i†ï׌»ßÇ��÷ÄÜøv݀ˊNˉ Å,7at¾�åXIïÊ$.x†Ÿük„‹þHnÕ¹³W€u‚íXpo—ÙžŠm;à›ÌWïã¬v\u0p9xL<+ŸQà"W»ZŠR˜Icɲ1$!”/3Ë�=±’ö#»+Ï/;Àp�Á^‡àá¤�v@•T¤­æ›á¼5ÿXÓ¸pW :ƒfáÒówˆ9›2Â(Ü€2øŽ/ßÏ ào3Ççî”"·™,ËFÝ,ƒàqJG²¼–[>8ˆ³{7T†ëÉPg÷RÂ2–?'öÏà¤=9��KÛ¹ARÀ—ÅE:ä€etâëê6À&ç�Ù>yu]^D³�%£1äí$ ‹ß=Ó „�gO<òaNzÖ㤠K`×z‚AXù,U8Ëy^}œ ¼sï†�qA=!Àñ²¼ïýÍ?+OUebo•ûÛßÞµ l8p~á;AÑ‘^/ù²üÂüškÜ÷Ò€€ƒdÇïl¼ÿó©P×åµy€PË�Àµ‘ݺà½8Žg&ô¬¨"ZÐC¾«ôu,ÅÌ+ €9B0í38~- ‡ ž¸ã´‚CN¦Ÿxôx×ŒÇ „Ð.VÀÞŽ»ài;„]Òx<`G[þ€äþRÑŠ•j)Öãæ¤  ÂC¹ÐI(ŠðÓ ÉÈkÄ•{vYBñ±v(¦‹vðxi?AQjó d 9öàÛ‚õAj¯Ù/\àn»®oR( x;Ré!ïrCvý%à—;lä’Îã…€y°€ãÉøt„Òz`‹â§Óf?œ]>‚vÕ¦Û×}lú»E»â$\Ü_¯×Ðc�¡ÿò§Zpä—À,?@ÀñÈ$ªÈpáà»®žÖ¦Á<˜“@Ø{Ó1×ë{—ÁuGÊûú‡™Å³æ)�‹Ç¸®�QðžH¨îQÿýc͉'ýrÀ5C x ×c< £¿€ƒ.óïÑQÈ»ñ7t#@«Ï…Ž7¥­ó°@ï[Ó�~ô£‡¯\vÙºuTçâLj@b]¼žpIçg”ÞC\èÜñž24ófJo)g8.«¾×v¸îòËœ*ü§+�OdX×%û¯•,~El�]}Ñ�éͳªOñõÑ«H×ü÷'Þ”@Èë¥AÔ]>üÍâ)çŠtFv\ôãÙÃì^Qkäê¯'àñž¾>xÀstíN¡9p@æÙü¯M‡P±E�íØŽû%šN`GgÏ­¹žÉŠË.½û³ŸŸõR塆0Jï^@8 L³¡Õ�eÀUh½€œU«V“å}™ <Ž^nW 5§3t²o&³Ë�+ \NZ¼D­^¯ã2!E~TIB…Pëgk\ñ*ÃWâG˜õùêgPm:—ï)õ_å2J‡p¿ïHÿƒ¯õ³_qýb”Ô 1º”«óï@vôHr �À ²zŒ�!ät,Z-²še&a¶þÙëΩQBx�ŽâÞ“„iÌ_KOD†sÃZà*(ý)-�Sc:@]o…”%?Þ6Ž7’�wÇaåL,ì„ÂZSO�ÿ É«ñ02âU~UÚkàò“?—çËðhòC‘_RoBœÊHÆÑJ7üÍØ­ ß•ëÓ‘#i Äj�ÈÌÀ²ú¼­ÊO‘žóù€À›DHV…t·¯ I(làa÷S`Dñtê©ÔÚV®»hÕ/ÎæŒ—åÐçâ¸0ºá&I1/û€’ìßüÖ: 8###x»5ÅÊóŸ­¶Xÿn{ãEëš?ÌÑŠUg<¸3™ÝS†‰Ó�À¥¿> \^^ì‹Ñþêül=3ŸfÍùDàpI_AëÓ¿‹(N[øJäyHü`]ªlhÈ3P½®×ïÀi+R#SPÕ±µÀ³N»²�9×ßïÎBvÒ¾¾�;Iðã¶b7(7Έ\M¨XSÉSÌY8¿ú é»ÿƒ‹›“ì[Ù°ƒ�þÉ[B“ó`tŽ$”ƒ�†\�cÐB@£óã�’&Ìp)*uÀy|Ý­°�'?šµkSŒ€¹«àŸ¿Œ ü—+�3džä€9rJ”ðñ&rö¯ôý*74~ðÖ]ûÛ@{íŸõiZÞCß–ð FŽòT´Æ�#p©>“�§ŒŽºBºG¾zò÷Y?µçÒ¬àÑQUS6Øqðêép2W&òзRjâdˆZàµ3G3)SäåOj:ìGÜç,ý’‚xJP»éÂ×oŽ÷2›Y ²Æ[FDâgÅóà€ÈÏ‹„{.…£æ8 íÿ9¦4RæÍ�Ÿûþ·wñ«j~ðDœ€Üb mt~dÕˆ p%%Ú‹«ˆ 9:í–S¿ð«q€¡”倫4( H_…°‰åÒÉIÞ:â!}Ú†Ž‚ á³KNýäë‹ò"¥˜ä(o•²=]uã Gû“N¥\ºG¿"¸m Xø°no Xü‘µ;¿-þʃX¼ °ì ¤Gj÷|´ÄBiL—‹QÕßYáî³ôm0 ô‰µoÝ6γI€#œÉ,_pËÒÛ^ÄíÜ™úOYœX0rDP_@VFK¸úÿú̉SÔq¿pœ€‡˜ý§\»8¼ÈxT‹jð8°Ê·L.¾¥oœE‹û` €.å–Ó¾ó Ê9èÔ/9õuÒò¬€?“ ð2ù(Êäÿ„Ö¾€ö9ð;)Vl†v{ÑÒ¥à_$â \ÎÁ2AÂ’k.üTûõj=¹À"=,?ã y¨ß¨E¡ÃoÓÏ�B<}AðæèŸŸá8οs ¸„�Ò$P¼ãÃï¾ùÅ`§¾‘øáp rMSCÏ €‚A,ÌS´}3XôúÂç»’ðé�Ü©/8¸;Ÿp�Ashœüá%…›¾ök@â0ÔÈ‹ƒØ8 à™n‹|ëÒc7Í�ÁôI‡¤3tè¹Ç”Á4:©Û�`ÆR˜á��3ü÷ÿQŒ_>ÿ>)€Li,}eb¶ålÝV¸ØZkCzîÍ@X[PÍ�…Íj( åœ/µ˜Å�È¡]«.>;Ëî"âÖs§�4¿óåS䮸@ýÜ[н9Y‘¦íqü€¯;÷ÞsG[?Çg¹;¥Ðز|û0Ù#Ó_¿ñ��ÀÖÈ�C?Œ5» Ö2^Þp„¯Ëî©>ÿà®Ï¨üû–%Ë7¿8»øvkðƸÿ¦j­õÇ¥ 6>�{r€`LJß+ ý|òNíÜg,Ð]q£ ññÅó‡;ô¶»Õ‚A€Ž‚D~ÄÆdÊ@€y;‘€¢ÞÊð»¹G ˜;pO?>EfæÃÍía Øs øqð7F1ŠP� 0Œqúè£d3Â̱‡êÜ! ä ®9c|vñÓ“€AÀÁB2Àé§Ã‰¾Ó_äžö‚ó¡’˜6î|†{;+ÊŽ>¤Ïqí›>€âÑq‘X àL–d“ôÿ!P8ìhÏC}ÃÁÉ‚DhÀ„pOžN˜â¶ò:tø³qgIã*ùå‘zæÅ¤zÇ�ö<'9° ¾A‰,.ç-þˆA /À§d±¥þ^Í36wµøÀu; Ô'#ää~+´+s΃ÅõÀ&0"¸þzfQXÈÊxKib|¤Xòß¼„�ì˜AAâOG`Eꄽ È†—–fqHhá–öÿÕ÷ *•Š„œ‰Jô(*ˆ’z\ÿ ¢ ¦2!w¨·â^1˜ÊÝãà ËÛy̿ԡ mT×ãú^àˆ ð‰Ä <·Ž\O4�zt• R"¢Ä�@8½@Ö'2práÔiE:‡o8H`’~ÀU¦¬@?¢� ÀƒU–‚èc[t R �%qq/ZE3Á€¹Sæ‹S @âGDÈ71%ÕÙÃÚ[Ž1À³¢h¡肜JæÉ~A©`pc¢„o¢e¢* b5RxQD£ÑïŽ�dP÷*—$ÀAh¨ ÿ��Ϋ eEß·&�ãšÐ]8q™LÑïò´;¤=�F2D1¡ØÈ lD•êÜ|h*SjÌ?û:€žL¨†Â!ªÅá™nßåŠ €«äg0y îÿÅÓV~ñyÁ¢[}ndƒÄÇòÆlfÊuJ¬\ÿ ]ôºûÐ(´²øÕï!Ð 1'\ˆ£eJ_~ÿÇjHèn�€qB¤/¿§¯ÿóÿ¯âÏ.IÿrÔ„nØãIEND®B`‚‰PNG  IHDRóÿasRGB®ÎégAMA±� üa pHYsÃÃÇo¨dtEXtSoftwarepaint.net 4.0;èõimIDAT8O-’ÝO“gÆßg‡š-zÂv°%[–¸nºD3݉c°É&uÊ )È€ñåÐ�RhK-ßWÊGKK¿ËËÛöm)-¸©`2~{J<¸’;÷s]¿çÎóÜ’œTŸy£[Ç�x” #œPÙLm#ï¤H¼ÜCI§Oê|/–÷øcQò9¡öK^eëx)`U³®ÈxUJ&Dpsâ ÃÉ7Øvr„ÿÍÝÍà€ᵋ̆"K‚„#Ä¥lâÝNÊìÏd„Ò<’�¸í;¤qó5Æý,]Jš6Ç}/d&½'I¾¨rBõ ͨYªEàaìG.G[ G¥+GSä5c‡IºQtk ·M®–?!.¦”ò”–È!OÕCÆR9*\<ˆ`ÉÅiõîSº”¥bíM±Zç U“zÊõ¿p­²û-@�SãÞG>@¯f(ûç%7R4xìt¸v)·eø|ÀÇÇ]£ wpo¡™ò�Z®” €xÜ@�#Í—C>jçÜšKr¾o]˜­t,§ÑÌ'(šLðI��FŸžW;ZÌ£¸^ù'±< �qF¡b1M½=EõXˆjÏwÛtÚâÜyD»qÄ çƒ»Óüç*Æ=ÙÄ÷š.bâk¥€øÓ[½vNiÌÔŒop©ÅÂéšJ,:g#\jµRP?Î9C€·Bl´�š²:®~óˆèvɯlñµnž3ÅF~øãçkf8U9Liß<:Ã*tVÞùÑÄÙ:3õ¶ †‰q /7òÙŇl‰}‘Â{{\ùÖÈOÍs´®óþMï^ ðf?UÝkœÓLsæ;3?›(yÜÏÅÊN >ý�¢R=J6‹äÌ`r&è^Iðû�‡�.?ánÛ–å(%-‹xﺞÓ_ôòaa+U¿šÑ[LwYYiz3M׊JÏzŠ¡¥(}sa:§Âœ*Åw¬œ½ð˜¾êEÛ:Çß‹2OŶM‡i·ÉLEÄœ2 ³~š‚´ÏÑ�yhž 0àŠQÛ4K{¯“]¦9ߟôÐ4å¦nd íˆ £KFúËî?ÖŒ®r﹋ºñuj…§<´/øéµ…Ð…Ùì¤vÔEƒÕÅ}‹“{fó2}"+YÜ›Ïò�þ%qërý²5‚ií­Dm\ ‹óyo>cqGúÿW+‘û¤aIEND®B`‚‰PNG  IHDR D¤ŠÆ÷PLTE²·Ö±¹Ô­´Ô£«Ï�­Ô�¥Ë�±ÐŠµÒ‡µÑ‡¹Ò‡¼Ó‹½Õ�¼ÔŒ»Ò�¾Ö”ÀÕ”¿Ú™½Ú”¹Ö‘·Õ‡²ÎƒµÌµÍ‚¸Ð‚¯Ì…¬Î}¢ÐušÊr¦Çr®Êk«Ó|´Û„ºÞ…Áä‡Äå…Éç}ÃæuÃér½åu»ävÀÞzÈîrÇïnÉðpÌósÏõwÒ÷xÖþ~×ø„Ø÷ƒÙý‹Ûø“Þù�ßù¢áù èö¤ëñ«åú·èùºäö¹Þò¾ÚëÅÜëÄÔäºÒæ·×ë«Úí§Õë¡ÑçœÎç™Ëæ”ÇèšÅã™Ãá—ÅÜ‘ÅÜ›ÉÞ¡Êß Èã¢ÀÝ©ÂÝ®ÊâµÆÛ³ÏÑÃÈßÈÛØÊÜÙËÝÚÍÞÛÎßÜÐàÞÒáßÓâàÔãáÖåâØæäÕáçÒàæÑÞãÍÛÙßÜÏâææãèçåééæêêçëëäíìâìêàéèÝéèÙäìÓäïßéðáìôäïòèïðéòóïõôòùûèúûÛüþØõûÒñûÆñü½éûÆåó¿ôè½üé´õà­òå¦ïÚ®åÖšãÚ™ßå’Øç�Òã…Ðð”ÖóšÔï›Úñ�ìâ�ÛÌ�ÏÐ…ÆÈ’¼ÃŒÊ·yÒÄzÒÎrÄ´sµ©®²q¥­f–²g˜¼c’»^�ÁT„ÀN‚ÀI}¿Bw¹:t´>p²9f«2e®5_«;Z¦8T¤1W§3Nž2I™1F—8B�@I�EM•CX‘Hb‘Jd™Po”Ww“Vvœbj«ku¬kx°j|¶l�½o‰¿r‚­|}¬{Œ§}“´‡�½j˜˜p‰‹h{�njŒ[_�Q_¤F~°Eˆ´B’¹<�·B—²Eš³M�»FœÃM¥ÎT®ØQ¶á[¾ê\Åïh¿êfÑû[µ¶c´¤j²‘o¯‡m¤…l©v|µƒ�Æ�’Δ®ë§Çù¢Ñý�Üû±×â³õÖ�÷ГüÒzýÚnúépýÉiܧ�༥º²œ¡œŽŽ–Œ¢…††uˆ5†²2€³.}°&x±1r°³ôóËûîÞöÝøô§á÷‰Öáçæêêëììééé}Þ^ ýtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿Â$L”¦âIDATxÚE�]h–u‡¯ßýüßwï6›“²ØÂ oê4L¤¥ ºžDX!æAáÚYÁÚù`ÐQEPôáAZLƒl�0, 5 )�4lò¶Ï÷yþ÷¼“ºN¯ëà÷Sc!ºùŸ‚€xËT¾˜¥[ -«E3 6pÒ±t$Ó–&A££+w‘×–Â�PTG’!6|ÔmŠú®žˆååRf€Øðx9;¹pû¥»ïÜ ©íu[/-V +f§)¯_}cÛÞ±2’üL©¢>ì8ÓŒà±î+§fHØ€¬ Dä öf¡l¡8œ{½õs¹¾»ÂM³ÓÑî8ý ]#ùr;€¼öÍÜæcä=û‚ÀñhtˆÝ!¢ÞZ„Ü!àÖ‹øaêy|[uü¡ß½ù–âíÃ7Šnˆe [ž›¤¸o�Èåý÷®f©£_®µÀˆ-vÂbÀ.@|½yÒ�,£oÂ~¾AX4”Š/Þ“ñ¹Åh˜.8„?µø“„ÙÚÑ”4*Kvò·GCℯÕö,ÿ¸¥F¿oÚ?þêÓ×°¢XÃBÿSeîÜùz+QLùè•Å‘„ �#L'ÑÖ›á�£C“Nòù®Úª?éEïûCûÏ÷,…•Öÿeä‹­ÕÇ�ò`nj‡~ä‰L&»k×ø¹þ…í¨Ó“BtŒžêe»ƒLô}08ú!Á÷¾³$5ë¶ö­J(ý'U~„^ja¸™4�(v¶ÕÙ)¿0~þì@¹T+ˆÎnÎHô š ¥ª"hŒÿñ%’@¯ÐK3 šÐ^“–#U‚Q­ MT¸@9 �ý©Ê_ Úÿ¡z×þÄš^²'[IEND®B`‚‰PNG  IHDR00`Ü µ÷PLTEìììííííííÿÿÿíííìììììììììíííîîîýþþ……„�mˆs±$v±(z°0±8‚±4†±:Œ³?‡³H~¾Ez¼Bw¹?q³;k®3i®9cª3`¬2Zª:[§:T¦2S¤9Nž7J˜0Jš4C”;E�BL�CX’AS�NZŸHa’Pf¢Pn”^h�m`ŽTT�2;�1r°M€ÁV†¿Q�¶X’·\�¿d–¿b•µl›¼lŸ­u£Âq¦Ëk­×o¶Üx±Ø~µÛ}·Ù„ºÜ‡ºÒ‡¸Ñ‹¸Ó‘¶ÖŒ»Ô�¼Ñ�¾ÕŒÀד¿Ù”ÀÕ˜Âט¿Ü•ÃÛ’ÆÝ—ÈÙ›Äá™ÉâœÍå¥Íâ¢Òé§Øì¬Óê³Ùì®Ýð³ä÷©ëöªðò´õó»ûïÇòúÐöûÞóüÜí÷âéòâëêÝéèÛçæÙæåØåãÖäâÔãáÑáßÎßÝÌÝÛÊÜÙÉÛØÇ×ÕÂÒÐÃÊßµÏã¾×çÍÒæÐ×éËáîÓáïÚßì×çñåîõèððíòôðõõò÷öí÷ùìùýöúüèòøàüþÇôëºöä¯óݦíä¡êוâÓ–ÛâŽÒã‡ÊæˆÁäÃæz¿åt¿çwÄêvÇîsÈðmÈðmÄígÁé`»èVÁí^ÈòbÏùhÒüqÕýy×ÿ~×ø‚Øø‡ØöŠÛ÷�Úý‘ß÷—â÷ çô›éì‡æå„Úý}Õ÷yÓösÐöoÍóuÔÛqÍɃ¸Ð‚¶Í~´Ì‚¯Ì‡¯Ï†³Ð�¯Ó‰¶É…«Ì�©Ê¤®Î—ºÙ¤Ãܵ½Ù¥ÑÉ ÆÂ�¾´q¾©l¶¢x°¬Y°¯\¶Àc¸ÏS¯ØSµßr¹äJ¤ÎKžµA”µ@”¾S€¯`Чlz²eq®Z{˜b}�jŒ�€†º„�¼‰“½’˜À�ÚÂÁæô»êúÇò”¹ö«±ýÁÀüäˆÏ´�Ö–‚¼Šo°…m«yq¤Œi²”�™�ýËdüÄyúÑŠöÞ ÷ñ¢òù°æõÅê÷ËÚÙÉÝűâǣܧ–Þ¨•×¥‡ÌŸ�ª¤‘«Œ‰ûìsÞý’Ø8ÿËitRNS0>I¿ÂÃùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¨ïÄ|IDATxÚ]’ol�eÆ÷ý<ïi·³I„EÚNh¦!ˆ"!£l®3H4˜ø‚ÿÂj U1Ê2£™²¸içÇ15²?V¶Xæ †I˜cUö…Fi´­‹E ë9ç}Ÿçv}ÏyÓÌë<î÷/×u½ço^ òÚÁ’bÈL\ò`†ÑxF„B"‚Ð|õ§ëÒòP ÌŠm3ÀÚͦ�„4ÆÚS^À §ˆ€Åv÷†vng🢘ˆå?õB‘¥�XÎnš—}Ÿú~—l¬~ÁJLnSyk¬#€…S·«»w¢«ã‡ Æ™DÉ%¾i°´Ï’„Þã¯÷Þ›~þ�þË/R ’^ž]´/ª:*"ŸýäÜÝNÞrÞ.ª–…:nøfÖqU¥Ý)—Ëè¶ëß‚WÁ¾ýÀ+Ï�\E¤ ŸºMýÍ?è43ú½åíTEÓ@¹H1=}çøø̪H°ü…�µmýê<„ˈ6«Eîß83ašv± v°ùröGäR¨¿ÞyÝêWV�e[Œý‘ÌHyYè•FºÍÚÕ%…ƒ°|þÔ:w|µbåjó¦òEi­~ðí»™Åœ î·Ê4 l<(FžJ¬²,lž4¡)+]ù¾É¶a˜®¬Œõüx@Dô*—N!«›7Öt˜©”Ïo video:first-child, body > div:only-child > video:first-child"); if (d && d.currentSrc === window.location.href) { return document.media_type = "video"; } }; app = { "name": /*~APP_NAME~*/"Viewhance", "version": /*~APP_VERSION~*/"0.9.6" }; browser.maxthon = true; app.runtime = external.mxGetRuntime(); Port = { listener_id: parseInt(Math.random() * 1e10, 10).toString(36), empty_listener: function() {}, listen: function(listener) { if (this.listener && !listener) { app.runtime.listen(this.listener_id, this.empty_listener); } this.listener = listener; if (listener) { app.runtime.listen(this.listener_id, this.listener); } }, send: function(message, msg_name) { app.runtime.post(msg_name || "service", { "message": message, "mxPort": { "id": this.listener_id, "url": location.href } }); } }; if (location.host === "{000008f5-8a32-4389-a7da-2daa0e9d7760}") { _ = function(s, t) { if (t = app.runtime.locale.t(s)) { return t[0] === '"' ? JSON.parse(t) : t; } return s; }; browser.insertHTML = function(n, html) { n.innerHTML = html; }; } /* global media_type, Port */ "use strict"; // should not run on image pages if (!media_type() && document instanceof window.HTMLDocument && (!browser.safari || location.protocol !== "safari-extension:")) { Port.listen(function(cfg) { Port.listen(null); cfg = JSON.parse((cfg && (cfg.data || cfg).prefs)).opener; if (!cfg) { return; } var mdownstart, md_x, md_y, checkBG = function(imgs) { // ("...\"") - Gecko // (...) or ('...)') - WebKit // ("..."") - Presto imgs = (imgs.backgroundImage + imgs.content + imgs.listStyleImage).match(/\burl\(([^'"\)][^\)]*|"[^"\\]+(?:\\.[^"\\]*)*|'[^'\\]+(?:\\.[^'\\]*)*)(?=['"]?\))/g); if (Array.isArray(imgs)) { for (var i = 0; i < imgs.length; ++i) { imgs[i] = imgs[i].slice(/'|"/.test(imgs[i][4]) ? 5 : 4); } } return imgs; }, checkIMG = function(node) { var nname = node.nodeName.toUpperCase(); if (nname === "IMG" || node.type === "image" || nname === "EMBED") { return node.src; } else if (nname === "CANVAS") { return node.toDataURL(); } else if (nname === "OBJECT" && node.data) { return node.data; } else if (nname === "AREA") { var img = document.querySelector('img[usemap="#' + node.parentNode.name + '"]'); return img.src; } else if (nname === "VIDEO") { nname = document.createElement("canvas"); nname.width = node.clientWidth; nname.height = node.clientHeight; nname.getContext("2d").drawImage(node, 0, 0, nname.width, nname.height); return nname.toDataURL("image/jpeg"); } else if (window.SVGDocument && node.document instanceof window.SVGDocument || /^\[object SVG/.test(node.toString())) { if (node.ownerDocument && !/^\[object SVG/.test(node.ownerDocument.toString())) { node = (new window.XMLSerializer).serializeToString( node.ownerSVGElement === null ? node : node.ownerSVGElement ); if (typeof node === "string") { return "data:image/svg+xml," + encodeURIComponent(node); } } } else if (node.poster) { return node.poster; } return null; }; window.addEventListener("mousedown", function(e) { if (e.button === 2) { mdownstart = Date.now(); // e.timeStamp // context menu should work where the mousedown event happened (Chrome...) md_x = e.clientX; md_y = e.clientY; } }, true); window.addEventListener("contextmenu", function(e) { if (!mdownstart || e.button !== 2 || md_x != e.clientX || md_y != e.clientY) { return; } var elapsed = Date.now() - mdownstart >= 300; if (!(e.ctrlKey && e.altKey && !e.shiftKey && !elapsed && cfg > 1 || elapsed && (cfg === 1 || cfg === 3) && !e.ctrlKey && !e.shiftKey && !e.altKey)) { return; } var url, urls = [], r, el = 30, rgxHTMLBODY = /HTML|BODY/i; // not exactly what we want var XPath = document.evaluate( ". | ./ancestor::*[position()<" + el + "] | ./preceding::*[position()<" + el + "][not(head) and not(ancestor::head)] | ./descendant::*[position()<" + el + "] | ./following::*[position()<" + el + "]", e.target, null, 4, null ); while (el = XPath.iterateNext()) { r = el.getBoundingClientRect(); if (e.clientX >= r.left && e.clientX <= r.left + r.width && e.clientY >= r.top && e.clientY <= r.top + r.height) { if (rgxHTMLBODY.test(el.nodeName) && !rgxHTMLBODY.test(e.target.nodeName)) { continue; } if (url = checkIMG(el)) { urls.push(url); } if (url = checkBG(window.getComputedStyle(el))) { urls = urls.concat(url); } } } if (urls && urls.length) { e.stopPropagation(); e.preventDefault(); var i, filter = {}; for (i = 0; i < urls.length; ++i) { filter[urls[i]] = true; } Port.send({ "cmd": "open", "url": Object.keys(filter).reverse() }); } }, true); }); Port.send({"cmd": "hello"}); }/* global browser, Port, cfg:true, gen_nodes, media_type */ "use strict"; var init = function(win, doc, head) { // cfg is not available in normal web-pages, but in extension pages only if (typeof Port === "undefined" || !doc || !doc.body) { return; } var pdsp = function(e, d, p) { if (!e || !e.preventDefault || !e.stopPropagation) { return; } if (d === void 0 || d === true) { e.preventDefault(); } if (p === false) { return; } if (e.stopImmediatePropagation) { e.stopImmediatePropagation(); } else { e.stopPropagation(); } }, shortcut = { specKeys: { 8: "Backspace", 9: "Tab", 13: "Enter", 16: "shift", 17: "ctrl", 18: "alt", // control keys are not capital 27: "Esc", 32: "Space", 33: "PgUp", 34: "PgDn", 35: "End", 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 45: "Ins", 46: "Del", 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7", 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111: "/", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 112: "F1", 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12" }, isModifier: function(e) { return e.which > 15 && e.which < 19; }, key: function(e) { return this.specKeys[e.which] || String.fromCharCode(e.which).toUpperCase(); } }; cfg = JSON.parse((head && (head.data || head)).prefs); var media = doc.body.querySelector("img" + (cfg.video ? ", video" : "")); if (!media) { init = null; return; } media.style.display = "none"; if (browser.opera) { if (media_type() === "img") { win.donotrun = media.error = true; media.naturalWidth = 0; media.onclick = win.ondragstart = win.onkeypress = win.onmousedown = win.onmouseup = win.onmousemove = null; } else { doc.body.replaceChild(media, media.parentNode); } } ["class", "style"].forEach(function(attr) { doc.documentElement.removeAttribute(attr); doc.body.removeAttribute(attr); }); var root, init_params, after_calc, moving, winW, winH, sX, sY, noFit = {cur: false, real: false}, lastEvent = {}, progress = null, cancelAction = false, fZoom = null, dragSlide = [], borderSize = 0, MAXSIZE = 0x7fff; if (head = doc.querySelector("head")) { doc.documentElement.removeChild(head); } head = doc.createElement("head"); if (cfg.favicon) { root = doc.createElement("link"); root.rel = "shortcut icon"; root.href = cfg.favicon === "%url" && media_type() === "img" ? win.location.href : cfg.favicon.replace("%url", encodeURIComponent(win.location.href)); } if (root) { head.appendChild(root); } root = doc.createElement("style"); root.appendChild(doc.createTextNode([ "html, body{width: 100%; height: 100%; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none}", "body {cursor: default; margin:0; padding: 0; font: 12px 'Trebuchet MS', sans-serif}", "body > img, body > video {margin:0 !important; background-clip: padding-box;" + browser["box-sizing_css"] + ": border-box; position: absolute}", "h2 {margin: 0; padding-top: 15%; text-align: center; text-shadow: 1px 1px 15px #000; color: #fff; font: 700 30px 'Trebuchet MS', sans-serif}", ".m_1 {max-width: 100%; max-height: 100%; width: auto; height: auto}", ".m_2 {width: 100%; height:auto} .m_3 {height: 100%; width: auto}", "a {text-decoration: none}", ":root.error img, :root.error video {box-shadow: 0 0 10px red}", ":root.error>body>h2 {text-shadow: 1px 1px 15px firebrick}", ":focus {outline: 0}", ":invalid {box-shadow: none}", "#menu {position: fixed; " + browser["transition_css"] + ": opacity .25s, left .2s; width: 50px; height: 33.33%; top: 0; opacity: 0}", "ul {display: inline-block; text-align: center; margin: 0; padding: 5px 15px; list-style: none; font-size: 25px; font-weight: 700; background: rgba(0, 0, 0, .6); color: #fff}", "li {display: block; position: relative}", "li[data-cmd] {cursor: pointer}", "li[data-cmd=cycle], li[data-cmd=rotate] {position: relative}", "li[data-cmd=cycle]::after {content: '\u2195'; position: absolute; left: 25%}", "li[data-cmd=rotate]::after {content: '\u21BB'; position: absolute; left: 2px}", "li ul {position: absolute; left: 100%; top: 0; visibility: hidden; opacity: 0; " + browser["transition_css"] + ": visibility .4s, opacity .2s .3s; text-align: left}", "li:hover ul {display: block; opacity: 1; visibility: visible}", "li ul>li {display: block !important; font-size: 15px; padding: 3px 0}", ".send_hosts li > a {color: #fff; background-size: 16px 16px; background-repeat: no-repeat; background-position: 0 3px; padding-left: 25px;}", "#menu>ul>li:hover, .send_hosts li > a:hover {color: silver}", "li ul>li {white-space: nowrap}", ".filters>ul {font-size: 15px} .filters>form {margin: 0; padding: 0}", "body.frames, body.frames {text-align: center; overflow-y: scroll !important} body.frames * {margin: 2px}", "#frames > canvas, #frames > img {display: none}", "#current_frame+output {display: inline-block; font-family: Conoslas, monospace; width: 65px; text-align: right}", ".back {font-size: 150%; color: black; text-decoration: none}", "#frames.showall > img, #frames.showall > canvas {display: inline-block !important}", (cfg.customCSS || "body {background: silver; overflow: hidden} img,video {background: white; box-shadow: 0 0 5px grey}") ].join(""))); head.appendChild(root); doc.documentElement.insertBefore(head, doc.body); init = function() { if (!(media.naturalWidth || media.width || media.videoWidth || init_params === null)) { if (init_params && ++init_params.loop >= init_params.maxLoop && progress) { clearInterval(progress); } return; } if (progress) { clearInterval(progress); } root.classList.add(media_type()); if (media_type() === "video") { media.naturalWidth = media.videoWidth; media.naturalHeight = media.videoHeight; } else { doc.body.replaceChild(media, doc.images[0]); } [].forEach.call(doc.body.childNodes, function(node) { if (media !== node) { node.parentNode.removeChild(node); } }); media.style.display = "block"; if (!cfg.imgInfo) { cfg.imgInfo = false; } head.appendChild(doc.createElement("style")).textContent = "body > img, body > video {max-width:" + Math.min( MAXSIZE, Math.floor(media.naturalWidth * MAXSIZE / media.naturalHeight) ) + "px;max-height:" + Math.min( MAXSIZE, Math.floor(media.naturalHeight * MAXSIZE / media.naturalWidth) ) + "px}"; cfg.hiddenScrollbars = win.getComputedStyle(root).overflow === "hidden" || win.getComputedStyle(doc.body).overflow === "hidden"; var menu = doc.body.appendChild(doc.createElement("div")); menu.id = "menu"; if (win.getComputedStyle(menu).display === "none") { doc.body.removeChild(menu); menu = null; } else { menu.style.cssText = "-webkit-filter: blur(1px); filter: blur(1px)"; if (menu.style.webkitFilter || menu.style.filter) { media.filters = {}; menu.onchange = function(e) { var t = e.target, f = ""; if (t.value) { if (t.value === t.defaultValue) { delete media.filters[e.target.parentNode.textContent.trim()]; } else { media.filters[t.parentNode.textContent.trim()] = t.value + t.getAttribute("unit"); } for (var fname in media.filters) { f += fname + "(" + media.filters[fname] + ") "; } } media.style.webkitFilter = f; media.style.filter = f; }; } gen_nodes(menu.appendChild(doc.createElement("ul")), [ {tag: "li", attrs: {"data-cmd": "cycle"}, text: "\u2194"}, {tag: "li", attrs: {"data-cmd": "zoom"}, nodes: [ {tag: "span", attrs: {style: "visibility: hidden"}, text: "."}, {tag: "span", attrs: {style: "transform: rotate(-45deg); position: absolute; left: 20%; font-size: 125%"}, text: "\u26B2"} ]}, {tag: "li", attrs: {"data-cmd": "flip"}, text: "\u21CB"}, {tag: "li", attrs: {"data-cmd": "rotate"}, text: "\u21BA"}, media.filters ? {tag: "li", attrs: {"class": "filters"}, nodes: [ "\u2261", {tag: "form", nodes: [{tag: "ul", nodes: [ {tag: "li", nodes: [{tag: "input", attrs: {type: "range", min: 0, max: 250, step: 10, value: 100, unit:"%"}}, " brightness"]}, {tag: "li", nodes: [{tag: "input", attrs: {type: "range", min: 0, max: 300, step: 25, value: 100, unit:"%"}}, " contrast"]}, {tag: "li", nodes: [{tag: "input", attrs: {type: "range", min: 0, max: 1000, step: 50, value: 100, unit:"%"}}, " saturate"]}, {tag: "li", nodes: [{tag: "input", attrs: {type: "range", min: 0, max: 100, step: 25, value: 0, unit:"%"}}, " grayscale"]}, {tag: "li", nodes: [{tag: "input", attrs: {type: "range", min: 0, max: 100, step: 100, value: 0, unit:"%"}}, " invert"]}, {tag: "li", nodes: [{tag: "input", attrs: {type: "range", min: 0, max: 100, step: 20, value: 0, unit:"%"}}, " sepia"]}, {tag: "li", nodes: [{tag: "input", attrs: {type: "range", min: 0, max: 360, step: 36, value: 0, unit:"deg"}}, " hue-rotate"]}, {tag: "li", nodes: [{tag: "input", attrs: {type: "range", min: 0, max: 20, step: 1, value: 0, unit:"px"}}, " blur"]} ]}]}, ]} : "", {tag: "li", attrs: {"data-cmd": "reset"}, text: "\u2715"}, (/^https?:$/.test(win.location.protocol) && cfg.sendTo.length ? {tag: "li", attrs: {"class": "send_hosts"}, nodes: [ "\u2197", {tag: "ul", nodes: cfg.sendTo.map(function(item) { item = item.split("|"); return {tag: "li", nodes: [{tag: "a", attrs: {href: item.slice(1).join("|")}, text: item[0]}]}; })} ]} : null), media_type() === "video" ? "" : {tag: "li", attrs: {"data-cmd": "frames"}, text: "\u22EF"}, {tag: "li", attrs: {"data-cmd": "options"}, text: "\u2713"}, ]); menu.style.cssText = "display: none; left: -" + menu.offsetWidth + "px"; menu.addEventListener("mousedown", function(e) { var t = e.target; if (t.href && t.href.indexOf("%", t.host.length) > -1) { t.href = t.href.replace(/%url/, encodeURIComponent(media.src)); } pdsp(e, !!t.textContent); }, false); // load favicons only when the menu item is hovered the first time if (/^https?:$/.test(win.location.protocol) && cfg.sendTo.length) { menu.querySelector(".send_hosts").onmouseover = function() { this.onmouseover = null; [].forEach.call(this.querySelectorAll(".send_hosts > ul > li > a"), function(a) { a.style.backgroundImage = "url(" + a.protocol + "//" + (a.getAttribute("data-favicon") || (a.host + "/favicon.ico")) + ")"; }); }; } var handle_cmd = function(cmd, e) { if (e.button === 1) { return; } var p = e.type.indexOf("wheel") > -1 && (-e.wheelDelta || e.deltaY || e.detail) > 0 || e.button === 2 ? 1 : 0; if (cmd === "cycle") { media.cycle(!p); } else if (cmd === "flip") { media.flip(media, p); } else if (cmd === "rotate") { media.rotate(!p, e.ctrlKey); } else if (cmd === "zoom") { pdsp(e); media.zoomToCenter({wheelDelta: p ? -1 : 1}); } else if (cmd === "reset" && e.button === 0) { media.reset(); } else if (cmd === "frames") { Port.listen(function(js) { js = js && (js.data || js); Port.listen(null); Function("win", "draw_full_frame", "error_handler", js['frames.js'])(win, e.button === 0, function(msg) { // success if (msg === null) { if (browser.maxthon) { win.addEventListener("mousedown", function(e) { pdsp(e, false); }, true); } } else { alert(msg); msg = menu.querySelector("li[data-cmd='frames']"); msg.removeAttribute("data-cmd"); msg.style.opacity = "0.2"; } }); }); Port.send({"cmd": "load_frames.js"}); } else if (cmd === "options" && e.button === 0) { Port.send({"cmd": "open", "url": "options.html"}); } else { p = null; } if (p !== null) { pdsp(e); } }; menu.addEventListener(browser["wheel"], function(e) { var t = e.target; if (t.nodeType === 3) { t = t.parentNode; } if (t.type === "range") { t.value = Math.max(t.getAttribute("min"), Math.min(parseInt(t.value, 10) + t.getAttribute("step") * ((-e.wheelDelta || e.deltaY || e.detail) > 0 ? -1 : 1), t.getAttribute("max"))); menu.onchange(e); pdsp(e); } else if (!/reset|frames|options/.test(t.getAttribute("data-cmd") || (t = t.parentNode) && t.getAttribute("data-cmd"))) { handle_cmd(t.getAttribute("data-cmd"), e); } }, false); menu.onclick = function(e) { var t = e.target; if (t.hasAttribute("data-cmd") || (t = t.parentNode) && t.hasAttribute("data-cmd")) { handle_cmd(t.getAttribute("data-cmd"), e); } }; menu.oncontextmenu = function(e) { var t = e.target; if (t.type === "range") { t.value = t.defaultValue; menu.onchange(e); pdsp(e); } else if (t.hasAttribute("data-cmd") || (t = t.parentNode) && t.hasAttribute("data-cmd")) { handle_cmd(t.getAttribute("data-cmd"), e); } }; menu.addEventListener(browser["transitionend"], function(e) { if (e.propertyName === "left" && this.style.left[0] === "-") { menu.style.display = "none"; } }, false); if (win.Node.prototype && !win.Node.prototype.contains) { win.Node.prototype.contains = function(n) { return n instanceof Node && (this === n || !!(this.compareDocumentPosition(n) & 16)); }; } menu.onmouseover = function() { if (menu.mtimer) { clearTimeout(menu.mtimer); menu.mtimer = null; menu.style.left = "0"; menu.style.opacity = "1"; } }; menu.onmouseout = function(e) { if (!this.contains(e.relatedTarget)) { doc.addEventListener("mousemove", menu_trigger, false); menu.mtimer = setTimeout(function() { menu.style.left = "-" + menu.offsetWidth + "px"; menu.style.opacity = "0"; menu.mtimer = null; }, 800); } }; var menu_trigger = function(e) { if (!moving && !e.ctrlKey && e.clientX < 40 && e.clientY < win.innerHeight / 3) { if (menu.style.display !== "block") { menu.style.display = "block"; setTimeout(function() { menu.style.left = "0"; menu.style.opacity = "1"; }, 50); doc.removeEventListener("mousemove", menu_trigger, false); } } }; // Safari showed the menu even if the cursor wasn't at the edge setTimeout(function() { doc.addEventListener("mousemove", menu_trigger, false); }, 500); } after_calc = function() { if (media.calcFit) { winH = doc.compatMode[0] === "B" ? doc.body : root; winW = winH.clientWidth; winH = winH.clientHeight; media.setPos(); setTimeout(function() { // Gecko and WebKit/Blink render scrollbars for a split of a second // even if the image fits into the view-port winH = doc.compatMode[0] === "B" ? doc.body : root; winW = winH.clientWidth; winH = winH.clientHeight; media.calcFit(); media.setInfo(); media.setCur(); }, 0xf); } }; media.resize = function(m, w) { if (m === -1 || (m === -1 && fZoom)) { if (w) { this.style.width = w; } } if (m === void 0) { m = 1; } if (m !== -1 && this.mode === -1) { this.style.width = this.style.height = ""; } this.mode = m; this.className = "m_" + m; if (this.naturalWidth) { after_calc(); } }; media.setPos = function() { var s = this.style; if (cfg.center) { s.top = Math.max(0, (winH - this.offsetHeight) / 2) + "px"; s.left = Math.max(0, (winW - this.offsetWidth) / 2) + "px"; } else { s.top = s.left = "0"; } this.box = this.getBoundingClientRect(); if (this.box.left < 0) { s.left = (parseInt(s.left, 10) - this.box.left - win.pageXOffset) + "px"; } if (this.box.top < 0) { s.top = (parseInt(s.top, 10) - this.box.top - win.pageYOffset) + "px"; } }; media.setInfo = function() { if (!cfg.imgInfo || !(media.naturalWidth && media.naturalHeight)) { return; } doc.title = cfg.imgInfo.replace(/%(o?[wh]|url|name|ratio|perc)/g, function(a, a1) { switch (a1) { case "w": return media.clientWidth; case "h": return media.clientHeight; case "ow": return media.naturalWidth; case "oh": return media.naturalHeight; case "url": return win.location.href; case "name": return media.alt; case "ratio": return Math.round(media.clientWidth / media.clientHeight * 100) / 100; case "perc": return ~~(0.5 + 1e4 * (media.clientWidth / media.naturalWidth)) / 100; } }); }; media.calcFit = function() { var box = this.box || this.getBoundingClientRect(); noFit = { cur: (box.width <= winW && box.height <= winH), real: (this.naturalWidth <= winW && this.naturalHeight <= winH) }; }; media.wheelZoom = function(e) { stopScroll(); pdsp(e); var w = media.offsetWidth, h = media.offsetHeight; if ((-e.wheelDelta || e.deltaY || e.detail) > 0) { media.resize(-1, Math.max(1, w * 0.75) + "px"); } else { var width = w * (4 / 3); media.resize(-1, (width > 10 ? width : width + 3) + "px"); } if (e.keypress || e.target.nodeName.toUpperCase() === "IMG") { win.scrollTo( (e.offsetX || e.layerX || 0) * media.offsetWidth / w - e.clientX + borderSize, (e.offsetY || e.layerY || 0) * media.offsetHeight / h - e.clientY + borderSize ); } }; media.zoomToCenter = function(e) { pdsp(e); this.wheelZoom({ keypress: true, wheelDelta: e.wheelDelta, clientX: winW / 2, clientY: winH / 2, offsetX: win.pageXOffset + media.offsetLeft + winW / 2, offsetY: win.pageYOffset + media.offsetTop + winH / 2 }); }; media.cycle = function(back) { var n_s = (this.mode === 1 ? 0 : this.mode) - (back ? 1 : -1); if (n_s === 1) { n_s = n_s - (back ? 1 : -1); } else if (n_s < 0) { n_s = 3; } else if (n_s > 3) { n_s = 0; } this.resize(n_s); }; media.reset = function() { if (fZoom) { doc.removeEventListener("mousemove", draw_mask, false); doc.body.removeChild(media.mask); fZoom = null; cancelAction = false; return; } // Firefox document readyState stucks in "interactive" for videos, // but videos doesn't need to be loaded anyway if (media_type() === "img" && doc.readyState !== "complete") { return; } var filters = doc.body.querySelector("#menu li.filters > form"); if (filters) { this.style.filter = this.style.webkitFilter = ""; media.filters = {}; filters.reset(); } delete this.curdeg; delete this.scale; this.style[browser["transform"]] = this.style.width = this.style.height = ""; this.resize(0); }; media.flip = function(el, ori) { if (!this.scale) { this.scale = {"h": 1, "v": 1}; } this.scale[ori ? "h" : "v"] *= -1; ori = this.scale.h !== 1 || this.scale.v !== 1 ? "scale(" + this.scale.h + "," + this.scale.v + ")" : ""; if (this.curdeg) { ori += " rotate(" + this.curdeg + "deg)"; } this.style[browser["transform"]] = ori; }; media.rotate = function(deg, fine) { var rot; if (!this.curdeg) { this.curdeg = 0; } if (deg) { this.curdeg += (fine ? 10 : 90); } else { this.curdeg -= (fine ? 10 : 90); } win.status = this.curdeg + "°"; rot = "rotate(" + this.curdeg + "deg)"; if (this.scale) { rot += " scale(" + this.scale.h + ", " + this.scale.v + ")"; } this.style[browser["transform"]] = rot; this.setPos(); }; if (cfg.wheelZoom) { doc.addEventListener(browser["wheel"], media.wheelZoom, false); } else { doc.addEventListener(browser["wheel"], function(e) { if (media.clientWidth > winW || media.clientHeight > winH) { stopScroll(); var x = 0, y = ((-e.wheelDelta || e.deltaY || e.detail) > 0 ? winH : -winH) / 5; if (media.clientWidth <= winW && media.clientHeight > winH) { if (!cfg.hiddenScrollbars) { return; } } else if (media.clientHeight <= winH && media.clientWidth > winW || e.clientX < winW / 2 && e.clientY > winH - 100) { x = (y < 0 ? -winW : winW) / 5; y = 0; } else if (!cfg.hiddenScrollbars) { return; } win.scrollBy(x, y); pdsp(e); } }, false); } media.setCur = function() { if (this.clientWidth > winW || this.clientHeight > winH) { this.style.cursor = "move"; } else if ( ((winH >= this.clientHeight && winW >= this.clientWidth) && (winH < this.naturalHeight || winW < this.naturalWidth)) || (noFit.cur && noFit.real && (this.clientHeight < this.naturalHeight || this.clientWidth < this.naturalWidth))) { this.style.cursor = browser["zoom-in"]; } else { this.style.cursor = "default"; } }; win.addEventListener("resize", after_calc, false); doc.addEventListener("contextmenu", function(e) { doc.removeEventListener("mousemove", onmove, true); if (progress) { clearTimeout(progress); progress = null; } if (cancelAction) { e.preventDefault(); } }, false); var x, y; var onmove = function(e) { x = e.clientX; y = e.clientY; if (x === lastEvent.clientX && y === lastEvent.clientY) { return; } else if (progress) { clearTimeout(progress); progress = lastEvent.button = null; } if (sX === true || noFit.cur) { doc.removeEventListener("mousemove", onmove, true); return; } if (!moving) { moving = win.requestAnimationFrame(onmoveframe); } if (dragSlide.length !== 3) { dragSlide = [[x, y], [x, y], [x, y]]; return; } // Opera fires move event before mouseup if (dragSlide[2][0] === x && dragSlide[2][1] === y) { return; } dragSlide[0] = [dragSlide[1][0], dragSlide[1][1]]; dragSlide[1] = [dragSlide[2][0], dragSlide[2][1]]; dragSlide[2] = [x, y]; media.dragSlideTime = Date.now(); }; var pan = function() { win.scrollBy(sX - x, sY - y); sX = x; sY = y; }; var onmoveframe = function() { pan(); moving = null; }; var stopScroll = function(e) { if (dragSlide.length) { clearInterval(progress); progress = null; cancelAction = false; dragSlide.length = 0; media.dragSlideTime = false; } if (e) { doc.removeEventListener(browser["wheel"], stopScroll, false); } }; var startScroll = function() { progress = setInterval(function() { win.scrollBy(dragSlide[0], dragSlide[1]); if (dragSlide[0]) { if (Math.abs(dragSlide[0]) < 1) { dragSlide[0] = 0; } dragSlide[0] /= 1.11; } if (dragSlide[1]) { if (Math.abs(dragSlide[1]) < 1) { dragSlide[1] = 0; } dragSlide[1] /= 1.11; } var atRight = root.scrollWidth - win.pageXOffset === winW, atBottom = root.scrollHeight - win.pageYOffset === winH; if (!(dragSlide[0] && dragSlide[1]) || (!win.pageYOffset && !win.pageXOffset) || (!win.pageYOffset && atRight) || (atBottom && !win.pageXOffset) || (atBottom && atRight)) { stopScroll(); } }, 25); }; var draw_mask = function(e) { if (++fZoom.counter % 3) { return; } var x = e.clientX - fZoom.left, y = e.clientY - fZoom.top; if (e.ctrlKey) { var rx = fZoom.prevX ? x - fZoom.prevX : 0, ry = fZoom.prevY ? y - fZoom.prevY : 0; fZoom.prevX = x; fZoom.prevY = y; fZoom.x += rx; fZoom.y += ry; fZoom.X += rx; fZoom.Y += ry; } else { if (fZoom.prevX) { delete fZoom.prevX; delete fZoom.prevY; } fZoom.w = Math.abs(fZoom.X - x); fZoom.h = Math.abs(fZoom.Y - y); fZoom.x = fZoom.X < x ? fZoom.X : fZoom.X - fZoom.w; fZoom.y = fZoom.Y < y ? fZoom.Y : fZoom.Y - fZoom.h; } media.mctx.clearRect(0, 0, media.mask.width, media.mask.height); media.mctx.fillRect(0, 0, media.mask.width, media.mask.height); media.mctx.clearRect(fZoom.x, fZoom.y, fZoom.w, fZoom.h); }; var longpress_handler = function() { cancelAction = true; progress = null; longpress_func(cfg[lastEvent.button === 2 ? "lpRight" : "lpLeft"]); }, longpress_func = function(id) { switch (id) { case 1: // fit to width/height var x, y; if (media.mode === 2 || media.clientWidth === doc.body.clientWidth || (doc.body.clientHeight > media.clientHeight && winW < doc.body.clientWidth)) { x = media.clientWidth; media.resize(3); x = lastEvent.layerX * media.clientWidth / x - winW / 2; y = 0; } else { y = media.clientHeight; media.resize(2); x = 0; y = lastEvent.layerY * media.clientHeight / y - winH / 2; } win.scrollTo(x, y); break; } }; media.addEventListener("mousedown", function(e) { pdsp(e, false); if (e.button === 1 || e.ctrlKey || e.altKey || !e.shiftKey && media_type() === "video" && (e.offsetY || e.layerY || 0) > Math.min(media.clientHeight - 40, media.clientHeight / 2)) { return; } if ((e.button === 0 && media.mode < 4) || e.button === 2) { if (e.button === 2) { sX = true; } else { if (!e.shiftKey && noFit.cur && media.clientWidth >= 60 && media.clientWidth - (e.offsetX || e.layerX || 0) <= 30) { lastEvent.clientX = e.clientX; lastEvent.clientY = e.clientY; return; } e.preventDefault(); win.focus(); sX = e.clientX; sY = e.clientY; } if (!e.shiftKey) { doc.addEventListener("mousemove", onmove, true); } } if (!cfg.lpDelay) { return; } // for fine move and free zoom if (e.shiftKey) { cancelAction = true; if (e.button === 0) { fZoom = { counter: 0, left: parseInt(media.style.left, 10), top: parseInt(media.style.top, 10) }; fZoom.X = e.clientX - fZoom.left; fZoom.Y = e.clientY - fZoom.top; if (!media.mask) { media.mask = doc.createElement("canvas"); media.mask.className = "mask"; media.mask.style.cssText = "display: block; position: fixed; left: 0; top: 0;"; media.mctx = media.mask.getContext("2d"); } doc.addEventListener("mousemove", draw_mask, false); var h = media.curdeg && Math.sin(media.curdeg) ? true : false, w = h ? media.offsetHeight : media.offsetWidth; h = h ? media.offsetWidth : media.offsetHeight; media.mask.width = Math.min(winW, w); media.mask.height = Math.min(winH, h); media.mask.style.left = media.style.left; media.mask.style.top = media.style.top; media.mctx.clearRect(0, 0, media.mask.width, media.mask.height); doc.body.appendChild(media.mask); w = win.getComputedStyle(media.mask).color; media.mctx.fillStyle = !w || w === "rgb(0, 0, 0)" ? "rgba(0,0,0,.4)" : w; } } // is dragSlideing if (progress) { if (stopScroll) { stopScroll(); cancelAction = e.button === 0; } if (e.button === 0) { return; } } if (e.shiftKey || (e.button === 0 && !cfg.lpLeft) || (e.button === 2 && !cfg.lpRight)) { return; } lastEvent.clientX = e.clientX; lastEvent.clientY = e.clientY; lastEvent.layerX = e.offsetX || e.layerX || 0; lastEvent.layerY = e.offsetY || e.layerY || 0; lastEvent.button = e.button; progress = setTimeout(longpress_handler, cfg.lpDelay); }, true); doc.addEventListener("mouseup", function(e) { if (e.button !== 0) { return; } var x, y; if (media.mode < 4) { doc.removeEventListener("mousemove", onmove, true); if (fZoom) { doc.removeEventListener("mousemove", draw_mask, false); doc.body.removeChild(media.mask); var w = Math.min( media.clientWidth, fZoom.w + Math.min(fZoom.x, 0) + (fZoom.x + fZoom.w > media.mask.width ? media.mask.width - fZoom.x - fZoom.w : 0) ), h = Math.min( media.clientHeight, fZoom.h + Math.min(fZoom.y, 0) + (fZoom.y + fZoom.h > media.mask.height ? media.mask.height - fZoom.y - fZoom.h : 0) ); x = Math.max(0, fZoom.x); y = Math.max(0, fZoom.y); fZoom = null; cancelAction = false; if (!w || !h || x >= media.clientWidth || y >= media.clientHeight) { return; } var nimgw, nimgh, scrollbars = (win.innerWidth - winW) || (win.innerHeight - winH); var fitW = winW < w * winH / h; fitW = e.ctrlKey ? !fitW : fitW; if (fitW) { nimgw = media.clientWidth * winW / w; nimgh = nimgw * media.clientHeight / media.clientWidth; } else { nimgh = media.clientHeight * winH / h; nimgw = nimgh * media.clientWidth / media.clientHeight; } if (nimgw > MAXSIZE) { nimgw = MAXSIZE; nimgh = media.clientHeight * MAXSIZE / media.clientWidth; } if (nimgh > MAXSIZE) { nimgw = media.clientWidth * MAXSIZE / media.clientHeight; nimgh = MAXSIZE; } var cx = (win.pageXOffset + x + w / 2) * nimgw / media.clientWidth - winW / 2 - scrollbars; var cy = (win.pageYOffset + y + h / 2) * nimgh / media.clientHeight - winH / 2 - scrollbars; media.resize(-1, nimgw + "px"); win.scrollTo(cx, cy); return; } else if (dragSlide.length === 3) { x = dragSlide[0][0] - dragSlide[2][0]; y = dragSlide[0][1] - dragSlide[2][1]; if ((Date.now() - media.dragSlideTime) > 100) { cancelAction = false; dragSlide.length = 0; return; } if (x || y) { dragSlide.length = 2; dragSlide[0] = x; dragSlide[1] = y; startScroll(); doc.addEventListener(browser["wheel"], stopScroll, false); return; } } } if (progress) { clearTimeout(progress); progress = null; } if (cancelAction) { cancelAction = false; return; } if (e.shiftKey || e.ctrlKey || e.altKey || e.target !== media || lastEvent.button === null || e.clientX !== lastEvent.clientX || e.clientY !== lastEvent.clientY) { return; } if (media.mode < 2 && noFit.real) { if (media.mode === -1) { media.resize(0); } else if (winW / winH < media.naturalWidth / media.naturalHeight || winH === media.offsetHeight && winW > media.offsetWidth) { media.resize(2); } else { media.resize(3); } } else if (media.mode === 1 || noFit.cur) { if (media.naturalWidth === media.clientWidth && media.naturalHeight === media.clientHeight) { return; } x = e.offsetX || e.layerX || 0; y = e.offsetY || e.layerY || 0; if (media.scale) { if (media.scale.h === -1) { x = media.clientWidth - x; } if (media.scale.v === -1) { y = media.clientHeight - y; } } x = x * media.naturalWidth / media.clientWidth - winW / 2; y = y * media.naturalHeight / media.clientHeight - winH / 2; media.resize(0); win.scrollTo(x, y); } else { media.resize(1); } }, true); doc.addEventListener("keydown", function(e) { if (stopScroll) { stopScroll(); } if (shortcut.isModifier(e)) { return; } var key = shortcut.key(e); if (e.ctrlKey || (fZoom && key !== "Esc")) { return; } if (key === "+" || key === "-") { e.wheelDelta = key === "+" ? 1 : -1; media.zoomToCenter(e); return false; } var x, y, z; switch (key) { case "Esc": media.reset(); break; case "PgUp": x = e.shiftKey ? -winW / 2 : 0; y = e.shiftKey ? 0 : -winH / 2; break; case "PgDn": x = e.shiftKey ? winW / 2 : 0; y = e.shiftKey ? 0 : winH / 2; break; case "End": x = e.shiftKey ? root.scrollWidth : win.pageXOffset; y = e.shiftKey ? win.pageYOffset : root.scrollHeight; z = true; break; case "Home": x = e.shiftKey ? 0 : win.pageXOffset; y = e.shiftKey ? win.pageYOffset : 0; z = true; break; default: x = true; } if (x !== true) { if (x !== void 0) { win[z ? "scrollTo" : "scrollBy"](x, y); e.preventDefault(); } return; } switch (key) { case cfg.key_mOrig: media.resize(0); break; case cfg.key_mFit: media.resize(1); break; case cfg.key_mFitW: media.resize(2); break; case cfg.key_mFitH: media.resize(3); break; case cfg.key_cycle: media.cycle(e.shiftKey); break; case cfg.key_rotL: media.rotate(false, e.shiftKey); break; case cfg.key_rotR: media.rotate(true, e.shiftKey); break; case cfg.key_flipH: media.flip(media, 0); break; case cfg.key_flipV: media.flip(media, 1); break; default: x = true; } if (media_type() === "video") { x = null; switch (key) { case "Space": media.togglePlay(); break; case "Up": case "Down": key = media.volume + (key === "Up" ? 0.1 : -0.1); // must check the range manually, otherwise browsers will throw an error media.volume = key < 0 ? 0 : (key > 1 ? 1 : key); break; default: x = true; } } if (x !== true) { pdsp(e); } }, true); if (media_type() === "video") { media.togglePlay = function() { if (this.paused || Math.abs(this.duration - this.currentTime) < 0.01) { this.play(); } else { this.pause(); } }; media.addEventListener("click", function(e) { var top = (e.offsetY || e.layerY || 0); if (top > media.clientHeight - 40) { return; } if (top > media.clientHeight / 2) { media.togglePlay(); } pdsp(e); }); media.addEventListener("dblclick", function(e) { if ((e.offsetY || e.layerY || 0) < media.clientHeight / 2) { pdsp(e); } }); } media.mode = cfg.mode; media.calcFit(); progress = []; if (cfg.minUpscale) { if (media.naturalWidth >= winW * cfg.minUpscale / 100) { progress[0] = 1; } if (media.naturalHeight >= winH * cfg.minUpscale / 100) { progress[1] = 1; } } if (media.mode === 4) { media.mode = media.naturalWidth / media.naturalHeight > winW / winH ? 3 : 2; } else if ((media.mode === 1 || (media.mode === 0 && noFit.real)) && progress.length) { media.mode = media.naturalWidth / media.naturalHeight > winW / winH ? 2 : 3; } if ((media.mode === 2 && media.naturalWidth < winW && !progress[0]) || (media.mode === 3 && media.naturalHeight < winH && !progress[1])) { media.mode = 0; } progress = null; media.resize(media.mode); }; if (media_type() === "video") { root = {}; cfg.vidattrs.split(/\s+/).forEach(function(attr) { attr = attr.split("="); if (attr[0] === "volume") { root[attr[0]] = Math.min(100, Math.max(0, parseInt(attr[1]) / 100)); } else { root[attr[0]] = true; } }); ["autoplay", "loop", "controls", "muted", "volume"].forEach(function(attr) { media[attr] = attr === "volume" ? (root[attr] === void 0 ? 1 : root[attr]) : root[attr] || false; }); if (media.autoplay) { media.onloadedmetadata = function() { this.onloadedmetadata = null; setTimeout(function() { media.currentTime = 0; media.play(); }, 100); }; } } else { media = doc.createElement("img"); media.src = win.location.href; } root = doc.documentElement; media.onerror = function() { // Opera fires an error event on local video files when they're close to the end // Firefox did it a few times too, however there was nothing wrong with the video if (media.currentTime > 0 && win.location.protocol === "file:") { return; } clearInterval(progress); root.classList.add("error"); }; if (/^data:/.test(win.location.href)) { media.alt = media_type() + " (data:)"; if (!cfg.imgInfo) { doc.title = media.alt; } } else { media.alt = win.location.href.replace(/#.*/, "").match(/(?:[^\/]+)?$/)[0] || media_type(); media.alt = media.alt.split("?")[0]; try { // some Unicode characters caused problems media.alt = decodeURIComponent(media.alt); } catch (ex) {} } if (media.naturalWidth || media.videoWidth) { init_params = null; // Firefox and Safari won't position the image without setTimeout setTimeout(init, 0xf); } else { init_params = {loop: 0, wait: 150, maxLoop: 900}; progress = setInterval(init, init_params.wait); setTimeout(function() { if (root.classList.contains(media_type())) { return; } // Firefox won't show the image if a site uses CSP settings, // so we should use the default image if ((browser.firefox || browser.maxthon) && (media_type() === "img" ? !media.naturalWidth && doc.images[0].naturalWidth : !media.videoWidth && doc.body.querySelector("video").videoWidth)) { doc.images[0].style.display = "block"; clearInterval(progress); return; } media.style.display = "none"; var h2 = doc.body.appendChild(doc.createElement("h2")); h2.textContent = media.alt; h2.onclick = function() { doc.body.removeChild(this); media.style.display = "block"; }; }, 1000); } }; (function() { if (browser.safari && location.protocol === "safari-extension:") { init = null; return; } if (browser.opera || browser.firefox) { if (media_type()) { Port.listen(function(e) { Port.listen(null); init(window, document, e); }); Port.send({"cmd": "hello"}); } else { init = null; } } else { Port.listen(function(e) { Port.listen(null); if (!media_type()) { init = null; return; } init(window, document, e); }); Port.send({"cmd": "hello"}); } })(); "use strict"; var app, cfg, Tabs, Port; app = { "name": /*~APP_NAME~*/"Viewhance", "version": /*~APP_VERSION~*/"0.9.6" }; app.runtime = external.mxGetRuntime(); cfg = { storage: app.runtime.storage, getItem: function(k, fn) { fn(this.storage.getConfig(k)); }, setItem: function(k, v) { return this.storage.setConfig(k, v); } }; Tabs = new mx.browser.tabs; Tabs.baseURI = app.runtime.getPrivateUrl(); Tabs.rgxNoLocal = /^[^:]{2,20}:/; Tabs.getSelected = function(cb) { cb(this.getCurrentTab()); }; Tabs.create = function(p) { if (!this.rgxNoLocal.test(p["url"])) { p["url"] = this.baseURI + p["url"]; } this.newTab({ "url": p["url"], "activate": p["active"] }); }; Port = { parse_msg: function(msg) { var id = msg.mxPort.id; return { msg: msg.message, origin: msg.mxPort.url, postMessage: function(msg) { app.runtime.post(id, msg); } }; }, listen: function(func, name) { app.runtime.listen(name || "service", func); } }; Port.listen(function(e) { e = Port.parse_msg(e); if (e.msg.cmd === "function") { window[e.msg.fn_name](); } }, "mx"); /* global cfg, Port, Tabs */ "use strict"; cfg.getItem("cfg", function(v) { var xhr = new XMLHttpRequest; xhr.overrideMimeType("application/json;charset=utf-8"); xhr.open("GET", "defaults.jsn", true); xhr.onload = function() { var p, def_prefs = JSON.parse(this.responseText), need_update = false; v = v ? JSON.parse(v) : {}; for (p in def_prefs) { if (v[p] === void 0) { v[p] = def_prefs[p]; need_update = true; } } if (need_update) { cfg.setItem("cfg", JSON.stringify(v)); } }; xhr.send(); }); function onMessage(ev, origin, postMessage) { var e = Port.parse_msg(ev, origin, postMessage), msg = e.msg; if (!msg.cmd) { return; } switch (msg.cmd) { case "hello": cfg.getItem("cfg", function(v) { e.postMessage({ "cmd": "hello", "prefs": v }); }); break; case "load_prefs": cfg.getItem("cfg", function(v) { e.postMessage({"cfg": JSON.parse(v)}); }); break; case "save": cfg.setItem("cfg", JSON.stringify(msg.prefs)); break; case "open": if (!Array.isArray(msg.url)) { msg.url = [msg.url]; } Tabs.getSelected(function(tab) { for (var i = 0; i < msg.url.length; ++i) { Tabs.create({ "incognito": !!tab["incognito"], "url": msg.url[i], "active": !msg.nf }); } }); break; case "load_frames.js": msg = new XMLHttpRequest; msg.overrideMimeType("text/plain;charset=utf-8"); msg.open("GET", "js/frames.js", true); msg.onload = function() { e.postMessage({"frames.js": this.responseText}); }; msg.send(); break; } return true; // Chrome } Port.listen(onMessage);/* global win, error_handler, draw_full_frame, browser, gen_nodes */ "use strict"; function $(id) { return document.getElementById(id); } var crc32 = (function() { var crc_table = [], n = 0, c, k; for (; n < 256; ++n) { for (c = n, k = 0; k < 8; ++k) { c = (c & 1) ? 0xedb88320 ^ (c >>> 1) : c >>> 1; } crc_table[n] = c; } return function(s) { var crc = -1, n = 0, l = s.length; while (n < l) { crc = crc_table[(crc ^ s.charCodeAt(n++)) & 0xff] ^ (crc >>> 8); } return crc ^ -1; }; })(); function BinaryTools(data) { this.pos = 0; this.data = data; this.length = data.length; this.littleEndian = false; this.zeropad = "00000000"; this.readByte = function(pos) { return this.data.charCodeAt( pos === void 0 || pos < 0 ? this.pos++ : pos ) & 0xff; }; this.readString = function(length, pos) { if (pos === void 0 || pos < 0) { pos = this.pos; this.pos += length || 0; } return this.data.substr(pos, length || 0); }; this.readBits = function(length, pos) { var curbyte, bitarray = [], i = 0; while (i++ < length) { curbyte = this.readByte(pos).toString(2); bitarray.push( this.zeropad.substr(0, this.zeropad.length - curbyte.length) + curbyte ); } return (this.littleEndian ? bitarray.reverse() : bitarray).join(""); }; this.readInt = function(bytes, pos) { if (bytes < 1) { return null; } if (pos === void 0 || pos < 0) { pos = this.pos; this.pos += bytes; } var i, integer = 0; if (this.littleEndian) { i = bytes - 1; while (i >= 0) { integer += this.readByte(pos + i) << (i-- * 8); } } else { i = 0; while (i < bytes) { integer += this.readByte(pos + i++) << ((bytes - i) * 8); } } return integer >>> 0; }; this.intToBytes = function(integer, i) { if (!i) { i = 4; } var bytes = []; while (i--) { bytes.push((integer >> (i * 8)) & 0xff); } return String.fromCharCode.apply( null, this.littleEndian ? bytes.reverse() : bytes ); }; } if (!win.opera) { var b64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; win.btoa = function(b64str) { var c1, c2, pos = 0, res = "", mod = b64str.length % 3, l = b64str.length - mod; while (pos < l) { c1 = b64str.charCodeAt(pos++) & 0xff; c2 = b64str.charCodeAt(pos++) & 0xff; res += b64chars[c1 >> 2]; res += b64chars[((c1 & 3) << 4) | (c2 >> 4)]; c1 = b64str.charCodeAt(pos++) & 0xff; res += b64chars[((c2 & 0x0f) << 2) | (c1 >> 6)]; res += b64chars[c1 & 0x3f]; } if (mod) { c1 = b64str.charCodeAt(pos++) & 0xff; res += b64chars[c1 >> 2]; if (mod === 1) { res += b64chars[(c1 & 3) << 4]; res += "=="; } else { c2 = b64str.charCodeAt(pos++) & 0xff; res += b64chars[((c1 & 3) << 4) | (c2 >> 4)]; res += b64chars[(c2 & 0x0f) << 2]; res += "="; } } return res; }; } var maxSize = 20 * 1024 * 1024; var xhr = new win.XMLHttpRequest; xhr.overrideMimeType("text/plain; charset=x-user-defined"); xhr.onreadystatechange = function() { if (this.readyState === 2) { var length = this.getResponseHeader("Content-Length"); if (length && length > maxSize) { this.abort(); error_handler("Image is too large..."); return; } } if (this.responseText) { if (!this.img_type) { // PNG or GIF or WEBP signature img_head = /^(?:\x89(PNG)\r\n\x1a\n|(GIF)8[79]a|RIFF....(WEBP)VP8X)/; this.img_type = this.responseText.match(img_head); // seems like in some cases a character encoding is applied anyway, // however it's enough to check the signature only if (!this.img_type && (this.responseText[1] === "P" && (chunkSize = 8) || this.responseText[0] === "G" && (chunkSize = 6) || this.responseText[0] === "R" && (chunkSize = 16))) { this.img_type = this.responseText.slice(0, chunkSize).split(""); for (i = 0; i < this.img_type.length; ++i) { this.img_type[i] = this.img_type[i].charCodeAt(0) & 0xff; } this.img_type = String.fromCharCode.apply(null, this.img_type).match(img_head); } if (this.img_type) { this.img_type = this.img_type[2] || this.img_type[1] || this.img_type[3]; } else { this.abort(); this.onprogress = null; error_handler("Not animated..."); return; } } if (this.readyState !== 4/* || this.status !== 200*/) { return; } if (this.responseText.length > maxSize) { this.onprogress = null; error_handler("Image is too large..."); return; } var i, IHDR, chunkType, chunkSize, frames = [], bin = new BinaryTools(this.responseText), animation = {}, img_head = ""; if (this.img_type === "PNG") { // https://wiki.mozilla.org/APNG_Specification // skip signature bin.pos = 8; while (bin.pos < bin.length) { // read the chunk type chunkType = bin.readString(4, bin.pos + 4); // console.log(i, chunkType, bin.readInt(4, bin.pos)); if (chunkType === "IHDR") { // skip chunk length and name bin.pos += 8; animation.width = bin.readInt(4); animation.height = bin.readInt(4); IHDR = bin.readString(5); // skip crc bin.pos += 4; } else if (!frames.length && chunkType === "acTL") { animation.num_frames = bin.readInt(4, bin.pos + 8); animation.num_plays = bin.readInt(4, bin.pos + 12); bin.pos += 20; } else if (chunkType === "fcTL") { bin.pos += 12; i = frames.length; frames.push({ width: bin.readInt(4), height: bin.readInt(4), x_offset: bin.readInt(4), y_offset: bin.readInt(4), delay: 1000 * bin.readInt(2) / (bin.readInt(2) || 100), dispose_op: bin.readInt(1), blend_op: bin.readInt(1), data: "IDAT" }); if (i === 0 && frames[i].dispose_op === 2) { frames[i].dispose_op = 1; } // skip crc bin.pos += 4; // console.log(frames[frames.length - 1]); } else if (chunkType === "IDAT" || chunkType === "fdAT") { if (!animation.num_frames || animation.num_frames < 2) { break; } // IDAT without acTL chunk should be ignored else if (chunkType === "IDAT" && !frames.length) { console.log("PNG: ignoring IDAT from animation..."); bin.pos += bin.readInt(4, bin.pos) + 12; continue; } i = (chunkType === "fdAT" ? 4 : 0); // read the length, also skip the sequence number from fdAT chunkSize = bin.readInt(4) - i; // skip chunk type, also the sequence number // in case of the fdAT chunk type bin.pos += 4 + i; frames[frames.length - 1].data += bin.readString(chunkSize); // skip crc bin.pos += 4; } else if (!frames.length) { // read the full chunk (length + chunk type + chunkdate + crc) img_head += bin.readString(bin.readInt(4, bin.pos) + 12); } else { bin.pos += bin.readInt(4, bin.pos) + 12; } } } else if (this.img_type === "GIF") { // http://www.w3.org/Graphics/GIF/spec-gif89a.txt bin.littleEndian = true; bin.skipSubBlock = function() { do { this.pos += this.readInt(1, this.pos) + 1; if (bin.pos >= bin.length) { throw this.img_type + ": end reached..."; } } while (this.readInt(1, this.pos) !== 0x00); ++this.pos; }; // skip signature bin.pos = 6; // Logical Screen Descriptor animation.width = bin.readInt(2); animation.height = bin.readInt(2); bin.packed = bin.readBits(1, 10); bin.packed = (bin.packed[0] === "1" ? 3 * 1 << (parseInt(bin.packed.slice(-3), 2) + 1) : 0); img_head += bin.readString(3 + bin.packed); i = 0; // frame index while (bin.pos < bin.length) { chunkType = bin.readString(1); // console.log("sentinel: " + chunkType); // Extension block (0x21, an exclamation point '!') if (chunkType === "!") { // optional chunkType = bin.readInt(1); // console.log("ext_label: " + chunkType.toString(16)); // Plain Text Extension if (chunkType === 0x01) { // no support for this, so skip bin.pos += 13; bin.skipSubBlock(); } // Graphics Control Extension else if (chunkType === 0xf9) { bin.packed = bin.readBits(1, bin.pos + 1); frames.push({ delay: (10 * bin.readInt(2, bin.pos + 2)) || 100, // -1 in order to match PNG's indexes, also treat 0 as 1 dispose_op: Math.max(0, parseInt(bin.packed.slice(3, -2), 2) - 1), data: bin.readString(4, bin.pos - 2) + // sentinel + ext_label bin.intToBytes(0, 2) + // with zero delay // transparent color index + block terminator bin.readString(2, bin.pos + 4) }); bin.pos += 6; } // Comment Block Extension else if (chunkType === 0xfe) { bin.skipSubBlock(); } // Application Block Extension else if (chunkType === 0xff) { bin.pos += 12; bin.skipSubBlock(); } // try to skip anything else else { bin.pos = bin.data.indexOf("\x00", bin.pos); if (bin.pos === -1) { bin.pos = bin.length; } else { ++bin.pos; } } } // Image (0x2C, a comma ',') else if (chunkType === ",") { if (!frames[i]) { frames.push({ delay: 100, dispose_op: 0, // sentinel, ext_label, block size, packed field, delay, // transparent color index, terminator data: "\x21\xf9\x04\x00\x00\x00\x00\x00" }); } frames[i].x_offset = bin.readInt(2); frames[i].y_offset = bin.readInt(2); bin._pos = bin.pos; frames[i].width = bin.readInt(2); frames[i].height = bin.readInt(2); bin.packed = bin.readBits(1); bin.pos += (bin.packed[0] === "1" ? 3 * (1 << (parseInt(bin.packed.slice(-3), 2) + 1)) : 0); ++bin.pos; // LZW minimum code size bin.skipSubBlock(); frames[i]._data = [bin.pos - bin._pos, bin._pos]; ++i; } // Trailer (0x3B, a semi-colon ';') or something else else { break; } } } else if (this.img_type === "WEBP") { // https://developers.google.com/speed/webp/docs/riff_container bin.littleEndian = true; bin.pos = 20; // WebP file header + VP8X and its chunk size bin.packed = bin.readBits(1); // VP8X flags if (bin.packed[6] === "0") { // animation flag this.onprogress = null; error_handler(this.img_type + ": not animated..."); return; } bin.pos += 3; // reserved 24 bits animation.width = bin.readInt(3) + 1; // canvas width animation.height = bin.readInt(3) + 1; // canvas height while (bin.pos < bin.length) { chunkType = bin.readString(4); if (chunkType === "ANIM") { // skip Background Color: 32 bits + Loop Count: 16 bits bin.pos += 4 + bin.readInt(4); // chunk size + chunk payload animation.ANIM = true; } else if (chunkType === "ANMF") { if (!animation.ANIM) { this.onprogress = null; error_handler(this.img_type + ": ANIM chunk not found!"); return; } i = frames.length; // size of the Frame Data chunkSize = bin.readInt(4); // if the chunk size is odd, then a padding byte is added chunkSize += chunkSize & 1; // remove the size of the ANMF properties listed below chunkSize -= 16; frames.push({ x_offset: bin.readInt(3) * 2, y_offset: bin.readInt(3) * 2, width: bin.readInt(3) + 1, height: bin.readInt(3) + 1, delay: bin.readInt(3), dispose_op: bin.readInt(1) & 1, data: "" }); bin._pos = bin.pos + chunkSize; while (bin.pos < bin._pos) { chunkType = bin.readString(4); chunkSize = bin.readInt(4); chunkSize += chunkSize & 1; // should exist before the 'VP8 ' chunk only /*if (chunkType === "ALPH") { if (bin.readString(4, bin.pos + chunkSize) === "VP8 ") { // the whole ALPH chunk frames[i].data += bin.readString(8, bin.pos - 8) + bin.readString(chunkSize); } else { bin.pos += chunkSize; } } else */if (chunkType === "VP8 " || chunkType === "VP8L") { // chunk type + chunk size + VP8? bitstream; frames[i].data += bin.readString(8, bin.pos - 8) + bin.readString(chunkSize); } else { bin.pos += chunkSize; } } // frames[i].data += bin.readString(chunkSize); } else { // skip chunk bin.pos += 4 + bin.readInt(4); } } } if (frames.length > 1) { var generateImageSRC, img = new Image, canvas = document.createElement("canvas"), ctx = canvas.getContext("2d"), wrap, speed, current_frame; canvas.width = animation.width; canvas.height = animation.height; if (this.img_type === "PNG") { chunkSize = bin.intToBytes(13); var img_end = bin.readString(12, bin.length - 12); generateImageSRC = function() { var frm = frames[frames.idx], IHDR_ = "IHDR" + bin.intToBytes(frm.width) + bin.intToBytes(frm.height) + IHDR; IHDR_ += bin.intToBytes(crc32(IHDR_)); return "data:image/png;base64," + win.btoa( "\x89PNG\r\n\x1a\n" + chunkSize + IHDR_ + img_head + bin.intToBytes(frm.data.length - 4) + frm.data + bin.intToBytes(crc32(frm.data)) + img_end ); }; } else if (this.img_type === "GIF") { chunkSize = bin.intToBytes(0, 2); chunkSize = "," + chunkSize + chunkSize; generateImageSRC = function() { var frm = frames[frames.idx]; return "data:image/gif;base64," + win.btoa( "GIF89a" + bin.intToBytes(frm.width, 2) + bin.intToBytes(frm.height, 2) + img_head + frm.data + chunkSize + bin.readString(frm._data[0], frm._data[1]) + ";" ); }; } else if (this.img_type === "WEBP") { generateImageSRC = function() { var frm = frames[frames.idx]; return "data:image/webp;base64," + win.btoa( "RIFF" + bin.intToBytes(frm.data.length + 4) + "WEBP" + frm.data ); }; } img.onerror = function() { wrap.textContent = xhr.img_type + ": frame (" + (frames.idx + 1) + ") couldn't be parsed!"; wrap.appendChild(this); }; img.onload = function() { if (draw_full_frame) { var frame = frames[frames.idx]; var prev = frames[frames.idx - 1]; if (prev) { if (prev.dispose_op === 1) { ctx.clearRect( prev.x_offset, prev.y_offset, prev.width, prev.height ); } else if (prev.dispose_op === 2) { ctx.putImageData( this.prev_dispose_data, prev.x_offset, prev.y_offset ); } } if (frame.dispose_op === 2) { this.prev_dispose_data = ctx.getImageData( frame.x_offset, frame.y_offset, frame.width, frame.height ); } if (frame.blend_op === 0) { // only for PNG ctx.clearRect( frame.x_offset, frame.y_offset, frame.width, frame.height ); } ctx.drawImage( this, frame.x_offset, frame.y_offset ); } var c = canvas.cloneNode(false); if (draw_full_frame) { c.getContext("2d").putImageData( ctx.getImageData(0, 0, canvas.width, canvas.height), 0, 0 ); } else { c.width = this.width; c.height = this.height; c.getContext("2d").drawImage(this, 0, 0); } wrap.appendChild(c); if (c.previousElementSibling) { c.previousElementSibling.style.display = ""; ++current_frame.value; } c.style.display = "inline-block"; this.removeAttribute("src"); ++frames.idx; processNextFrame(); }; var processNextFrame = function() { if (frames.idx < frames.length) { img.src = generateImageSRC(); frames[frames.idx].data = null; } else { img.onload = null; img = null; done(); error_handler(null); } }; var done = function() { wrap.current = 0; wrap.children[wrap.children.length - 1].style.display = ""; wrap.children[wrap.current].style.display = "inline-block"; current_frame.value = 1; current_frame.oninput = function() { if (parseFloat(speed.value, 10) !== 0) { wrap.stop(); } if (wrap.classList.contains("showall")) { wrap.onmouseup({button: 0}); } wrap.step(null); }; speed.oninput = function() { if (parseFloat(speed.value, 10) === 0) { wrap.stop(); wrap.addEventListener(browser["wheel"], wrap.wheeler, false); } else { wrap.classList.remove("showall"); wrap.removeEventListener(browser["wheel"], wrap.wheeler, false); wrap.animate(); } }; wrap.wheeler = function(e) { wrap.step((e.deltaY || -e.wheelDelta) > 0); e.preventDefault(); }; wrap.addEventListener(browser["wheel"], wrap.wheeler, false); current_frame.addEventListener(browser["wheel"], wrap.wheeler, false); wrap.onmouseup = function(e) { if (e.button !== 0) { return; } if (e.ctrlKey) { if (e.target.toDataURL && speed.value < 1) { var img = new Image; img.src = e.target.toDataURL(); this.replaceChild(img, e.target); wrap.step(null); } return; } this.stop(); if (this.classList.contains("showall")) { if (e.target && e.target.parentNode === wrap) { current_frame.value = [].indexOf.call(wrap.childNodes, e.target) + 1; wrap.step(null); } this.addEventListener(browser["wheel"], this.wheeler, false); } else { this.removeEventListener(browser["wheel"], this.wheeler, false); } this.classList.toggle("showall"); }; wrap.animate = function() { clearTimeout(wrap.timeout); wrap.step(parseFloat(speed.value, 10) < 0); if (parseFloat(speed.value, 10)) { wrap.timeout = setTimeout( wrap.animate, frames[wrap.current].delay / Math.abs(parseFloat(speed.value, 10) || 0) ); } }; wrap.stop = function() { clearTimeout(this.timeout); speed.value = 0; }; wrap.step = function(backward) { wrap.children[wrap.current].style.display = ""; if (backward === null) { wrap.current = Math.max( 1, Math.min(parseInt(current_frame.value, 10) || 1, current_frame.max) ) - 1; } else { if (backward) { --wrap.current; } else { ++wrap.current; } } if (wrap.current >= wrap.children.length) { wrap.current = 0; } else if (wrap.current < 0) { wrap.current = wrap.children.length - 1; } wrap.children[wrap.current].style.display = "inline-block"; current_frame.value = wrap.current + 1; current_frame.nextElementSibling.value = current_frame.value + " / " + frames.length; }; }; wrap = document.body; wrap.className = "frames"; wrap.textContent = ""; gen_nodes(wrap, [ {tag: "a", attrs: {"class": "back", href: win.location.href}, text: "\u2190"}, " ", {tag: "input", attrs: {type: "number", id: "speed", style: "width: 55px; text-align: center;", value: 0, step: 0.5, min: -10, max: 10}}, "x ", {tag: "input", attrs: {type: "range", id: "current_frame", style: "width: 500px; vertical-align: middle;", size: 6, value: 1, step: 1, min: 1}}, " ", {tag: "output", attrs: {"for": "current_frame"}, text: "1 / " + frames.length}, " ", {tag: "div", attrs: {id: "frames"}} ]); wrap = $("frames"); speed = $("speed"); current_frame = $("current_frame"); current_frame.max = frames.length; frames.idx = 0; processNextFrame(); } else { this.onprogress = null; error_handler(this.img_type + ": not animated..."); } } }; xhr.onerror = function() { this.onprogress = null; error_handler("Failed to load!"); }; xhr.open("GET", win.location.href, true); xhr.send();/* global gen_nodes, browser, app, Port, _ */ "use strict"; var def_prefs, input_changes = {}, $ = function(id) { return document.getElementById(id); }, processLNG = function(nodes) { var els, l, args, attrs, attrnode, string, i = nodes.length; while (i--) { if (nodes[i].lng_loaded) { continue; } els = nodes[i].querySelectorAll("[data-lng]"); l = els.length; while (l--) { string = _(els[l].dataset["lng"]); attrs = els[l].dataset["lngattr"]; if (attrs) { if (/^(title|placeholder)$/.test(attrs)) { els[l][attrs] = string; } els[l].removeAttribute("data-lngattr"); } else { browser.insertHTML(els[l], string); } els[l].removeAttribute("data-lng"); if (els[l].dataset["lngargs"]) { args = els[l].dataset["lngargs"].split(" "); args.idx = args.length; while (args.idx--) { args[args.idx] = args[args.idx].split(":"); args[args.idx][0] = "data-" + args[args.idx][0]; if (attrnode = els[l].querySelector("[" + args[args.idx][0] + "]")) { attrs = args[args.idx][1].split(","); attrs.idx = attrs.length; while (attrs.idx--) { if (!/^(href|style|target)$/i.test(attrs[attrs.idx])) { continue; } attrnode.setAttribute( attrs[attrs.idx], els[l].getAttribute(args[args.idx][0] + "-" + attrs[attrs.idx]) ); } } } els[l].removeAttribute("data-lngargs"); } } nodes[i].lng_loaded = true; } }; function color_trans(node, color, time) { clearTimeout(node.col_trans_timer); if (color === null) { node.style.color = ""; delete node.col_trans_timer; return; } node.style.color = color; node.col_trans_timer = setTimeout(function() { color_trans(node, null); }, time || 2000); } function fill_output(e) { e = e.target || e; var op = e.previousElementSibling; op.value = op.dataset["as_percent"] ? parseInt(e.value * 100, 10) : e.value; op.defaultValue = def_prefs[e.name]; } function color_text_input(e) { e = e.type === "input" ? this : e; var v = /^#([\da-f]{3}){1,2}$/i.test(e.value) ? e.value : "#ffffff"; e.previousElementSibling.value = v.length === 4 ? "#" + v[1] + v[1] + v[2] + v[2] + v[3] + v[3] : v; } function color_change() { this.nextElementSibling.value = this.value; } function setDefault(query) { if (!query) { return; } [].forEach.call(typeof query === "string" ? document.querySelectorAll(query) : [query], function(el) { if (el.type === "checkbox") { el.checked = el.defaultChecked; } else if (/^SELECT/i.test(el.type)) { for (var i = el.length; i--;) { if (el[i].hasAttribute("selected")) { el.selectedIndex = i; break; } } } else { el.value = el.defaultValue; if (el.type === "range") { fill_output(el); } } }); } function load(prefs) { var fields = document.querySelectorAll("[name]"), i = fields.length, m, fld, fld_type, pref; while (i--) { fld = fields[i]; pref = fld.name; if (fld.disabled || fld.readOnly || def_prefs[pref] === void 0) { continue; } fld_type = fld.getAttribute("type") || "text"; if (fld.type !== fld_type) { fld_type = fld.type; } if (fld_type === "checkbox") { fld.checked = fld.defChecked = !!(prefs[pref] === void 0 ? def_prefs : prefs)[pref]; fld.defaultChecked = def_prefs[pref]; } else { if (pref === "sendTo") { if (!Array.isArray(prefs[pref])) { prefs[pref] = def_prefs[pref]; } fld.rows = prefs[pref].length || 2; fld.defaultValue = def_prefs[pref].join("\n"); prefs[pref] = prefs[pref].join("\n"); } else if (fld_type.slice(0, 6) === "select") { [].some.call(fld, function(el) { if (el.value == def_prefs[pref]) { el.defaultSelected = true; return true; } }); } else { fld.defaultValue = def_prefs[pref]; } fld.value = fld.defValue = (prefs[pref] === void 0 ? def_prefs : prefs)[pref]; if (fld_type === "range") { m = fld.previousElementSibling; if (m && m.nodeName === "OUTPUT") { fill_output(fld); } m = m.previousElementSibling; if (m && m.getAttribute("type") === "color") { m.style.opacity = fld.value; } fld.addEventListener("change", fill_output, false); } else if (fld_type === "text" && fld.previousElementSibling && fld.previousElementSibling.getAttribute("type") === "color") { fld.addEventListener("input", color_text_input, false); color_text_input(fld); fld.previousElementSibling.addEventListener("change", color_change, false); } } } } function save() { var i, fld, fld_type, fields = document.querySelectorAll("[name]"), pref, prefs = {}; for (i = 0; i < fields.length; ++i) { fld = fields[i]; pref = fld.name; if (fld.disabled || fld.readOnly || def_prefs[pref] === void 0) { continue; } fld_type = fld.getAttribute("type"); if (fld_type === "checkbox") { prefs[pref] = fld.checked; } else if (fld_type === "range" || fld_type === "number" || fld.classList.contains("number")) { prefs[pref] = (fld.min ? Math.max(fld.min, Math.min(fld.max, parseFloat(fld.value))) : parseFloat(fld.value)); if (typeof prefs[pref] !== "number") { prefs[pref] = parseFloat(fld.defaultValue); } fld.value = prefs[pref]; } else { if (pref === "sendTo") { prefs[pref] = fld.value.trim().split(/[\r\n]+/).filter(Boolean); fld.rows = prefs[pref].length || 2; } else { prefs[pref] = fld.value; } } if (prefs[pref] === void 0) { prefs[pref] = def_prefs[pref]; } } Port.send({"cmd": "save", "prefs": prefs}); } window.onhashchange = function() { var section, args = [], menu = $("nav_menu"), old = menu && menu.active && menu.active.hash.slice(1) || "general", hash = location.hash.slice(1) || "general"; if (hash.indexOf("/") > -1) { args = hash.split("/"); hash = args.shift(); } section = $(hash + "_sec"); if (!section.lng_loaded) { if (hash === "info") { if (args[0]) { $(args[0] === "0" ? "app_installed" : "app_updated").style.display = "block"; } if (!_.locales) { _.locales = new XMLHttpRequest; _.locales.overrideMimeType("application/json;charset=utf-8"); _.locales.open("GET", "locales.jsn", false); _.locales.onload = args; _.locales.send(); _.locales = JSON.parse(_.locales.responseText); } var alpha2, td2, locales = []; var lng_map = function(el, idx) { el.name = ((el.name || el.fullname || "") + (el.fullname && el.name ? " (" + el.fullname + ")" : "")) || el.email || el.web; if (idx) { td2.nodes.push(", "); } td2.nodes.push(el.email || el.web ? {tag: "a", attrs: {href: el.email ? "mailto:" + el.email : el.web}, text: el.name} : el.name); }; for (alpha2 in _.locales) { if (alpha2 === "_") { continue; } td2 = {tag: "td"}; locales.push({tag: "tr", nodes: [ {tag: "td", attrs: _.locales[alpha2]['%'] ? {title: _.locales[alpha2]['%'] + '%'} : null, text: alpha2 + ", " + _.locales[alpha2].name}, td2 ]}); if (_.locales[alpha2].translators) { td2.nodes = []; _.locales[alpha2].translators.forEach(lng_map); } else { td2.text = "anonymous"; } } gen_nodes($("locales_table"), locales); } } if (old !== hash && (old = $(old + "_sec"))) { old.style.display = "none"; } if (section) { processLNG([section]); section.style.display = "block"; } if (menu.active) { menu.active.classList.remove("active"); } if (menu.active = menu.querySelector('a[href="#' + hash + '"]')) { menu.active.classList.add("active"); } }; window.addEventListener("load", function() { $("app_version").textContent = app.name + " v" + app.version; ["opera", "firefox", "chrome", "safari", "maxthon"].some(function(el) { if (browser[el]) { document.body.classList.add(el); return true; } return false; }); var menu = $("nav_menu"); processLNG([menu, $("right_panel").firstElementChild]); var tmp = document.body.querySelector('.color_helper>input[type="text"]'); if (tmp) { tmp.addEventListener("input", color_text_input, false); color_text_input(tmp); tmp.previousElementSibling.addEventListener("change", color_change, false); } menu.onclick = function(e) { if (e.target.hash) { e.preventDefault(); location.hash = e.target.hash; } }; window.onhashchange(); document.forms[0].addEventListener("keydown", function(e) { e.stopPropagation(); if (e.which === 13) { e.target.form_saved = true; } if (e.repeat || !e.target.name || e.target.name.indexOf("key_") !== 0 || e.ctrlKey || e.altKey || e.metaKey || e.which < 47) { return; } e.preventDefault(); color_trans(e.target, null); var keys = { 96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7", 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111: "/", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 112: "F1", 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12" }, key = keys[e.which] || String.fromCharCode(e.which).toUpperCase(); keys = document.body.querySelectorAll('input[name^="key_"]'); for (var i = 0; i < keys.length; ++i) { if (keys[i].value.toUpperCase() === key) { if (e.target !== keys[i]) { color_trans(e.target, "red"); } return false; } } e.target.value = key; document.forms[0].onchange(e); }, false); document.forms[0].addEventListener("contextmenu", function(e) { e.stopPropagation(); var t = e.target; if (t.classList.contains("checkbox")) { t = t.previousElementSibling; } if (!t.name) { return; } if (e.ctrlKey) { e.preventDefault(); setDefault(t); document.forms[0].onchange({target: t}); } }, false); // leave it callable document.forms[0].onchange = function(e) { if (e.stopPropagation) { e.stopPropagation(); } var defval, t = e.target; if (t.form_saved) { delete t.form_saved; } else if (t.parentNode.dataset["form"] || t.parentNode.parentNode.dataset["form"]) { defval = "default"; } else if (t.name.indexOf("_") > 0) { defval = "def"; } if (!defval) { return; } if ((t.type === "checkbox" && t[defval + "Checked"] !== t.checked) || (t.type !== "checkbox" && t[defval + "Value"] != t.value)) { // != is not a mistake input_changes[t.name] = true; } else { delete input_changes[t.name]; } $("save_button").style.color = Object.keys(input_changes).length ? "#e03c00" : ""; }; var reset_button = $("reset_button"); reset_button.reset = function() { delete reset_button.pending; reset_button.style.color = "#000"; }; reset_button.addEventListener("click", function(e) { if (reset_button.pending) { input_changes["form_reset"] = true; clearTimeout(reset_button.pending); delete this.pending; reset_button.style.color = ""; reset_button.nextElementSibling.style.color = "#e03c00"; if (e.ctrlKey) { e.preventDefault(); e = (location.hash || "#general") + "_sec "; setDefault(e + "input," + e + "select," + e + "textarea"); reset_button.style.color = "lime"; } else { reset_button.style.color = "green"; } reset_button.pending = setTimeout(reset_button.reset, 2000); return; } reset_button.style.color = "orange"; reset_button.pending = setTimeout(reset_button.reset, 2000); e.preventDefault(); }, false); $("save_button").addEventListener("click", function(e) { e.preventDefault(); save(); color_trans(this, "green"); }, false); [].forEach.call(document.body.querySelectorAll(".action_buttons") || [], function(el) { el.onmousedown = function(e) { e.preventDefault(); }; }); Port.listen(function(e) { Port.listen(null); var xhr = new XMLHttpRequest; xhr.overrideMimeType("application/json;charset=utf-8"); xhr.open("GET", "defaults.jsn", true); xhr.onload = function() { def_prefs = JSON.parse(this.responseText); load(e && (e.data || e).cfg); document.body.style.display = "block"; }; xhr.send(); }); Port.send({"cmd": "load_prefs"}); }, false);; @language cs, Czech (Ä�eÅ¡tina) (100%) ; @translators jaramat (Jaroslav Matura) [lang] APP_DESCRIPTION=VylepÅ¡uje práci s obrázky a videi ve vaÅ¡em prohlížeÄ�i. NAV_GENERAL=Obecné NAV_INFO=O doplňku SHORTCUTS=Klávesové zkratky PH_CLICKFORSAMPLE=kliknutím zobrazíte příklady... DISABLED=zakázáno BUTTON_RESET=Výchozí nastavení BUTTON_SAVE=Uložit VW_MODE=Výchozí pÅ™iblížení VW_MODE_NATURL=původní velikost VW_MODE_AUTOFIT=pÅ™izpůsobit automaticky VW_MODE_FITWIDTH=roztáhnout na šířku VW_MODE_FITHEIGHT=roztáhnout na výšku VW_MODE_BESTFIT=roztáhnout automaticky VW_MINUPSCALE=ZvÄ›tÅ¡it malé obrázky VW_MINUPSCALE_TIP="Ve výchozím nastavení nebudou malé obrázky automaticky zvÄ›tÅ¡ovány. PÅ™eje-li si to, použijte tuto volbu.\nObrázky, které jsou vÄ›tší než daný poÄ�et procent šířky nebo výšky okna prohlížeÄ�e (záleží na pÅ™edchozí volbÄ›) budou automaticky roztaženy." VW_IMGINFO=Vlastnosti obrázku VW_IMGINFO_TIP="V titulku stránky (v panelu prohlížeÄ�e) lze zobrazit tyto vlastnosti obrázku:\n%ow - původní šířka obrázku\n%oh - původní výška obrázku\n%ratio - pomÄ›r stran (šířka / výška)\n%w - souÄ�asná šířka\n%h - souÄ�asná výška\n%perc - procento zvÄ›tÅ¡ení\n%url - úplná URL adresa\n%name - název souboru" VW_FAVICON=Vlastní ikona VW_FAVICON_TIP="Toto vám umožňuje nastavit vlastní ikonu, která se zobrazí vedle názvu panelu v prohlížeÄ�i.\nChcete-li jako ikonu použít obrázek samotný, použijte promÄ›nnou %url." VW_WHEELZOOM=Použít koleÄ�ko myÅ¡i jako lupu VW_LPDELAY=Prodleva dlouhého stisku VW_LPLEFT=Akce pÅ™i dlouhém stisku levého tlaÄ�ítka myÅ¡i VW_LPRIGHT=Akce pÅ™i dlouhém stisku pravého tlaÄ�ítka myÅ¡i VW_LPA_FITWH=roztáhnout na výšku/šířku VW_SC_CYCLE=PÅ™epínat mezi režimy zvÄ›tÅ¡ení: původní velikost, roztáhnout na šířku a roztáhnout na výšku VW_SC_DRAGNDROP=Držte Ctrl nebo Alt nebo zaÄ�nÄ›te v pravé Ä�ásti obrázku, chcete-li obrázek pÅ™etáhnout jinam (napÅ™. mimo okno prohlížeÄ�e) VW_SC_RESET=Esc obnoví obrázek do původního stavu (pokud byl napÅ™. zvÄ›tÅ¡en, otoÄ�en nebo pÅ™evrácen) nebo ukonÄ�í režim ruÄ�ního zvÄ›tÅ¡ení VW_SC_FREEZOOM=Shift + výbÄ›r myší pro vyvolání režimu ruÄ�ního zvÄ›tÅ¡ení (pro posunutí výbÄ›ru držte Ctrl) SC_ZOOMINOUT=PÅ™iblížit / oddálit SC_FLIPH=PÅ™eklopit vodorovnÄ› SC_FLIPV=PÅ™eklopit svisle SC_ROTL=OtoÄ�it vlevo SC_ROTR=OtoÄ�it vpravo SC_MORIG=SkuteÄ�ná velikost SC_MFIT=Automaticky SC_MFITW=Roztáhnout na šířku SC_MFITH=Roztáhnout na výšku LANGUAGE=Jazyk TRANSLATIONS=PÅ™eklady TRANSLATIONS_TIP=Chcete-li se stát pÅ™ekladatelem, poÅ¡lete e-mail na tuto adresu a uveÄ�te jazyky, kterými mluvíte. TRANSLATORS=PÅ™ekladatelé VW_CENTER=Zarovnat na stÅ™ed CUSTOM_CSS=Vlastní styl (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* ZmÄ›ní pozadí stránky a obrázku (je-li průhledný). Lze použít vÅ¡echny platné CSS hodnoty (color, url(), gradient...). */\n overflow: hidden; /* Skryje posuvníky. */\n}\n\nimg {\n background: #eef; /* Pozadí obrázku, je-li průhledný. */\n border: 10px solid white; /* Rám obrázku. */\n box-shadow: 0 0 10px grey; /* Stín pod obrázkem. */\n cursor: default !important; /* Vynutí výchozí kurzor (tzn. nezmÄ›ní se na ruÄ�iÄ�ku Ä�i lupu). */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Barva krytí v režimu ruÄ�ního zvÄ›tÅ¡ení. */\n}\n\n#menu {\n display: none; /* Vypne zobrazování postranního panelu v levém horní rohu. */\n}\n" VW_SC_HORIZONTALSCROLL=Pro vodorovné posouvání obrázku koleÄ�kem myÅ¡i pÅ™esuňte kurzor do levé dolní Ä�ásti obrázku CUSTOM_CSS_PH="Zde můžete zmÄ›nit barvu pozadí stránky nebo obrázku, rám, stín, chování posuvníků, skrýt postranní panel...\nPro zobrazení příkladů pÅ™ejeÄ�te kurzorem pÅ™es otazník vlevo. PÅ™esné kódy barev získáte pomocí tlaÄ�ítka pro výbÄ›r barev výše." VW_SC_FLOATMENU=PÅ™esunutím kurzoru do levého horního rohu stránky vyvoláte postranní panel OPENER=Otevřít obrázek ze stránky OP_RIGHTLONG=dlouhý stisk pravého tlaÄ�ítka OP_CTRLALTCLICK=Ctrl + Alt + pravé tlaÄ�ítko OP_BOTH=obojí VW_VIDEO=Povolit pro videa VW_VIDATTRS=Vlastnosti videa VW_VIDATTRS_TIP="Lze použít tyto atributy:\nautoplay - pÅ™ehrát video automaticky\nloop - pÅ™ehrávat dokola\ncontrols - zobrazit ovládací prvky\nmuted - vypnout zvuk\nvolume=0-100 - výchozí hlasitost (v procentech)" SENDTO=Odeslat obrázek do... ; @language el, Greek (Ελληνικά) (66.67%) ; @translators Farow [lang] APP_DESCRIPTION=Additional functionality for the browser's default image and video viewer. NAV_GENERAL=General NAV_INFO=ΠληÏ�οφοÏ�ίες SHORTCUTS=ΣυντομεÏ�σεις PH_CLICKFORSAMPLE=click for examples... DISABLED=απενεÏ�γοποιημένο BUTTON_RESET=ΕπαναφοÏ�ά BUTTON_SAVE=Αποθήκευση VW_MODE=ΑÏ�χικό μεγέθος VW_MODE_NATURL=φυσικό μέγεθος VW_MODE_AUTOFIT=αυτόματη Ï€Ï�οσαÏ�μογή VW_MODE_FITWIDTH=Ï€Ï�οσαÏ�μογή στο πλάτος VW_MODE_FITHEIGHT=Ï€Ï�οσαÏ�μογή στο Ï�ψος VW_MODE_BESTFIT=βέλτιστη Ï€Ï�οσαÏ�μογή VW_MINUPSCALE=Μεγέθυνση μικÏ�ών εικόνων VW_MINUPSCALE_TIP="ΜικÏ�ές εικόνες δεν μεγεθÏ�νονται. Αυτή η επιλογή τις αναγκάζει να μεγεθυνθοÏ�ν.\nΗ τιμή είναι σε ποσοστό και μεγεθÏ�νει τις εικόνες που είναι μεγαλÏ�τεÏ�ες από το επιλεγμένο ποσοστό του Ï�ψους ή του πλάτους της οθόνης." VW_IMGINFO=ΠληÏ�οφοÏ�ίες εικόνας VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=ΠÏ�οσαÏ�μοσμένο εικονίδιο VW_FAVICON_TIP="Η επιλογή αυτή οÏ�ίζει ένα εικονίδιο καÏ�τέλας για την ανοιγμένη εικόνα.\nΗ διεÏ�θυνση της εικόνας μποÏ�εί να χÏ�ησιμοποιηθεί και ως μια μεταβλητή: %url" VW_WHEELZOOM=ΜεγεÏ�θυνση με τη Ï�οδέλα του ποντικιοÏ� VW_LPDELAY=ΚαθυστέÏ�ιση παÏ�ατετημένου πατήματος (ms) VW_LPLEFT=ΛειτουÏ�γία παÏ�ατετημένου πατήματος αÏ�ιστεÏ�οÏ� κουμπιοÏ� VW_LPRIGHT=ΛειτουÏ�γία παÏ�ατετημένου πατήματος δεξιοÏ� κουμπιοÏ� VW_LPA_FITWH=Ï€Ï�οσαÏ�μογή στο πλάτος/Ï�ψος VW_SC_CYCLE=Εναλαγή μεταξÏ� μεγεθών: φυσικό, Ï€Ï�οσαÏ�μογή στο πλάτος, Ï€Ï�οσαÏ�μογή στο Ï�ψος VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=To Esc θα επαναφέÏ�ει την εικόνα στην αÏ�χική της μοÏ�φή ή θα κλείσει την ελεÏ�θεÏ�η μεγέθυνση VW_SC_FREEZOOM=Shift + μεταφοÏ�ά στην εικόνα για ελεÏ�θεÏ�η μεγέθυνση, κÏ�ατήστε το Ctrl για να μετακινήσετε την επιλογή SC_ZOOMINOUT=Zoom in / out SC_FLIPH=ΟÏ�ιζόντια αναστÏ�οφή SC_FLIPV=Κάθετη αναστÏ�οφή SC_ROTL=ΠεÏ�ιστÏ�οφή αÏ�ιστεÏ�ά SC_ROTR=ΠεÏ�ιστÏ�οφή δεξιά SC_MORIG=Φυσικό μέγεθος SC_MFIT=Αυτόματη Ï€Ï�οσαÏ�μογή SC_MFITW=ΠÏ�οσÏ�μογή στο πλάτος SC_MFITH=ΠÏ�οσÏ�μογή στο Ï�ψος LANGUAGE=Γλώσσα TRANSLATIONS=ΜεταφÏ�άσεις TRANSLATIONS_TIP=Εάν θέλεις να γίνεις μεταφÏ�αστής, τότε στείλε ένα e-mail σε αυτή τη διεÏ�θυνση αναφέÏ�οντας τις γλώσσες ομιλείτε. TRANSLATORS=ΜεταφÏ�αστές VW_CENTER=Center content CUSTOM_CSS=ΠÏ�οσαÏ�μοσμένο στυλ CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Move the cursor to the top left edge of the page to show the menu OPENER=Open images from regular web-pages OP_RIGHTLONG=right long-press OP_CTRLALTCLICK=Ctrl + Alt + right click OP_BOTH=both VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=Αποστολή εικόνας Ï€Ï�ος... ; @language en, English (100%) ; @translators Deathamns [lang] APP_DESCRIPTION=Additional functionality for the browser's default image and video viewer. NAV_GENERAL=General NAV_INFO=Info SHORTCUTS=Shortcuts PH_CLICKFORSAMPLE=click for examples... DISABLED=disabled BUTTON_RESET=Default BUTTON_SAVE=Save VW_MODE=Initial sizing mode VW_MODE_NATURL=natural size VW_MODE_AUTOFIT=contain VW_MODE_FITWIDTH=fit to width VW_MODE_FITHEIGHT=fit to height VW_MODE_BESTFIT=best fit VW_MINUPSCALE=Enlarge small images VW_MINUPSCALE_TIP="Normally, smaller images won't be upscaled to the view-port. This option forces them to do so.\nThe value is given in percent, and tells the script to enlarge those images that are larger than the given percent of view-port's width or height (it depends on the previous option)." VW_IMGINFO=Image informations VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=Custom favicon VW_FAVICON_TIP="This option allows to set a custom tab-icon for the opened image.\nThe address of the image can be used as a variable: %url" VW_WHEELZOOM=Zoom with mouse wheel VW_LPDELAY=Long-press delay (ms) VW_LPLEFT=Left long-press action VW_LPRIGHT=Right long-press action VW_LPA_FITWH=fit to width/height VW_SC_CYCLE=Cycle through sizing modes: natural, fit to width, fit to height VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=Esc will reset the image to its original form, or quits from free-zoom VW_SC_FREEZOOM=Shift + drag on the image to use free-zoom, hold Ctrl to move the selection SC_ZOOMINOUT=Zoom in / out SC_FLIPH=Flip horizontal SC_FLIPV=Flip vertical SC_ROTL=Rotate left SC_ROTR=Rotate right SC_MORIG=Natural size SC_MFIT=Auto fit SC_MFITW=Fit to width SC_MFITH=Fit to height LANGUAGE=Language TRANSLATIONS=Translations TRANSLATIONS_TIP=If you want to become a translator, then send an e-mail to this address mentioning your spoken languages. TRANSLATORS=Translators VW_CENTER=Center content CUSTOM_CSS=Custom style (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Move the cursor to the top left edge of the page to show the menu OPENER=Open images from regular web-pages OP_RIGHTLONG=right long-press OP_CTRLALTCLICK=Ctrl + Alt + right click OP_BOTH=both VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=Send image to... ; @language es, Spanish (español) (84.21%) ; @translators DurianZheitk (JavierVH) [lang] APP_DESCRIPTION=Funciones adicionales para el visor de imágenes y vídeo del navegador. NAV_GENERAL=General NAV_INFO=Información SHORTCUTS=Atajos PH_CLICKFORSAMPLE=haz clic para mostrar ejemplos... DISABLED=deshabilitado BUTTON_RESET=Predeterminado BUTTON_SAVE=Guardar VW_MODE=Modo inicial de escalado VW_MODE_NATURL=tamaño original VW_MODE_AUTOFIT=ajustar VW_MODE_FITWIDTH=ajustar solo a lo ancho VW_MODE_FITHEIGHT=ajustar solo a lo alto VW_MODE_BESTFIT=mejor ajuste VW_MINUPSCALE=Ampliar imágenes pequeñas VW_MINUPSCALE_TIP="Por defecto, las imágenes pequeñas no serán ampliadas para encajar en la ventana de visualización. Esta opción las fuerza a hacerlo.\nEl valor esta dado en porcentaje, e indica a la extensión que amplié las imágenes que sean mayores al porcentaje en anchura o altura de la ventana de visualización (esto depende de la opción anterior).\n Ejemplo: si el valor esta fijado en 20%, y una imagen ocupa el 30% de la ventana de visualización, será ampliada de acuerdo a la opción anterior (Modo inicial de escalado)." VW_IMGINFO=Información de la imagen VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=Icono personalizado VW_FAVICON_TIP="Esta opción permite establecer un favicono personalizado para las pestañas con imágenes abiertas.\nLa dirección de la imagen puede ser usada como variable: %url" VW_WHEELZOOM=Ampliar (zoom) con la rueda del ratón VW_LPDELAY=Retraso para activar una pulsación larga (ms) VW_LPLEFT=Acción para una pulsación larga con el botón izquierdo VW_LPRIGHT=Acción para una pulsación larga con el botón derecho VW_LPA_FITWH=ajustar a la anchura/altura VW_SC_CYCLE=Cambiar entre los modos de escalado: tamaño original, ajustar a la anchura, ajustar a la altura VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=Esc devolverá la imagen a su forma original, o saldrá del modo de ampliación de selección VW_SC_FREEZOOM=Shift + arrastrar sobre la imagen para usar el modo de ampliación de selección, mantén presionado Ctrl (sin soltar Shift) para mover la selección SC_ZOOMINOUT=Acercar/alejar la imagen SC_FLIPH=Voltear horizontalmente SC_FLIPV=Voltear verticalmente SC_ROTL=Girar a la izquierda SC_ROTR=Girar a la derecha SC_MORIG=Tamaño original SC_MFIT=Ajuste automático SC_MFITW=Ajustar a lo ancho SC_MFITH=Ajustar a lo alto LANGUAGE=Idioma TRANSLATIONS=Traducciones TRANSLATIONS_TIP=Si quieres ayudar en la traducción la extensión, envía un e-mail a esta dirección mencionando los idiomas que dominas. TRANSLATORS=Traductores VW_CENTER=Centrar el contenido CUSTOM_CSS=Estilo personalizado (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Mueve el cursor a la esquina superior izquierda de la pantalla para mostrar el menú OPENER=Abrir imágenes desde páginas web OP_RIGHTLONG=una pulsación larga con el botón derecho OP_CTRLALTCLICK=Ctrl + Alt + clic derecho OP_BOTH=ambas VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=Enviar imagen a... ; @language fi, Finnish (suomi) (61.4%) ; @translators Opeeera [lang] APP_DESCRIPTION=Additional functionality for the browser's default image and video viewer. NAV_GENERAL=General NAV_INFO=Tietoja SHORTCUTS=Näppäinoikotiet PH_CLICKFORSAMPLE=klikkaa nähdäksesi esimerkkejä... DISABLED=poissa käytöstä BUTTON_RESET=Palauta oletukset BUTTON_SAVE=Tallenna VW_MODE=Oletuskoko VW_MODE_NATURL=luonnollinen koko VW_MODE_AUTOFIT=automaattinen sovitus VW_MODE_FITWIDTH=sovita leveyteen VW_MODE_FITHEIGHT=sovita korkeuteen VW_MODE_BESTFIT=paras sovitus VW_MINUPSCALE=Suurenna pieniä kuvia (%) VW_MINUPSCALE_TIP="Tavallisesti pieniä kuvia ei skaalata näkymäalueeseen, mutta tämä asetus pakottaa sen päälle.\nArvo annetaan prosentteina, ja se saa skriptin suurentamaan kuvia, jotka ovat suurempia kuin annettu prosenttiosuus näkymäalueen leveydestä tai korkeudesta (riippuen edellisestä asetuksesta)." VW_IMGINFO=Kuvan tiedot VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=Oma kuvake VW_FAVICON_TIP="This option allows to set a custom tab-icon for the opened image.\nThe address of the image can be used as a variable: %url" VW_WHEELZOOM=Suurennus hiiren rullalla VW_LPDELAY=Pitkän hiiren painalluksen viive (ms) VW_LPLEFT=Ykköspainikkeen pitkän painalluksen toiminto VW_LPRIGHT=Kakkospainikkeen pitkän painalluksen toiminto VW_LPA_FITWH=sovita leveyteen tai korkeuteen VW_SC_CYCLE=Siirry suurennustilojen välillä: luonnollinen koko, sovita leveyteen, sovita korkeuteen VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=Esc palauttaa kuvan alkuperäiseen tilaan tai poistuu FreeZoom-tilasta VW_SC_FREEZOOM=Pidä Vaihtoa pohjassa ja vedä kuvan päällä käyttääksesi FreeZoomia, pidä Ctrl:ia pohjassa siirtääksesi valittua aluetta SC_ZOOMINOUT=Suurenna / pienennä SC_FLIPH=Käännä pystysuunnassa SC_FLIPV=Käännä vaakasuunnassa SC_ROTL=Kierrä vasemmalle SC_ROTR=Kierrä oikealle SC_MORIG=Luonnollinen koko SC_MFIT=Automaattinen sovitus SC_MFITW=Sovita leveyteen SC_MFITH=Sovita korkeuteen LANGUAGE=Kieli TRANSLATIONS=Translations TRANSLATIONS_TIP=If you want to become a translator, then send an e-mail to this address mentioning your spoken languages. TRANSLATORS=Translators VW_CENTER=Center content CUSTOM_CSS=Custom style (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Move the cursor to the top left edge of the page to show the menu OPENER=Open images from regular web-pages OP_RIGHTLONG=right long-press OP_CTRLALTCLICK=Ctrl + Alt + right click OP_BOTH=both VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=Lähetä kuvan osoite... ; @language fr, French (français) (70.18%) ; @translators Tmnath [lang] APP_DESCRIPTION=Additional functionality for the browser's default image and video viewer. NAV_GENERAL=General NAV_INFO=Infos SHORTCUTS=Raccourcis PH_CLICKFORSAMPLE=cliquez pour avoir un exemple... DISABLED=désactivé BUTTON_RESET=Par défaut BUTTON_SAVE=Sauvegarder VW_MODE=Redimensionnement VW_MODE_NATURL=taille initiale VW_MODE_AUTOFIT=réduire VW_MODE_FITWIDTH=adapter à la largeur VW_MODE_FITHEIGHT=adapter à la hauteur VW_MODE_BESTFIT=taille optimale VW_MINUPSCALE=Agrandir les petites images VW_MINUPSCALE_TIP="En temps normal, les petites images ne sont pas élargies à la taille de la fenêtre. Cette option les y force.\nLa valeur est un pourcentage, et indique au script d'élargir les images plus grandes qu'un certain pourcentage de la hauteur ou de la largeur de la fenêtre (en fonction de l'option choisie précédemment)." VW_IMGINFO=Détails de l'image VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=Favicon personnalisé VW_FAVICON_TIP="Cette option permet de choisir un icône personnalisé pour l'onglet de l'image ouverte.\nL'adresse de l'image peut être utilisée comme une variable : %url" VW_WHEELZOOM=Zoomer avec la molette VW_LPDELAY=Durée du clic prolongé (ms) VW_LPLEFT=Clic gauche prolongé VW_LPRIGHT=Clic droit prolongé VW_LPA_FITWH=adapter à la largeur/hauteur VW_SC_CYCLE=Faire défiler les différents modes : taille initiale, adapter à la largeur, adapter à la hauteur VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=Échap ramènera l'image à sa taille initiale, ou sortira du zoom libre VW_SC_FREEZOOM=Maj + glisser sur l'image pour utiliser le zoom libre, maintenir Ctrl pour déplacer la sélection SC_ZOOMINOUT=Zoom avant / arrière SC_FLIPH=Inverser horizontalement SC_FLIPV=Inverser verticalement SC_ROTL=Rotation vers la gauche SC_ROTR=Rotation vers la droite SC_MORIG=Taille initiale SC_MFIT=Redimensionnement automatique SC_MFITW=Adapter à la largeur SC_MFITH=Adapter à la hauteur LANGUAGE=Langue TRANSLATIONS=Traductions TRANSLATIONS_TIP=Si vous souhaitez devenir un traducteur, envoyez-moi un mail à cette adresse en indiquant les langues que vous parlez. TRANSLATORS=Traducteurs VW_CENTER=Center content CUSTOM_CSS=Style personnalisé (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Move the cursor to the top left edge of the page to show the menu OPENER=Open images from regular web-pages OP_RIGHTLONG=right long-press OP_CTRLALTCLICK=Ctrl + Alt + right click OP_BOTH=both VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=Envoyer l'image vers... ; @language hu, Hungarian (magyar) (100%) ; @translators Deathamns [lang] APP_DESCRIPTION=A beépített kép- illetve videónézÅ‘ funkcióit bÅ‘víti. NAV_GENERAL=Beállítások NAV_INFO=Infó SHORTCUTS=Billentyűparancsok PH_CLICKFORSAMPLE=kattints példákért... DISABLED=kikapcsolva BUTTON_RESET=Alap BUTTON_SAVE=Mentés VW_MODE=Alap méretezés VW_MODE_NATURL=eredeti méret VW_MODE_AUTOFIT=ablakhoz méretez VW_MODE_FITWIDTH=szélességhez méretez VW_MODE_FITHEIGHT=magassághoz méretez VW_MODE_BESTFIT=illeszkedés az ablakhoz VW_MINUPSCALE=Kis képek nagyítása VW_MINUPSCALE_TIP="A kisebb képek alapból nem méretezÅ‘dnek az ablakhoz. Ez a beállítás az ellenkezÅ‘jére kényszeríti Å‘ket.\nAzok a képek méretezÅ‘dnek fel, amelyek méretei nagyobbak, mint a százalékban megadott ablak szélessége vagy magassága (az elÅ‘zÅ‘ beállítástól függ)." VW_IMGINFO=Képinformációk VW_IMGINFO_TIP="Egyéni adatok megjelenítése a fül címében, a következÅ‘ változók felhaszanálásával:\n%ow - eredeti szélesség\n%oh - eredeti magasság\n%ratio - jelenlegi szélesség és magasság aránya\n%w - jelenlegi szélesség\n%h - jelenlegi magasság\n%perc - átméretezés százalékban\n%url - teljes cím\n%name - fájl neve" VW_FAVICON=Egyéni ikon a fülön VW_FAVICON_TIP=A kép címe használható változóként a megadott értékben: %url VW_WHEELZOOM=Nagyítás görgetéssel VW_LPDELAY=Egérgomb hosszan-tartás ideje (ms) VW_LPLEFT=Bal hosszan-tartás funkciója VW_LPRIGHT=Jobb hosszan-tartás funkciója VW_LPA_FITWH=szélességhez/magassághoz méretez VW_SC_CYCLE=Méretezések közti váltás: eredeti, szélességhez-, magassághoz méretez VW_SC_DRAGNDROP=Ctrl vagy Alt nyomva-tartásával vonszolható a kép, vagy ha belefér a nézetablakba, akkor a jobb szélénél fogva VW_SC_RESET=Esc a képet az eredeti állapotára állítja, vagy kilép a szabad méretezésbÅ‘l VW_SC_FREEZOOM=Shift + vonszolás nagyít a kijelölt részre, Ctrl tartásával a kijelölés mozgatható SC_ZOOMINOUT=Nagyítás / kicsinyítés SC_FLIPH=Vízszintes tükrözés SC_FLIPV=FüggÅ‘leges tükrözés SC_ROTL=Forgatás jobbra SC_ROTR=Forgatás balra SC_MORIG=Eredeti méret SC_MFIT=Ablakhoz méretez SC_MFITW=Szélességhez méretez SC_MFITH=Magassághoz méretez LANGUAGE=Nyelv TRANSLATIONS=Fordítások TRANSLATIONS_TIP=Ha szeretnél fordító lenni, ezen az e-mail címen lehet jelentkezni, az általad beszélt nyelvek megemlítésével. TRANSLATORS=Fordítók VW_CENTER=Tartalom középre helyezése CUSTOM_CSS=Egyedi stílus (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Bármilyen elfogadott background érték (szín, url(), színátmenet...). */\n overflow: hidden; /* Elrejti a görgÅ‘sávot. \"hidden\" változtatása \"auto\"-ra a megjelenítésükhöz. */\n}\n\nimg {\n background: #eef; /* Más háttér kizárólag a képnek. */\n border: 10px solid white; /* Egyéni képkeret. */\n box-shadow: 0 0 10px grey; /* Kép körüli árnyék. */\n cursor: default !important; /* Az egérkurzor változatlan marad ezzel az értékkel. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* A szabad méretezés mask színe. */\n}\n\n#menu {\n display: none; /* A lebegÅ‘ menü elrejtése. */\n}\n" VW_SC_HORIZONTALSCROLL=A kép vízszintes mozgatása az oldal bal also élén való görgetéssel lehetséges. CUSTOM_CSS_PH="Itt lehetseéges a háttér színének, kép keretének/árnyékának, stb. beállítása, illetve a görgÅ‘sávok és a lebegÅ‘ menü elrejtése. \nPéldákért vidd az egérkurzort a kérdÅ‘jel fölé, a színkódokhoz pedig használd a fenti színválasztót." VW_SC_FLOATMENU=A menü megjelenítéséhez mozgasd az egérkurzort az oldal bel felsÅ‘ szélére OPENER=Képek megnyitása normál web-oldalkról OP_RIGHTLONG=jobb klikk hosszan-tartva OP_CTRLALTCLICK=Ctrl + Alt + jobb klikk OP_BOTH=mindkettÅ‘ VW_VIDEO=Aktív videofájlokon is VW_VIDATTRS=Videó attribútumok VW_VIDATTRS_TIP="Használható attribútumok\nautoplay - automatikus indítás\nloop - lejátszás ismétlése\ncontrols - lejátszógombok megjelenítése\nmuted - hang némítása\nvolume=0-100 - alapértelmezett hangerÅ‘ (százalék)" SENDTO=Kép küldése... ; @language nl, Dutch (Nederlands) (70.18%) ; @translators Kaçkar [lang] APP_DESCRIPTION=Additional functionality for the browser's default image and video viewer. NAV_GENERAL=General NAV_INFO=Info SHORTCUTS=Snelkoppelingen PH_CLICKFORSAMPLE=klikken voor voorbeelden... DISABLED=uit BUTTON_RESET=Reset BUTTON_SAVE=Opslaan VW_MODE=Oorspronkelijke pas-modus VW_MODE_NATURL=natuurlijk formaat VW_MODE_AUTOFIT=bevatten VW_MODE_FITWIDTH=breedte passend maken VW_MODE_FITHEIGHT=hoogte passend maken VW_MODE_BESTFIT=best afstemmen VW_MINUPSCALE=Kleine afbeeldingen vergroten VW_MINUPSCALE_TIP="Normaal gesproken worden kleinere afbeeldingen niet vergroot. Deze optie dwingt afbeeldingen te vergroten.\nDe waarde is in procenten, en vertelt het script om afbeeldingen die groter zijn de gegeven procenten van de breedte of hoogte van de kijker te vergroten (afhankelijk van de vorige optie)." VW_IMGINFO=Afbeeldings informatie VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=Aangepaste favicon VW_FAVICON_TIP="Deze optie maakt het mogelijk om een aangepaste tab-icoon te gebruiken voor de geopende afbeelding.\nHet adres van de afbeelding kan gebruikt worden als variabele: %url" VW_WHEELZOOM=Zoomen met muiswiel VW_LPDELAY=Lange druk vertraging (ms) VW_LPLEFT=Linker lange druk aktie VW_LPRIGHT=Rechter lange druk aktie VW_LPA_FITWH=breedte/hoogte passend maken VW_SC_CYCLE=Door sizing modi wisselen: normaal, breedte passend maken, hoogte passend maken VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=Esc herstelt de afbeelding naar origineel formaat, of verlaat de vrije-zoom VW_SC_FREEZOOM=Shift + Sleep de afbeelding om free-zoom te gebruiken, Ctrl ingedrukt houden om de selectie te verplaatsen SC_ZOOMINOUT=In-/uitzoomen SC_FLIPH=Horizontaal omdraaien SC_FLIPV=Verticaal omdraaien SC_ROTL=Links roteren SC_ROTR=Rechts roteren SC_MORIG=Normale grootte SC_MFIT=Automatisch passen SC_MFITW=Breedte passend maken SC_MFITH=Hoogte passend maken LANGUAGE=Taal TRANSLATIONS=Vertalingen TRANSLATIONS_TIP=Wil je een vertaler worden, stuur dan een e-mail naar dit adres, vermeld je gesproken talen TRANSLATORS=Vertalers VW_CENTER=Center content CUSTOM_CSS=Aangepaste stijl (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Move the cursor to the top left edge of the page to show the menu OPENER=Open images from regular web-pages OP_RIGHTLONG=right long-press OP_CTRLALTCLICK=Ctrl + Alt + right click OP_BOTH=both VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=Afbeelding sturen naar... ; @language pl, Polish (polski) (70.18%) ; @translators pafflick (PaweÅ‚ Pawlak) [http://www.pafflick.com/] [lang] APP_DESCRIPTION=Additional functionality for the browser's default image and video viewer. NAV_GENERAL=General NAV_INFO=Info SHORTCUTS=Skróty PH_CLICKFORSAMPLE=kliknij, by zobaczyć przykÅ‚ady... DISABLED=brak BUTTON_RESET=Resetuj BUTTON_SAVE=Zapisz VW_MODE=Skalowanie obrazów VW_MODE_NATURL=rzeczywisty wymiar VW_MODE_AUTOFIT=zmieść na ekranie VW_MODE_FITWIDTH=dopasuj do szerokoÅ›ci VW_MODE_FITHEIGHT=dopasuj do wysokoÅ›ci VW_MODE_BESTFIT=automatyczne dopasowanie VW_MINUPSCALE=PowiÄ™kszanie maÅ‚ych obrazków VW_MINUPSCALE_TIP="DomyÅ›lnie maÅ‚e obrazki nie sÄ… powiÄ™kszane do rozmiarów okna. Ta funkcja wymusza ich skalowanie.\nFunkcja ta powoduje powiÄ™kszenie tych obrazków, których wymiary przekraczajÄ… okreÅ›lony procent wysokoÅ›ci lub szerokoÅ›ci okna (w zależnoÅ›ci od ustawieÅ„ poprzedniej funkcji)." VW_IMGINFO=Informacje o obrazku VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=WÅ‚asna ikona pliku VW_FAVICON_TIP="Zmienia ikonÄ™ pliku w pasku tytuÅ‚u (domyÅ›lnie przeglÄ…darka używa obrazka jako ikony).\nAdres obrazka można wprowadzić za pomocÄ… zmiennej: %url" VW_WHEELZOOM=PowiÄ™kszaj za pomocÄ… kółka myszki VW_LPDELAY=Opóźnienie dÅ‚ugiego przytrzymania (ms) VW_LPLEFT=Funkcja dla przytrzymania lewego przycisku VW_LPRIGHT=Funkcja dla przytrzymania prawego przycisku VW_LPA_FITWH=zmieść w oknie VW_SC_CYCLE=Przełącza tryby powiÄ™kszenia: rzeczywiste wymiary, zmieść w poziomie, zmieść w pionie VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=Esc przywraca domyÅ›lne ustawienia obrazka lub opuszcza tryb powiÄ™kszania wybranego obszaru VW_SC_FREEZOOM=PrzeciÄ…gnij z Shiftem na obrazku, by aktywować powiÄ™kszanie obszarowe. Przytrzymaj Ctrl aby przesunąć zaznaczenie SC_ZOOMINOUT=PowiÄ™ksz / Pomniejsz SC_FLIPH=Odbij w poziomie SC_FLIPV=Odbij w pionie SC_ROTL=Obróć w lewo SC_ROTR=Obróć w prawo SC_MORIG=Rzeczywisty wymiar SC_MFIT=Auto dopasowanie SC_MFITW=Dopasuj do szerokoÅ›ci SC_MFITH=Dopasuj do wysokoÅ›ci LANGUAGE=JÄ™zyk TRANSLATIONS=TÅ‚umaczenia TRANSLATIONS_TIP=Jeżeli chcesz przetÅ‚umaczyć tÄ™ wtyczkÄ™ na inny jÄ™zyk, wyÅ›lij e-mail na ten adres z informacjÄ… o jÄ™zyku którym siÄ™ posÅ‚ugujesz. TRANSLATORS=TÅ‚umacze VW_CENTER=Center content CUSTOM_CSS=WÅ‚asne style (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Move the cursor to the top left edge of the page to show the menu OPENER=Open images from regular web-pages OP_RIGHTLONG=right long-press OP_CTRLALTCLICK=Ctrl + Alt + right click OP_BOTH=both VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=WyÅ›lij obrazek do... ; @language pt-BR, Portuguese (Brazil) (português (Brasil)) (70.18%) ; @translators Rômulo Godoi [lang] APP_DESCRIPTION=Additional functionality for the browser's default image and video viewer. NAV_GENERAL=General NAV_INFO=Dados SHORTCUTS=Atalhos do teclado PH_CLICKFORSAMPLE=clique para ver exemplos... DISABLED=desativado BUTTON_RESET=Padrão BUTTON_SAVE=Salvar VW_MODE=Tamanho de exibição VW_MODE_NATURL=tamanho original VW_MODE_AUTOFIT=redimensionar à tela VW_MODE_FITWIDTH=redimensionar à largura VW_MODE_FITHEIGHT=redimensionar à altura VW_MODE_BESTFIT=redimensionar da melhor forma VW_MINUPSCALE=Aumentar imagens pequenas VW_MINUPSCALE_TIP="Geralmente imagens pequenas não são exibidas em grande parte da tela. Esta função força que elas sejam.\nO valor é dado em porcentagem, e informa ao script para deixa-las de acordo com os dados de altura e largura fornecidos (isso depende das opções selecionadas)." VW_IMGINFO=Informações da imagem. VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=Ã�cone personalizado VW_FAVICON_TIP="Esta opção possibilita adicionar um ícone personalizado à imagem aberta.\nO endereço da imagem pode ser usado como variável: %url" VW_WHEELZOOM=Fazer zoom ao rodar roda do mouse VW_LPDELAY=Atraso de resposta (ms) VW_LPLEFT=Clique longo com o botão esquerdo do mouse VW_LPRIGHT=Clique longo com o botão direito do mouse VW_LPA_FITWH=caber na altura/largura VW_SC_CYCLE=Trocar entre os modos: tamanho original, caber na altura, caber na largura VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=Esc voltará a imagem à sua forma normal, ou sairá do zoom-livre VW_SC_FREEZOOM=Shift + arrastrar em cima da imagem para usar o modo de ampliação de seleção, mantenha pressionado Ctrl (sem soltar Shift) para mover a seleção SC_ZOOMINOUT=Zoom mais/menos SC_FLIPH=Virar à horizontal SC_FLIPV=Virar à vertical SC_ROTL=Rodar à esquerda SC_ROTR=Rodar à direita SC_MORIG=Tamanho original SC_MFIT=Dimensionar automaticamente SC_MFITW=Dimensionar à largura SC_MFITH=Dimensionar à altura LANGUAGE=Idioma TRANSLATIONS=Traduções TRANSLATIONS_TIP=Se você quiser se tornar um tradutor, envie um e-mail para este endereço, mencionando os idiomas que você fala. TRANSLATORS=Tradutores VW_CENTER=Center content CUSTOM_CSS=Estilo de CSS personalizado CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Move the cursor to the top left edge of the page to show the menu OPENER=Open images from regular web-pages OP_RIGHTLONG=right long-press OP_CTRLALTCLICK=Ctrl + Alt + right click OP_BOTH=both VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=Enviar imagem para... ; @language ru, Russian (руÑ�Ñ�кий) (100%) ; @translators Rodny [lang] APP_DESCRIPTION=ДополнительнаÑ� функциональноÑ�ть при проÑ�мотре изображений и видео в браузере. NAV_GENERAL=Ð�аÑ�тройки NAV_INFO=Инфо SHORTCUTS=СочетаниÑ� клавиш PH_CLICKFORSAMPLE=поÑ�мотреть примеры... DISABLED=отключено BUTTON_RESET=По умолчанию BUTTON_SAVE=Сохранить VW_MODE=Размер по умолчанию VW_MODE_NATURL=оригинальный размер VW_MODE_AUTOFIT=впиÑ�ать VW_MODE_FITWIDTH=подогнать по ширине VW_MODE_FITHEIGHT=подогнать по выÑ�оте VW_MODE_BESTFIT=наилучшее заполнение VW_MINUPSCALE=Увеличивать маленькие изображениÑ� VW_MINUPSCALE_TIP="Как правило, небольшие изображениÑ� не увеличиваютÑ�Ñ� до размеров облаÑ�ти проÑ�мотра при маÑ�штабировании. Этот параметр заÑ�тавит их Ñ�то делать.\nЗначение задаётÑ�Ñ� в процентах, Ñ�крипт увеличит те изображениÑ�, размер которых больше данного процента от ширины или выÑ�оты облаÑ�ти проÑ�мотра (в завиÑ�имоÑ�ти от предыдущей наÑ�тройки)." VW_IMGINFO=ИнформациÑ� об изображении VW_IMGINFO_TIP="Отображение пользовательÑ�кой информации в заголовке вкладки. Она может Ñ�одержать Ñ�ледующие переменные:\n%ow - оригинальнаÑ� ширина\n%oh - оригинальнаÑ� выÑ�ота\n%ratio - текущаÑ� ширина / текущаÑ� выÑ�ота\n%w - текущаÑ� ширина\n%h - текущаÑ� выÑ�ота\n%perc - процент от оригинального размера\n%url - полный URL\n%name - имÑ� файла" VW_FAVICON=ПользовательÑ�каÑ� иконка VW_FAVICON_TIP="Этот параметр позволÑ�ет назначить произвольную иконку длÑ� вкладки Ñ� открытым изображением.\nÐ�дреÑ� изображениÑ� можно иÑ�пользовать как переменную: %url" VW_WHEELZOOM=МаÑ�штабировать колеÑ�ом мыши VW_LPDELAY=ДлительноÑ�ть нажатиÑ� (мÑ�) VW_LPLEFT=ДейÑ�твие длительного нажатиÑ� левой кнопкой мыши VW_LPRIGHT=ДейÑ�твие длительного нажатиÑ� правой кнопкой мыши VW_LPA_FITWH=подогнать по ширине/выÑ�оте VW_SC_CYCLE=Переключить между режимами: оригинальный, подгон по ширине, подгон по выÑ�оте VW_SC_DRAGNDROP=Зажмите Ctrl или Alt, чтобы позволить drag-and-drop, или протÑ�ните от правого краÑ� изображениÑ�, еÑ�ли оно впиÑ�ано в окно VW_SC_RESET=Esc возвращает изображение к первоначальному виду или выходит из режима Ñ�вободного маÑ�штабированиÑ�. VW_SC_FREEZOOM=Зажать Shift + левую кнопку мыши на изображении длÑ� Ñ�вободного маÑ�штабированиÑ�, дополнительно зажать Ctrl длÑ� перемещениÑ� выделениÑ� SC_ZOOMINOUT=Увеличить / уменьшить SC_FLIPH=Отразить по горизонтали SC_FLIPV=Отразить по вертикали SC_ROTL=Повернуть влево SC_ROTR=Повернуть вправо SC_MORIG=Оригинальный размер SC_MFIT=ВпиÑ�ать SC_MFITW=Подогнать по ширине SC_MFITH=Подогнать по выÑ�оте LANGUAGE=Язык TRANSLATIONS=Переводы TRANSLATIONS_TIP=ЕÑ�ли вы хотите Ñ�тать переводчиком, напишите по Ñ�лектронной почте на Ñ�тот адреÑ�, указав ваши Ñ�зыки. TRANSLATORS=Переводчики VW_CENTER=Центрировать Ñ�одержимое CUSTOM_CSS=ПользовательÑ�кий Ñ�тиль (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Любое допуÑ�тимое Ñ�войÑ�тво фона (color, url(), gradient...). */\n overflow: hidden; /* Скрыть полоÑ�Ñ‹ прокрутки. Чтобы показать их, измените \"hidden\" на \"auto\". */\n}\n\nimg {\n background: #eef; /* Различный фон длÑ� изображениÑ�. */\n border: 10px solid white; /* Граница изображениÑ�. */\n box-shadow: 0 0 10px grey; /* Тень изображениÑ�. */\n cursor: default !important; /* Запретить изменение курÑ�ора. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Цвет маÑ�ки Ñ�вободного маÑ�штабированиÑ�. */\n}\n\n#menu {\n display: none; /* Отключить вÑ�плывающее меню. */\n}\n" VW_SC_HORIZONTALSCROLL=ДлÑ� прокрутки изображениÑ� по горизонтали иÑ�пользуйте колёÑ�ико мыши над левым нижним краем CUSTOM_CSS_PH="Можно изменÑ�ть цвета фона, границу/тень изображениÑ�, Ñ�крывать полоÑ�Ñ‹ прокрутки или вÑ�плывающее меню... \nÐ�аведите курÑ�ор на вопроÑ�ительный знак, чтобы увидеть примеры, иÑ�пользуйте палитру цветов выше длÑ� получениÑ� кодов цвета." VW_SC_FLOATMENU=Подведите курÑ�ор к верхнему левому краю Ñ�траницы, чтобы показать меню OPENER=Открытие изображений c обычных веб-Ñ�траниц OP_RIGHTLONG=длительное нажатие правой кнопки мыши OP_CTRLALTCLICK=Ctrl + Alt + праваÑ� кнопка мыши OP_BOTH=оба VW_VIDEO=Включить длÑ� видео VW_VIDATTRS=Ð�трибуты видео VW_VIDATTRS_TIP="ДопуÑ�тимые атрибуты\nautoplay - видео начинаетÑ�Ñ� автоматичеÑ�ки \nloop - повторить воÑ�произведение\ncontrols - показывать Ñ�лементы управлениÑ� плейером\nmuted - отключение звука\nvolume=0-100 - уровень громкоÑ�ти по умолчанию (процент)" SENDTO=Отправить изображение в... ; @language uk, Ukrainian (українÑ�ька) (70.18%) ; @translators Simofon [lang] APP_DESCRIPTION=Additional functionality for the browser's default image and video viewer. NAV_GENERAL=General NAV_INFO=Інфо SHORTCUTS=ПоєднаннÑ� клавіш PH_CLICKFORSAMPLE=Дивитить приклади... DISABLED=відключено BUTTON_RESET=Дефолні налаштуваннÑ� BUTTON_SAVE=Зберегти VW_MODE=Розмір за замовчуваннÑ�м VW_MODE_NATURL=оригінальний розмір VW_MODE_AUTOFIT=впиÑ�ати VW_MODE_FITWIDTH=підігнати по ширині VW_MODE_FITHEIGHT=підігнати по виÑ�оті VW_MODE_BESTFIT=найкраще заповненнÑ� VW_MINUPSCALE=Збільшувати маленькі зображеннÑ� VW_MINUPSCALE_TIP="Як правило, невеликі зображеннÑ� не збільшуютьÑ�Ñ� до розмірів облаÑ�ті переглÑ�ду при маÑ�штабуваннÑ�. Цей параметр змуÑ�ить Ñ—Ñ… це робити.\nЗначеннÑ� задаєтьÑ�Ñ� у відÑ�отках, Ñ�крипт збільшить ті зображеннÑ�, розмір Ñ�ких більше даного відÑ�отка від ширини або виÑ�оти облаÑ�ті переглÑ�ду (залежно від попередньої наÑ�тройки)." VW_IMGINFO=ІнформаціÑ� про зображеннÑ� VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=Іконка VW_FAVICON_TIP="Цей параметр дозволÑ�Ñ” призначити довільну іконку длÑ� вкладки з відкритим зображеннÑ�м.\nÐ�дреÑ�а зображеннÑ� можна викориÑ�товувати Ñ�к змінну: %url" VW_WHEELZOOM=МаÑ�штабувати колеÑ�ом миші VW_LPDELAY=ТриваліÑ�ть натиÑ�каннÑ� (мÑ�) VW_LPLEFT=ДіÑ� тривалого натиÑ�каннÑ� лівою кнопкою миші VW_LPRIGHT=ДіÑ� тривалого натиÑ�каннÑ� правою кнопкою миші VW_LPA_FITWH=підігнати по ширині / виÑ�оті VW_SC_CYCLE=Переключити між режимами: оригінальний, підгін по ширині, підгін по виÑ�оті VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=Esc повертає зображеннÑ� до первіÑ�ного виглÑ�ду або виходить з режиму вільного маÑ�штабуваннÑ�. VW_SC_FREEZOOM=Зажати Shift + ліву кнопку миші на зображенні длÑ� вільного маÑ�штабуваннÑ�, додатково затиÑ�нути Ctrl длÑ� переміщеннÑ� виділеннÑ� SC_ZOOMINOUT=Збільшити / зменшити SC_FLIPH=Відобразити по горизонталі SC_FLIPV=Відобразити по вертикалі SC_ROTL=Повернути вліво SC_ROTR=Повернути вправо SC_MORIG=Оригінальний розмір SC_MFIT=ВпиÑ�ати SC_MFITW=Підігнати по ширині SC_MFITH=Підігнати по виÑ�оті LANGUAGE=Мова TRANSLATIONS=Переклади TRANSLATIONS_TIP=Якщо ви хочете Ñ�тати перекладачем, напишіть електронною поштою на цю адреÑ�у, вказавши ваші мови. TRANSLATORS=Перекладачі VW_CENTER=Center content CUSTOM_CSS=Стиль (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Move the cursor to the top left edge of the page to show the menu OPENER=Open images from regular web-pages OP_RIGHTLONG=right long-press OP_CTRLALTCLICK=Ctrl + Alt + right click OP_BOTH=both VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=Ð�адіÑ�лати зображеннÑ� в... ; @language zh-CN, Chinese (Simplified Han) (中文(简体中文)) (70.18%) ; @translators fang5566 [lang] APP_DESCRIPTION=Additional functionality for the browser's default image and video viewer. NAV_GENERAL=General NAV_INFO=ä¿¡æ�¯ SHORTCUTS=å¿«æ�·é”® PH_CLICKFORSAMPLE=点击查看样例... DISABLED=ç¦�用 BUTTON_RESET=é‡�ç½® BUTTON_SAVE=ä¿�å­˜ VW_MODE=图片默认显示模å¼� VW_MODE_NATURL=原始尺寸 VW_MODE_AUTOFIT=嵌入查看器 VW_MODE_FITWIDTH=适应宽度 VW_MODE_FITHEIGHT=适应高度 VW_MODE_BESTFIT=最佳适应方å¼� VW_MINUPSCALE=放大å°�图片 VW_MINUPSCALE_TIP="通常å°�图片ä¸�会被放大到视图窗å�£ï¼ˆview-port)那么大,而该选项å�¯ä»¥å¼ºåˆ¶æ”¾å¤§è¿™äº›å°�图片。\n该选项值表示视图窗å�£å®½åº¦å’Œé«˜åº¦å€¼ï¼ˆè¿™ç”±å‰�一个选项æ�¥å†³å®šï¼‰çš„百分比,用于告知脚本凡是大于该百分比的图片都强制放大。" VW_IMGINFO=图片信æ�¯ VW_IMGINFO_TIP="Display custom information in the title of the tab. It may contain the following variables:\n%ow - original width\n%oh - original height\n%ratio - current width / current height\n%w - current width\n%h - current height\n%perc - percent of the original size\n%url - full URL\n%name - filename" VW_FAVICON=自定义 favicon VW_FAVICON_TIP="该选项用于为打开的图片设置一个自定义的标签页图标。\n图片地å�€å�¯ä½¿ç”¨ä»¥ä¸‹å�˜é‡�:%url" VW_WHEELZOOM=使用鼠标滚轮缩放 VW_LPDELAY=鼠标点击时长(毫秒) VW_LPLEFT=鼠标左键长按时的æ“�作 VW_LPRIGHT=é¼ æ ‡å�³é”®é•¿æŒ‰æ—¶çš„æ“�作 VW_LPA_FITWH=适应宽度/高度 VW_SC_CYCLE=在原始大å°�,适应宽度和适应高度三ç§�显示模å¼�中切æ�¢ VW_SC_DRAGNDROP=Hold Ctrl or Alt to allow drag-and-drop, or drag from the right edge of the image, if that fits into the window VW_SC_RESET=Esc é”®å�¯é‡�置图片为原始显示方å¼�,或退出自由缩放模å¼� VW_SC_FREEZOOM=Shift + 拖动 图片进入自由缩放模å¼�,按ä½� Ctrl æ—¶å�¯ç§»åŠ¨é€‰åŒº SC_ZOOMINOUT=缩å°� / 放大 SC_FLIPH=水平翻转 SC_FLIPV=垂直翻转 SC_ROTL=å�‘左旋转 SC_ROTR=å�‘å�³æ—‹è½¬ SC_MORIG=原始尺寸 SC_MFIT=自动适应 SC_MFITW=适应宽度 SC_MFITH=适应高度 LANGUAGE=语言 TRANSLATIONS=翻译 TRANSLATIONS_TIP=如果您想å�‚与翻译,请å�‘é€� e-mail 到这里并说明您è¦�翻译的语言。 TRANSLATORS=译者 VW_CENTER=Center content CUSTOM_CSS=自定义样å¼� (CSS) CUSTOM_CSS_TIP="body {\n background: #f3f3f5; /* Any valid background property (color, url(), gradient...). */\n overflow: hidden; /* Hides the scrollbars. To show them, change \"hidden\" to \"auto\". */\n}\n\nimg {\n background: #eef; /* Different background for the image. */\n border: 10px solid white; /* Image border. */\n box-shadow: 0 0 10px grey; /* Shadow of the image. */\n cursor: default !important; /* Don't allow the mouse curosr to change. */\n}\n\n.mask {\n color: rgba(0, 0, 0, .4); /* Color of the free-zoom mask. */\n}\n\n#menu {\n display: none; /* Disable the floating menu. */\n}\n" VW_SC_HORIZONTALSCROLL=To scroll the image horizontally, use the mouse wheel over the left bottom edge CUSTOM_CSS_PH="Change the background color, image border/shadow, and hide the scrollbars or the floating menu... \nHover the question mark to see examples, use the color picker above for getting color codes." VW_SC_FLOATMENU=Move the cursor to the top left edge of the page to show the menu OPENER=Open images from regular web-pages OP_RIGHTLONG=right long-press OP_CTRLALTCLICK=Ctrl + Alt + right click OP_BOTH=both VW_VIDEO=Enable for videos VW_VIDATTRS=Video attributes VW_VIDATTRS_TIP="Acceptable attributes\nautoplay - video starts automatically\nloop - repeat the play\ncontrols - show player controls\nmuted - mute sound\nvolume=0-100 - default volume (percent)" SENDTO=å�‘é€�图片到... {"_": "en", "cs": {"name": "Czech (Ä�eÅ¡tina)", "translators": [{"email": "jaramat@email.cz", "fullname": "Jaroslav Matura", "name": "jaramat"}]}, "el": {"%": 66.67, "name": "Greek (Ελληνικά)", "translators": [{"email": "farow.the.time.traveler@gmail.com", "name": "Farow"}]}, "en": {"name": "English", "translators": [{"email": "deathamns@gmail.com", "name": "Deathamns"}]}, "es": {"%": 84.21, "name": "Spanish (español)", "translators": [{"email": "nightroad@mail.com", "fullname": "JavierVH", "name": "DurianZheitk"}]}, "fi": {"%": 61.4, "name": "Finnish (suomi)", "translators": [{"email": "opeeera@myopera.com", "name": "Opeeera"}]}, "fr": {"%": 70.18, "name": "French (français)", "translators": [{"email": "tmnath2@gmail.com", "name": "Tmnath"}]}, "hu": {"name": "Hungarian (magyar)", "translators": [{"email": "deathamns@gmail.com", "name": "Deathamns"}]}, "nl": {"%": 70.18, "name": "Dutch (Nederlands)", "translators": [{"email": "kackar@outlook.com", "name": "Kaçkar"}]}, "pl": {"%": 70.18, "name": "Polish (polski)", "translators": [{"fullname": "PaweÅ‚ Pawlak", "name": "pafflick", "web": "http://www.pafflick.com/"}]}, "pt-BR": {"%": 70.18, "name": "Portuguese (Brazil) (português (Brasil))", "translators": [{"email": "romulo@brazilmail.com", "fullname": "Rômulo Godoi"}]}, "ru": {"name": "Russian (руÑ�Ñ�кий)", "translators": [{"email": "rodny0@gmail.com", "name": "Rodny"}]}, "uk": {"%": 70.18, "name": "Ukrainian (українÑ�ька)", "translators": [{"email": "simofon@yandex.ru", "name": "Simofon"}]}, "zh-CN": {"%": 70.18, "name": "Chinese (Simplified Han) (中文(简体中文))", "translators": [{"email": "wlq105556@gmail.com", "name": "fang5566"}]}} :: Viewhance ::
0%

  • + / -