├── .codeclimate.yml ├── .gitattributes ├── .gitignore ├── .travis.yml ├── AUTHORS ├── COPYING ├── LICENSE ├── README.md ├── _locales └── en │ └── messages.json ├── bookmarks.html ├── css ├── amr_style.css ├── back.css ├── backamrc.css ├── backsite.css ├── bookmarks.css ├── importexport.css ├── jquery-ui.min.css ├── jquery.treeview.css ├── lab.css ├── options.css ├── popup.css ├── prettyPhoto.css ├── pstat.css └── search.css ├── dev.html ├── faq.html ├── img ├── add.png ├── addlt.png ├── amrlittle.png ├── arabic.png ├── backward.png ├── blank.png ├── blue-sharingan.png ├── blue.png ├── bookmark.png ├── bookmarkred.png ├── cancel.png ├── cancels.png ├── chinese.png ├── code.png ├── comment.png ├── day.png ├── delete10.png ├── dev.png ├── donate.png ├── down.png ├── down_der.png ├── edit.png ├── edit10.png ├── edit102.png ├── english.png ├── external.png ├── eye.png ├── eyeblue.png ├── eyes.png ├── facebook.png ├── find.png ├── forum.png ├── foward.png ├── french.png ├── gplus.png ├── gray.png ├── help │ ├── AMRBlockMode.PNG │ ├── AMRListMode.PNG │ ├── AMRPopupSearch.PNG │ ├── amrbar.PNG │ ├── amrbaradd.PNG │ ├── bmchap.PNG │ ├── bmscan.PNG │ ├── chappopup.PNG │ └── scanpopup.PNG ├── history.png ├── home.png ├── icon-32.png ├── images │ ├── ajax-loader.gif │ ├── file.gif │ ├── folder-closed.gif │ ├── folder.gif │ ├── minus.gif │ ├── plus.gif │ ├── treeview-black-line.gif │ ├── treeview-black.gif │ ├── treeview-default-line.gif │ ├── treeview-default.gif │ ├── treeview-famfamfam-line.gif │ ├── treeview-famfamfam.gif │ ├── treeview-gray-line.gif │ ├── treeview-gray.gif │ ├── treeview-red-line.gif │ └── treeview-red.gif ├── imgerror.png ├── importexport.png ├── indonesian.png ├── infos.png ├── italian.png ├── japanese.png ├── lab_hand.png ├── lab_ko.png ├── lab_load.gif ├── lab_ok.png ├── lefttoright.png ├── list10.gif ├── load10.gif ├── load16.gif ├── loading.gif ├── ltload.gif ├── minus.png ├── month.png ├── new.gif ├── ontop.png ├── options.png ├── paypaldon.gif ├── paypaldonlt.gif ├── persian.png ├── play.png ├── plus.png ├── polish.png ├── portuguese.png ├── prettyPhoto │ └── light_rounded │ │ ├── btnNext.png │ │ ├── btnPrevious.png │ │ ├── default_thumbnail.gif │ │ ├── loader.gif │ │ └── sprite.png ├── pstat.png ├── read_play.png ├── read_stop.png ├── red.png ├── release.png ├── return.png ├── righttoleft.png ├── russian.png ├── select_all.png ├── select_none.png ├── spanish.png ├── stats.png ├── stop.gif ├── sync.png ├── toend.png ├── turkish.png ├── unknown.png ├── up_der.png ├── vietnamese.png ├── warn.png ├── week.png └── x.png ├── importexport.html ├── js ├── BSync.js ├── MangaElt.js ├── MirrorModel.js ├── amrcsql.js ├── analytics.js ├── back.js ├── backamrc.js ├── background.js ├── backsite.js ├── bookmarks.js ├── dev.js ├── faq.js ├── i18n.js ├── importexport.js ├── innermenu.js ├── jQuery.loadScript.js ├── jquery-ui.min.js ├── jquery.js ├── jquery.prettyPhoto.js ├── jquery.scrollTo-1.4.3.1-min.js ├── jquery.simplemodal-1.4.4.js ├── jquery.treeview.js ├── lab.js ├── lib.js ├── listmanager.js ├── mgEntry.js ├── mgUtil.js ├── mirrors │ └── .gitkeep ├── notification.js ├── options.js ├── personalstat.js ├── popup-analytics.js ├── popup.js ├── popupSearch.js ├── pstat.js ├── search.js ├── testPage.js └── wssql.js ├── lab.html ├── manifest.json ├── notification.html ├── options.html ├── package.json ├── popup.html ├── pstat.html └── search.html /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | languages: 2 | JavaScript: true 3 | exclude_paths: 4 | - "js/jquery.*" -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################# 2 | ## Eclipse 3 | ################# 4 | 5 | *.pydevproject 6 | .project 7 | .metadata 8 | bin/ 9 | tmp/ 10 | *.tmp 11 | *.bak 12 | *.swp 13 | *~.nib 14 | local.properties 15 | .classpath 16 | .settings/ 17 | .loadpath 18 | 19 | # External tool builders 20 | .externalToolBuilders/ 21 | 22 | # Locally stored "Eclipse launch configurations" 23 | *.launch 24 | 25 | # CDT-specific 26 | .cproject 27 | 28 | # PDT-specific 29 | .buildpath 30 | 31 | 32 | ################# 33 | ## Visual Studio 34 | ################# 35 | 36 | ## Ignore Visual Studio temporary files, build results, and 37 | ## files generated by popular Visual Studio add-ons. 38 | 39 | # User-specific files 40 | *.suo 41 | *.user 42 | *.sln.docstates 43 | 44 | # Build results 45 | [Dd]ebug/ 46 | [Rr]elease/ 47 | *_i.c 48 | *_p.c 49 | *.ilk 50 | *.meta 51 | *.obj 52 | *.pch 53 | *.pdb 54 | *.pgc 55 | *.pgd 56 | *.rsp 57 | *.sbr 58 | *.tlb 59 | *.tli 60 | *.tlh 61 | *.tmp 62 | *.vspscc 63 | .builds 64 | *.dotCover 65 | 66 | ## TODO: If you have NuGet Package Restore enabled, uncomment this 67 | #packages/ 68 | 69 | # Visual C++ cache files 70 | ipch/ 71 | *.aps 72 | *.ncb 73 | *.opensdf 74 | *.sdf 75 | 76 | # Visual Studio profiler 77 | *.psess 78 | *.vsp 79 | 80 | # ReSharper is a .NET coding add-in 81 | _ReSharper* 82 | 83 | # Installshield output folder 84 | [Ee]xpress 85 | 86 | # DocProject is a documentation generator add-in 87 | DocProject/buildhelp/ 88 | DocProject/Help/*.HxT 89 | DocProject/Help/*.HxC 90 | DocProject/Help/*.hhc 91 | DocProject/Help/*.hhk 92 | DocProject/Help/*.hhp 93 | DocProject/Help/Html2 94 | DocProject/Help/html 95 | 96 | # Click-Once directory 97 | publish 98 | 99 | # Others 100 | [Bb]in 101 | [Oo]bj 102 | sql 103 | TestResults 104 | *.Cache 105 | ClientBin 106 | stylecop.* 107 | ~$* 108 | *.dbmdl 109 | Generated_Code #added for RIA/Silverlight projects 110 | 111 | # Backup & report files from converting an old project file to a newer 112 | # Visual Studio version. Backup files are not needed, because we have git ;-) 113 | _UpgradeReport_Files/ 114 | Backup*/ 115 | UpgradeLog*.XML 116 | 117 | 118 | 119 | ############ 120 | ## Windows 121 | ############ 122 | 123 | # Windows image file caches 124 | Thumbs.db 125 | 126 | # Folder config file 127 | Desktop.ini 128 | 129 | 130 | ############# 131 | ## Python 132 | ############# 133 | 134 | *.py[co] 135 | 136 | # Packages 137 | *.egg 138 | *.egg-info 139 | dist 140 | build 141 | eggs 142 | parts 143 | bin 144 | var 145 | sdist 146 | develop-eggs 147 | .installed.cfg 148 | 149 | # Installer logs 150 | pip-log.txt 151 | 152 | # Unit test / coverage reports 153 | .coverage 154 | .tox 155 | 156 | #Translations 157 | *.mo 158 | 159 | #Mr Developer 160 | .mr.developer.cfg 161 | 162 | # Mac crap 163 | .DS_Store 164 | 165 | # Intellij IDE (I.E WebStorm) 166 | .idea/ 167 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | - "0.8" 5 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Original All Mangas Reader software: Pierre-Louis DUHOUX 2 | Braiam : I let you add yourself here ! -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | All Mangas Reader is available under the terms of the GNU Public License version 3. 2 | 3 | See COPYING for details. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Coverage Status](https://coveralls.io/repos/AllMangasReader-dev/AMR/badge.png)](https://coveralls.io/r/AllMangasReader-dev/AMR) [![Code Climate](https://codeclimate.com/github/AllMangasReader-dev/AMR.png)](https://codeclimate.com/github/AllMangasReader-dev/AMR) [![Build Status](https://travis-ci.org/AllMangasReader-dev/AMR.svg?branch=develop)](https://travis-ci.org/AllMangasReader-dev/AMR) 2 | [![Open Source Helpers](https://www.codetriage.com/allmangasreader-dev/amr/badges/users.svg)](https://www.codetriage.com/allmangasreader-dev/amr) 3 | 4 | AMR 5 | === 6 | AllMangasReader developer branch has the lastest changes made 7 | to the AllMangasReader Chrome Extension. 8 | 9 | Get our lastest stable version from http://allmangasreader.com, 10 | also get support on our forums in http://allmangasreader.com/forum 11 | 12 | PLUGINS 13 | ------------- 14 | * jQuery UI 15 | * jQuery 16 | * prettyPhoto 17 | * SimpleModal 18 | * Treeview 19 | 20 | INSTALLATION 21 | ------------- 22 | Easy instalation & Auto-update 23 | 24 | 1. Go to http://www.allmangasreader.com/ 25 | 2. Click "Install beta channel" and wait for the download to finish 26 | 3. Open the extension list ( chrome://extension ) 27 | 4. Drag-n-drop your downloaded .crx file in the extension list 28 | 29 | Manual installation 30 | 31 | 1. Download the zip file or clone the git repository 32 | 2. Go to the extension list. 33 | 3. Activate "Developers Mode" 34 | 4. Click "Load unpacked extension…" 35 | 5. Look for the folder with the extension and enjoy 36 | 37 | BUGS 38 | ------------- 39 | All bugs from the current developing version should be 40 | reported under GitHub. 41 | 42 | KNOW BUGS 43 | ---------- 44 | No chart generation in the Personal Statistics page, 45 | due using Google Visualization API hasn't changed to 46 | comply with manifest v2 rules as can be seen here: 47 | https://code.google.com/p/google-visualization-api-issues/issues/detail?id=978 48 | 49 | See COPYING and file headers for license info 50 | 51 | 52 | [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/AllMangasReader-dev/amr/trend.png)](https://bitdeli.com/free "Bitdeli Badge") 53 | 54 | -------------------------------------------------------------------------------- /bookmarks.html: -------------------------------------------------------------------------------- 1 |  19 | 20 | 21 | 22 | 23 | All Mangas Reader Bookmarks 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 50 | 57 |
58 |
59 |
60 |
61 |

62 | Bookmarks 63 |

64 |
65 |

66 | Filters 67 |

68 | 69 | 70 | 74 | 80 | 81 | 82 | 85 | 88 | 91 | 92 |
83 | Sites : 84 | 86 | Scans size : 87 | 89 |
90 |
93 |
94 |
95 |
96 |
    97 |
  • Bookmarked Chapters
  • 98 |
  • Bookmarked Scans
  • 99 |
100 |
101 |
102 |
103 | 104 |
105 | 109 |
110 |
111 | 122 |
123 | 126 |
127 |
128 |
129 |
130 |
131 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /css/back.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | a.buttonAMR { 21 | font-size:10pt!important; 22 | color:#000!important; 23 | text-decoration:none!important; 24 | display:inline-block; 25 | min-width:100px; 26 | padding:2px; 27 | border:1px solid #DDD; 28 | text-align:center; 29 | background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFFFFF), to(#EEE)); 30 | border-radius:5px; 31 | -webkit-transition: all .4s ease-in-out; 32 | margin:5px; 33 | cursor:pointer; 34 | } 35 | 36 | a.buttonAMR:hover { 37 | color:#003C82!important; 38 | border-color:#3278BE; 39 | text-decoration:none!important; 40 | background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#EEE), to(#FFFFFF)); 41 | } 42 | 43 | a.buttonAMR:active { 44 | background:#4195DD; 45 | background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#003C82), to(#4195DD)); 46 | background:-moz-linear-gradient(0% 90% 90deg, #4195DD, #003C82); 47 | } 48 | 49 | .divLoading { 50 | border: 5px solid white; 51 | width: 300px; 52 | height: 300px; 53 | margin-left:auto!important; 54 | margin-right:auto!important; 55 | } 56 | 57 | .titleAMRPub { 58 | background-color:white!important; 59 | color:red!important; 60 | font-size:12px!important; 61 | font-weight:bold; 62 | /*cursor:pointer!important;*/ 63 | padding:5px!important; 64 | display:block!important; 65 | text-decoration:none!important; 66 | font-family:Verdana!important; 67 | } 68 | 69 | #bookmarkPop { 70 | display:none; 71 | z-index:10000001; 72 | } 73 | 74 | #simplemodal-overlay { 75 | background-color:#000; 76 | cursor:wait; 77 | z-index:10000001; 78 | } 79 | 80 | #simplemodal-container { 81 | color:#bbb!important; 82 | background-color:#333!important; 83 | border:4px solid #444!important; 84 | padding:10px!important; 85 | height:auto!important; 86 | min-height:220px!important; 87 | width:474px!important; 88 | font-family:Verdana!important; 89 | font-size: 13px!important; 90 | color: #BBB!important; 91 | z-index:10000001; 92 | } 93 | #simplemodal-container a.buttonAMR { 94 | padding-bottom:0!important; 95 | margin-bottom:5px!important; 96 | } 97 | #simplemodal-container .simplemodal-wrap { 98 | overflow:hidden!important; 99 | } 100 | #simplemodal-container a.modalCloseImg { 101 | background-repeat: no-repeat; 102 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAdCAYAAABfeMd1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA8xJREFUeNqclktIVFEYx+fO+GjUGqw0S/IRGtTKENtkqJTkooUwC0EQNNpEEiJYoISbKAhcCYogagvBlbRQW/kAIdAkbRGIi3RiNIfJR+qk4zxO/2/4zu3cOw+tA7+5c8/j+5/vfN8592hCCMspSy4o4acXLIHVU40kkQTkglfgm4hd3KAb3PxfESf4KU5XAuBRPA0tznINgCa1Yn193bK0tBR5ZmVlWUpKSiyFhYXmcfPgiaZpn0/yZEKd4vLysqioqKCZRAEhMTc3Z/bqy0nL9Uzt3dXVJex2e0wBic1mEx0dHcLv96tDX8cTyVN7tbW1JTRupr6+3uzR7Vgib2Tr5ORklJHa2lrDe0FBgVhcXDTUDw8PqyIfY4m4ZGt5ebnB4OrqaqS+srJSj8XOzk6kbnBwUO9XVFQkgsGgKmTTRQ4PD/NlrcvlivKis7Mz0kZiJBRLQDI7O/s3rwOBu7oI1B/KhrGxsaiBtDTSsCyxBIj+/n69D+w+Jg0r/YTD4Wy5fF6vNyoD19bWLENDQ4b3pqammBtPHQ+diF0rNo4GxT3Z4HA4ogbSxmtsbNTf4ZnhXS1Ief1/KBQ6og0f2fXIkuJ4MVGDLBOACtVRW6KYuN3ue7oISIc3btmoDp6enjYYbWlp0Y3Qf1UAx40hu0pLSx0yJPRz1uPxvJONo6OjhswiAZm+BBlX3yU9PT26gM/no/PrHLDpIr29vQ/U7GloaDBk10k7vrq62uDF+Pg4ZYbDIAKuzc/PD8hOdBbRUXGaI6Wmpkbs7+/rAltbW19RX2wWSQd54A6WzaV6REcFjvSYxikGtESqBwcHB7vt7e30bSngyVtl4M+AHHCrubn5+cbGxqb5tFtYWBB9fX2iu7s78pyZmYn6ciF2e62trS9hpwxcAWlqdqWA8+A6uA+ejoyMfBL/UFZWVjbr6ureYmwNuAEugtSIff4y0rpl8CWhFDjBC6fT+R4BdB8dHYXiGZ+amvJgY35A/3ZQB+iIv8pLlaR/frHpad2S2b1McJk75vPzUlVVVV5ZWdmF5ORkGw6+EL6YvyYmJlyIxyba3eA7swG2gQ8E6NSSIhoHKIWTgISyWSyH/2fyJMjrMPgNdvl6REI/gAfsgANwTCcLJYh+kWAhGwulcfplcqwyeWPZuQ8NpnNpn41uM3vsAQkEOQuNtxWTUCp7lcHPNK6zsifH7I2PZ+5j4QBPIhz3SqQsXRLHKZVFU/hd4xkGWcjPT7k8IelBwnsXC0kxK3tn4/9SJKwYDTPCLJDocmcWlPtJUy86isGERv4IMACaz3RmXeGcqwAAAABJRU5ErkJggg==); 103 | width:25px; 104 | height:29px; 105 | display:inline; 106 | z-index:3200; 107 | position:absolute; 108 | top:-15px; 109 | right:-16px; 110 | cursor:pointer; 111 | } 112 | #simplemodal-container span, #simplemodal-container #descEltAMR, #simplemodal-container td b { 113 | color: #BBB!important; 114 | font-family:Verdana!important; 115 | font-size: 13px!important; 116 | } 117 | #simplemodal-container td { 118 | padding:2px!important; 119 | } 120 | #simplemodal-container textarea { 121 | -webkit-appearance: textarea!important; 122 | -webkit-border-horizontal-spacing: 2px!important; 123 | -webkit-border-vertical-spacing: 2px!important; 124 | -webkit-box-orient: vertical!important; 125 | -webkit-rtl-ordering: logical!important; 126 | -webkit-user-select: text!important; 127 | font-family: monospace!important; 128 | font-size: 13px!important; 129 | font-style: normal!important; 130 | font-variant: normal!important; 131 | font-weight: normal!important; 132 | margin-bottom: 2px!important; 133 | margin-left: 2px!important; 134 | margin-right: 2px!important; 135 | margin-top: 2px!important; 136 | padding-bottom: 2px!important; 137 | padding-left: 2px!important; 138 | padding-right: 2px!important; 139 | padding-top: 2px!important; 140 | resize: both!important; 141 | } 142 | #simplemodal-container h3 { 143 | padding:10px!important; 144 | padding-left:0px!important; 145 | margin:0!important; 146 | color:#84b8d9!important; 147 | text-align:left!important; 148 | font-size:16pt!important; 149 | font-family:Verdana!important; 150 | font-weight:bold!important; 151 | } 152 | 153 | #saveBtnAMR { 154 | float:right!important; 155 | padding-right:10px!important; 156 | } 157 | 158 | .bookAMR { 159 | cursor: pointer!important; 160 | vertical-align: middle!important; 161 | } 162 | 163 | #bookmarkPop #descEltAMR { 164 | font-size:10pt!important; 165 | margin-bottom:10px!important; 166 | text-align:left!important; 167 | } 168 | #bookmarkPop #tipBMAMR { 169 | font-size:10pt!important; 170 | clear:both!important; 171 | text-align:center!important; 172 | } 173 | #bookmarkPop #tipBMAMR a { 174 | color:#84b8d9!important; 175 | text-decoration:none!important; 176 | font-weight:bold!important; 177 | cursor:pointer!important; 178 | font-family:Verdana!important; 179 | font-size: 13px!important; 180 | } 181 | 182 | #AMRBar { 183 | position:fixed!important; 184 | z-index:10000000!important; 185 | top:0px!important; 186 | width:100%!important; 187 | /*text-align:center!important;*/ 188 | /*height:30px!important;*/ 189 | opacity:0.7!important; 190 | -webkit-transition: all .4s ease-in-out!important; 191 | padding:0!important; 192 | margin:0!important; 193 | } 194 | #AMRBar:hover { 195 | opacity:1!important; 196 | } 197 | #AMRBarIn { 198 | padding:0!important; 199 | margin:0!important; 200 | border-bottom-left-radius: 6px 6px!important; 201 | border-bottom-right-radius: 6px 6px!important; 202 | border: 1px solid #CCC!important; 203 | border-top:0!important; 204 | opacity: 1!important; 205 | background-color:white!important; 206 | /*display:inline-block!important;*/ 207 | padding-left:15px!important; 208 | padding-right:15px!important; 209 | } 210 | 211 | #AMRBarIn img, .amrbarlayout img { 212 | vertical-align:middle!important; 213 | margin-left:5px!important; 214 | margin-right:5px!important; 215 | cursor:pointer!important; 216 | } 217 | #AMRBarIn div { 218 | padding:0!important; 219 | margin:0!important; 220 | } 221 | #AMRBarIn .buttonAMR, .amrbarlayout .buttonAMR { 222 | vertical-align:middle!important; 223 | } 224 | .buttonAMR.progress{ 225 | margin-button: auto !important; 226 | } 227 | #AMRBarIn select, .amrbarlayout select { 228 | vertical-align:middle!important; 229 | } 230 | #AMRBarIn a, .amrbarlayout a { 231 | vertical-align:middle!important; 232 | } 233 | #AMRBarInLtl { 234 | padding:0!important; 235 | margin:0!important; 236 | opacity:0.7!important; 237 | } 238 | #AMRBarInLtl:hover { 239 | opacity:1!important; 240 | } 241 | 242 | .pagenumberAMR { 243 | border:2px solid white; 244 | background-color:black!important; 245 | color:white!important; 246 | border-radius:16px!important; 247 | height:18px!important; 248 | font-size:12px!important; 249 | font-family:Verdana!important; 250 | font-weight:bold!important; 251 | position:relative!important; 252 | margin:0!important; 253 | margin-left:auto!important; 254 | margin-right:auto!important; 255 | bottom:62px!important; 256 | width:50px!important; 257 | padding:0!important; 258 | text-align: center!important; 259 | opacity:0.75!important; 260 | border-spacing:0!important; 261 | border-collapse: collapse; 262 | } 263 | 264 | .pagenumberAMR .number { 265 | text-align:center!important; 266 | display:table-cell!important; 267 | width:50px!important; 268 | border-spacing:0!important; 269 | border-collapse: collapse; 270 | height:18px!important; 271 | vertical-align:middle!important; 272 | padding:0!important; 273 | margin:0!important; 274 | } 275 | -------------------------------------------------------------------------------- /css/backamrc.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | .importimplemamr, .labimplemamr { 21 | cursor:pointer; 22 | 23 | } 24 | .button.importamr img, .button.labamr img { 25 | margin-left:5px; 26 | vertical-align:middle; 27 | margin-top:-3px; 28 | } 29 | -------------------------------------------------------------------------------- /css/backsite.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | .optmgsearch { 21 | float:right; 22 | border-radius:4px; 23 | background-color:#EEEEFF; 24 | padding:2px; 25 | padding-right:0; 26 | } 27 | .optmgsearch img { 28 | margin-right:2px; 29 | cursor:pointer; 30 | } 31 | 32 | .eltmirrorsearch { 33 | display:inline-block; 34 | border-radius:4px; 35 | background-color:#EEEEFF; 36 | padding:1px; 37 | margin-right:2px; 38 | margin-bottom:2px; 39 | padding-left:4px; 40 | } 41 | 42 | img.addsinglemg { 43 | margin-right:1px; 44 | padding-right:0; 45 | } 46 | 47 | .resultssearch { 48 | max-width:400px; 49 | } 50 | 51 | .return { 52 | float:right; 53 | } 54 | -------------------------------------------------------------------------------- /css/bookmarks.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | #resultschap, #resultschap tr { 21 | width:100%; 22 | display:block; 23 | } 24 | #resultschap tr td { 25 | display:block; 26 | } 27 | #resultschap tr.chapLine.odd { 28 | background-color:#CCCCFF; 29 | } 30 | 31 | #resultschap tr.chapLine.even { 32 | background-color:#DDDDFF; 33 | } 34 | #resultschap tr.chapLine.lastLine { 35 | border-bottom-left-radius: 4px 4px; 36 | border-bottom-right-radius: 4px 4px; 37 | } 38 | #resultschap tr.chapLine.firstLine { 39 | border-top-left-radius: 4px 4px; 40 | border-top-right-radius: 4px 4px; 41 | } 42 | #resultschap td.chapName { 43 | width:25%; 44 | } 45 | #resultschap td.chapName a { 46 | text-decoration:none; 47 | color:#00A; 48 | font-weight:bold; 49 | cursor:pointer; 50 | font-family:Verdana; 51 | } 52 | #resultschap td.chapNote { 53 | width:800px; 54 | text-align:left; 55 | } 56 | 57 | #results * img { 58 | vertical-align: middle; 59 | margin-right:5px; 60 | } 61 | 62 | .imgSearch { 63 | background-repeat: no-repeat; 64 | width: 16px; 65 | height: 16px; 66 | cursor: pointer; 67 | margin-left:10px; 68 | margin-top:8px; 69 | padding-left:20px; 70 | background-image: url(img/find.png); 71 | } 72 | 73 | #coverLoadServer { 74 | display: none; 75 | z-index: 200; 76 | position: absolute; 77 | left: 0px; 78 | right: 0px; 79 | top: 0px; 80 | bottom: 0px; 81 | width: 100%; 82 | margin: 0; 83 | padding: 0; 84 | border: 0; 85 | opacity: 0.5; 86 | filter: alpha(opacity = 50); 87 | background-image: none; 88 | background-color: white; 89 | cursor: not-allowed, pointer; 90 | padding-top:200px; 91 | } 92 | 93 | #nbRes, #noreschap, #noresscans { 94 | font-weight:bold; 95 | width:100%; 96 | text-align:left; 97 | } 98 | #nores { 99 | /*width:100%;*/ 100 | text-align:center; 101 | font-weight:bold; 102 | font-size:12pt; 103 | /*width:802px;*/ 104 | } 105 | #nores td { 106 | text-align:center; 107 | } 108 | div.mangaChapsDiv { 109 | margin-left:auto; 110 | margin-right:auto; 111 | } 112 | 113 | div.mangaScansDiv, #resultsscans { 114 | margin-left:auto; 115 | margin-right:auto; 116 | text-align:left; 117 | } 118 | 119 | #searchZone { 120 | text-align:center!important; 121 | } 122 | 123 | .scanDiv { 124 | max-width:229px; 125 | display:inline-block; 126 | border-bottom-left-radius: 6px 6px; 127 | border-bottom-right-radius: 6px 6px; 128 | border-top-left-radius: 6px 6px; 129 | border-top-right-radius: 6px 6px; 130 | border: 1px solid #CCC; 131 | background-color:white; 132 | padding:5px; 133 | margin:5px; 134 | } 135 | .scanImg { 136 | display: table-cell; 137 | width:229px; 138 | height:229px; 139 | text-align:center; 140 | vertical-align:middle; 141 | } 142 | .scanImg img { 143 | max-width:229px; 144 | max-height:229px; 145 | margin:0!important; 146 | padding:0!important; 147 | } 148 | .scanChap { 149 | text-align:center; 150 | font-size:10pt; 151 | background-color:#CCD; 152 | border-bottom-left-radius: 6px 6px; 153 | border-bottom-right-radius: 6px 6px; 154 | border-top-left-radius: 6px 6px; 155 | border-top-right-radius: 6px 6px; 156 | max-width:229px; 157 | white-space:normal; 158 | } 159 | .scanChap a { 160 | text-decoration:none; 161 | color:#00A; 162 | font-weight:bold; 163 | cursor:pointer; 164 | font-family:Verdana; 165 | } 166 | .scanChap a span { 167 | white-space:normal; 168 | } 169 | .scanNote { 170 | text-align:center; 171 | } 172 | .scanNote span { 173 | white-space: normal; 174 | } 175 | .scanIconsCont { 176 | position:relative; 177 | display:none; 178 | } 179 | .scanIconsContTd { 180 | float:right; 181 | } 182 | .scanIcons { 183 | position:absolute; 184 | top:5px; 185 | left:5px; 186 | } 187 | .scanIconsContTd .scanIcons { 188 | position:static; 189 | top:5px; 190 | } 191 | .scanMirror { 192 | margin-right:2px; 193 | display:inline-block; 194 | } 195 | .scanMirror.horiz { 196 | margin-right:0px; 197 | margin-bottom:2px; 198 | display:block; 199 | } 200 | 201 | a.buttonAMR { 202 | font-size:10pt!important; 203 | color:#000!important; 204 | text-decoration:none!important; 205 | display:inline-block; 206 | min-width:100px; 207 | padding:2px; 208 | border:1px solid #DDD; 209 | text-align:center; 210 | background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFFFFF), to(#EEE)); 211 | border-radius:5px; 212 | -webkit-transition: all .4s ease-in-out; 213 | margin:5px; 214 | cursor:pointer; 215 | } 216 | 217 | a.buttonAMR:hover { 218 | color:#003C82!important; 219 | border-color:#3278BE; 220 | text-decoration:none!important; 221 | background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#EEE), to(#FFFFFF)); 222 | } 223 | 224 | a.buttonAMR:active { 225 | background:#4195DD; 226 | background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(#003C82), to(#4195DD)); 227 | background:-moz-linear-gradient(0% 90% 90deg, #4195DD, #003C82); 228 | } 229 | 230 | #bookmarkPop { 231 | display:none; 232 | } 233 | 234 | #simplemodal-overlay { 235 | background-color:#000; 236 | cursor:wait; 237 | } 238 | 239 | #simplemodal-container { 240 | color:#bbb!important; 241 | background-color:#333!important; 242 | border:4px solid #444!important; 243 | padding:10px!important; 244 | height:auto!important; 245 | min-height:220px!important; 246 | width:474px!important; 247 | font-family:Verdana!important; 248 | font-size: 13px!important; 249 | color: #BBB!important; 250 | } 251 | #simplemodal-container a.buttonAMR { 252 | padding-bottom:0!important; 253 | margin-bottom:5px!important; 254 | } 255 | #simplemodal-container .simplemodal-wrap { 256 | overflow:hidden!important; 257 | } 258 | #simplemodal-container a.modalCloseImg { 259 | background-repeat: no-repeat; 260 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAdCAYAAABfeMd1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA8xJREFUeNqclktIVFEYx+fO+GjUGqw0S/IRGtTKENtkqJTkooUwC0EQNNpEEiJYoISbKAhcCYogagvBlbRQW/kAIdAkbRGIi3RiNIfJR+qk4zxO/2/4zu3cOw+tA7+5c8/j+5/vfN8592hCCMspSy4o4acXLIHVU40kkQTkglfgm4hd3KAb3PxfESf4KU5XAuBRPA0tznINgCa1Yn193bK0tBR5ZmVlWUpKSiyFhYXmcfPgiaZpn0/yZEKd4vLysqioqKCZRAEhMTc3Z/bqy0nL9Uzt3dXVJex2e0wBic1mEx0dHcLv96tDX8cTyVN7tbW1JTRupr6+3uzR7Vgib2Tr5ORklJHa2lrDe0FBgVhcXDTUDw8PqyIfY4m4ZGt5ebnB4OrqaqS+srJSj8XOzk6kbnBwUO9XVFQkgsGgKmTTRQ4PD/NlrcvlivKis7Mz0kZiJBRLQDI7O/s3rwOBu7oI1B/KhrGxsaiBtDTSsCyxBIj+/n69D+w+Jg0r/YTD4Wy5fF6vNyoD19bWLENDQ4b3pqammBtPHQ+diF0rNo4GxT3Z4HA4ogbSxmtsbNTf4ZnhXS1Ief1/KBQ6og0f2fXIkuJ4MVGDLBOACtVRW6KYuN3ue7oISIc3btmoDp6enjYYbWlp0Y3Qf1UAx40hu0pLSx0yJPRz1uPxvJONo6OjhswiAZm+BBlX3yU9PT26gM/no/PrHLDpIr29vQ/U7GloaDBk10k7vrq62uDF+Pg4ZYbDIAKuzc/PD8hOdBbRUXGaI6Wmpkbs7+/rAltbW19RX2wWSQd54A6WzaV6REcFjvSYxikGtESqBwcHB7vt7e30bSngyVtl4M+AHHCrubn5+cbGxqb5tFtYWBB9fX2iu7s78pyZmYn6ciF2e62trS9hpwxcAWlqdqWA8+A6uA+ejoyMfBL/UFZWVjbr6ureYmwNuAEugtSIff4y0rpl8CWhFDjBC6fT+R4BdB8dHYXiGZ+amvJgY35A/3ZQB+iIv8pLlaR/frHpad2S2b1McJk75vPzUlVVVV5ZWdmF5ORkGw6+EL6YvyYmJlyIxyba3eA7swG2gQ8E6NSSIhoHKIWTgISyWSyH/2fyJMjrMPgNdvl6REI/gAfsgANwTCcLJYh+kWAhGwulcfplcqwyeWPZuQ8NpnNpn41uM3vsAQkEOQuNtxWTUCp7lcHPNK6zsifH7I2PZ+5j4QBPIhz3SqQsXRLHKZVFU/hd4xkGWcjPT7k8IelBwnsXC0kxK3tn4/9SJKwYDTPCLJDocmcWlPtJUy86isGERv4IMACaz3RmXeGcqwAAAABJRU5ErkJggg==); 261 | width:25px; 262 | height:29px; 263 | display:inline; 264 | z-index:3200; 265 | position:absolute; 266 | top:-15px; 267 | right:-16px; 268 | cursor:pointer; 269 | } 270 | #simplemodal-container span, #simplemodal-container #descEltAMR, #simplemodal-container td b { 271 | color: #BBB!important; 272 | font-family:Verdana!important; 273 | font-size: 13px!important; 274 | } 275 | #simplemodal-container td { 276 | padding:2px!important; 277 | } 278 | #simplemodal-container textarea { 279 | -webkit-appearance: textarea!important; 280 | -webkit-border-horizontal-spacing: 2px!important; 281 | -webkit-border-vertical-spacing: 2px!important; 282 | -webkit-box-orient: vertical!important; 283 | -webkit-rtl-ordering: logical!important; 284 | -webkit-user-select: text!important; 285 | font-family: monospace!important; 286 | font-size: 13px!important; 287 | font-style: normal!important; 288 | font-variant: normal!important; 289 | font-weight: normal!important; 290 | margin-bottom: 2px!important; 291 | margin-left: 2px!important; 292 | margin-right: 2px!important; 293 | margin-top: 2px!important; 294 | padding-bottom: 2px!important; 295 | padding-left: 2px!important; 296 | padding-right: 2px!important; 297 | padding-top: 2px!important; 298 | resize: both!important; 299 | } 300 | #simplemodal-container h3 { 301 | padding:10px!important; 302 | padding-left:0px!important; 303 | margin:0!important; 304 | color:#84b8d9!important; 305 | text-align:left!important; 306 | font-size:16pt!important; 307 | font-family:Verdana!important; 308 | font-weight:bold!important; 309 | } 310 | 311 | #saveBtnAMR { 312 | float:right!important; 313 | padding-right:10px!important; 314 | } 315 | 316 | .bookAMR { 317 | cursor: pointer!important; 318 | vertical-align: middle!important; 319 | } 320 | 321 | #bookmarkPop #descEltAMR { 322 | font-size:10pt!important; 323 | margin-bottom:10px!important; 324 | text-align:left!important; 325 | } 326 | #bookmarkPop #tipBMAMR { 327 | font-size:10pt!important; 328 | clear:both!important; 329 | text-align:center!important; 330 | } 331 | #bookmarkPop #tipBMAMR a { 332 | color:#84b8d9!important; 333 | text-decoration:none!important; 334 | font-weight:bold!important; 335 | cursor:pointer!important; 336 | font-family:Verdana!important; 337 | font-size: 13px!important; 338 | } 339 | 340 | .mirrorIcon { 341 | display: inline-block; 342 | margin:4px; 343 | opacity:0.2; 344 | } 345 | .mirrorIcon.checked { 346 | opacity:1; 347 | } 348 | 349 | .article * { 350 | color:black; 351 | } 352 | 353 | .article .article .article.ongletCont { 354 | border:1px solid #DDDDFF; 355 | margin-top:-8px; 356 | } 357 | -------------------------------------------------------------------------------- /css/importexport.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | .button { 21 | max-width: 300px; 22 | cursor: pointer; 23 | margin: 5px; 24 | display: inline-block; 25 | padding: 4px; 26 | } 27 | .button img { 28 | margin-left:5px; 29 | vertical-align:middle; 30 | } 31 | 32 | .resImpDiv { 33 | text-align:center; 34 | } 35 | 36 | .resImport { 37 | font-weight:bold; 38 | margin-right:10px; 39 | } 40 | .ongletCont { 41 | -webkit-transition: all .4s ease-in-out; 42 | margin-top:-3px; 43 | } -------------------------------------------------------------------------------- /css/jquery.treeview.css: -------------------------------------------------------------------------------- 1 | .treeview, .treeview ul { 2 | padding: 0; 3 | margin: 0; 4 | list-style: none; 5 | } 6 | 7 | .treeview ul { 8 | background-color: white; 9 | margin-top: 4px; 10 | } 11 | 12 | .treeview .hitarea { 13 | background: url(../img/images/treeview-default.gif) -64px -25px no-repeat; 14 | height: 16px; 15 | width: 16px; 16 | margin-left: -16px; 17 | float: left; 18 | cursor: pointer; 19 | } 20 | /* fix for IE6 */ 21 | * html .hitarea { 22 | display: inline; 23 | float:none; 24 | } 25 | 26 | .treeview li { 27 | margin: 0; 28 | padding: 3px 0pt 3px 16px; 29 | } 30 | 31 | .treeview a.selected { 32 | background-color: #eee; 33 | } 34 | 35 | #treecontrol { margin: 1em 0; display: none; } 36 | 37 | .treeview .hover { color: red; cursor: pointer; } 38 | 39 | .treeview li { background: url(../img/images/treeview-default-line.gif) 0 0 no-repeat; } 40 | .treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; } 41 | 42 | .treeview .expandable-hitarea { background-position: -80px -3px; } 43 | 44 | .treeview li.last { background-position: 0 -1766px } 45 | .treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(../img/images/treeview-default.gif); } 46 | .treeview li.lastCollapsable { background-position: 0 -111px } 47 | .treeview li.lastExpandable { background-position: -32px -67px } 48 | 49 | .treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; } 50 | 51 | .treeview-red li { background-image: url(../img/images/treeview-red-line.gif); } 52 | .treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(../img/images/treeview-red.gif); } 53 | 54 | .treeview-black li { background-image: url(../img/images/treeview-black-line.gif); } 55 | .treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(../img/images/treeview-black.gif); } 56 | 57 | .treeview-gray li { background-image: url(../img/images/treeview-gray-line.gif); } 58 | .treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(../img/images/treeview-gray.gif); } 59 | 60 | .treeview-famfamfam li { background-image: url(../img/images/treeview-famfamfam-line.gif); } 61 | .treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(../img/images/treeview-famfamfam.gif); } 62 | 63 | .treeview .placeholder { 64 | background: url(../img/images/ajax-loader.gif) 0 0 no-repeat; 65 | height: 16px; 66 | width: 16px; 67 | display: block; 68 | } 69 | 70 | .filetree li { padding: 3px 0 2px 16px; } 71 | .filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; } 72 | .filetree span.folder { background: url(../img/images/folder.gif) 0 0 no-repeat; } 73 | .filetree li.expandable span.folder { background: url(../img/images/folder-closed.gif) 0 0 no-repeat; } 74 | .filetree span.file { background: url(../img/images/file.gif) 0 0 no-repeat; } 75 | -------------------------------------------------------------------------------- /css/lab.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | #results thead { 21 | background-color:#EEEEEE; 22 | font-weight:bold; 23 | } 24 | #results thead * td { 25 | text-align: center; 26 | } 27 | #results tbody tr.odd { 28 | background-color:#FAFABB; 29 | } 30 | #results tbody tr.even { 31 | background-color:#EBEBBB; 32 | } 33 | 34 | #results * td { 35 | font-size:8pt; 36 | } 37 | .article * { 38 | color:black; 39 | } 40 | 41 | .globerrors { 42 | display: none; 43 | } 44 | .globerrors li { 45 | font-size:8pt; 46 | color: red; 47 | } 48 | #testinfos { 49 | word-break: break-word; 50 | } 51 | .bottominfo { 52 | margin-top:10px; 53 | font-size:10pt; 54 | text-align:center; 55 | } 56 | -------------------------------------------------------------------------------- /css/options.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | .colorPicker { 21 | width:24px; 22 | height:24px; 23 | border-top-left-radius: 5px 5px; 24 | border-top-right-radius: 5px 5px; 25 | border-bottom-left-radius: 5px 5px; 26 | border-bottom-right-radius: 5px 5px; 27 | border: 1px solid #ABC; 28 | } 29 | .colorPicker.active { 30 | border: 2px solid #777; 31 | } 32 | #results { 33 | text-align:center; 34 | } 35 | #allmirrors { 36 | margin-left:auto; 37 | margin-right:auto; 38 | border-spacing:0; 39 | border-radius:4px; 40 | } 41 | #allmirrors img { 42 | margin-right:5px; 43 | vertical-align:middle; 44 | } 45 | #allmirrors, #allmirrors tr { 46 | /*display:block;*/ 47 | } 48 | #allmirrors tr td { 49 | /*display:block;*/ 50 | padding:2px; 51 | padding-right:10px; 52 | } 53 | #allmirrors thead td { 54 | text-align:center; 55 | font-weight:bold; 56 | color:white; 57 | } 58 | #allmirrors thead tr { 59 | background-color:grey; 60 | } 61 | tr.odd { 62 | background-color:#CCCCFF; 63 | } 64 | tr.even { 65 | background-color:#DDDDFF; 66 | } 67 | tr.desactivate { 68 | background-color:#DDDDDD; 69 | } 70 | tr.desactivateError { 71 | background-color:#FF0000; 72 | } 73 | td.mirrorName { 74 | /*width:500px;*/ 75 | vertical-align:middle; 76 | /*font-weight:bold;*/ 77 | } 78 | td.mirrorOpt { 79 | width:50px; 80 | text-align:center; 81 | } 82 | .paypal { 83 | padding-left:10px; 84 | padding-right:10px; 85 | padding-top:2px; 86 | padding-bottom:2px; 87 | font-size:9pt; 88 | text-align:center; 89 | background-color: #EEEEFF; 90 | border-radius:4px; 91 | color:black; 92 | margin-top:2px; 93 | margin-right:3px; 94 | box-shadow: 0 0 15px #F4F4FF; 95 | } 96 | .paypal .payitem { 97 | display:inline-block; 98 | background-color:#DDDDFF; 99 | padding:1px; 100 | padding-left:7px; 101 | padding-right:2px; 102 | border-radius:4px; 103 | box-shadow: inset 0px 0px 2px 2px #AAAADD; 104 | } 105 | .paypal p { 106 | padding:0; 107 | margin:0; 108 | } 109 | .paypal .payitem img, .paypal .payitem span { 110 | vertical-align:middle; 111 | font-weight:bold; 112 | } 113 | .bottominfo { 114 | margin-top:10px; 115 | font-size:10pt; 116 | text-align:center; 117 | } 118 | #selectors { 119 | display:inline-block; 120 | text-align:right; 121 | float:right; 122 | border-bottom-left-radius: 4px 4px; 123 | border-bottom-right-radius: 4px 4px; 124 | border-top-left-radius: 4px 4px; 125 | border-top-right-radius: 4px 4px; 126 | background-color:#CCCCFF; 127 | padding-left:5px; 128 | padding-right:5px; 129 | } 130 | #selectors img { 131 | vertical-align:middle; 132 | margin-right: 5px; 133 | cursor:pointer; 134 | } 135 | #selectors select { 136 | border:none; 137 | border-bottom-left-radius: 4px 4px; 138 | border-bottom-right-radius: 4px 4px; 139 | border-top-left-radius: 4px 4px; 140 | border-top-right-radius: 4px 4px; 141 | background-color:#DDDDFF; 142 | font-size:9pt; 143 | } 144 | .lang { 145 | width: 150px; 146 | } 147 | .ongletCont td { 148 | color:black; 149 | font-size:8pt; 150 | } 151 | .ongletCont { 152 | -webkit-transition: all .4s ease-in-out; 153 | margin-top:-3px; 154 | } 155 | .article p { 156 | font-size:8pt; 157 | } 158 | .discuss { 159 | cursor:pointer; 160 | } 161 | .discusstd { 162 | text-align:center; 163 | } 164 | .mirrorName { 165 | text-align: left; 166 | } -------------------------------------------------------------------------------- /css/pstat.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | .glob { 21 | width:100%; 22 | border-spacing:10px; 23 | } 24 | .glob td { 25 | vertical-align:top; 26 | } 27 | .tbstat { 28 | width:100%; 29 | } 30 | .tbstat, .tbstat tr { 31 | border-spacing:0; 32 | } 33 | .tbstat tr td { 34 | font-size:8pt; 35 | padding:2px; 36 | color:black; 37 | } 38 | .tbstat thead tr { 39 | background-color:#BBBBFF; 40 | } 41 | .tbstat thead td { 42 | vertical-align: middle; 43 | text-align:center; 44 | color:white; 45 | font-weight:bold; 46 | } 47 | 48 | .tbstat tr td.times { 49 | text-align:right; 50 | } 51 | 52 | .tbstat tr.odd { 53 | background-color:#CCCCFF; 54 | } 55 | 56 | .tbstat tr.even { 57 | background-color:#DDDDFF; 58 | } 59 | .tbstat tr.lastLine { 60 | border-bottom-left-radius: 4px 4px; 61 | border-bottom-right-radius: 4px 4px; 62 | } 63 | .tbstat tr.firstLine { 64 | border-top-left-radius: 4px 4px; 65 | border-top-right-radius: 4px 4px; 66 | } 67 | select { 68 | border:none; 69 | border-bottom-left-radius: 4px 4px; 70 | border-bottom-right-radius: 4px 4px; 71 | border-top-left-radius: 4px 4px; 72 | border-top-right-radius: 4px 4px; 73 | background-color:#DDDDFF; 74 | font-size:9pt; 75 | } 76 | a.link { 77 | font-weight:bold; 78 | cursor:pointer; 79 | } 80 | .tbstat td img { 81 | cursor:pointer; 82 | } 83 | .tbstat td.buttontd { 84 | vertical-align:middle; 85 | } 86 | .ongletCont { 87 | -webkit-transition: all .4s ease-in-out; 88 | margin-top:-3px; 89 | } -------------------------------------------------------------------------------- /css/search.css: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | #allres, #allres tr { 21 | width:100%; 22 | display:block; 23 | } 24 | #resTr { 25 | font-size: 0pt!important; 26 | } 27 | #allres tr td { 28 | display:table-cell; 29 | } 30 | tr.odd { 31 | background-color:#CCCCFF; 32 | } 33 | 34 | tr.even { 35 | background-color:#DDDDFF; 36 | } 37 | tr.lastLine { 38 | border-bottom-left-radius: 4px 4px; 39 | border-bottom-right-radius: 4px 4px; 40 | } 41 | tr.firstLine { 42 | border-top-left-radius: 4px 4px; 43 | border-top-right-radius: 4px 4px; 44 | } 45 | td.mangaName { 46 | width:60%; 47 | /*font-weight:bold;*/ 48 | } 49 | td.listMirror { 50 | width:800px; 51 | text-align:left; 52 | } 53 | 54 | #results * img { 55 | vertical-align: middle; 56 | margin-right:5px; 57 | cursor:pointer; 58 | } 59 | 60 | .imgSearch { 61 | background-repeat: no-repeat; 62 | width: 16px; 63 | height: 16px; 64 | cursor: pointer; 65 | margin-left:10px; 66 | margin-top:8px; 67 | padding-left:20px; 68 | background-image: url(../img/find.png); 69 | } 70 | 71 | #coverLoadServer { 72 | display: none; 73 | } 74 | 75 | #nbRes, #nores { 76 | font-weight:bold; 77 | width:100%; 78 | text-align:center; 79 | margin-bottom:10px; 80 | font-size:10pt; 81 | } 82 | #filMirrors { 83 | text-align:center; 84 | } 85 | .mirrorF { 86 | display:inline-block; 87 | } 88 | .mirrorStatus { 89 | text-align:center!important; 90 | height:14px; 91 | } 92 | 93 | .mirrorIcon img { 94 | opacity: 1; 95 | } 96 | .mirrorIcon img.disabled { 97 | opacity: 0.3; 98 | } 99 | #selectors { 100 | display:inline-block; 101 | text-align:right; 102 | float:right; 103 | border-bottom-left-radius: 4px 4px; 104 | border-bottom-right-radius: 4px 4px; 105 | border-top-left-radius: 4px 4px; 106 | border-top-right-radius: 4px 4px; 107 | background-color:#CCCCFF; 108 | padding-left:5px; 109 | padding-right:5px; 110 | } 111 | #selectors img { 112 | vertical-align:middle; 113 | margin-right: 5px; 114 | cursor:pointer; 115 | } 116 | #searchBox p { 117 | font-size:9pt; 118 | } 119 | #selectors select { 120 | border:none; 121 | border-bottom-left-radius: 4px 4px; 122 | border-bottom-right-radius: 4px 4px; 123 | border-top-left-radius: 4px 4px; 124 | border-top-right-radius: 4px 4px; 125 | background-color:#DDDDFF; 126 | font-size:9pt; 127 | } 128 | input { 129 | border:none; 130 | border-bottom-left-radius: 4px 4px; 131 | border-bottom-right-radius: 4px 4px; 132 | border-top-left-radius: 4px 4px; 133 | border-top-right-radius: 4px 4px; 134 | background-color:#DDDDFF; 135 | font-size:9pt; 136 | padding:2px; 137 | } 138 | .optmgsearch { 139 | float:right; 140 | border-radius:4px; 141 | background-color:#EEEEFF; 142 | padding:2px; 143 | padding-right:0; 144 | } 145 | .optmgsearch img { 146 | margin-right:2px; 147 | cursor:pointer; 148 | } 149 | 150 | .eltmirrorsearch { 151 | float:left; 152 | border-radius:4px; 153 | background-color:#EEEEFF; 154 | padding:2px; 155 | margin-right:2px; 156 | padding-left:4px; 157 | } 158 | 159 | #results * img.addsinglemg { 160 | margin-right:1px; 161 | padding-right:0; 162 | } 163 | .article * { 164 | color:black; 165 | } -------------------------------------------------------------------------------- /img/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/add.png -------------------------------------------------------------------------------- /img/addlt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/addlt.png -------------------------------------------------------------------------------- /img/amrlittle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/amrlittle.png -------------------------------------------------------------------------------- /img/arabic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/arabic.png -------------------------------------------------------------------------------- /img/backward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/backward.png -------------------------------------------------------------------------------- /img/blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/blank.png -------------------------------------------------------------------------------- /img/blue-sharingan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/blue-sharingan.png -------------------------------------------------------------------------------- /img/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/blue.png -------------------------------------------------------------------------------- /img/bookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/bookmark.png -------------------------------------------------------------------------------- /img/bookmarkred.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/bookmarkred.png -------------------------------------------------------------------------------- /img/cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/cancel.png -------------------------------------------------------------------------------- /img/cancels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/cancels.png -------------------------------------------------------------------------------- /img/chinese.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/chinese.png -------------------------------------------------------------------------------- /img/code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/code.png -------------------------------------------------------------------------------- /img/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/comment.png -------------------------------------------------------------------------------- /img/day.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/day.png -------------------------------------------------------------------------------- /img/delete10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/delete10.png -------------------------------------------------------------------------------- /img/dev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/dev.png -------------------------------------------------------------------------------- /img/donate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/donate.png -------------------------------------------------------------------------------- /img/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/down.png -------------------------------------------------------------------------------- /img/down_der.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/down_der.png -------------------------------------------------------------------------------- /img/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/edit.png -------------------------------------------------------------------------------- /img/edit10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/edit10.png -------------------------------------------------------------------------------- /img/edit102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/edit102.png -------------------------------------------------------------------------------- /img/english.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/english.png -------------------------------------------------------------------------------- /img/external.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/external.png -------------------------------------------------------------------------------- /img/eye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/eye.png -------------------------------------------------------------------------------- /img/eyeblue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/eyeblue.png -------------------------------------------------------------------------------- /img/eyes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/eyes.png -------------------------------------------------------------------------------- /img/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/facebook.png -------------------------------------------------------------------------------- /img/find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/find.png -------------------------------------------------------------------------------- /img/forum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/forum.png -------------------------------------------------------------------------------- /img/foward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/foward.png -------------------------------------------------------------------------------- /img/french.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/french.png -------------------------------------------------------------------------------- /img/gplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/gplus.png -------------------------------------------------------------------------------- /img/gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/gray.png -------------------------------------------------------------------------------- /img/help/AMRBlockMode.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/help/AMRBlockMode.PNG -------------------------------------------------------------------------------- /img/help/AMRListMode.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/help/AMRListMode.PNG -------------------------------------------------------------------------------- /img/help/AMRPopupSearch.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/help/AMRPopupSearch.PNG -------------------------------------------------------------------------------- /img/help/amrbar.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/help/amrbar.PNG -------------------------------------------------------------------------------- /img/help/amrbaradd.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/help/amrbaradd.PNG -------------------------------------------------------------------------------- /img/help/bmchap.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/help/bmchap.PNG -------------------------------------------------------------------------------- /img/help/bmscan.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/help/bmscan.PNG -------------------------------------------------------------------------------- /img/help/chappopup.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/help/chappopup.PNG -------------------------------------------------------------------------------- /img/help/scanpopup.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/help/scanpopup.PNG -------------------------------------------------------------------------------- /img/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/history.png -------------------------------------------------------------------------------- /img/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/home.png -------------------------------------------------------------------------------- /img/icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/icon-32.png -------------------------------------------------------------------------------- /img/images/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/ajax-loader.gif -------------------------------------------------------------------------------- /img/images/file.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/file.gif -------------------------------------------------------------------------------- /img/images/folder-closed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/folder-closed.gif -------------------------------------------------------------------------------- /img/images/folder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/folder.gif -------------------------------------------------------------------------------- /img/images/minus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/minus.gif -------------------------------------------------------------------------------- /img/images/plus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/plus.gif -------------------------------------------------------------------------------- /img/images/treeview-black-line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-black-line.gif -------------------------------------------------------------------------------- /img/images/treeview-black.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-black.gif -------------------------------------------------------------------------------- /img/images/treeview-default-line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-default-line.gif -------------------------------------------------------------------------------- /img/images/treeview-default.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-default.gif -------------------------------------------------------------------------------- /img/images/treeview-famfamfam-line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-famfamfam-line.gif -------------------------------------------------------------------------------- /img/images/treeview-famfamfam.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-famfamfam.gif -------------------------------------------------------------------------------- /img/images/treeview-gray-line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-gray-line.gif -------------------------------------------------------------------------------- /img/images/treeview-gray.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-gray.gif -------------------------------------------------------------------------------- /img/images/treeview-red-line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-red-line.gif -------------------------------------------------------------------------------- /img/images/treeview-red.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/images/treeview-red.gif -------------------------------------------------------------------------------- /img/imgerror.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/imgerror.png -------------------------------------------------------------------------------- /img/importexport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/importexport.png -------------------------------------------------------------------------------- /img/indonesian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/indonesian.png -------------------------------------------------------------------------------- /img/infos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/infos.png -------------------------------------------------------------------------------- /img/italian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/italian.png -------------------------------------------------------------------------------- /img/japanese.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/japanese.png -------------------------------------------------------------------------------- /img/lab_hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/lab_hand.png -------------------------------------------------------------------------------- /img/lab_ko.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/lab_ko.png -------------------------------------------------------------------------------- /img/lab_load.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/lab_load.gif -------------------------------------------------------------------------------- /img/lab_ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/lab_ok.png -------------------------------------------------------------------------------- /img/lefttoright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/lefttoright.png -------------------------------------------------------------------------------- /img/list10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/list10.gif -------------------------------------------------------------------------------- /img/load10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/load10.gif -------------------------------------------------------------------------------- /img/load16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/load16.gif -------------------------------------------------------------------------------- /img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/loading.gif -------------------------------------------------------------------------------- /img/ltload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/ltload.gif -------------------------------------------------------------------------------- /img/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/minus.png -------------------------------------------------------------------------------- /img/month.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/month.png -------------------------------------------------------------------------------- /img/new.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/new.gif -------------------------------------------------------------------------------- /img/ontop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/ontop.png -------------------------------------------------------------------------------- /img/options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/options.png -------------------------------------------------------------------------------- /img/paypaldon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/paypaldon.gif -------------------------------------------------------------------------------- /img/paypaldonlt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/paypaldonlt.gif -------------------------------------------------------------------------------- /img/persian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/persian.png -------------------------------------------------------------------------------- /img/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/play.png -------------------------------------------------------------------------------- /img/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/plus.png -------------------------------------------------------------------------------- /img/polish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/polish.png -------------------------------------------------------------------------------- /img/portuguese.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/portuguese.png -------------------------------------------------------------------------------- /img/prettyPhoto/light_rounded/btnNext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/prettyPhoto/light_rounded/btnNext.png -------------------------------------------------------------------------------- /img/prettyPhoto/light_rounded/btnPrevious.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/prettyPhoto/light_rounded/btnPrevious.png -------------------------------------------------------------------------------- /img/prettyPhoto/light_rounded/default_thumbnail.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/prettyPhoto/light_rounded/default_thumbnail.gif -------------------------------------------------------------------------------- /img/prettyPhoto/light_rounded/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/prettyPhoto/light_rounded/loader.gif -------------------------------------------------------------------------------- /img/prettyPhoto/light_rounded/sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/prettyPhoto/light_rounded/sprite.png -------------------------------------------------------------------------------- /img/pstat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/pstat.png -------------------------------------------------------------------------------- /img/read_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/read_play.png -------------------------------------------------------------------------------- /img/read_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/read_stop.png -------------------------------------------------------------------------------- /img/red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/red.png -------------------------------------------------------------------------------- /img/release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/release.png -------------------------------------------------------------------------------- /img/return.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/return.png -------------------------------------------------------------------------------- /img/righttoleft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/righttoleft.png -------------------------------------------------------------------------------- /img/russian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/russian.png -------------------------------------------------------------------------------- /img/select_all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/select_all.png -------------------------------------------------------------------------------- /img/select_none.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/select_none.png -------------------------------------------------------------------------------- /img/spanish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/spanish.png -------------------------------------------------------------------------------- /img/stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/stats.png -------------------------------------------------------------------------------- /img/stop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/stop.gif -------------------------------------------------------------------------------- /img/sync.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/sync.png -------------------------------------------------------------------------------- /img/toend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/toend.png -------------------------------------------------------------------------------- /img/turkish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/turkish.png -------------------------------------------------------------------------------- /img/unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/unknown.png -------------------------------------------------------------------------------- /img/up_der.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/up_der.png -------------------------------------------------------------------------------- /img/vietnamese.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/vietnamese.png -------------------------------------------------------------------------------- /img/warn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/warn.png -------------------------------------------------------------------------------- /img/week.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/week.png -------------------------------------------------------------------------------- /img/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/img/x.png -------------------------------------------------------------------------------- /importexport.html: -------------------------------------------------------------------------------- 1 |  19 | 20 | 21 | 22 | All Mangas Reader Import / Export 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 39 | 46 |
47 |
48 |
    49 |
  • Import
  • 50 |
  • Export
  • 51 |
52 |
53 |
54 |

To import a file, open it (with notepad for example), copy its whole content and paste it in the bow below :

55 |
56 | 57 |
58 |
59 |
Let AMR read it !
60 |
61 | 62 |
63 |
64 | 86 |
87 |
88 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /js/MangaElt.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | /* Object manga */ 21 | XMLHttpRequest.prototype.mangaEltRef = null; 22 | XMLHttpRequest.prototype.extensionRef = null; 23 | HTMLLinkElement.prototype.mangaEltRef = null; 24 | HTMLLinkElement.prototype.divDelete = null; 25 | HTMLLinkElement.prototype.divNormal = null; 26 | HTMLLinkElement.prototype.mirror = null; 27 | HTMLInputElement.prototype.mirror = null; 28 | 29 | Array.prototype.remove = function (from, to) { 30 | "use strict"; 31 | var rest = this.slice((to || from) + 1 || this.length); 32 | this.length = from < 0 ? this.length + from : from; 33 | return this.push.apply(this, rest); 34 | }; 35 | 36 | function MangaElt(obj) { 37 | "use strict"; 38 | this.mirror = obj.mirror; 39 | this.name = obj.name; 40 | this.url = obj.url; 41 | this.lastChapterReadURL = obj.lastChapterReadURL || null; 42 | this.lastChapterReadName = obj.lastChapterReadName || null; 43 | this.listChaps = []; 44 | if (obj.listChaps) { 45 | this.listChaps = JSON.parse(obj.listChaps) 46 | } 47 | this.read = obj.read || 0; 48 | this.update = obj.update || 1; 49 | this.display = obj.display || 0; 50 | this.cats = obj.cats || []; 51 | if (obj.cats) { 52 | this.cats = JSON.parse(obj.cats); 53 | } 54 | this.ts = obj.ts || Math.round((new Date()).getTime() / 1000); 55 | this.upts = obj.upts || 0; 56 | 57 | this.consult = function (obj, fromSite) { 58 | if (fromSite === undefined) { 59 | fromSite = false; 60 | } 61 | var posOld = -1, 62 | posNew = -1, 63 | isNew = false, 64 | i; 65 | 66 | for (i = 0; i < this.listChaps.length; i += 1) { 67 | if (this.listChaps[i][1] === this.lastChapterReadURL) { 68 | posOld = i; 69 | } 70 | if (this.listChaps[i][1] === obj.lastChapterReadURL) { 71 | posNew = i; 72 | } 73 | } 74 | if (posNew === -1) { 75 | //New chapter is not in chapters list --> Reload chapter list 76 | if (getMangaMirror(this.mirror) !== null && this.update === 1) { 77 | getMangaMirror(this.mirror).getListChaps(this.url, this.name, this, function (lst, obj2) { 78 | if (lst.length > 0) { 79 | obj2.listChaps = lst; 80 | for (i = 0; i < lst.length; i += 1) { 81 | if (lst[i][1] === obj2.lastChapterReadURL) { 82 | posOld = i; 83 | } 84 | if (lst[i][1] === obj.lastChapterReadURL) { 85 | posNew = i; 86 | } 87 | } 88 | if (posNew !== -1) { 89 | if (fromSite || (posNew < posOld || posOld === -1)) { 90 | obj2.lastChapterReadURL = obj.lastChapterReadURL; 91 | obj2.lastChapterReadName = obj.lastChapterReadName; 92 | if (!fromSite) { 93 | obj2.ts = Math.round((new Date()).getTime() / 1000); 94 | } 95 | } 96 | } 97 | saveList(); 98 | } 99 | }); 100 | } 101 | } else { 102 | if (fromSite || (posNew < posOld || posOld === -1)) { 103 | this.lastChapterReadURL = obj.lastChapterReadURL; 104 | this.lastChapterReadName = obj.lastChapterReadName; 105 | if (!fromSite) { 106 | this.ts = Math.round((new Date()).getTime() / 1000); 107 | } 108 | } 109 | } 110 | 111 | //if the current manga doesnt have a name, and the request does, then we fix the current name 112 | if(this.name === "" && obj.name !== this.name){ 113 | this.name=obj.name; 114 | } 115 | 116 | //This happens when incoming updates comes from sync 117 | //if obj.display, obj.read, obj.cats, MAJ this.... 118 | if (obj.display) { 119 | this.display = obj.display; 120 | } 121 | if (obj.read) { 122 | this.read = obj.read; 123 | } 124 | if (obj.update) { 125 | this.update = obj.update; 126 | } 127 | if (obj.cats !== undefined && obj.cats !== null) { 128 | if(obj.cats instanceof Array){ 129 | this.cats= obj.cats; 130 | }else{ 131 | this.cats = JSON.parse(obj.cats) || []; 132 | } 133 | } 134 | if (obj.ts && fromSite) { 135 | this.ts = obj.ts; 136 | } 137 | }; 138 | 139 | this.refreshLast = function (doSave, callback) { 140 | if (this.update === 1) { 141 | //Refresh the last existing chapter of this manga 142 | if (!doSave) { 143 | doSave = true; 144 | } 145 | var myself = this, 146 | hasBeenTimeout = false, 147 | timeOutRefresh = setTimeout(function () { 148 | hasBeenTimeout = true; 149 | console.log("Refreshing " + myself.url + " has been timeout... seems unreachable..."); 150 | if (callback !== undefined && typeof callback === 'function') { 151 | callback(myself); 152 | } 153 | }, 60000); 154 | 155 | setTimeout(function () { 156 | if (getMangaMirror(myself.mirror) !== null) { 157 | getMangaMirror(myself.mirror).getListChaps(myself.url, myself.name, myself, function (lst, obj) { 158 | clearTimeout(timeOutRefresh); 159 | if (lst.length > 0) { 160 | var parameters = JSON.parse(localStorage.parameters), 161 | oldLastChap = (typeof obj.listChaps[0] === 'object' ? obj.listChaps[0][1] : undefined), 162 | newLastChap, 163 | urls, 164 | mangaData, 165 | notification; 166 | obj.listChaps = lst; 167 | newLastChap = obj.listChaps[0][1]; 168 | // if oldLastChap === undefined --> new manga added --> no notifications (Issue #40) 169 | if ((newLastChap !== oldLastChap) && (oldLastChap !== undefined)) { 170 | if (obj.read === 0 && (parameters.shownotifications === 1)) { 171 | urls = $.map(obj.listChaps, function (chap) {return chap[1]; }); 172 | mangaData = {name: obj.name, mirror: obj.mirror, url: urls[urls.indexOf(obj.lastChapterReadURL) - 1]}; 173 | // Notification data added to variables to be used by the old or by the new notification API. 174 | var description = "... has new chapter(s) on " + mangaData.mirror + "! Click anywhere to open the next unread chapter."; 175 | var title = mangaData.name; 176 | var icon = chrome.extension.getURL('img/icon-32.png'); 177 | var url = mangaData.url; 178 | if (chrome.notifications) { 179 | // The new API have no notification object, so can't save data on it. 180 | // Hence, the URL must be saved under a global object, mapped by ID. 181 | // (no one would like to click a manga notification and ending up opening another manga) 182 | // For now, those global data is being saved here. But I think it would be better 183 | // to move it to another place for the sake of better code organization. 184 | // And because there are other notifications being opened elsewhere in the code too. 185 | if (myself.notifications === undefined) { 186 | myself.notifications = {}; 187 | } 188 | if (myself.lastNotificationID === undefined) { 189 | myself.lastNotificationID = 1; 190 | } else { 191 | // lastNotificationID can, if the browser is open a sufficient amount of time 192 | // and a lot of new manga chapters are found, grow beyond the number upper limit. 193 | // But this is so unlikely to happen... 194 | myself.lastNotificationID++; 195 | } 196 | myself.notifications["amr" + myself.lastNotificationID] = url; 197 | // Callback function to notification click. 198 | var notificationClickCallback = function(id) { 199 | if (myself.notifications[id] !== undefined) { 200 | chrome.tabs.create({ 201 | "url" : myself.notifications[id] 202 | }); 203 | // It deletes the used URL to avoid unbounded object growing. 204 | // Well, if the notification isn't clicked the said growing is not avoided. 205 | // If this proves to be a issue a close callback should be added too. 206 | delete myself.notifications[id]; 207 | } 208 | }; 209 | var notificationOptions = { 210 | type: "basic", 211 | title: title, 212 | message: description, 213 | iconUrl: icon 214 | }; 215 | // Add the callback to ALL notifications opened by AMR. 216 | // This can sure be a issue with another notifications AMR opens. 217 | chrome.notifications.onClicked.addListener(notificationClickCallback); 218 | // And finally opens de notification. The third parameter is a creation callback, 219 | // which I think is not needed here. 220 | chrome.notifications.create("amr" + myself.lastNotificationID, notificationOptions, function() {}); 221 | } 222 | } 223 | //Set upts to now (means : 'last time we found a new chapter is now'); 224 | obj.upts = new Date().getTime(); 225 | } 226 | if (obj.lastChapterReadURL === null) { 227 | obj.lastChapterReadURL = lst[lst.length - 1][1]; 228 | obj.lastChapterReadName = lst[lst.length - 1][0]; 229 | obj.ts = Math.round((new Date()).getTime() / 1000); 230 | } 231 | if (doSave || hasBeenTimeout) { 232 | saveList(); 233 | } 234 | } 235 | 236 | if (callback !== undefined && typeof callback === 'function' && !hasBeenTimeout) { 237 | callback(obj); 238 | } 239 | }); 240 | } 241 | }, 10); 242 | } else { 243 | callback(this); 244 | } 245 | }; 246 | } 247 | 248 | -------------------------------------------------------------------------------- /js/MirrorModel.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | //CHANGE here the classname 21 | var MirrorClassName = { 22 | //CHANGE : Name of the mirror 23 | mirrorName : "", 24 | //CHANGE : True if the mirror can list all of its mangas. 25 | canListFullMangas : true, 26 | //CHANGE : Extension internal link to the icon of the mirror. (if not filled, will be blank...) 27 | mirrorIcon : "", 28 | 29 | //Return true if the url corresponds to the mirror 30 | isMe : function(url) { 31 | //CHANGE IMPLEMENTATION 32 | //Example : return (url.indexOf("yourmirror.com") != -1); 33 | }, 34 | 35 | //Return the list of all or part of all mangas from the mirror 36 | //The search parameter is filled if canListFullMangas is false 37 | //This list must be an Array of [["manga name", "url"], ...] 38 | //This function must call callback("Mirror name", [returned list]); 39 | getMangaList : function(search, callback) { 40 | $.ajax( 41 | { 42 | //CHANGE URL HERE 43 | url: "url to load in which manga list will be found", 44 | 45 | //KEEP THE HEADERS, THEY PREVENT CHROME TO LOAD URL FROM CACHE 46 | beforeSend: function(xhr) { 47 | xhr.setRequestHeader("Cache-Control", "no-cache"); 48 | xhr.setRequestHeader("Pragma", "no-cache"); 49 | }, 50 | 51 | success: function( objResponse ){ 52 | var div = document.createElement( "div" ); 53 | div.innerHTML = objResponse; 54 | var res = []; 55 | //BROWSE div object and fill res array 56 | //... 57 | 58 | //CHANGE NAME HERE 59 | callback("MirrorClassName", res); 60 | } 61 | }); 62 | }, 63 | 64 | //Find the list of all chapters of the manga represented by the urlManga parameter 65 | //This list must be an Array of [["chapter name", "url"], ...] 66 | //This list must be sorted descending. The first element must be the most recent. 67 | //This function MUST call callback([list of chapters], obj); 68 | getListChaps : function(urlManga, mangaName, obj, callback) { 69 | $.ajax( 70 | { 71 | //CHANGE URL HERE 72 | url: "url to load in which chapters list will be found for this manga", 73 | 74 | //KEEP THE HEADERS, THEY PREVENT CHROME TO LOAD URL FROM CACHE 75 | beforeSend: function(xhr) { 76 | xhr.setRequestHeader("Cache-Control", "no-cache"); 77 | xhr.setRequestHeader("Pragma", "no-cache"); 78 | }, 79 | 80 | success: function( objResponse ){ 81 | var div = document.createElement( "div" ); 82 | div.innerHTML = objResponse; 83 | 84 | var res = []; 85 | //BROWSE div object and fill res array 86 | //... 87 | 88 | //RETURNED LIST MUST BE IN DESCENDING ORDER, IF NOT, UNCOMMENT THE LINE 89 | //res = res.reverse(); 90 | 91 | callback(res, obj); 92 | } 93 | }); 94 | }, 95 | 96 | /******************************************************************************************************** 97 | IMPORTANT NOTE : methods which are running in the DOM of the page could directly use this DOM. 98 | However, if you want to test the mirror with the lab, you must use the two arguments (doc and curUrl) 99 | of these methods to avoid using window.location.href (replaced by curUrl) and manipulate the DOM within 100 | the object doc (example, replace $("select") by $("select", doc) in jQuery). 101 | ********************************************************************************************************/ 102 | 103 | //This method must return (throught callback method) an object like : 104 | //{"name" : Name of current manga, 105 | // "currentChapter": Name of thee current chapter (one of the chapters returned by getListChaps), 106 | // "currentMangaURL": Url to access current manga, 107 | // "currentChapterURL": Url to access current chapter} 108 | getInformationsFromCurrentPage : function(doc, curUrl, callback) { 109 | //This function runs in the DOM of the current consulted page. 110 | var name; 111 | var currentChapter; 112 | var currentMangaURL; 113 | var currentChapterURL; 114 | 115 | //FILL THE ABOVE VARIABLES HERE... 116 | //... 117 | 118 | /*console.log(" name : " + name + 119 | " currentChapter : " + currentChapter + 120 | " currentMangaURL : " + currentMangaURL + 121 | " currentChapterURL : " + currentChapterURL);*/ 122 | 123 | callback({"name": name, 124 | "currentChapter": currentChapter, 125 | "currentMangaURL": currentMangaURL, 126 | "currentChapterURL": currentChapterURL}); 127 | }, 128 | 129 | //Returns the list of the urls of the images of the full chapter 130 | //This function can return urls which are not the source of the 131 | //images. The src of the image is set by the getImageFromPageAndWrite() function. 132 | getListImages : function(doc, curUrl) { 133 | //This function runs in the DOM of the current consulted page. 134 | var res = []; 135 | //FILL THE RES ARRAY HERE 136 | //... 137 | 138 | return res; 139 | }, 140 | 141 | //Remove the banners from the current page 142 | removeBanners : function(doc, curUrl) { 143 | //This function runs in the DOM of the current consulted page. 144 | }, 145 | 146 | //This method returns the place to write the full chapter in the document 147 | //The returned element will be totally emptied. 148 | whereDoIWriteScans : function(doc, curUrl) { 149 | //This function runs in the DOM of the current consulted page. 150 | //YOU MUST RETURN ONLY ONE PLACE 151 | //you can change the DOM of the page before this method is called in doSomethingBeforeWritingScans 152 | return null; 153 | }, 154 | 155 | //This method returns places to write the navigation bar in the document 156 | //The returned elements won't be emptied. 157 | whereDoIWriteNavigation : function(doc, curUrl) { 158 | //This function runs in the DOM of the current consulted page. 159 | //YOU MUST RETURN TWO PLACES (ON TOP AND AT THE BOTTOM OF THE CHAPTER) 160 | //you can change the DOM of the page before this method is called in doSomethingBeforeWritingScans 161 | return null; 162 | }, 163 | 164 | //Return true if the current page is a page containing scan. 165 | isCurrentPageAChapterPage : function(doc, curUrl) { 166 | //VERIFY HERE THAT THE PAGE CONTAINS A SCAN 167 | return false; 168 | }, 169 | 170 | //This method is called before displaying full chapters in the page 171 | doSomethingBeforeWritingScans : function(doc, curUrl) { 172 | //This function runs in the DOM of the current consulted page. 173 | //PREPARE THE PAGE TO HOST NAVIGATION AND THE FULL CHAPTER 174 | //you may need to change elements in the page, add elements, remove others and change css 175 | }, 176 | 177 | //This method is called to fill the next button's url in the manga site navigation bar 178 | //The select containing the mangas list next to the button is passed in argument 179 | nextChapterUrl : function(select, doc, curUrl) { 180 | //This function runs in the DOM of the current consulted page. 181 | var chapRes = null; 182 | //FILL CHAPRES WITH THE URL OF NEXT CHAPTER 183 | return chapRes; 184 | }, 185 | 186 | //This method is called to fill the previous button's url in the manga site navigation bar 187 | //The select containing the mangas list next to the button is passed in argument 188 | previousChapterUrl : function(select, doc, curUrl) { 189 | //This function runs in the DOM of the current consulted page. 190 | var chapRes = null; 191 | //FILL CHAPRES WITH THE URL OF PREVIOUS CHAPTER 192 | return chapRes; 193 | }, 194 | 195 | //Write the image from the the url returned by the getListImages() function. 196 | //The function getListImages can return an url which is not the source of the 197 | //image. The src of the image is set by this function. 198 | //If getListImages function returns the src of the image, just do $( image ).attr( "src", urlImg ); 199 | getImageFromPageAndWrite : function(urlImg, image, doc, curUrl) { 200 | //This function runs in the DOM of the current consulted page. 201 | //IF URL IS IMAGE URL --> $( image ).attr( "src", urlImg ); 202 | }, 203 | 204 | //If it is possible to know if an image is a credit page or something which 205 | //must not be displayed as a book, just return true and the image will stand alone 206 | //img is the DOM object of the image 207 | isImageInOneCol : function(img, doc, curUrl) { 208 | //This function runs in the DOM of the current consulted page. 209 | //DO NOT CHANGE IF NOT NEEDED, NOT USED BY ANY EXISTING MIRROR AND CHAPTER'S DISPLAY IS WORKING FINE FOR THEM 210 | return false; 211 | }, 212 | 213 | //This function can return a preexisting select from the page to fill the 214 | //chapter select of the navigation bar. It avoids to load the chapters 215 | getMangaSelectFromPage : function(doc, curUrl) { 216 | //This function runs in the DOM of the current consulted page. 217 | //RETURN A SELECT IF NEEDED, ELSE, THE EXTENSIOn WILL FIND CHAPTER BY IT'S OWN MEANS 218 | return null; 219 | }, 220 | 221 | //This function is called when the manga is full loaded. Just do what you want here... 222 | doAfterMangaLoaded : function(doc, curUrl) { 223 | //This function runs in the DOM of the current consulted page. 224 | 225 | //THE FOLLOWING LINE IS NECESSARY IN MOST OF CASES 226 | $("body > div:empty", doc).remove(); 227 | 228 | //DO ANYTHING ELSE YOU NEED 229 | } 230 | } 231 | 232 | } 233 | -------------------------------------------------------------------------------- /js/amrcsql.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | /* 21 | 22 | */ 23 | 24 | var amrcsql = {}; 25 | amrcsql.webdb = {}; 26 | amrcsql.webdb.db = null; 27 | 28 | amrcsql.webdb.open = function() { 29 | var dbSize = 100 * 1024 * 1024; // 100MB max... 30 | amrcsql.webdb.db = openDatabase("AMR", "1.0", "All mangas reader", dbSize); 31 | }; 32 | 33 | amrcsql.webdb.createTable = function() { 34 | var db = amrcsql.webdb.db; 35 | db.transaction(function(tx) { 36 | tx.executeSql("CREATE TABLE IF NOT EXISTS websites( id INTEGER PRIMARY KEY ASC, " + 37 | "idext INTEGER, " + 38 | "objectName TEXT, " + 39 | "mirrorName TEXT, " + 40 | "websites TEXT, " + 41 | "revision INTEGER, " + 42 | "developer TEXT, " + 43 | "icon TEXT, " + 44 | "url TEXT, " + 45 | "code TEXT, " + 46 | "activated INTEGER)", []); 47 | }); 48 | }; 49 | 50 | amrcsql.webdb.storeWebsite = function(amrcObject, callback) { 51 | var db = amrcsql.webdb.db; 52 | db.transaction(function(tx){ 53 | tx.executeSql("INSERT INTO websites(idext, objectName, mirrorName, websites, revision, developer, icon, url, code, activated) VALUES (?,?,?,?,?,?,?,?,?,?)", 54 | [amrcObject.id, amrcObject.objectName, amrcObject.mirrorName, JSON.stringify(amrcObject.webSites), amrcObject.revision, amrcObject.developer, amrcObject.mirrorIcon, amrcObject.mirrorUrl, amrcObject.jsCode, 1], 55 | function(tx, sql_res) {callback();}, 56 | function(tx, e) {console.log("Error while inserting " + amrcObject.id + " for mirror " + amrcObject.mirrorName);} 57 | ); 58 | }); 59 | }; 60 | 61 | amrcsql.webdb.updateWebsite = function(amrcObject, callback) { 62 | var db = amrcsql.webdb.db; 63 | db.transaction(function(tx){ 64 | tx.executeSql("update websites set idext = ?, objectName = ?, websites = ?, revision = ?, developer = ?, icon = ?, url = ?, code = ? where mirrorName = ?", 65 | [amrcObject.id, amrcObject.objectName, JSON.stringify(amrcObject.webSites), amrcObject.revision, amrcObject.developer, amrcObject.mirrorIcon, amrcObject.mirrorUrl, amrcObject.jsCode, amrcObject.mirrorName], 66 | function(tx, sql_res) {callback();}, 67 | function(tx, e) {console.log("Error while inserting " + amrcObject.id + " for mirror " + amrcObject.mirrorName);} 68 | ); 69 | }); 70 | }; 71 | 72 | amrcsql.webdb.onError = function(tx, e) { 73 | alert("There has been an error: " + e.message); 74 | }; 75 | 76 | amrcsql.webdb.getWebsites = function(callback) { 77 | var db = amrcsql.webdb.db; 78 | db.transaction(function(tx) { 79 | tx.executeSql("SELECT * FROM websites", [], 80 | function(tx, res) { 81 | var ret = []; 82 | if (res.rows.length > 0) { 83 | for (var i = 0; i < res.rows.length; i++) { 84 | if(res.rows.item(i).websites!=="undefined"){ 85 | ret[ret.length] = { 86 | id: res.rows.item(i).id, 87 | idext: res.rows.item(i).idext, 88 | objectName: res.rows.item(i).objectName, 89 | mirrorName: res.rows.item(i).mirrorName, 90 | webSites: JSON.parse(res.rows.item(i).websites), 91 | revision: res.rows.item(i).revision, 92 | developer: res.rows.item(i).developer, 93 | mirrorIcon: res.rows.item(i).icon, 94 | mirrorUrl: res.rows.item(i).url, 95 | jsCode: res.rows.item(i).code, 96 | activated: (res.rows.item(i).activated == 1), 97 | }; 98 | }; 99 | } 100 | } 101 | callback(ret); 102 | }, 103 | amrcsql.webdb.onError 104 | ); 105 | }); 106 | }; 107 | 108 | amrcsql.init = function() { 109 | amrcsql.webdb.open(); 110 | amrcsql.webdb.createTable(); 111 | }; 112 | -------------------------------------------------------------------------------- /js/analytics.js: -------------------------------------------------------------------------------- 1 | var _gaq = _gaq || []; 2 | _gaq.push(['_setAccount', 'UA-18446915-1']); 3 | _gaq.push(['_trackPageview']); 4 | 5 | (function() { 6 | var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; 7 | ga.src = 'https://ssl.google-analytics.com/ga.js'; 8 | var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); 9 | })(); 10 | -------------------------------------------------------------------------------- /js/backamrc.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | $(function() { 21 | $(".importamrhead").show(); 22 | $(".importamr").show(); 23 | $(".labamr").show(); 24 | $("").appendTo($(".importamr")); 25 | $("").appendTo($(".labamr")); 26 | 27 | $(".importamr").click(function() { 28 | if ($(this).hasClass("disabled")) { 29 | alert("You have changed parts of the code... You must update the implementation before importing it."); 30 | } else { 31 | var _self = this; 32 | var _id; 33 | if ($(this).is(".button")) { 34 | _id = $("input[name='wid']").val(); 35 | } else { 36 | _id = $(_self).closest("tr").attr("rel"); 37 | } 38 | var req = { 39 | action: "importimplementation", 40 | id: _id 41 | }; 42 | sendExtRequest(req, $(this).is(".button") ? $(this) : $(".importimplemamr", $(this)), function() {}, true); 43 | } 44 | }); 45 | 46 | $(".labamr").click(function() { 47 | if ($(this).hasClass("disabled")) { 48 | alert("You have changed parts of the code... You must update the implementation before importing it."); 49 | } else { 50 | var _self = this; 51 | var _id; 52 | if ($(this).is(".button")) { 53 | _id = $("input[name='wid']").val(); 54 | } else { 55 | _id = $(_self).closest("tr").attr("rel"); 56 | } 57 | var req = { 58 | action: "importimplementation", 59 | id: _id 60 | }; 61 | sendExtRequest(req, $(this).is(".button") ? $(this) : $(".labimplemamr", $(this)), function(response) { 62 | chrome.runtime.sendMessage({action: "opentab", url: chrome.extension.getURL("lab.html?mirror=" + response.mirror)}, function() {}); 63 | }, true); 64 | } 65 | }); 66 | }); 67 | 68 | //Used to request background page action 69 | function sendExtRequest(request, button, callback, backsrc) { 70 | //Prevent a second request 71 | if (button.data("currentlyClicked")) return; 72 | button.data("currentlyClicked", true); 73 | 74 | //Display a loading image 75 | var _ancSrc; 76 | if (button.is("img")) { 77 | _ancSrc = button.attr("src"); 78 | button.attr("src", chrome.extension.getURL("img/load16.gif")); 79 | } else { 80 | if (button.is(".button")) { 81 | _ancSrc = $("") 82 | _ancSrc.appendTo(button); 83 | } 84 | if (button.is(".category") || button.is(".mgcategory")) { 85 | _ancSrc = $("") 86 | _ancSrc.appendTo(button); 87 | } 88 | } 89 | //Call the action 90 | chrome.runtime.sendMessage(request, function(response) { 91 | //setTimeout(function() { 92 | //Do the callback 93 | callback(response); 94 | //Removes the loading image 95 | if (button.is("img")) { 96 | if (backsrc) { 97 | button.attr("src", _ancSrc); 98 | } 99 | } else { 100 | if (button.is(".button") || button.is(".category") || button.is(".mgcategory")) { 101 | _ancSrc.remove(); 102 | } 103 | } 104 | //Restore request 105 | button.removeData("currentlyClicked"); 106 | //}, 1000); 107 | }); 108 | } 109 | -------------------------------------------------------------------------------- /js/backsite.js: -------------------------------------------------------------------------------- 1 | var nbclasses = 0; 2 | var mirrors; 3 | var states; 4 | 5 | $(function() { 6 | //Load mirrors definitions 7 | chrome.runtime.sendMessage({action: "actmirrors"}, function(res) { 8 | mirrors = res; 9 | // access localStorage via background 10 | chrome.runtime.sendMessage({action: "searchMirrorsState"}, function(locms) { 11 | if (locms.res != undefined) { 12 | states = JSON.parse(locms.res); 13 | } 14 | update(); 15 | }); 16 | }); 17 | }); 18 | 19 | function update() { 20 | var tmpcn = $(".manganameforamr").size(); 21 | if (tmpcn != nbclasses) { 22 | $(".amrfind").remove(); 23 | $("").appendTo($(".manganameforamr")); 24 | $(".amrfind").css("float", "right"); 25 | $(".amrfind").click(clickSearch); 26 | } 27 | nbclasses = tmpcn; 28 | if (nbclasses < 200) { 29 | setTimeout("update()", 500); 30 | } 31 | } 32 | 33 | function clickSearch() { 34 | loadSearch($(this).closest("td"), $(this).closest("td").text()); 35 | } 36 | 37 | function isMirrorEnabled(mirrorName) { 38 | if (states != undefined) { 39 | for (var i = 0; i < states.length; i++) { 40 | if (states[i].mirror == mirrorName) { 41 | return states[i].state; 42 | } 43 | } 44 | } 45 | return true; 46 | } 47 | 48 | function loadSearch(td, toSearch) { 49 | td.data("nbToLoad", mirrors.length); 50 | td.data("ancNbToLoad", mirrors.length); 51 | $(".amrfind", td).attr("src", chrome.extension.getURL("img/load16.gif")); 52 | $(".amrfind", td).unbind("click"); 53 | 54 | var tr; 55 | var restd; 56 | //Create result zone if needed 57 | if (td.closest("tr").next().is(".searchResultstr")) { 58 | tr = td.closest("tr").next(); 59 | restd = $(".resultssearch", tr); 60 | restd.empty(); 61 | } else { 62 | tr = $(""); 63 | restd = $(".resultssearch", tr); 64 | td.closest("tr").after(tr); 65 | } 66 | //Fill it 67 | for (var i = 0; i < mirrors.length; i++) { 68 | if (isMirrorEnabled(mirrors[i].mirrorName)) { 69 | if (mirrors[i].canListFullMangas) { 70 | // Search in manga list matching entries 71 | var listManga = mirrors[i].listmgs; 72 | if (listManga != undefined) { 73 | var listMangaCtx = JSON.parse(listManga); 74 | if (listMangaCtx.length > 0) { 75 | for (var j = 0; j < listMangaCtx.length; j++) { 76 | if (formatMgName(listMangaCtx[j][0]) == formatMgName(toSearch)) { 77 | var obj = {}; 78 | obj.url = listMangaCtx[j][1]; 79 | obj.name = listMangaCtx[j][0]; 80 | obj.mirror = mirrors[i].mirrorName; 81 | addResult(restd, obj, toSearch); 82 | } 83 | } 84 | } 85 | } 86 | td.data("nbToLoad", td.data("nbToLoad") - 1); 87 | } else { 88 | // Request mirror to search. 89 | // call background to search res 90 | chrome.runtime.sendMessage({action: "searchManga", mirrorName: mirrors[i].mirrorName, search: toSearch}, function(resp) { 91 | for (var j = 0; j < resp.list.length; j++) { 92 | if (formatMgName(resp.list[j][0]) == (formatMgName(toSearch))) { 93 | var obj = {}; 94 | obj.url = resp.list[j][1]; 95 | obj.name = resp.list[j][0]; 96 | obj.mirror = resp.mirrorName; 97 | addResult(restd, obj, toSearch); 98 | } 99 | } 100 | td.data("nbToLoad", td.data("nbToLoad") - 1); 101 | }); 102 | } 103 | } else { 104 | td.data("nbToLoad", td.data("nbToLoad") - 1); 105 | td.data("ancNbToLoad", td.data("ancNbToLoad") - 1); 106 | } 107 | } 108 | waitForEndLoad(td); 109 | } 110 | 111 | function waitForEndLoad(td) { 112 | if (td.data("nbToLoad") != td.data("ancNbToLoad")) { 113 | td.data("ancNbToLoad", td.data("nbToLoad")); 114 | } 115 | if (td.data("nbToLoad") != 0) { 116 | setTimeout(function() { 117 | waitForEndLoad(td); 118 | }, 500); 119 | } else { 120 | $(".amrfind", td).attr("src", chrome.extension.getURL("img/find.png")); 121 | $(".amrfind", td).click(clickSearch); 122 | } 123 | } 124 | 125 | function addResult(tdRes, obj, name) { 126 | var found = false; 127 | $(".mirrorsearchimg", tdRes).each(function(index) { 128 | if ($(this).data("mirrorname") == obj.mirror) { 129 | found = true; 130 | } 131 | }); 132 | if (!found) { 133 | var urlCur = obj.url; 134 | var mirrorCur = obj.mirror; 135 | var img = $(""); 136 | img.data("urlmirror", urlCur); 137 | img.data("mirrorname", obj.mirror); 138 | img.data("manganame", name); 139 | var divelt = $("
"); 140 | divelt.prepend(img); 141 | divelt.appendTo(tdRes); 142 | //events binding 143 | bindEvents(); 144 | //Sort mangas pictures 145 | $(".eltmirrorsearch", tdRes).sortElements(function(a, b) { 146 | var at = $(".mirrorsearchimg", $(a)).data("mirrorname"); 147 | var bt = $(".mirrorsearchimg", $(b)).data("mirrorname"); 148 | return at > bt ? 1 : -1; 149 | }); 150 | } 151 | } 152 | function bindEvents() { 153 | $(".mirrorsearchimg").unbind("click"); 154 | $(".mirrorsearchimg").click(function() { 155 | chrome.runtime.sendMessage({action: 'opentab', url: $(this).data("urlmirror")}, function(response) {}); 156 | }); 157 | $(".addsinglemg").unbind("click"); 158 | $(".addsinglemg").click(function() { 159 | var img = $("img.mirrorsearchimg", $(this).closest(".eltmirrorsearch")); 160 | var obj = {action: "readManga", 161 | mirror: img.data("mirrorname"), 162 | url: img.data("urlmirror"), 163 | name: img.data("manganame")}; 164 | sendExtRequestS(obj, $(this), function() { 165 | }, true); 166 | }); 167 | } 168 | 169 | function formatMgName(name) { 170 | if (name == undefined || name == null || name == "null") return ""; 171 | return name.trim().replace(/[^0-9A-Za-z]/g, '').toUpperCase(); 172 | } 173 | 174 | //Used to request background page action 175 | function sendExtRequestS(request, button, callback, backsrc) { 176 | //Prevent a second request 177 | if (button.data("currentlyClicked")) return; 178 | button.data("currentlyClicked", true); 179 | 180 | //Display a loading image 181 | var _ancSrc; 182 | if (button.is("img")) { 183 | _ancSrc = button.attr("src"); 184 | button.attr("src", chrome.extension.getURL("img/load16.gif")); 185 | } 186 | //Call the action 187 | chrome.runtime.sendMessage(request, function() { 188 | //setTimeout(function() { 189 | //Do the callback 190 | callback(); 191 | //Removes the loading image 192 | if (button.is("img")) { 193 | if (backsrc) { 194 | button.attr("src", _ancSrc); 195 | } 196 | } 197 | //Restore request 198 | button.removeData("currentlyClicked"); 199 | //}, 1000); 200 | }); 201 | } 202 | 203 | /** 204 | * jQuery.fn.sortElements 205 | * -------------- 206 | * @param Function comparator: 207 | * Exactly the same behaviour as [1,2,3].sort(comparator) 208 | * 209 | * @param Function getSortable 210 | * A function that should return the element that is 211 | * to be sorted. The comparator will run on the 212 | * current collection, but you may want the actual 213 | * resulting sort to occur on a parent or another 214 | * associated element. 215 | * 216 | * E.g. $('td').sortElements(comparator, function(){ 217 | * return this.parentNode; 218 | * }) 219 | * 220 | * The 's parent () will be sorted instead 221 | * of the itself. 222 | */ 223 | jQuery.fn.sortElements = (function(){ 224 | 225 | var sort = [].sort; 226 | 227 | return function(comparator, getSortable) { 228 | 229 | getSortable = getSortable || function(){return this;}; 230 | 231 | var placements = this.map(function(){ 232 | 233 | var sortElement = getSortable.call(this), 234 | parentNode = sortElement.parentNode, 235 | 236 | // Since the element itself will change position, we have 237 | // to have some way of storing its original position in 238 | // the DOM. The easiest way is to have a 'flag' node: 239 | nextSibling = parentNode.insertBefore( 240 | document.createTextNode(''), 241 | sortElement.nextSibling 242 | ); 243 | 244 | return function() { 245 | 246 | if (parentNode === this) { 247 | throw new Error( 248 | "You can't sort elements if any one is a descendant of another." 249 | ); 250 | } 251 | 252 | // Insert before flag: 253 | parentNode.insertBefore(this, nextSibling); 254 | // Remove flag: 255 | parentNode.removeChild(nextSibling); 256 | 257 | }; 258 | 259 | }); 260 | 261 | return sort.call(this, comparator).each(function(i){ 262 | placements[i].call(getSortable.call(this)); 263 | }); 264 | 265 | }; 266 | 267 | })(); 268 | -------------------------------------------------------------------------------- /js/dev.js: -------------------------------------------------------------------------------- 1 | function viewArticle(pathstr) { 2 | "use strict"; 3 | var elt = $(".menu[rel='" + pathstr + "']"), 4 | path, 5 | i; 6 | $(".menu").removeClass("selected"); 7 | $(elt).addClass("selected"); 8 | $(".menu:first", $(elt).parents("li")).addClass("selected"); 9 | 10 | $(".article").each(function (index) { 11 | var pathtmp = $(this).attr("id"); 12 | $(this).parents(".article").each(function (index) { 13 | pathtmp = $(this).attr("id") + " " + pathtmp; 14 | }); 15 | //console.log(pathstr + " --> " + pathtmp); 16 | if (pathstr.indexOf(pathtmp) === -1) { 17 | $(this).hide(); 18 | //console.log("hidden"); 19 | } 20 | }); 21 | 22 | path = pathstr.split(" "); 23 | for (i = 0; i < path.length; i += 1) { 24 | if (!$("#" + path[i]).is(":visible")) { 25 | $("#" + path[i]).toggle("blind", {}, 250); 26 | } 27 | if (i === path.length - 1) { 28 | if (!$(".article", $("#" + path[i])).is(":visible")) { 29 | $(".article", $("#" + path[i])).toggle("blind", {}, 250); 30 | } 31 | } 32 | } 33 | } 34 | function nodeToXML(node, indentation, out) { 35 | "use strict"; 36 | var item, 37 | value, 38 | i; 39 | if (node.nodeName.toLowerCase() === "#text") { 40 | out += node.nodeValue; 41 | } else { 42 | out += indentation + "<" + node.nodeName.toLowerCase(); 43 | 44 | if (node.attributes !== null) { 45 | for (i = 0; i < node.attributes.length; i += 1) { 46 | item = node.attributes.item(i); 47 | value = item.nodeValue; 48 | if (value === null) { 49 | value = ""; 50 | } 51 | out += " " + item.nodeName + "=\"" + value + "\""; 52 | } 53 | } 54 | if (node.nodeName.toLowerCase() === "div") { 55 | out += ">\n"; 56 | } else { 57 | out += ">"; 58 | } 59 | for (i = 0; i < node.childNodes.length; i += 1) { 60 | item = node.childNodes.item(i); 61 | out = nodeToXML(item, indentation + " ", out); 62 | } 63 | if (node.nodeValue !== null) { 64 | out += indentation + " " + node.nodeValue + "\n"; 65 | } 66 | if (node.nodeName.toLowerCase() === "div") { 67 | out += indentation + "\n"; 68 | } else { 69 | out += "\n"; 70 | } 71 | } 72 | return out; 73 | } 74 | function show(doc) { 75 | "use strict"; 76 | var w = window.open('', 'Popup', ''), 77 | s = nodeToXML(doc, '', ''); 78 | w.document.write('Document Dump'); 79 | w.document.write('
');
 80 |   s = s.replace(new RegExp('&', 'g'), '&');
 81 |   s = s.replace(new RegExp('<', 'g'), '<');
 82 |   s = s.replace(new RegExp('>', 'g'), '>');
 83 |   w.document.write(s);
 84 |   w.document.write('
'); 85 | w.document.close(); 86 | } 87 | function createTree() { 88 | "use strict"; 89 | var main = $("
"), 90 | curdiv; 91 | main.css("display", "none"); 92 | $("#nav a.menu").each(function (index) { 93 | var pathstr = $(this).attr("rel"), 94 | path = pathstr.split(" "); 95 | if (path.length === 1) { 96 | $("

" + $(this).text() + "

").appendTo(main); 97 | //TODO add content 98 | } else { 99 | curdiv = $("#" + path[path.length - 2], main); 100 | $("

" + $(this).text() + "

").appendTo(curdiv); 101 | //TODO add content 102 | } 103 | }); 104 | main.appendTo($(document.body)); 105 | 106 | //console.log(main); 107 | show(main[0]); 108 | } 109 | $(function () { 110 | "use strict"; 111 | loadMenu("dev"); 112 | $("#nav").treeview({ 113 | collapsed : false, 114 | animated : "fast" 115 | }); 116 | 117 | $(".menu").click(function () { 118 | //$(".article").toggle("blind", {}, 250); 119 | var pathstr = $(this).attr("rel"); 120 | viewArticle(pathstr); 121 | }); 122 | 123 | viewArticle("dev"); 124 | 125 | //createTree(); 126 | }); -------------------------------------------------------------------------------- /js/faq.js: -------------------------------------------------------------------------------- 1 | function viewArticle(pathstr) { 2 | "use strict"; 3 | var elt = $(".menu[rel='" + pathstr + "']"), 4 | path, 5 | i; 6 | $(".menu").removeClass("selected"); 7 | $(elt).addClass("selected"); 8 | $(".menu:first", $(elt).parents("li")).addClass("selected"); 9 | $(".article").each(function (index) { 10 | var pathtmp = $(this).attr("id"); 11 | $(this).parents(".article").each(function (index) { 12 | pathtmp = $(this).attr("id") + " " + pathtmp; 13 | }); 14 | if (pathstr.indexOf(pathtmp) === -1) { 15 | $(this).hide(); 16 | } 17 | }); 18 | path = pathstr.split(" "); 19 | for (i = 0; i < path.length; i += 1) { 20 | if (!$("#" + path[i]).is(":visible")) { 21 | $("#" + path[i]).toggle("blind", {}, 250); 22 | } 23 | if (i === path.length - 1) { 24 | if (!$(".article", $("#" + path[i])).is(":visible")) { 25 | $(".article", $("#" + path[i])).toggle("blind", {}, 250); 26 | } 27 | } 28 | } 29 | } 30 | function nodeToXML(node, indentation, out) { 31 | "use strict"; 32 | var value, 33 | item, 34 | i; 35 | if (node.nodeName.toLowerCase() === "#text") { 36 | out += node.nodeValue; 37 | } else { 38 | out += indentation + "<" + node.nodeName.toLowerCase(); 39 | if (node.attributes !== null) { 40 | for (i = 0; i < node.attributes.length; i += 1) { 41 | item = node.attributes.item(i); 42 | value = item.nodeValue; 43 | if (value === null) { 44 | value = ""; 45 | } 46 | out += " " + item.nodeName + "=\"" + value + "\""; 47 | } 48 | } 49 | if (node.nodeName.toLowerCase() === "div") { 50 | out += ">\n"; 51 | } else { 52 | out += ">"; 53 | } 54 | for (i = 0; i < node.childNodes.length; i += 1) { 55 | item = node.childNodes.item(i); 56 | out = nodeToXML(item, indentation + " ", out); 57 | } 58 | if (node.nodeValue !== null) { 59 | out += indentation + " " + node.nodeValue + "\n"; 60 | } 61 | if (node.nodeName.toLowerCase() === "div") { 62 | out += indentation + "\n"; 63 | } else { 64 | out += "\n"; 65 | } 66 | } 67 | return out; 68 | } 69 | function show(doc) { 70 | "use strict"; 71 | var w = window.open('', 'Popup', ''), 72 | s = nodeToXML(doc, '', ''); 73 | w.document.write('Document Dump'); 74 | w.document.write('
');
 75 |   s = s.replace(new RegExp('&', 'g'), '&');
 76 |   s = s.replace(new RegExp('<', 'g'), '<');
 77 |   s = s.replace(new RegExp('>', 'g'), '>');
 78 |   w.document.write(s);
 79 |   w.document.write('
'); 80 | w.document.close(); 81 | } 82 | function createTree() { 83 | "use strict"; 84 | var main = $("
"); 85 | main.css("display", "none"); 86 | $("#nav a.menu").each(function (index) { 87 | var pathstr = $(this).attr("rel"), 88 | path = pathstr.split(" "), 89 | curdiv; 90 | if (path.length === 1) { 91 | $("

" + $(this).text() + "

").appendTo(main); 92 | } else { 93 | curdiv = $("#" + path[path.length - 2], main); 94 | $("

" + $(this).text() + "

").appendTo(curdiv); 95 | } 96 | }); 97 | main.appendTo($(document.body)); 98 | show(main[0]); 99 | } 100 | $(function () { 101 | "use strict"; 102 | loadMenu("faq"); 103 | $("#nav").treeview({ 104 | collapsed : false, 105 | animated : "fast" 106 | }); 107 | $(".menu").click(function () { 108 | var pathstr = $(this).attr("rel"); 109 | viewArticle(pathstr); 110 | }); 111 | viewArticle("overview"); 112 | $('#search').click(function () {viewArticle('overview mainelements search'); }); 113 | $('#bookmarks').click(function () {viewArticle('overview mainelements bookmark'); }); 114 | $('#category').click(function () {viewArticle('manage category'); }); 115 | $('#impexp').click(function () {viewArticle('overview mainelements impexp'); }); 116 | $('.extmain').click(function () { 117 | chrome.runtime.sendMessage({ 118 | action : 'openExtensionMainPage' 119 | }, function (response) {}); 120 | }); 121 | }); -------------------------------------------------------------------------------- /js/i18n.js: -------------------------------------------------------------------------------- 1 | /* 2 | Translation function based on AdBlock+ 3 | Google chrome extension under GNU GLP v3 4 | licence 5 | */ 6 | function translate(messageID, args) { 7 | "use strict"; 8 | return chrome.i18n.getMessage(messageID, args); 9 | } 10 | function localizePage() { 11 | "use strict"; 12 | //translate a page into the users language 13 | $("[i18n]:not(.i18n-replaced)").each(function () { 14 | if ($(this).is("[i18n_args]")) { 15 | $(this).html(translate($(this).attr("i18n"), JSON.parse($(this).attr("i18n_args")))); 16 | } else { 17 | $(this).html(translate($(this).attr("i18n"))); 18 | } 19 | }); 20 | $("[i18n_value]:not(.i18n-replaced)").each(function () { 21 | $(this).val(translate($(this).attr("i18n_value"))); 22 | }); 23 | $("[i18n_title]:not(.i18n-replaced)").each(function () { 24 | $(this).attr("title", translate($(this).attr("i18n_title"))); 25 | }); 26 | $("[i18n_placeholder]:not(.i18n-replaced)").each(function () { 27 | $(this).attr("placeholder", translate($(this).attr("i18n_placeholder"))); 28 | }); 29 | $("[i18n_replacement_el]:not(.i18n-replaced)").each(function () { 30 | // Replace a dummy inside of localized text with a real element. 31 | // Give the real element the same text as the dummy link. 32 | var dummy_link = $("a", this), 33 | text = dummy_link.text(), 34 | real_el = $("#" + $(this).attr("i18n_replacement_el")); 35 | real_el.text(text).val(text).replaceAll(dummy_link); 36 | // If localizePage is run again, don't let the [i18n] code above 37 | // clobber our work 38 | $(this).addClass("i18n-replaced"); 39 | }); 40 | } 41 | 42 | $(function() { 43 | localizePage(); 44 | }); 45 | -------------------------------------------------------------------------------- /js/importexport.js: -------------------------------------------------------------------------------- 1 | function switchOnglet(ong, tab) { 2 | "use strict"; 3 | $(".tab").removeClass("checked"); 4 | $(ong).addClass("checked"); 5 | $(".ongletCont").each(function (index) { 6 | var $this = $(this); 7 | if ($this.attr("id") === tab) { 8 | $this.show(); 9 | } else { 10 | $this.hide(); 11 | } 12 | }); 13 | } 14 | 15 | //Used to request background page action 16 | 17 | function sendExtRequest(request, button, callback, backsrc) { 18 | "use strict"; 19 | //Prevent a second request 20 | if (button.data("currentlyClicked")) { 21 | return; 22 | } 23 | button.data("currentlyClicked", true); 24 | 25 | //Display a loading image 26 | var ancSrc; 27 | if (button.is("img")) { 28 | ancSrc = button.attr("src"); 29 | button.attr("src", chrome.extension.getURL("img/load16.gif")); 30 | } else { 31 | if (button.is(".button")) { 32 | ancSrc = $(""); 33 | ancSrc.appendTo(button); 34 | } 35 | if (button.is(".category") || button.is(".mgcategory")) { 36 | ancSrc = $(""); 37 | ancSrc.appendTo(button); 38 | } 39 | } 40 | //Call the action 41 | setTimeout(function () { 42 | chrome.runtime.sendMessage(request, function (response) { 43 | //setTimeout(function() { 44 | //Do the callback 45 | callback(response); 46 | //Removes the loading image 47 | if (button.is("img")) { 48 | if (backsrc) { 49 | button.attr("src", ancSrc); 50 | } 51 | } else { 52 | if (button.is(".button") || button.is(".category") || button.is(".mgcategory")) { 53 | ancSrc.remove(); 54 | } 55 | } 56 | //Restore request 57 | button.removeData("currentlyClicked"); 58 | //}, 1000); 59 | }); 60 | }, 10); 61 | } 62 | 63 | function exportData() { 64 | "use strict"; 65 | var expMgs = $("#mgCk").prop("checked"), 66 | expBms = $("#bmCk").prop("checked"), 67 | // The getJSONListToSync rise an error in JSLint, because it thinks 68 | // is a synchronous call. The name of the function needs to be changed 69 | // if we want get rid of the message. 70 | mgs = chrome.extension.getBackgroundPage().getJSONListToSync(), 71 | res = {}; 72 | /*chrome.tabs.create({url: "export.html?mg=" + expMgs + "&bm=" + expBms}, function(tab) { 73 | });*/ 74 | if (expMgs) { 75 | res.mangas = mgs; 76 | } 77 | 78 | if (expBms) { 79 | res.bookmarks = JSON.stringify(chrome.extension.getBackgroundPage().bookmarks || []); 80 | } 81 | 82 | $("#exportBox").html(JSON.stringify(res)); 83 | $("#resExp").show(); 84 | 85 | } 86 | 87 | function copy() { 88 | "use strict"; 89 | chrome.extension.getBackgroundPage().setclipboard($("#exportBox").text()); 90 | // TODO: We should create a single message box instead using alert. 91 | alert("Data have been saved to clipboard."); 92 | } 93 | 94 | var data; 95 | 96 | function importManga(but, mergeVal) { 97 | "use strict"; 98 | var obj = { 99 | action : "importMangas", 100 | mangas : JSON.parse(data.mangas), 101 | merge : mergeVal 102 | }; 103 | sendExtRequest(obj, $(but), function (resp) { 104 | $("#resultBout").remove(); 105 | $("
").appendTo($("#resImp")); 106 | $("#resultBout").val(resp.out); 107 | }, true); 108 | 109 | } 110 | 111 | function importBookmark(but, mergeVal) { 112 | "use strict"; 113 | var obj = { 114 | action : "importBookmarks", 115 | bookmarks : JSON.parse(data.bookmarks), 116 | merge : mergeVal 117 | }; 118 | sendExtRequest(obj, $(but), function (resp) { 119 | $("#resultBout").remove(); 120 | $("
").appendTo($("#resImp")); 121 | $("#resultBout").val(resp.out); 122 | }, true); 123 | } 124 | 125 | function importData() { 126 | "use strict"; 127 | var resImp = $('#resImp'); 128 | resImp.hide(); 129 | try { 130 | data = JSON.parse($("#importBox").val()); 131 | } catch (e) { 132 | // TODO: We should create a single message box instead using alert. 133 | alert("Error while parsing data in the hereinabove box..."); 134 | return; 135 | } 136 | // TODO: We should check for all implementation scripts be loaded before trying to parse the input. 137 | console.log(data); 138 | resImp.empty(); 139 | if (data.mangas) { 140 | $("
" + JSON.parse(data.mangas).length + " mangas found.
Import manga list (merge)
Import manga list (erase)
").appendTo(resImp); 141 | $('#btnMangaMerge').on('click', function () { 142 | importManga(this, true); 143 | }); 144 | $('#btnMangaErase').on('click', function () { 145 | importManga(this, false); 146 | }); 147 | } 148 | if (data.bookmarks) { 149 | $("
" + JSON.parse(data.bookmarks).length + " bookmarks found.
Import bookmark list (merge)
Import bookmark list (erase)
").appendTo(resImp); 150 | $('#btnBookMerge').on('click', function () { 151 | importBookmark(this, true); 152 | }); 153 | $('#btnBookErase').on('click', function () { 154 | importBookmark(this, false); 155 | }); 156 | } 157 | resImp.show(); 158 | } 159 | 160 | function downloadExportFile() { 161 | var today = new Date(), 162 | year = today.getFullYear(), 163 | month = today.getMonth() + 1, 164 | day = today.getDate(); 165 | // pad day and month with 0s as necessary 166 | month = ("0" + month).slice(-2); 167 | day = ("0" + day).slice(-2); 168 | // set the download attribute 169 | this.download = [year, month, day].join('-') + '.txt'; 170 | // set the href with the base64 encoded data 171 | this.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent($('#exportBox').val()); 172 | } 173 | 174 | $(function () { 175 | "use strict"; 176 | loadMenu("impexp"); 177 | $(".article").show(); 178 | $(".ongletCont[id!='ong1']").hide(); 179 | $('.tabs li').on('click', function (evt) { 180 | var ong = ($(this).text() === 'Import') ? 'ong1' : 'ong2'; 181 | switchOnglet(this, ong); 182 | }); 183 | $('#importdata').on('click', importData); 184 | $('#exportdata').on('click', exportData); 185 | $('#copytoclip').on('click', copy); 186 | $('#downloadtxt').on('click', downloadExportFile); 187 | }); 188 | 189 | -------------------------------------------------------------------------------- /js/innermenu.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | var menusAMR = [ 21 | {name: "options", link: "options.html", title: "Options", icon: "options.png"}, 22 | {name: "search", link: "search.html", title: "Search", icon: "find.png"}, 23 | {name: "bookmarks", link: "bookmarks.html", title: "Bookmarks", icon: "bookmark.png"}, 24 | {name: "stats", link: "pstat.html", title: "My stats", icon: "pstat.png"}, 25 | {name: "impexp", link: "importexport.html", title: "Import/Export", icon: "importexport.png"}, 26 | {name: "faq", link: "faq.html", title: "Help", icon: "infos.png"}, 27 | {name: "release", link: "http://wiki.allmangasreader.com/changelog", title: "Changelog", icon: "release.png"}, 28 | {name: "dev", link: "dev.html", title: "Development", icon: "code.png"}, 29 | {name: "lab", link: "lab.html", title: "Lab", cond: "lab", icon: "dev.png"}, 30 | {name: "home", link: "http://allmangasreader.com/", title: "Home", icon: "home.png"} 31 | ]; 32 | 33 | var dispIcons = false; 34 | function loadMenu(cur) { 35 | chrome.runtime.sendMessage({"action": "parameters"}, function(response) { 36 | $("#menuitems ul").empty(); 37 | $.each(menusAMR, function(ind, val) { 38 | var display = true; 39 | if (val.cond && val.cond == "lab") { 40 | if (response.dev != 1) { 41 | display = false; 42 | } 43 | } 44 | if (display) { 45 | var li; 46 | if (val.name == cur) { 47 | if (!dispIcons) { 48 | li = $("
  • " + val.title + "
  • "); 49 | } else { 50 | li = $("
  • "); 51 | } 52 | } else { 53 | if (!dispIcons) { 54 | li = $("
  • " + val.title + "
  • "); 55 | } else { 56 | li = $("
  • "); 57 | } 58 | } 59 | if (ind == menusAMR.length - 1) { 60 | li.addClass("last"); 61 | } 62 | li.appendTo($("#menuitems ul")); 63 | } 64 | }); 65 | }); 66 | } 67 | -------------------------------------------------------------------------------- /js/jQuery.loadScript.js: -------------------------------------------------------------------------------- 1 | jQuery.loadScript = function (url, arg1, arg2, errorfunc, datatyp) { 2 | "use strict"; 3 | var cache = false, 4 | callback = null, 5 | load = true, 6 | datatype = datatyp || 'script'; 7 | //arg1 and arg2 can be interchangable 8 | if ($.isFunction(arg1)) { 9 | callback = arg1; 10 | cache = arg2 || cache; 11 | } else { 12 | cache = arg1 || cache; 13 | callback = arg2 || callback; 14 | } 15 | //check all existing script tags in the page for the url 16 | jQuery('script[type="text/javascript"]').each(function () { 17 | load = (url !== $(this).attr('src')); 18 | }); 19 | if (load) { 20 | //didn't find it in the page, so load it 21 | jQuery.ajax({ 22 | type : 'GET', 23 | url : url, 24 | success : callback, 25 | error: errorfunc, 26 | dataType : datatype, 27 | cache : cache 28 | }); 29 | } else { 30 | //already loaded so just call the callback 31 | if (jQuery.isFunction(callback)) { 32 | callback.call(this); 33 | } 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /js/jquery.scrollTo-1.4.3.1-min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2007-2012 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com 3 | * Dual licensed under MIT and GPL. 4 | * @author Ariel Flesler 5 | * @version 1.4.3.1 6 | */ 7 | ;(function($){var h=$.scrollTo=function(a,b,c){$(window).scrollTo(a,b,c)};h.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1,limit:true};h.window=function(a){return $(window)._scrollable()};$.fn._scrollable=function(){return this.map(function(){var a=this,isWin=!a.nodeName||$.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)return a;var b=(a.contentWindow||a).document||a.ownerDocument||a;return/webkit/i.test(navigator.userAgent)||b.compatMode=='BackCompat'?b.body:b.documentElement})};$.fn.scrollTo=function(e,f,g){if(typeof f=='object'){g=f;f=0}if(typeof g=='function')g={onAfter:g};if(e=='max')e=9e9;g=$.extend({},h.defaults,g);f=f||g.duration;g.queue=g.queue&&g.axis.length>1;if(g.queue)f/=2;g.offset=both(g.offset);g.over=both(g.over);return this._scrollable().each(function(){if(e==null)return;var d=this,$elem=$(d),targ=e,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);if(!targ.length)return;case'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset()}$.each(g.axis.split(''),function(i,a){var b=a=='x'?'Left':'Top',pos=b.toLowerCase(),key='scroll'+b,old=d[key],max=h.max(d,a);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(g.margin){attr[key]-=parseInt(targ.css('margin'+b))||0;attr[key]-=parseInt(targ.css('border'+b+'Width'))||0}attr[key]+=g.offset[pos]||0;if(g.over[pos])attr[key]+=targ[a=='x'?'width':'height']()*g.over[pos]}else{var c=targ[pos];attr[key]=c.slice&&c.slice(-1)=='%'?parseFloat(c)/100*max:c}if(g.limit&&/^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&g.queue){if(old!=attr[key])animate(g.onAfterFirst);delete attr[key]}});animate(g.onAfter);function animate(a){$elem.animate(attr,f,g.easing,a&&function(){a.call(this,e,g)})}}).end()};h.max=function(a,b){var c=b=='x'?'Width':'Height',scroll='scroll'+c;if(!$(a).is('html,body'))return a[scroll]-$(a)[c.toLowerCase()]();var d='client'+c,html=a.ownerDocument.documentElement,body=a.ownerDocument.body;return Math.max(html[scroll],body[scroll])-Math.min(html[d],body[d])};function both(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); -------------------------------------------------------------------------------- /js/jquery.treeview.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Treeview 1.5pre - jQuery plugin to hide and show branches of a tree 3 | * 4 | * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ 5 | * http://docs.jquery.com/Plugins/Treeview 6 | * 7 | * Copyright (c) 2007 Jörn Zaefferer 8 | * 9 | * Dual licensed under the MIT and GPL licenses: 10 | * http://www.opensource.org/licenses/mit-license.php 11 | * http://www.gnu.org/licenses/gpl.html 12 | * 13 | * Revision: $Id: jquery.treeview.js 5759 2008-07-01 07:50:28Z joern.zaefferer $ 14 | * 15 | */ 16 | 17 | ;(function($) { 18 | 19 | // TODO rewrite as a widget, removing all the extra plugins 20 | $.extend($.fn, { 21 | swapClass: function(c1, c2) { 22 | var c1Elements = this.filter('.' + c1); 23 | this.filter('.' + c2).removeClass(c2).addClass(c1); 24 | c1Elements.removeClass(c1).addClass(c2); 25 | return this; 26 | }, 27 | replaceClass: function(c1, c2) { 28 | return this.filter('.' + c1).removeClass(c1).addClass(c2).end(); 29 | }, 30 | hoverClass: function(className) { 31 | className = className || "hover"; 32 | return this.hover(function() { 33 | $(this).addClass(className); 34 | }, function() { 35 | $(this).removeClass(className); 36 | }); 37 | }, 38 | heightToggle: function(animated, callback) { 39 | animated ? 40 | this.animate({ height: "toggle" }, animated, callback) : 41 | this.each(function(){ 42 | jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ](); 43 | if(callback) 44 | callback.apply(this, arguments); 45 | }); 46 | }, 47 | heightHide: function(animated, callback) { 48 | if (animated) { 49 | this.animate({ height: "hide" }, animated, callback); 50 | } else { 51 | this.hide(); 52 | if (callback) 53 | this.each(callback); 54 | } 55 | }, 56 | prepareBranches: function(settings) { 57 | if (!settings.prerendered) { 58 | // mark last tree items 59 | this.filter(":last-child:not(ul)").addClass(CLASSES.last); 60 | // collapse whole tree, or only those marked as closed, anyway except those marked as open 61 | this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide(); 62 | } 63 | // return all items with sublists 64 | return this.filter(":has(>ul)"); 65 | }, 66 | applyClasses: function(settings, toggler) { 67 | // TODO use event delegation 68 | this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview", function(event) { 69 | // don't handle click events on children, eg. checkboxes 70 | if ( this == event.target ) 71 | toggler.apply($(this).next()); 72 | }).add( $("a", this) ).hoverClass(); 73 | 74 | if (!settings.prerendered) { 75 | // handle closed ones first 76 | this.filter(":has(>ul:hidden)") 77 | .addClass(CLASSES.expandable) 78 | .replaceClass(CLASSES.last, CLASSES.lastExpandable); 79 | 80 | // handle open ones 81 | this.not(":has(>ul:hidden)") 82 | .addClass(CLASSES.collapsable) 83 | .replaceClass(CLASSES.last, CLASSES.lastCollapsable); 84 | 85 | // create hitarea if not present 86 | var hitarea = this.find("div." + CLASSES.hitarea); 87 | if (!hitarea.length) 88 | hitarea = this.prepend("
    ").find("div." + CLASSES.hitarea); 89 | hitarea.removeClass().addClass(CLASSES.hitarea).each(function() { 90 | var classes = ""; 91 | $.each($(this).parent().attr("class").split(" "), function() { 92 | classes += this + "-hitarea "; 93 | }); 94 | $(this).addClass( classes ); 95 | }) 96 | } 97 | 98 | // apply event to hitarea 99 | this.find("div." + CLASSES.hitarea).click( toggler ); 100 | }, 101 | treeview: function(settings) { 102 | 103 | settings = $.extend({ 104 | cookieId: "treeview" 105 | }, settings); 106 | 107 | if ( settings.toggle ) { 108 | var callback = settings.toggle; 109 | settings.toggle = function() { 110 | return callback.apply($(this).parent()[0], arguments); 111 | }; 112 | } 113 | 114 | // factory for treecontroller 115 | function treeController(tree, control) { 116 | // factory for click handlers 117 | function handler(filter) { 118 | return function() { 119 | // reuse toggle event handler, applying the elements to toggle 120 | // start searching for all hitareas 121 | toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() { 122 | // for plain toggle, no filter is provided, otherwise we need to check the parent element 123 | return filter ? $(this).parent("." + filter).length : true; 124 | }) ); 125 | return false; 126 | }; 127 | } 128 | // click on first element to collapse tree 129 | $("a:eq(0)", control).click( handler(CLASSES.collapsable) ); 130 | // click on second to expand tree 131 | $("a:eq(1)", control).click( handler(CLASSES.expandable) ); 132 | // click on third to toggle tree 133 | $("a:eq(2)", control).click( handler() ); 134 | } 135 | 136 | // handle toggle event 137 | function toggler() { 138 | $(this) 139 | .parent() 140 | // swap classes for hitarea 141 | .find(">.hitarea") 142 | .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) 143 | .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) 144 | .end() 145 | // swap classes for parent li 146 | .swapClass( CLASSES.collapsable, CLASSES.expandable ) 147 | .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) 148 | // find child lists 149 | .find( ">ul" ) 150 | // toggle them 151 | .heightToggle( settings.animated, settings.toggle ); 152 | if ( settings.unique ) { 153 | $(this).parent() 154 | .siblings() 155 | // swap classes for hitarea 156 | .find(">.hitarea") 157 | .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) 158 | .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) 159 | .end() 160 | .replaceClass( CLASSES.collapsable, CLASSES.expandable ) 161 | .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) 162 | .find( ">ul" ) 163 | .heightHide( settings.animated, settings.toggle ); 164 | } 165 | } 166 | this.data("toggler", toggler); 167 | 168 | function serialize() { 169 | function binary(arg) { 170 | return arg ? 1 : 0; 171 | } 172 | var data = []; 173 | branches.each(function(i, e) { 174 | data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0; 175 | }); 176 | $.cookie(settings.cookieId, data.join(""), settings.cookieOptions ); 177 | } 178 | 179 | function deserialize() { 180 | var stored = $.cookie(settings.cookieId); 181 | if ( stored ) { 182 | var data = stored.split(""); 183 | branches.each(function(i, e) { 184 | $(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ](); 185 | }); 186 | } 187 | } 188 | 189 | // add treeview class to activate styles 190 | this.addClass("treeview"); 191 | 192 | // prepare branches and find all tree items with child lists 193 | var branches = this.find("li").prepareBranches(settings); 194 | 195 | switch(settings.persist) { 196 | case "cookie": 197 | var toggleCallback = settings.toggle; 198 | settings.toggle = function() { 199 | serialize(); 200 | if (toggleCallback) { 201 | toggleCallback.apply(this, arguments); 202 | } 203 | }; 204 | deserialize(); 205 | break; 206 | case "location": 207 | var current = this.find("a").filter(function() { 208 | return this.href.toLowerCase() == location.href.toLowerCase(); 209 | }); 210 | if ( current.length ) { 211 | // TODO update the open/closed classes 212 | var items = current.addClass("selected").parents("ul, li").add( current.next() ).show(); 213 | if (settings.prerendered) { 214 | // if prerendered is on, replicate the basic class swapping 215 | items.filter("li") 216 | .swapClass( CLASSES.collapsable, CLASSES.expandable ) 217 | .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) 218 | .find(">.hitarea") 219 | .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) 220 | .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ); 221 | } 222 | } 223 | break; 224 | } 225 | 226 | branches.applyClasses(settings, toggler); 227 | 228 | // if control option is set, create the treecontroller and show it 229 | if ( settings.control ) { 230 | treeController(this, settings.control); 231 | $(settings.control).show(); 232 | } 233 | 234 | return this; 235 | } 236 | }); 237 | 238 | // classes used by the plugin 239 | // need to be styled via external stylesheet, see first example 240 | $.treeview = {}; 241 | var CLASSES = ($.treeview.classes = { 242 | open: "open", 243 | closed: "closed", 244 | expandable: "expandable", 245 | expandableHitarea: "expandable-hitarea", 246 | lastExpandableHitarea: "lastExpandable-hitarea", 247 | collapsable: "collapsable", 248 | collapsableHitarea: "collapsable-hitarea", 249 | lastCollapsableHitarea: "lastCollapsable-hitarea", 250 | lastCollapsable: "lastCollapsable", 251 | lastExpandable: "lastExpandable", 252 | last: "last", 253 | hitarea: "hitarea" 254 | }); 255 | 256 | })(jQuery); -------------------------------------------------------------------------------- /js/lib.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | // The propose of this file is to unificate and deduplicate 21 | // javascript code that repeats itself in several files. 22 | 23 | function getMangaMirror(mirror) { 24 | "use strict"; 25 | var i; 26 | for (i = 0; i < mirrors.length; i += 1) { 27 | if (mirrors[i].mirrorName === mirror) { 28 | return mirrors[i]; 29 | } 30 | } 31 | return null; 32 | } 33 | -------------------------------------------------------------------------------- /js/mgUtil.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | /** 21 | * Contains utils function... 22 | */ 23 | var MgUtil = { 24 | /** 25 | * Sort mirrors list according to user's most used mirrors 26 | */ 27 | sortMirrors : function (mirrors, mangas) { 28 | "use strict"; 29 | var i; 30 | if (mangas !== undefined) { 31 | $.each(mangas, function (index, value) { 32 | for (i = 0; i < mirrors.length; i += 1) { 33 | if (value.mirror === mirrors[i].mirrorName) { 34 | if (mirrors[i].nb) { 35 | mirrors[i].nb += 1; 36 | } else { 37 | mirrors[i].nb = 1; 38 | } 39 | break; 40 | } 41 | } 42 | }); 43 | } 44 | mirrors.sort(function (a, b) { 45 | if (a.nb === undefined && b.nb === undefined) { 46 | return ((a.mirrorName < b.mirrorName) ? -1 : 1); 47 | } 48 | if (a.nb === undefined) { 49 | return 1; 50 | } 51 | if (b.nb === undefined) { 52 | return -1; 53 | } 54 | return (a.nb < b.nb) ? 1 : ((a.nb === b.nb) ? ((a.mirrorName < b.mirrorName) ? -1 : 1) : -1); 55 | }); 56 | return mirrors; 57 | }, 58 | 59 | /** 60 | * Sort mirrors list according to user's most used mirrors 61 | */ 62 | getUnusedNames : function (mirrors, mangas) { 63 | "use strict"; 64 | var i; 65 | if (mangas !== undefined) { 66 | $.each(mangas, function (index, value) { 67 | for (i = 0; i < mirrors.length; i += 1) { 68 | if (value.mirror === mirrors[i].mirrorName) { 69 | if (mirrors[i].nb) { 70 | mirrors[i].nb += 1; 71 | } else { 72 | mirrors[i].nb = 1; 73 | } 74 | break; 75 | } 76 | } 77 | }); 78 | } 79 | var unused = []; 80 | if (mirrors !== undefined) { 81 | $.each(mirrors, function (index, value) { 82 | if (value.nb === undefined) { 83 | unused[unused.length] = value.mirrorName; 84 | } 85 | }); 86 | } 87 | return unused; 88 | }, 89 | /** 90 | * Returns a select containing AMR's supported languages (scans languages) 91 | */ 92 | getLanguageSelect : function (mirrors) { 93 | "use strict"; 94 | var lst = MgUtil.getLanguageList(mirrors); 95 | lst.sort(function (a, b) { 96 | return (a.language < b.language) ? -1 : 1; 97 | }); 98 | 99 | var sel = $(""); 100 | 101 | $.each(lst, function (index, value) { 102 | $("").appendTo(sel); 103 | }); 104 | 105 | return sel; 106 | }, 107 | 108 | /** 109 | * Returns AMR's supported languages list (scans languages) 110 | */ 111 | getLanguageList : function (mirrors) { 112 | "use strict"; 113 | var langs = []; 114 | if (mirrors !== undefined) { 115 | $.each(mirrors, function (index, value) { 116 | var l = (value.languages ? value.languages.split(",") : []); 117 | 118 | $.each(l, function (index, lang) { 119 | var isFound = false, 120 | i; 121 | for (i = 0; i < langs.length; i += 1) { 122 | if (langs[i].code === lang) { 123 | isFound = true; 124 | } 125 | } 126 | if (!isFound) { 127 | langs[langs.length] = { 128 | 'code' : lang, 129 | 'language' : MgUtil.getLanguageName(lang) 130 | }; 131 | } 132 | }); 133 | }); 134 | } 135 | return langs; 136 | }, 137 | 138 | /** 139 | * Returns the name of a language from its code 140 | */ 141 | getLanguageName : function (code) { 142 | "use strict"; 143 | var lang; 144 | if (MgUtil.languages !== undefined) { 145 | $.each(MgUtil.languages, function (index, value) { 146 | if (code === value.code) { 147 | lang = value.language; 148 | } 149 | }); 150 | } 151 | return lang; 152 | }, 153 | 154 | /** 155 | * Returns list of web site in the language 156 | */ 157 | getMirrorsFromLocale : function (mirrors, langCode) { 158 | "use strict"; 159 | var res = []; 160 | $.each(mirrors, function (index, value) { 161 | var l = (value.languages ? value.languages.split(",") : []); 162 | $.each(l, function (index, lang) { 163 | if (langCode === lang) { 164 | res[res.length] = value.mirrorName; 165 | } 166 | }); 167 | }); 168 | return res; 169 | }, 170 | 171 | /** 172 | * List of languages 173 | */ 174 | languages : [{ 175 | 'code' : 'af', 176 | 'language' : 'Afrikaans' 177 | }, { 178 | 'code' : 'sq', 179 | 'language' : 'Albanian' 180 | }, { 181 | 'code' : 'ar', 182 | 'language' : 'Arabic' 183 | }, { 184 | 'code' : 'be', 185 | 'language' : 'Belarusian' 186 | }, { 187 | 'code' : 'bg', 188 | 'language' : 'Bulgarian' 189 | }, { 190 | 'code' : 'ca', 191 | 'language' : 'Catalan' 192 | }, { 193 | 'code' : 'zh', 194 | 'language' : 'Chinese' 195 | }, { 196 | 'code' : 'zh-CN', 197 | 'language' : 'Chinese Simplified' 198 | }, { 199 | 'code' : 'zh-TW', 200 | 'language' : 'Chinese Traditional' 201 | }, { 202 | 'code' : 'hr', 203 | 'language' : 'Croatian' 204 | }, { 205 | 'code' : 'cs', 206 | 'language' : 'Czech' 207 | }, { 208 | 'code' : 'da', 209 | 'language' : 'Danish' 210 | }, { 211 | 'code' : 'nl', 212 | 'language' : 'Dutch' 213 | }, { 214 | 'code' : 'en', 215 | 'language' : 'English' 216 | }, { 217 | 'code' : 'et', 218 | 'language' : 'Estonian' 219 | }, { 220 | 'code' : 'tl', 221 | 'language' : 'Filipino' 222 | }, { 223 | 'code' : 'fi', 224 | 'language' : 'Finnish' 225 | }, { 226 | 'code' : 'fr', 227 | 'language' : 'French' 228 | }, { 229 | 'code' : 'gl', 230 | 'language' : 'Galician' 231 | }, { 232 | 'code' : 'de', 233 | 'language' : 'German' 234 | }, { 235 | 'code' : 'el', 236 | 'language' : 'Greek' 237 | }, { 238 | 'code' : 'ht', 239 | 'language' : 'Haitian Creole' 240 | }, { 241 | 'code' : 'iw', 242 | 'language' : 'Hebrew' 243 | }, { 244 | 'code' : 'hi', 245 | 'language' : 'Hindi' 246 | }, { 247 | 'code' : 'hu', 248 | 'language' : 'Hungarian' 249 | }, { 250 | 'code' : 'is', 251 | 'language' : 'Icelandic' 252 | }, { 253 | 'code' : 'id', 254 | 'language' : 'Indonesian' 255 | }, { 256 | 'code' : 'ga', 257 | 'language' : 'Irish' 258 | }, { 259 | 'code' : 'it', 260 | 'language' : 'Italian' 261 | }, { 262 | 'code' : 'ja', 263 | 'language' : 'Japanese' 264 | }, { 265 | 'code' : 'lv', 266 | 'language' : 'Latvian' 267 | }, { 268 | 'code' : 'lt', 269 | 'language' : 'Lithuanian' 270 | }, { 271 | 'code' : 'mk', 272 | 'language' : 'Macedonian' 273 | }, { 274 | 'code' : 'ms', 275 | 'language' : 'Malay' 276 | }, { 277 | 'code' : 'mt', 278 | 'language' : 'Maltese' 279 | }, { 280 | 'code' : 'no', 281 | 'language' : 'Norwegian' 282 | }, { 283 | 'code' : 'fa', 284 | 'language' : 'Persian' 285 | }, { 286 | 'code' : 'pl', 287 | 'language' : 'Polish' 288 | }, { 289 | 'code' : 'pt', 290 | 'language' : 'Portuguese' 291 | }, { 292 | 'code' : 'ro', 293 | 'language' : 'Romanian' 294 | }, { 295 | 'code' : 'ru', 296 | 'language' : 'Russian' 297 | }, { 298 | 'code' : 'sr', 299 | 'language' : 'Serbian' 300 | }, { 301 | 'code' : 'sk', 302 | 'language' : 'Slovak' 303 | }, { 304 | 'code' : 'sl', 305 | 'language' : 'Slovenian' 306 | }, { 307 | 'code' : 'es', 308 | 'language' : 'Spanish' 309 | }, { 310 | 'code' : 'sw', 311 | 'language' : 'Swahili' 312 | }, { 313 | 'code' : 'sv', 314 | 'language' : 'Swedish' 315 | }, { 316 | 'code' : 'th', 317 | 'language' : 'Thai' 318 | }, { 319 | 'code' : 'tr', 320 | 'language' : 'Turkish' 321 | }, { 322 | 'code' : 'uk', 323 | 'language' : 'Ukrainian' 324 | }, { 325 | 'code' : 'vi', 326 | 'language' : 'Vietnamese' 327 | }, { 328 | 'code' : 'cy', 329 | 'language' : 'Welsh' 330 | }, { 331 | 'code' : 'yi', 332 | 'language' : 'Yiddish' 333 | } 334 | ] 335 | }; 336 | -------------------------------------------------------------------------------- /js/mirrors/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AllMangasReader-dev/AMR/0f46013d195fc38f0cbf16699c19e3ac162f15bb/js/mirrors/.gitkeep -------------------------------------------------------------------------------- /js/notification.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | 21 | 22 | 23 | window.addEventListener('load', function () { 24 | var button = document.getElementsByClassName('notification')[0]; 25 | 26 | button.addEventListener('click', function () { 27 | // If the user agreed to get notified 28 | // Let's try to send ten notifications 29 | if (Notification && Notification.permission === "granted") { 30 | for (var i = 0; i < 10; i++) { 31 | // Thanks to the tag, we should only see the "Hi! 9" notification 32 | var n = new Notification("Hi! " + i, {tag: 'soManyNotification'}); 33 | } 34 | } 35 | 36 | }); 37 | }); 38 | window.addEventListener('load', function () { 39 | var button2 = document.getElementsByTagName('button')[1]; 40 | button2.addEventListener('click', function() { 41 | /*obj = { 42 | type: 'basic', 43 | iconUrl: chrome.extension.getURL('img/icon-32.png'), 44 | title: 'test', 45 | message: 'button pressed', 46 | buttons: [{title: 'read'}] 47 | }; 48 | chrome.notifications.create("", obj, function(id) { 49 | console.log(id) 50 | });*/ 51 | showNotification("Something", "http://batoto.net/") 52 | }); 53 | }); 54 | function getMirrorNamefromURL (url) { 55 | var i, 56 | mirrors = chrome.extension.getBackgroundPage().mirrors; 57 | //console.log(url); 58 | for(i = 0; i < mirrors.length; i += 1) { 59 | if(mirrors[i].isMe(url)) { 60 | console.log("found") 61 | return mirrors[i].mirrorName; 62 | } 63 | } 64 | return false; 65 | }; 66 | 67 | function notificationmessage (url) { 68 | if (!getMirrorNamefromURL(url)) { 69 | return "We got an error while fetching the URL"; 70 | } else { 71 | return "Start reading from " + getMirrorNamefromURL(url); 72 | } 73 | } 74 | function prepareNotifobj (title, url) { 75 | obj = { 76 | type : 'basic', 77 | iconUrl: chrome.extension.getURL('img/icon-32.png'), 78 | title: 'We got updates of ' + title, 79 | message: notificationmessage(url) 80 | } 81 | return obj; 82 | } 83 | function createnotification(obj, url) { 84 | chrome.notifications.onClicked.addListener(function (id) { 85 | openTab(url); 86 | this.clear(id, function (){}); 87 | }); 88 | chrome.notifications.create("", 89 | obj, 90 | function(id) { 91 | //console.log(id); 92 | }); 93 | //console.log(iden); 94 | } 95 | function showNotification(title, url) { 96 | var obj = prepareNotifobj(title, url); 97 | var iden = createnotification(obj, url); 98 | //console.log(iden); 99 | /*chrome.notifications.clear(iden, function(bool) { 100 | console.log(bool); 101 | });*/ 102 | } 103 | -------------------------------------------------------------------------------- /js/personalstat.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | var pstat = {}; 21 | pstat.webdb = {}; 22 | pstat.webdb.db = null; 23 | 24 | pstat.webdb.open = function() { 25 | var dbSize = 5 * 1024 * 1024; // 5MB 26 | pstat.webdb.db = openDatabase("AMR", "1.0", "All mangas reader", dbSize); 27 | }; 28 | 29 | pstat.webdb.createTable = function() { 30 | var db = pstat.webdb.db; 31 | db.transaction(function(tx) { 32 | tx.executeSql("CREATE TABLE IF NOT EXISTS pstat(ID INTEGER PRIMARY KEY ASC, mirror TEXT, mgname TEXT, mgurl TEXT, chapname TEXT, chaptext TEXT, time_spent INTEGER, added_on DATETIME)", []); 33 | }); 34 | }; 35 | 36 | pstat.webdb.addStat = function(obj, callback) { 37 | var db = pstat.webdb.db; 38 | db.transaction(function(tx){ 39 | var addedOn = new Date().getTime(); 40 | tx.executeSql("INSERT INTO pstat(mirror, mgname, mgurl, chapname, chaptext, time_spent, added_on) VALUES (?,?,?,?,?,?,?)", 41 | [obj.mirror, obj.name, obj.url, obj.lastChapterReadName, obj.lastChapterReadURL, 0, addedOn], 42 | function(tx, sql_res) { 43 | callback(sql_res.insertId); 44 | }, 45 | pstat.webdb.onError); 46 | }); 47 | }; 48 | 49 | pstat.webdb.updateStat = function(id, time, callback) { 50 | var db = pstat.webdb.db; 51 | db.transaction(function(tx){ 52 | var addedOn = new Date(); 53 | tx.executeSql("update pstat set time_spent = ? where ID = ?", 54 | [time, id], 55 | callback, 56 | pstat.webdb.onError); 57 | }); 58 | }; 59 | 60 | pstat.webdb.deleteStat = function(id, callback) { 61 | var db = pstat.webdb.db; 62 | db.transaction(function(tx){ 63 | tx.executeSql("delete from pstat where ID = ?", 64 | [id], 65 | callback, 66 | pstat.webdb.onError); 67 | }); 68 | }; 69 | 70 | pstat.webdb.onError = function(tx, e) { 71 | alert("There has been an error: " + e.message); 72 | }; 73 | 74 | pstat.webdb.getAllPStat = function(renderFunc) { 75 | var db = pstat.webdb.db; 76 | db.transaction(function(tx) { 77 | tx.executeSql("SELECT * FROM pstat", [], renderFunc, 78 | pstat.webdb.onError); 79 | }); 80 | }; 81 | 82 | pstat.init = function() { 83 | pstat.webdb.open(); 84 | pstat.webdb.createTable(); 85 | }; 86 | -------------------------------------------------------------------------------- /js/popup-analytics.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | setTimeout(function() { 21 | var script = document.createElement('script'); 22 | script.async = true; 23 | script.src = 'js/analytics.js'; 24 | document.body.appendChild(script); 25 | }, 500); -------------------------------------------------------------------------------- /js/search.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | var mirrors; 21 | function getQueryVariable(variable) { 22 | "use strict"; 23 | var query = window.location.search.substring(1), 24 | vars = query.split("&"), 25 | i; 26 | for (i = 0; i < vars.length; i += 0) { 27 | var pair = vars[i].split("="); 28 | if (pair[0] === variable) { 29 | return pair[1]; 30 | } 31 | } 32 | return false; 33 | } 34 | function load() { 35 | "use strict"; 36 | var searchInput; 37 | wssql.init(); 38 | loadMenu("search"); 39 | $(".article:not(#resTr)").show(); 40 | mirrors = chrome.extension.getBackgroundPage().actMirrors; 41 | loadSearch(); 42 | if (window.location.href.indexOf("?") !== -1) { 43 | searchInput = getQueryVariable("s"); 44 | document.getElementById("searchBoxInput").value = unescape(searchInput).trim(); 45 | search(); 46 | } 47 | } 48 | $(function () { 49 | "use strict"; 50 | document.getElementById("searchBoxInput").onkeypress = function (e) { 51 | var key = e.keyCode || e.which; 52 | if (key === 13) { 53 | search(); 54 | } 55 | }; 56 | document.getElementById("butFind").addEventListener("click", search); 57 | window.addEventListener("load", load); 58 | }); 59 | -------------------------------------------------------------------------------- /js/testPage.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | "use strict"; 3 | chrome.runtime.sendMessage({action: "pagematchurls", url: window.location.href }, function(response) { 4 | if(response.isOk) { 5 | removeBanner(); 6 | initPage(); 7 | } 8 | }); 9 | })(); -------------------------------------------------------------------------------- /js/wssql.js: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | This file is part of All Mangas Reader. 4 | 5 | All Mangas Reader is free software: you can redistribute it and/or modify 6 | it under the terms of the GNU General Public License as published by 7 | the Free Software Foundation, either version 3 of the License, or 8 | (at your option) any later version. 9 | 10 | All Mangas Reader is distributed in the hope that it will be useful, 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | GNU General Public License for more details. 14 | 15 | You should have received a copy of the GNU General Public License 16 | along with All Mangas Reader. If not, see . 17 | 18 | */ 19 | 20 | /* 21 | Usage : 22 | - background request actmirrors : enrich each mirror with list of mangas 23 | - background request getListManga : return list of mangas for a website 24 | - background desactivateMirror : empty list of mangas 25 | - background refreshNewMirrorsMangaLists : check if empty or not... + get list 26 | - background mangaListLoaded : store list 27 | - popupSearch refreshSearchAll : getList for mirror 28 | 29 | Method to add 30 | - getMangaList(mirror, callback) 31 | - isEmpty(mirror, callback); 32 | - empty(mirror); 33 | - storeMangaList(mirror); 34 | 35 | */ 36 | 37 | var wssql = {}; 38 | wssql.webdb = {}; 39 | wssql.webdb.db = null; 40 | 41 | wssql.webdb.open = function() { 42 | var dbSize = 100 * 1024 * 1024; // 100MB max... 43 | wssql.webdb.db = openDatabase("AMR", "1.0", "All mangas reader", dbSize); 44 | }; 45 | 46 | wssql.webdb.createTable = function() { 47 | var db = wssql.webdb.db; 48 | db.transaction(function(tx) { 49 | tx.executeSql("CREATE TABLE IF NOT EXISTS manga(ID INTEGER PRIMARY KEY ASC, mirror TEXT, mgname TEXT, mgurl TEXT)", []); 50 | }); 51 | }; 52 | 53 | wssql.webdb.storeMangaList = function(mirrorname, list) { 54 | var db = wssql.webdb.db; 55 | db.transaction(function(tx){ 56 | for (var i = 0; i < list.length; i++) { 57 | tx.executeSql("INSERT INTO manga(mirror, mgname, mgurl) VALUES (?,?,?)", 58 | [mirrorname, list[i][0], list[i][1]], 59 | function(tx, sql_res) {}, 60 | function(tx, e) {console.log("Error while inserting " + list[i][0] + " for mirror " + mirrorname);} 61 | ); 62 | } 63 | }); 64 | }; 65 | 66 | wssql.webdb.empty = function(mirror, callback) { 67 | var db = wssql.webdb.db; 68 | db.transaction(function(tx){ 69 | tx.executeSql("delete from manga where mirror = ?", 70 | [mirror], 71 | callback, 72 | wssql.webdb.onError); 73 | }); 74 | }; 75 | 76 | wssql.webdb.onError = function(tx, e) { 77 | alert("There has been an error: " + e.message); 78 | }; 79 | 80 | wssql.webdb.isEmpty = function(mirror, callback) { 81 | var db = wssql.webdb.db; 82 | db.transaction(function(tx) { 83 | tx.executeSql("SELECT count(*) as num FROM manga", [], 84 | function(tx, res) { 85 | if (res.rows.length > 0) { 86 | callback((res.rows.item(0).num == 0)); 87 | } 88 | callback(true); 89 | }, 90 | wssql.webdb.onError 91 | ); 92 | }); 93 | }; 94 | 95 | wssql.webdb.getMangaList = function(mirror, callback) { 96 | var db = wssql.webdb.db; 97 | db.transaction(function(tx) { 98 | tx.executeSql("SELECT * FROM manga where mirror = ?", [mirror], 99 | function(tx, res) { 100 | var ret = []; 101 | if (res.rows.length > 0) { 102 | for (var i = 0; i < res.rows.length; i++) { 103 | ret[ret.length] = [res.rows.item(i).mgname, res.rows.item(i).mgurl]; 104 | } 105 | } 106 | callback(ret, mirror); 107 | }, 108 | wssql.webdb.onError 109 | ); 110 | }); 111 | }; 112 | 113 | wssql.init = function() { 114 | wssql.webdb.open(); 115 | wssql.webdb.createTable(); 116 | }; 117 | -------------------------------------------------------------------------------- /lab.html: -------------------------------------------------------------------------------- 1 |  19 | 20 | 21 | 22 | 23 | All Mangas Reader Lab 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 43 | 50 |
    51 |
    52 |
    53 |
    54 |

    55 | Lab 56 |

    57 |
    58 |

    59 | Errors occured while retrieving and compiling websites implementations : 60 |

    61 |
      62 | 63 |
    64 |
    65 |
    66 |

    67 | Select the mirror you want to test (your mirror must appear in this list) : 68 |

    69 | 70 | 71 | 82 | 83 | 84 | 89 | 90 |
    72 |

    Mirror list : 73 | 74 | 75 | 76 |

    77 |

    78 | 79 | 80 |

    81 |
    91 |
    92 | 116 |
    117 |
    118 |
    119 |
    120 | Test notification |  121 | Test website notification 1 |  122 | 2 |  123 | 3 124 |
    125 |
    126 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "All Mangas Reader", 3 | "version" : "1.5.10", 4 | "manifest_version" : 2, 5 | "description" : "__MSG_description__", 6 | "default_locale" : "en", 7 | "icons" : { 8 | "16" : "img/icon-32.png", 9 | "32" : "img/icon-32.png", 10 | "128" : "img/icon-32.png" 11 | }, 12 | 13 | "browser_action" : { 14 | "default_icon" : "img/amrlittle.png", 15 | "default_title" : "AllMangasReader", 16 | "default_popup" : "popup.html" 17 | }, 18 | "background" : { 19 | "persistent" : true, 20 | "scripts" : [ 21 | "js/jquery.js", 22 | "js/jQuery.loadScript.js", 23 | "js/i18n.js", 24 | "js/MangaElt.js", 25 | "js/mgEntry.js", 26 | "js/BSync.js", 27 | "js/analytics.js", 28 | "js/personalstat.js", 29 | "js/wssql.js", 30 | "js/amrcsql.js", 31 | "js/lib.js", 32 | "js/background.js" 33 | ] 34 | }, 35 | "content_scripts" : [{ 36 | "matches" : [ 37 | "http://*/*", 38 | "https://*/*" 39 | ], 40 | "exclude_matches" : [ 41 | "http://*.allmangasreader.com/*" 42 | ], 43 | "css" : [ 44 | "css/back.css" 45 | ], 46 | "js" : [ 47 | "js/testPage.js" 48 | ] 49 | }, { 50 | "matches" : [ 51 | "http://*.allmangasreader.com/*" 52 | ], 53 | "exclude_matches" : [ 54 | "http://wiki.allmangasreader.com/*", 55 | "http://allmanagesreader.com/forum/*" 56 | ], 57 | "css" : [ 58 | "css/backsite.css" 59 | ], 60 | "js" : [ 61 | "js/lib.js", 62 | "js/jquery.js", 63 | "js/backsite.js" 64 | ] 65 | }, { 66 | "matches" : [ 67 | "http://community.allmangasreader.com/*", 68 | "http://amrroot/*" 69 | ], 70 | "css" : [ 71 | "css/backamrc.css" 72 | ], 73 | "js" : [ 74 | "js/jquery.js", 75 | "js/backamrc.js" 76 | ] 77 | } 78 | ], 79 | "content_security_policy" : "script-src 'self' https://ssl.google-analytics.com https://community.allmangasreader.com/ https://www.google.com/ https://platform.twitter.com/ https://www.facebook.com/ https://raw.github.com/ ; object-src 'self'", 80 | "homepage_url" : "http://www.allmangasreader.com/", 81 | "key" : "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFE73kwUiPfxcBtTkkkboktSCXCrDxMWvYSO72IabK3Q9pqvkEcViyFcuj6mpztx55kYhwFT+ntasZZiNgzhxkjc9zEuHopyrg+/S2tgGa7ueZ+P8s3IMOeEWj9Mqw2qyvPoZ508Q6FwrGjU6rZAhBtS5dzhibkFxRQc9Yej2ppQIDAQAB", 82 | "minimum_chrome_version" : "30.0", 83 | "options_page" : "options.html", 84 | "permissions" : [ 85 | "tabs", 86 | "https://*/*", 87 | "http://*/*", 88 | "unlimited_storage", 89 | "clipboardWrite", 90 | "contextMenus", 91 | "notifications", 92 | "webRequestBlocking", 93 | "bookmarks" 94 | ], 95 | "update_url" : "http://allmangasreader.com/update/update.xml", 96 | "web_accessible_resources" : [ 97 | "img/icon-32.png", 98 | "img/down.png", 99 | "img/bookmark.png", 100 | "img/down.png", 101 | "img/read_stop.png", 102 | "img/lefttoright.png", 103 | "img/stop.gif", 104 | "img/loading.gif", 105 | "img/cancel.png", 106 | "img/ontop.png", 107 | "img/righttoleft.png", 108 | "img/load16.gif", 109 | "img/add.png", 110 | "img/bookmarkred.png", 111 | "img/warn.png", 112 | "img/read_play.png", 113 | "img/amrlittle.png", 114 | "img/dev.png", 115 | "img/ltload.gif", 116 | "img/imgerror.png", 117 | "img/load10.gif", 118 | "img/find.png" 119 | ] 120 | } 121 | -------------------------------------------------------------------------------- /notification.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |

    This page exist with the sole objective of doing test with the chrome.notification API.

    7 |

    There are two buttons for your pleasure. The "Notification" buttom use the Notification API. These do not work well stacking. The labeled "Extension API" doesn't have option to control the timeout, so none of our settings will work.

    8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AMR", 3 | "version": "1.5.6", 4 | "description": "[![Coverage Status](https://coveralls.io/repos/AllMangasReader-dev/AMR/badge.png)](https://coveralls.io/r/AllMangasReader-dev/AMR) [![Code Climate](https://codeclimate.com/github/AllMangasReader-dev/AMR.png)](https://codeclimate.com/github/AllMangasReader-dev/AMR)", 5 | "main": "index.js", 6 | "devDependencies": { 7 | "jsonlint": "1.6.x" 8 | }, 9 | "scripts": { 10 | "test": "jsonlint manifest.json _locales/*/*.json" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git://github.com/AllMangasReader-dev/AMR.git" 15 | }, 16 | "author": "", 17 | "license": "GLP v3", 18 | "bugs": { 19 | "url": "https://github.com/AllMangasReader-dev/AMR/issues" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /popup.html: -------------------------------------------------------------------------------- 1 |  19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | AMR Popup 37 | 38 | 39 | 75 |
    76 | 95 |
    96 | 101 |
    102 |
    103 |
    104 |
      105 |
    • 106 | View timers (when AMR is updated) 107 |
    • 108 |
    • 109 | Import / Export AMR manga list and preferences 110 |
    • 111 |
    112 |
      113 |
    • 114 | Mark all currently viewable mangas as read 115 |
    • 116 |
    • 117 | Delete all currently viewable mangas from list 118 |
    • 119 |
    120 |
      121 |
    • 122 | All Mangas Reader's forum : Discuss the extension, report bugs and request new features. 124 |
    • 125 |
    • 126 | All Mangas Reader Community : Report bugs about websites implementation, post new websites requests, develop implementations, ... 128 |
    • 129 |
    • 130 | View AMR's statistics and add most read manga to your reading list. 131 |
    • 132 |
    • 133 | View your personnal reading statistics. 134 |
    • 135 |
    • 136 | All Mangas Reader's popup in a new tab 137 |
    • 138 |
    • 139 | All Mangas Reader on Facebook 140 |
    • 141 |
    • 142 | All Mangas Reader on Google+ 143 |
    • 144 | 147 |
    148 |
    149 |
    150 | 157 | 162 | 167 | 189 | 195 |
    196 |
    197 | 242 | 243 | 244 | -------------------------------------------------------------------------------- /pstat.html: -------------------------------------------------------------------------------- 1 |  19 | 20 | 21 | 22 | 23 | All Mangas Reader Personal Statistics 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 43 | 50 |
    51 |
    52 |
    53 |
    54 |
    55 |

    No manga read yet !

    56 |
    57 |
    58 |
    59 |
    60 |
      61 |
    • History
    • 62 |
    • Per day
    • 63 |
    • Per month
    • 64 |
    65 |
    66 |
    67 | 68 | 69 | 78 | 97 | 98 | 99 | 115 | 116 |
    70 |
    71 |
    My stats
    72 | 73 | 74 | 75 |
    76 |
    77 |
    79 |
    80 |
    History
    81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 |
     ChapterDateTime spent 
    95 |
    96 |
    100 |
    101 |
    By Manga
    102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 |
    MangaHow many chapters readTotal time spent
    113 |
    114 |
    117 |
    118 |
    119 | 127 | 135 |
    136 |
    137 |
    138 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /search.html: -------------------------------------------------------------------------------- 1 |  19 | 20 | 21 | 22 | 23 | All Mangas Reader Search Tool 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 48 | 55 |
    56 |
    57 |
    58 |
    59 |

    60 | Search a manga 61 |

    62 | 63 | 64 | 74 | 75 |
    76 | 95 |
    96 |
    97 |
    98 |
    99 | 102 | 103 | 104 | --------------------------------------------------------------------------------