├── .classpath ├── .gitignore ├── .project ├── .settings ├── org.eclipse.core.resources.prefs └── org.eclipse.jdt.core.prefs ├── AndroidManifest.xml ├── README.md ├── assets ├── addition.css ├── main.css └── vector.css ├── libs └── android-support-v4.jar ├── proguard-project.txt ├── project.properties ├── res ├── drawable-hdpi │ ├── ic_launcher.png │ └── ic_menu_refresh.png ├── drawable-ldpi │ └── ic_menu_refresh.png ├── drawable-mdpi │ ├── ic_launcher.png │ └── ic_menu_refresh.png ├── drawable-xhdpi │ ├── ic_launcher.png │ └── ic_menu_refresh.png ├── drawable │ ├── logo1.png │ └── splash.png ├── layout │ ├── about.xml │ ├── activity_main.xml │ ├── activity_search_query_results.xml │ └── activity_splash.xml ├── menu │ ├── main.xml │ ├── main_activity_actions.xml │ ├── search_query_results.xml │ └── splash.xml ├── values-sw600dp │ └── dimens.xml ├── values-sw720dp-land │ └── dimens.xml ├── values-v11 │ └── styles.xml ├── values-v14 │ └── styles.xml ├── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml └── xml │ └── sreachable.xml └── src └── org └── moegirl └── moegirlview ├── MainActivity.java ├── SampleSearchActivity.java ├── SearchSuggestionsProvider.java ├── ShakeDetector.java └── SplashActivity.java /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # Files for the Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | 15 | # Gradle files 16 | .gradle/ 17 | build/ 18 | 19 | # Local configuration file (sdk path, etc) 20 | local.properties 21 | 22 | # Proguard folder generated by Eclipse 23 | proguard/ -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | MoegirlView 4 | 5 | 6 | 7 | 8 | 9 | com.android.ide.eclipse.adt.ResourceManagerBuilder 10 | 11 | 12 | 13 | 14 | com.android.ide.eclipse.adt.PreCompilerBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.jdt.core.javabuilder 20 | 21 | 22 | 23 | 24 | com.android.ide.eclipse.adt.ApkBuilder 25 | 26 | 27 | 28 | 29 | 30 | com.android.ide.eclipse.adt.AndroidNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 3 | org.eclipse.jdt.core.compiler.compliance=1.6 4 | org.eclipse.jdt.core.compiler.source=1.6 5 | -------------------------------------------------------------------------------- /AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 33 | 34 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | MoegirlAndroid 2 | ============== 3 | 4 | 5 | http://zh.moegirl.org/ 6 | 萌娘百科是一个ACG萌娘向wiki百科站点,旨在完整准确收录萌化,拟人化,娘化作品。任何人都可自由编辑! 7 | 8 | 9 | 萌百Android应用 10 | under constructing^^^^^^^^ 11 | 12 | h_version intital by 死宅小h 13 | update by salamanderrex @ 2014.2.4 14 | 15 | 16 | ## **Todo** ## 17 | - Guide导引 18 | - 图片和分类的显示 19 | - 搜索历史 20 | - 浏览历史 21 | - 页面保存 22 | - 新的关于页面 -------------------------------------------------------------------------------- /assets/addition.css: -------------------------------------------------------------------------------- 1 | .thumbimage{max-width: 100%} 2 | .thumbinner{max-width:100%} 3 | #toc{background-color: #F9F9F9;border: 1px solid #AAAAAA;padding: 7px;width:200px;} 4 | 5 | .mw-editsection{display:none;}.mw-headline{font-weight:bold;} 6 | .nomobile{display:none;} .heimu{background-color: #000;} 7 | 8 | .navbox tr,.navbox td{ 9 | display: inline; 10 | } 11 | .mainpage-a,.mainpage-b,.mainpage-c,.mainpage-d{ 12 | overflow: hidden; 13 | } 14 | .mainpage-content td{ 15 | display:block; 16 | float:left; 17 | width:200px; 18 | margin: 0 auto; 19 | } 20 | @media screen and (max-width: 400px) { 21 | p{clear: both;} 22 | } -------------------------------------------------------------------------------- /assets/main.css: -------------------------------------------------------------------------------- 1 | /* 2 | Theme URI: http://www.bravenewcode.com/wptouch/ 3 | Author: Dale Mugford and Duane Storey 4 | Author URI: http://www.bravenewcode.com/ 5 | 6 | The CSS, XHTML and design is released under GPL: 7 | http://www.opensource.org/licenses/gpl-license.php 8 | */ 9 | 10 | body{margin:0;padding:0;font:12px Helvetica;-webkit-text-size-adjust:none;min-height:460px;} 11 | ul{margin:0;padding:0 10px 0 20px;list-style-position:outside;} 12 | ol{margin:0;padding:0 25px 0 20px;list-style-type:decimal;list-style-position:outside;} 13 | li{line-height:15px;font-size:12px;color:#555;} 14 | a{text-decoration:none;} 15 | input{max-width:96%;} 16 | iframe{max-width:100% !important;height:auto !important;} 17 | code{font-family:Courier,"Courier New",mono;color:red;} 18 | blockquote{-webkit-border-radius:10px;border:1px solid #ccc;padding:10px;font-size:12px;background:#eee url(../../wptouch/images/quotes.png) no-repeat right -2px;text-align:left;margin:5px 1px;} 19 | .clearer{clear:both;} 20 | .content{margin-top:15px;position:relative;} 21 | .result-text{color:#475d79;text-shadow:#eee 1px 1px 0;font-size:15px;font-weight:bold;margin-bottom:10px;margin-left:10px;letter-spacing:0;border-style:none;} 22 | .result-text-footer{color:#475d79;text-shadow:#eee 1px 1px 0;letter-spacing:0;font-size:15px;font-weight:bold;margin-bottom:10px;margin-left:10px;text-align:center;display:block;} 23 | .pageentry h1,.mainentry h1{font-size:22px;} 24 | .pageentry h2,.mainentry h2{font-size:15px;text-shadow:#f9f9f9 -1px -1px 0;text-align:left;margin-bottom:10px;color:#222;} 25 | .pageentry h3,.mainentry h3{text-align:left;color:#222;font-size:14px;font-weight:bold;line-height:14px;margin-bottom:10px;text-shadow:#fff -1px 1px 0;} 26 | .pageentry h4,.mainentry h4{font-size:13px;text-shadow:#f9f9f9 -1px -1px 0;margin-bottom:10px;color:#222;} 27 | .pageentry h5,.mainentry h5{text-shadow:#f9f9f9 -1px -1px 0;font-size:12px;margin-bottom:10px;} 28 | .mainentry img,#singlentry img,.pageentry img,ol.commentlist li img{max-width:100%;height:auto;} 29 | .fontsize{font-size:1.2em;line-height:140%;} 30 | #headerbar{width:100%;background-position:0 0;background-repeat:repeat-x;height:45px;border-bottom:1px solid #1e1e1e;font-size:19px;} 31 | #headerbar-title{text-shadow:#242424 -1px -1px 1px;padding-top:10px;padding-left:10px;display:block;margin:0;border-style:none;padding-bottom:4px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:85%;font-weight:bold;height:29px;} 32 | #headerbar-title a{text-decoration:none;letter-spacing:-1px;position:relative;font-family:HelveticaNeue-Bold,sans-serif;} 33 | #headerbar-title img#logo-icon{position:relative;margin-right:7px;max-width:30px;float:left;width:28px;height:28px;padding:0;bottom:1px;} 34 | #headerbar-menu{position:absolute;top:0;right:0;margin:0;padding:0;} 35 | #headerbar-menu a{height:45px;display:block;background:url(../../wptouch/images/wptouch-menu-dropper.png) 0 0;width:30px;margin:0;padding:0;} 36 | #headerbar-menu .open{background-position:0 -45px;} 37 | #drop-fade{-moz-box-shadow:-3px 2px 3px #000000;border-top:1px solid #3E3E3E;display:block;height:20px;position:relative;text-align:right;top:0;width:100%;z-index:1;} 38 | #drop-fade a.top{font-size:10px;margin-right:8px;position:relative;bottom:3px;color:#fff;text-shadow:#000 0px -1px 1px;display:block;float:right;padding:6px 2px 2px 0;} 39 | #drop-fade a.top{margin-right:8px;position:relative;bottom:3px;color:#eee;text-shadow:#000000 0px -1px 1px;display:block;float:right;font:bold 11px "Helvetica Neue", Helvetica, Arial, sans-serif;height:18px;padding:6px 2px 2px 0;} 40 | #drop-fade #loginopen{background:url(../../wptouch/images/menu-sprite.png) no-repeat 0 -31px;padding-left:16px;} 41 | #drop-fade #accountopen{padding-left:18px;background:url(../../wptouch/images/menu-sprite.png) no-repeat 0 -14px;} 42 | #drop-fade #prowlopen{padding-left:18px;background:url(../../wptouch/images/menu-sprite.png) no-repeat 2px -57px;} 43 | #drop-fade #wordtwitopen{padding-left:18px;background:url(../../wptouch/images/menu-sprite.png) no-repeat 2px -74px;} 44 | #drop-fade #searchopen{padding-left:18px;background:url(../../wptouch/images/menu-sprite.png) no-repeat 2px -94px;height:15px;overflow:hidden;padding-bottom:0;padding-top:3px;margin-top:3px;} 45 | #drop-fade #gigpressopen{padding-left:18px;background:url(../../wptouch/images/menu-sprite.png) no-repeat 2px -106px;} 46 | .dropper{width:100%;position:relative;z-index:1;margin:0;padding:0;border-top:1px solid #1b1b1b;font-size:13px;background-color:#2c2c2c;} 47 | .dropper ul{position:relative;list-style-type:none;margin:0;padding:0;} 48 | .dropper li{border-bottom:1px solid #1d1d1d;margin:0;background:url(../../wptouch/images/arrow.png) no-repeat right center;text-transform:capitalize;border-top:1px solid #363636;padding:0;text-align:left;} 49 | .dropper li.text{color:#eee;text-shadow:#111 0 -1px 1px;text-align:center;background-image:none;padding-top:25px;padding-bottom:25px;text-transform:none;} 50 | .dropper li.text a{display:inline;margin:0;padding:0;text-decoration:underline;} 51 | .dropper li:hover{background-color:#222;border-top:1px solid #222;position:relative;z-index:2;} 52 | .dropper a{font-weight:bold;display:block;text-shadow:#000 -1px -1px 1px;color:#d2d2d2;margin:0;width:auto;padding:11px 35px 11px 15px;text-align:left;} 53 | #wptouch-menu{position:absolute;z-index:2;top:45px;-webkit-box-shadow:#333 -6px 6px 6px;-moz-box-shadow:#333 -6px 6px 6px;box-shadow:#333 -6px 6px 6px;display:none;} 54 | #wptouch-menu-inner img{float:left;position:relative;bottom:5px;width:28px;padding-right:10px;right:0;} 55 | #tabnav{background-color:#444;padding-top:3px;border-bottom:1px solid #1b1b1b;border-top:1px solid #575757;padding-left:10px;height:24px;margin-bottom:-1px;} 56 | #tabnav a{display:inline-block;margin:0;padding:2px 8px 7px;color:#999;text-shadow:#111 0 -1px 1px;} 57 | #tabnav a.selected{background-color:#2c2c2c;position:relative;z-index:1;-webkit-border-top-left-radius:4px;-webkit-border-top-right-radius:4px;border:1px solid #1b1b1b;margin-left:-1px;margin-right:-1px;color:#fff !important;-webkit-box-shadow:#222 0px -2px 3px;border-bottom:1px solid #2c2c2c;text-shadow:#000 0 -1px 1px;} 58 | #tabnav a:hover,#tabnav a:active{color:#fff;} 59 | #wptouch-wordtwit{position:relative;border-top:1px solid #3e3e3e;background-color:#222;top:20px;} 60 | #wptouch-wordtwit #twitter-style-bar{display:block;border-top:1px solid #1e1e1e;} 61 | #wordtwit-avatar{text-align:left;padding-bottom:10px;-webkit-border-radius:8px;padding-left:5px;padding-top:5px;border:1px solid #555;background-image:none;background-color:#444;margin:10px;} 62 | #wordtwit-avatar img{-webkit-box-reflect:below -1px -webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(0.8,transparent),to(white));border:1px solid #222;float:left;margin-right:15px;-webkit-border-radius:2px;width:32px;height:32px;} 63 | #wptouch-wordtwit a#follow-arrow{border-style:none;width:18px;height:18px;position:absolute;top:22px;right:15px;padding:5px;margin:0;} 64 | #wordtwit-avatar p{padding:0;margin:0;color:#777;} 65 | #wordtwit-avatar p.twitter_username{color:#eee;text-shadow:#222 0 -1px 1px;font-size:15px;font-weight:bold;} 66 | #wordtwit-avatar a{display:inline-block;font-size:11px;color:#999;text-shadow:#222 0 -1px 0;padding:3px 0 0;} 67 | #wptouch-wordtwit ul{} 68 | #wptouch-wordtwit li{color:#ccc;font-size:12px;text-shadow:#000 0 -1px 0;text-transform:none;background-image:none;background-color:#2c2c2c;padding-top:10px;padding-left:10px;padding-right:50px;} 69 | #wptouch-wordtwit li:last-child{padding-bottom:20px;} 70 | #wptouch-wordtwit li p.time{color:#777;font-size:11px;} 71 | #wptouch-gigpress{color:#eee;text-shadow:#000 0 -1px 1px;text-align:left;font-size:11px;border-top:1px solid #3e3e3e;clear:both;margin:0;padding:0;width:99%;} 72 | #wptouch-gigpress #gigpress-style-bar{border-top:1px solid #1e1e1e;display:block;width:100%;} 73 | #wptouch-gigpress h4{font-size:14px;} 74 | #wptouch-gigpress img{float:left;margin:15px 10px;} 75 | #prowl-message{color:#eee;text-shadow:#000 0 -1px 1px;clear:both;padding:10px;text-align:left;font-size:11px;border-top:1px solid #3e3e3e;} 76 | #prowl-message #push-style-bar{display:block;border-top:1px solid #1e1e1e;margin-left:-10px;margin-right:-10px;margin-top:-10px;padding-top:10px;} 77 | #prowl-message form p{font-weight:bold;font-size:12px;position:relative;margin-bottom:10px;margin-top:10px;clear:both;} 78 | #prowl-message label{margin-left:5px;} 79 | #prowl-message input{width:60%;-webkit-border-radius:10px;padding:3px;color:#222;border:1px solid #1b1b1b;font:14px "Helvetica Neue",Helvetica,Geneva,Arial,sans-serif;} 80 | #prowl-message input#prowl-submit{width:100px;text-align:center;color:#fff;text-shadow:#333 0 -1px 1px;font-weight:bold;border:1px solid #333;margin-top:10px;float:right;} 81 | #prowl-message textarea{width:98%;-webkit-border-radius:10px;padding:3px;color:#222;border:1px solid #1b1b1b;height:70px;overflow:auto;margin-top:2px;font:14px "Helvetica Neue",Helvetica,Geneva,Arial,sans-serif;} 82 | #prowl-message h4{font-size:14px;} 83 | #prowl-message img{float:left;margin-right:10px;} 84 | #prowl-success{color:#eee;text-shadow:#000 0 -1px 1px;font:bold 16px "Helvetica Neue",Helvetica,Geneva,Arial,sans-serif;text-align:center;background:#000 url(../../wptouch/images/push-success.png) no-repeat center 50px;position:absolute;top:0;left:0;z-index:1000;opacity:0.9;width:90%;margin-left:5%;margin-top:25px;-webkit-border-radius:15px;-webkit-box-shadow:#444 0px 0px 15px;} 85 | #prowl-success p,#prowl-fail p{margin-top:125px;margin-left:20%;margin-right:20%;} 86 | #prowl-fail{color:#eee;text-shadow:#000 0 -1px 1px;font:bold 16px "Helvetica Neue",Helvetica,Geneva,Arial,sans-serif;text-align:center;background:#000 url(../../wptouch/images/push-fail.png) no-repeat center 50px;position:absolute;top:0;left:0;z-index:1000;opacity:0.9;width:90%;margin-left:5%;margin-top:25px;-webkit-border-radius:15px;-webkit-box-shadow:#444 0px 0px 15px;} 87 | #wptouch-login{position:absolute;top:0;left:0;z-index:1;width:100%;display:none;} 88 | #wptouch-login-inner{padding-top:8px;width:100%;height:35px;background-repeat:repeat-x;text-align:center;padding-bottom:2px;} 89 | #wptouch-login input#log{width:120px;-webkit-border-radius:10px;padding:3px;font-size:13px;color:#222;font-weight:bold;border:1px solid #1b1b1b;} 90 | #wptouch-login input#pwd{width:120px;-webkit-border-radius:10px;padding:3px;font-size:13px;color:#222;font-weight:bold;border:1px solid #1b1b1b;margin-left:5px;} 91 | #wptouch-search{position:absolute;top:0;left:0;z-index:1;width:100%;display:none;} 92 | #wptouch-search-inner{width:100%;height:40px;background-repeat:repeat-x;text-align:center;padding-top:5px;} 93 | input#s{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;padding:4px;width:80%;font-size:13px;color:#222;text-align:left;margin-top:6px;border:1px solid #1b1b1b;font-weight:bold;} 94 | img.head-close{display:inline;position:relative;top:6px;left:5px;} 95 | .post{background-color:#fff;padding:10px;margin-bottom:12px;margin-right:10px;margin-left:10px;border:1px solid #b1b1b1;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;position:relative;z-index:0;-webkit-box-shadow:rgba(255,255,255,.8) 0px 1px 0px;-moz-box-shadow:rgba(255,255,255,.8) 0px 1px 0px;box-shadow:rgba(255,255,255,.8) 0px 1px 0px;}.big{height:200px;} 96 | a.post-arrow{width:18px;height:15px;float:right;margin-top:1px;padding:0;background:#f4f4f4 url(../../wptouch/images/post-arrow.png) no-repeat center 5px;border:1px solid #ddd;-webkit-border-radius:5px;-webkit-transform:scale(1.0) rotate(0deg);-webkit-transition-duration:0.6s;} 97 | a.post-arrow-down{-webkit-transform:scale(1.0) rotate(180deg);-webkit-transition-duration:0.6s;background:#dfe3e3 url(../../wptouch/images/post-arrow.png) no-repeat center -14px;border:1px solid #b8b8b8;} 98 | a.h2{color:#222;text-decoration:none;display:block;margin-top:2px;text-align:left;width:93%;letter-spacing:-1px;margin-bottom:4px;line-height:15px;font-size:15px;font-weight:bold;} 99 | .mainentry{color:#444;line-height:145%;display:block;} 100 | .mainentry p{margin:2% 0 1%;padding:0;} 101 | .mainentry a.read-more{display:block;padding-top:10px;border-top:1px solid #c1c1c1;position:relative;padding-left:10px;color:#222;font-weight:bold;background:url(../../wptouch/images/arrow.png) no-repeat right 7px;padding-bottom:10px;-webkit-border-bottom-left-radius:8px;-webkit-border-bottom-right-radius:8px;margin:10px -10px -10px;} 102 | .mainentry a.read-more:hover{background-color:#dcdcdc;} 103 | .comment-bubble{background:url(../../wptouch/images/sprite.png) no-repeat -2px -90px;width:24px;height:20px;padding-top:4px;position:absolute;color:#fff;padding-left:0;font:bold 13px Helvetica,Arial-BoldMT,Geneva,sans-serif;letter-spacing:-1px;text-shadow:#871521 -1px -1px 1px;padding-right:1px;margin-left:0;z-index:1;text-align:center;left:1px;top:1px;} 104 | .comment-bubble-big{background:url(../../wptouch/images/sprite.png) no-repeat -2px -66px;width:26px;height:21px;padding-top:3px;position:absolute;color:#fff;left:2px;top:0;padding-left:0;font:bold 13px Helvetica,Arial-BoldMT,Geneva,sans-serif;letter-spacing:-1px;text-shadow:#871521 -1px -1px 1px;padding-right:4px;margin-left:0;z-index:1;text-align:center;} 105 | #nothing-shown{margin-left:-11px;margin-top:-11px;} 106 | .archive-top{margin:-11px -11px 7px;-webkit-border-top-right-radius:8px;padding:0;} 107 | .archive-top-right .post-arrow,.archive-top-right .post-arrow-down{margin-right:5px;margin-top:3px;} 108 | .archive-top-left.month-01,#arc-top.month-02,#arc-top.month-03,#arc-top.month-04,#arc-top.month-05,#arc-top.month-06,#arc-top.month-07,#arc-top.month-08,#arc-top.month-09,#arc-top.month-10,#arc-top.month-11,#arc-top.month-12{-webkit-border-top-left-radius:8px;-webkit-border-top-right-radius:8px;padding-top:5px;padding-bottom:5px;padding-left:10px;font-weight:bold;color:#eee;text-shadow:#535353 0 -1px 1px;} 109 | .main-navigation{-webkit-border-radius:8px;background-color:#fff;margin-bottom:12px;position:relative;margin-right:10px;margin-left:10px;border:1px solid #b1b1b1;overflow:hidden;font-weight:bold;padding:10px;} 110 | .main-navigation .alignleft a{float:left;display:block;background:url(../../wptouch/images/sprite.png) no-repeat 0 -46px;padding-top:3px;padding-bottom:3px;padding-left:23px;} 111 | .main-navigation .alignright a{float:right;display:block;padding-top:3px;padding-bottom:3px;padding-right:35px;background:url(../../wptouch/images/sprite.png) no-repeat right -26px;position:relative;left:15px;} 112 | .calendar{text-align:center;position:relative;margin-bottom:5px;margin-right:10px;margin-top:0;border:1px solid #c9c9c9;-webkit-border-top-left-radius:7px;-webkit-border-top-right-radius:1px;-webkit-border-bottom-left-radius:1px;-webkit-border-bottom-right-radius:7px;top:3px;float:left;-webkit-box-shadow:#c6c6c6 1px 1px 3px;} 113 | .cal-month{font-size:10px;font-weight:bold;color:#fff;letter-spacing:0;text-shadow:#67727f 1px -1px 0;border-bottom:1px solid #ececec;text-transform:uppercase;padding:3px 10px;-webkit-border-top-left-radius:6px;-webkit-border-top-right-radius:1px;} 114 | .cal-date{color:#111;background-color:#e9e9e9;text-shadow:white -1px -1px 1px;-webkit-border-bottom-left-radius:1px;-webkit-border-bottom-right-radius:6px;letter-spacing:-3px;font:bold 21px Helvetica,"Arial Rounded MT Bold",Geneva,sans-serif;padding:1px 4px 2px 0;text-align:center;border:1px solid #fff;border-top-style:none;} 115 | .month-01{background-color:#767c8f;} 116 | .month-02{background-color:#345abe;} 117 | .month-03{background-color:#37838d;} 118 | .month-04{background-color:#55b06c;} 119 | .month-05{background-color:#409ad5;} 120 | .month-06{background-color:#be63c5;} 121 | .month-07{background-color:#f79445;} 122 | .month-08{background-color:#4e1e00;} 123 | .month-09{background-color:#a04262;} 124 | .month-10{background-color:#284461;} 125 | .month-11{background-color:#4d1d77;} 126 | .month-12{background-color:#af1919;} 127 | .post-author{color:#555;font-size:9px;line-height:11px;position:relative;font-weight:bold;letter-spacing:0;text-align:left;width:72%;float:left;} 128 | .post-author span.lead{font-weight:normal;font-style:normal;} 129 | .ajax-load-more{margin-top:15px;margin-right:auto;display:block;margin-left:auto;width:160px;} 130 | .spin{height:16px;background:url(../../wptouch/images/ajax-loader.gif) no-repeat;display:inline-block;width:16px;position:relative;float:left;top:0;right:5px;} 131 | a.ajax{color:#475d79;text-shadow:#eee 1px 1px 0;letter-spacing:0;height:16px;font:bold 14px Helvetica,Geneva,Arial,sans-serif;} 132 | a.sh2{letter-spacing:-1px;margin:0;padding:0 0 2px;color:#222;display:block;line-height:20px;font-size:19px;font-weight:bold;text-align:left;} 133 | #singlentry{line-height:150%;color:#333;display:block;overflow:hidden;font-size:13px;} 134 | #singlentry li{margin-top:3px;margin-bottom:3px;} 135 | .single-post-meta-top{text-align:left;color:#999;font-size:10px;font-weight:bold;line-height:15px;} 136 | .single-post-meta-bottom{text-align:left;color:#666;font-size:11px;border-bottom:1px solid #adadad;border-top:1px solid #adadad;padding:10px;font-weight:bold;line-height:14px;background-color:#e5eff5;margin:5px -10px;text-shadow:#fafafa 0 1px 1px;} 137 | .single-post-meta-bottom .post-page-nav{font-size:15px;margin-bottom:15px;} 138 | .single-post-meta-bottom .post-page-nav a{padding:3px 7px;background-color:#fff;border:1px solid #ccc;-webkit-border-radius:4px;} 139 | ul#post-options{-webkit-border-bottom-left-radius:7px;-webkit-border-bottom-right-radius:7px;list-style-type:none;background-color:#e6e6e6;padding:0 4px 0 0;text-align:center;position:relative;margin:-5px -10px -10px;border-top:1px solid #fbfbfb;} 140 | ul#post-options li{margin:0;padding:0;display:inline-block;} 141 | ul#post-options li a{display:inline-block;width:38px;padding:20px 6px 16px;margin:2px 0 0;} 142 | ul#post-options li a#oprev{background:url(../../wptouch/images/post-options.png) no-repeat 5px -210px;border-right:1px solid #cfcfcf;width:38px;} 143 | ul#post-options li a#onext{background:url(../../wptouch/images/post-options.png) no-repeat -7px -244px;border-left:1px solid #cfcfcf;width:38px;} 144 | ul#post-options li a#omail{background:url(../../wptouch/images/post-options.png) no-repeat center -1px;border-left:1px solid #fbfbfb;margin-left:-3px;} 145 | ul#post-options li a#otweet{background:url(../../wptouch/images/post-options.png) no-repeat center -82px;} 146 | ul#post-options li a#obook{background:url(../../wptouch/images/post-options.png) no-repeat center -39px;border-right:1px solid #fbfbfb;margin-right:-3px;} 147 | #singlentry .wp-caption{text-align:center;font-size:11px;color:#999;line-height:13px;max-width:100% !important;height:auto !important;} 148 | #singlentry .gallery{margin:0;padding:0;width:100% !important;height:auto !important;} 149 | #singlentry .gallery dl.gallery-item img.attachment-thumbnail{padding:3px;margin:10px;width:50% !important;height:auto;} 150 | #singlentry .gallery dl.gallery-item{margin:0;} 151 | #singlentry .gallery dl.gallery-item dt.gallery-icon{margin:0;} 152 | #singlentry .gallery dl.gallery-item dd.gallery-caption{font-size:11px;color:#555;} 153 | #twitter-box{-webkit-border-radius:8px;border:1px solid #adadad;margin:10px;background-color:#fff;} 154 | #twitter-box img{float:left;margin-right:5px;position:relative;bottom:4px;right:3px;width:28px;height:28px;} 155 | #twitter-box ul{list-style-type:none;margin:0;padding:0;} 156 | #twitter-box li{clear:both;border-bottom:1px solid #cbcbcb;margin:0;padding:0;} 157 | #twitter-box li a{display:block;color:#222;font-size:13px;font-weight:bold;padding-top:10px;padding-bottom:13px;padding-left:10px;margin:0;} 158 | #bookmark-box{-webkit-border-radius:8px;border:1px solid #adadad;margin:10px;background-color:#fff;} 159 | #bookmark-box img{float:left;margin-right:5px;position:relative;bottom:4px;right:3px;margin-left:3px;margin-top:1px;} 160 | #bookmark-box ul{list-style-type:none;margin:0;padding:0;} 161 | #bookmark-box li{clear:both;border-bottom:1px solid #cbcbcb;margin:0;padding:0;} 162 | #bookmark-box li a{display:block;color:#222;font-size:13px;font-weight:bold;padding-top:10px;padding-bottom:13px;padding-left:10px;margin:0;} 163 | #twitter-box li:last-child,#bookmark-box li:last-child{border-bottom-style:none;} 164 | .page h2{font-size:20px;letter-spacing:-1px;text-align:left;line-height:22px;font-weight:normal;font-style:normal;padding-right:0;padding-top:0;padding-bottom:0;position:relative;border-style:none;margin:10px 0 0 42px;} 165 | .pageentry{color:#444;padding:2px 0 0;line-height:145%;display:block;} 166 | .pageentry li{list-style-type:none;} 167 | img.pageicon{position:relative;margin-right:10px;width:32px;height:32px;float:left;margin-top:-5px;margin-left:0;} 168 | .pageentry .wp-caption{text-align:center;font-size:11px;color:#999;line-height:13px;max-width:100% !important;height:auto !important;} 169 | #wptouch-tagcloud{-webkit-border-radius:8px;border:1px solid #adadad;background-color:#fff;margin-right:10px;margin-left:10px;padding:10px;text-align:justify;text-transform:capitalize;line-height:150%;} 170 | #wptouch-archives{-webkit-border-radius:8px;border:1px solid #adadad;background-color:#fff;margin-right:10px;margin-left:10px;} 171 | #wptouch-archives a{color:#222;display:block;padding-bottom:10px;padding-left:10px;background:url(../../wptouch/images/arrow.png) no-repeat right center;padding-top:10px;} 172 | #wptouch-archives ul{padding:0;list-style-type:none;margin:0;} 173 | #wptouch-archives li{border-bottom:1px solid #ccc;list-style-type:none;font-weight:bold;font-size:14px;color:#222;display:block;padding:0;margin-bottom:0;margin-left:-10px;margin-right:-10px;} 174 | #wptouch-archives li:first-child{margin-top:-10px;} 175 | #wptouch-archives li:last-child{margin-bottom:-10px;border-bottom-style:none;} 176 | #wptouch-links a{color:#222;display:block;background:url(../../wptouch/images/arrow.png) no-repeat right center;padding:10px 10% 10px 10px;} 177 | #wptouch-links h2{color:#475d79;text-shadow:#eee 1px 1px 0;font-size:15px;font-weight:bold;margin-bottom:10px;margin-left:10px;letter-spacing:0;border-style:none;text-transform:capitalize;margin-top:20px;} 178 | #wptouch-links ul{-webkit-border-radius:8px;border:1px solid #adadad;background-color:#fff;list-style-type:none;margin:10px;padding:0;} 179 | #wptouch-links li{border-bottom:1px solid #ccc;list-style-type:none;font-weight:bold;font-size:13px;color:#333;display:block;padding:0;margin:0;text-shadow:#fff 0 0 0;} 180 | #wptouch-links li:first-child{border-top-style:none;} 181 | #wptouch-links li:last-child{border-bottom-style:none;} 182 | #wptouch-flickr{text-align:center;width:auto;} 183 | #wptouch-flickr img{padding:1px;background-color:#ccc;margin:5px;width:55px;height:55px;} 184 | #fourohfour{-webkit-border-radius:8px;border:1px solid #adadad;background-color:#fff;text-align:center;margin:10px;padding:10px;} 185 | ol#commentlist{list-style-type:none;display:none;margin:0 10px 0;position:relative;z-index:1;padding-right:0;padding-bottom:0;padding-left:0;} 186 | ol.commentlist li{background-color:#fff;padding:10px;border-bottom:1px solid #dedede;margin:0;overflow:hidden;font-size:12px;border-right:1px solid #b1b1b1;border-left:1px solid #b1b1b1;position:relative;} 187 | h3#com-head{font-weight:bold;font-size:13px;-webkit-border-radius:8px;text-shadow:#fff 0 1px 0;margin-left:10px;margin-right:10px;border:1px solid #b1b1b1;background:#fff;position:relative;z-index:1;padding-top:10px;padding-bottom:10px;padding-left:10px;cursor:pointer;display:block;} 188 | h3#com-head img#com-arrow{margin-right:5px;position:relative;top:1px;-webkit-transform:scale(1.0) rotate(0deg);-webkit-transition-duration:0.6s;} 189 | .comhead-open{-webkit-border-bottom-left-radius:0px !important;-webkit-border-bottom-right-radius:0px !important;margin-bottom:-1px;background-color:#eee !important;} 190 | .com-arrow-down{-webkit-transform:scale(1.0) rotate(90deg) !important;-webkit-transition-duration:0.6s !important;} 191 | ol.commentlist li:first-child{border-top:1px solid #b1b1b1;} 192 | ol.commentlist li:last-child{border-bottom:1px solid #b1b1b1;-webkit-border-bottom-left-radius:8px;-webkit-border-bottom-right-radius:8px;} 193 | ol.commentlist li .avatar{float:left;border-right:1px solid #f9f9f9;margin-right:5px;} 194 | ol.commentlist li ul{padding:0;margin:0;list-style-type:none;} 195 | ol.commentlist .parent{background-color:#fefdec;} 196 | ol.commentlist .parent ul.children li{border:1px solid #ddd;background-color:#e9f8fd;-webkit-border-radius:8px;} 197 | ol.commentlist ul.children .parent ul.children li.alt{border:1px solid #ddd;background-color:#fff;padding:10px;margin:10px 0 0;-webkit-border-radius:8px;} 198 | ol.commentlist ul.children .parent ul.children li.even{border:1px solid #ddd !important;background-color:#f9fbf6;padding:10px;margin:10px 0 0;-webkit-border-radius:8px;} 199 | ol.commentlist .reply a,.comdater{position:absolute;top:6px;right:5px;font-weight:bold;font-size:10px;background-color:#e5e5e5;padding:1px 5px;border:1px solid #fff;-webkit-border-radius:3px;text-shadow:#fff 0 1px 0px;} 200 | ol.commentlist .comdater span{margin-right:3px;border-right:1px solid #fefefe;display:inline-block;} 201 | ol.commentlist .comdater span a{padding-right:7px;} 202 | ol.commentlist .comdater span a:last-child{border-right:1px solid #ccc;display:inline-block;} 203 | ol.commentlist .comment-author{font-weight:bold;} 204 | ol.commentlist .comment-meta a{font-size:11px;color:#999;} 205 | .navigation.commentnav{height:17px;padding-right:0;padding-top:10px;padding-left:10px;} 206 | .navigation.commentnav .alignright a{background-repeat:no-repeat;background-position:right -26px;padding-right:35px;} 207 | .navigation.commentnav .alignleft a{background-repeat:no-repeat;background-position:left -46px;padding-left:25px;} 208 | .comtop{background-color:#f5f5f5;padding-left:0;padding-bottom:15px;border-bottom:1px solid #dedede;margin-top:-10px;margin-left:-10px;margin-right:-10px;height:17px;} 209 | .com-author a{font-weight:bold;text-transform:capitalize;font-size:13px;text-shadow:#fff 0 1px 0;-webkit-border-top-right-radius:0px;} 210 | .com-author{font-weight:bold;text-transform:capitalize;font-size:13px;position:relative;text-shadow:#fff 0 1px 0;-webkit-border-top-right-radius:0px;padding-left:10px;padding-top:7px;} 211 | h3#comments,h3#respond{color:#475d79;text-shadow:#eee 1px 1px 0;letter-spacing:-1px;font-size:17px;padding-left:10px;padding-top:20px;} 212 | .preview{background-color:#fdeeab;color:#bf7b20;font-weight:bold;text-shadow:#fff 0 1px 1px;font-size:11px;} 213 | .preview span{position:absolute;right:62px;top:8px;} 214 | p.logged{color:#475d79;text-shadow:#eee 1px 1px 0;font-size:11px;font-weight:bold;position:relative;top:2px;margin-top:35px;} 215 | form#commentform{margin-left:10px;margin-right:10px;} 216 | form#commentform input{-webkit-border-radius:8px;border:1px solid #adadad;padding:3px;margin:0;font-size:13px;color:#444;width:170px;} 217 | form#commentform input#submit{color:#555;font-weight:bold;width:25%;opacity:1;background-color:#eee;border:1px solid #aaa;text-shadow:#fff 0 1px 0;} 218 | textarea#comment{-webkit-border-radius:8px;border:1px solid #adadad;font-size:13px;color:#444;height:110px;width:98%;padding:3px;} 219 | #loading{position:relative;background-color:#dedede;-webkit-border-radius:8px;border:1px solid #9fa5ac;opacity:0.85;z-index:9;margin:0;bottom:166px;text-align:center;width:98%;height:64px;max-width:453px;padding:50px 3px 2px;} 220 | #loading p{display:inline;position:relative;bottom:3px;left:3px;text-shadow:#fff 0 1px 0;font-size:12px;color:#2f4e71;font-weight:bold;} 221 | form#commentform label{color:#475d79;text-shadow:#eee 1px 1px 0;font-size:12px;font-weight:bold;} 222 | #refresher{-webkit-border-radius:8px;padding:10px 10px 10px 18px;border:1px solid #b1b1b1;background-color:#e9f5f8;color:#475d79;font-weight:bold;margin-left:10px;margin-right:10px;text-shadow:#f5f5f5 0 1px 1px;margin-top:20px;} 223 | #refresher img{float:left;margin-right:3px;margin-left:-10px;} 224 | #refresher h3{color:#475d79;text-shadow:#f5f5f5 0 1px 1px;} 225 | p.subscribe-to-comments{padding:8px;-webkit-border-radius:8px;background-color:#eee;border:1px solid #adadad;} 226 | p.subscribe-to-comments label{text-shadow:#fff 0 1px 0 !important;color:#333 !important;} 227 | p.subscribe-to-comments input#subscribe{padding-right:3px;vertical-align:top;} 228 | .full-justified{text-align:justify;} 229 | .left-justifed{text-align:left;} 230 | .small-text{font-size:1.1em;} 231 | .medium-text{font-size:1.2em;} 232 | .large-text{font-size:1.3em;} 233 | .classic-wptouch-bg{background:url(../../wptouch/images/pinstripes-classic.gif) repeat;} 234 | .argyle-wptouch-bg{background:url(../../wptouch/images/argyle-tie.gif) repeat;} 235 | .horizontal-wptouch-bg{background:url(../../wptouch/images/pinstripes-horizontal.gif) repeat;} 236 | .diagonal-wptouch-bg{background:url(../../wptouch/images/pinstripes-diagonal.gif) repeat;} 237 | .skated-wptouch-bg{background:url(../../wptouch/images/skated-concrete.gif) repeat;} 238 | .grid-wptouch-bg{background:url(../../wptouch/images/grid.gif) repeat;} 239 | #footer{text-align:center;color:#475d79;font-size:10px;font-weight:bold;text-shadow:#eee 1px 1px 0;margin-top:60px;line-height:13px;padding:0 0 10px;} 240 | #footer p{margin:0;padding:0 25px 5px;} 241 | #wptouch-switch-link{-webkit-border-radius:8px;border:1px solid #adadad;margin-right:10px;margin-left:10px;margin-bottom:20px;position:relative;max-width:300px;padding:13px 10px 12px 8px;color:#222;text-shadow:#fff 0 0 0;font-size:13px;text-align:left;background-color:#fff;} 242 | #wptouch-switch-link a{position:relative;display:block;width:77px;background:url(../../wptouch/images/onoff.jpg) no-repeat left top;height:22px;float:right;left:2px;bottom:5px;} 243 | .offimg{width:77px;background:url(../../wptouch/images/onoff.jpg) no-repeat 0 -22px !important;height:22px;} 244 | .addthis_container{display:none !important;} 245 | a.tt{display:none !important;} 246 | #secureimgdiv img#cas_image{-webkit-border-radius:2px !important;border:1px solid #adadad !important;width:auto!important;height:21px!important;float:left!important;} 247 | #secureimgdiv p label{color:#475d79;text-shadow:#eee 1px 1px 0;font-size:14px;font-weight:bold;} 248 | #secureimgdiv p small{display:block;margin-top:5px;font-size:11px;} 249 | #secureimgdiv p input#securitycode{-webkit-border-radius:8px;border:1px solid #adadad;padding:3px;margin:0 0 0 0;font-size:13px;color:#444;width:101px;-webkit-border-top-left-radius:1px;-webkit-border-bottom-left-radius:1px;} 250 | .post object,.post embed{width:100% !important;height:auto;position:relative;z-index:0;} 251 | a#ribbon{display:none !important;} 252 | #disqus_thread .dsq-auth-header{margin-top:-35px;} 253 | h3#dsq-add-new-comment{color:#475d79;text-shadow:#eee 2px 1px 1px;letter-spacing:-1px;font-size:16px;position:relative;bottom:10px;} 254 | .dsq-by img{display:none;} 255 | .dsq-authenticated-pic img.dsq-post-avatar{width:24px;height:24px;} 256 | #disqus_thread{-webkit-border-radius:8px;border:1px solid #adadad;background-color:#fff;padding:10px;margin-left:10px;margin-right:10px;margin-top:50px;} 257 | #disqus_thread .dsq-authenticated ul li{font-weight:bold;position:relative;left:5px;} 258 | #disqus_thread a#dsq-options-toggle{float:right;} 259 | a.dsq-brlink{text-align:center;display:block;margin-top:15px;font-family:"Helvetica Neue",Arial,Helvetica,Geneva,sans-serif;} 260 | #adsense-area{height:50px;overflow:none;margin-bottom:12px;background:transparent;} 261 | #adsense-area iframe{height:50px!important;overflow:none;} 262 | #idc-container-parent{background-color:white;margin-left:10px;margin-right:10px;-webkit-border-radius:8px;border:1px solid #adadad;overflow:hidden;font:12px Helvetica !important;position:relative !important;} 263 | #idc-container-parent .idc-c-t{padding:9px;} 264 | #idc-container-parent .idc-c-b{padding-left:5px;} 265 | #idc-container-parent ul#idcpostNav li{font-size:11px !important;} 266 | #idc-container-parent .idc-new{padding-left:10px !important;padding-right:10px !important;} 267 | #idc-container-parent .idc-head h3,#idc-container-parent .idc-new h3{color:#475d79;text-shadow:#eee 2px 1px 1px;letter-spacing:-1px;font-size:16px;position:relative;bottom:10px;padding-left:10px;} 268 | #idc-container-parent .idc-right{margin-top:-10px;padding-right:10px;} 269 | #idc-container-parent textarea{width:91% !important;} 270 | #idc-container-parent .idc-column{display:block;clear:both;width:94% !important;} 271 | #idc-container-parent form input{max-width:100px;} 272 | #idc-container-parent form div{margin-bottom:10px;} 273 | #idc-container-parent #idnewthreadSubmitLI.idc-right{position:absolute;} 274 | #idc-container-parent label.idc-nofloat{display:none;} 275 | #noscript-wrap{width:10%;height:100%;position:absolute;top:0;left:0;background-color:#eee;z-index:1000;opacity:0.9;} 276 | #noscript{color:#ddd;display:block;height:54%;text-shadow:#000 -1px -1px 0;-webkit-border-radius:15px;-webkit-box-shadow:#444 0px 0px 15px;width:auto;padding-right:25px;padding-left:25px;background:#0d0d0d url(../../images/saved.png) no-repeat center top;padding-top:110px;text-align:center;border:3px solid #444;font:14px Helvetica,Arial,sans-serif;margin:25px;} 277 | .wptouch-post-thumb-wrap{background:url(../../wptouch/images/top-left.png) no-repeat;position:relative;margin-right:8px;-webkit-box-reflect:below 1px -webkit-gradient(linear,left top,left bottom,from(transparent),color-stop(0.85,transparent),to(white));display:block;margin-bottom:4px;width:46px;height:46px;float:left;} 278 | .wptouch-post-thumb img{width:46px;height:46px;} 279 | .wptouch-post-thumb-wrap .thumb-top-left{position:absolute;top:0;left:0;height:9px;width:9px;background:url(../../wptouch/images/thumb-corners.png) no-repeat 0 0;} 280 | .wptouch-post-thumb-wrap .thumb-top-right{position:absolute;top:0;right:0;width:9px;height:9px;background:url(../../wptouch/images/thumb-corners.png) no-repeat right top;} 281 | .wptouch-post-thumb-wrap .thumb-bottom-left{position:absolute;bottom:0;left:0;width:9px;height:9px;background:url(../../wptouch/images/thumb-corners.png) no-repeat 0 -9px;} 282 | .wptouch-post-thumb-wrap .thumb-bottom-right{position:absolute;bottom:0;right:0;width:9px;height:9px;background:url(../../wptouch/images/thumb-corners.png) 9px -9px;} 283 | div.printfooter{display:none;} 284 | #headerbar, #wptouch-login, #wptouch-search { background: #000000 url(../../wptouch/images/head-fade-bk.png);} 285 | #headerbar-title, #headerbar-title a { color: #eeeeee;} 286 | #wptouch-menu-inner a:hover { color: #006bb3;} 287 | #catsmenu-inner a:hover { color: #006bb3;} 288 | #drop-fade { background: #333333;} 289 | a, h3#com-head { color: #006bb3;} 290 | a.h2, a.sh2, .page h2 { font-family: 'Helvetica Neue';} 291 | pre, code{font-family:Courier, "Courier New", mono;color:red;white-space:pre-line;} 292 | table.wikitable, table.TablePager{padding:0.3em;} 293 | .wikitable th, .wikitable td{border:1px solid #A0A0A0;color:#000;} 294 | .TablePager th, .TablePager td{background-color:#ffffff;;border:1px solid #A0A0A0;padding:0.3em;} 295 | .wikitable th, .TablePager th{background-color:#d0d0d0;padding:0.3em;font-weight:bold;} 296 | a.new, #p-personal a.new {color: #ba0000;} 297 | a.new:visited, #p-personal a.new:visited {color: #a55858;} 298 | /*.heimu {text-decoration:line-through;}*/ 299 | li {list-style-type: none;} 300 | /*tr,td {display: inline;}*/ 301 | .infotemplate tbody tr{display:table-row;} 302 | .infotemplate tbody tr td{display:table-cell;} 303 | -------------------------------------------------------------------------------- /assets/vector.css: -------------------------------------------------------------------------------- 1 | .my-buttons{padding:.5em}.my-buttons a{text-decoration:none;border:1px #069 outset;padding:0.1em}.my-buttons a:hover,.my-buttons a:active{border-style:inset}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}table.navbox{border:1px solid #AAAAAA;clear:both;margin:auto;padding:1px;text-align:center;width:100%}table.navbox + table.navbox{margin-top:-1px}.navbox-title,.navbox-abovebelow,table.navbox th{padding-left:1em;padding-right:1em;text-align:center}.navbox-group{font-weight:bold;padding-left:1em;padding-right:1em;white-space:nowrap}.navbox,.navbox-subgroup{background:none repeat scroll 0 0 #FDFDFD}.navbox-list{border-color:#FDFDFD}.navbox-title,table.navbox th{background:none repeat scroll 0 0 #CCCCFF}.navbox-abovebelow,.navbox-group,.navbox-subgroup .navbox-title{background:none repeat scroll 0 0 #DDDDFF}.navbox-subgroup .navbox-group,.navbox-subgroup .navbox-abovebelow{background:none repeat scroll 0 0 #E6E6FF}.navbox-even{background:none repeat scroll 0 0 #F7F7F7}.navbox-odd{background:none repeat scroll 0 0 transparent}.collapseButton{float:right;font-weight:normal;text-align:right;width:auto}.navbox .collapseButton{width:6em}.heimu{background-color:black}.heimu .new{color:black !important}.heimu a{color:black !important}.heimu a:hover{color:#0645AD !important}.heimu .new:hover{color:#BA0000 !important}.please-donate{text-align:center}.ads-main{display:inline-block;zoom:1;+display:inline;_display:inline;margin:10px}.ads-main>br{display:none}.ads-main a img{vertical-align:initial}body{font-family:arial,tahoma,\5fae\8f6f\96c5\9ed1,Hiragino Sans GB,Microsoft JhengHei,sans-serif}#p-logo a{height:180px}div#mw-page-base{background-color:transparent;background-image:none;height:91px}#left-navigation{margin-top:51px}#right-navigation{margin-top:51px}div#mw-panel{top:180px;padding-top:2em;text-shadow:3px 3px 6px #CCC}div#mw-panel div.portal{padding-bottom:1em}div#mw-head div.vectorMenu h4{height:1.9em;margin-bottom:0em;padding-top:1.25em;padding-bottom:0em;padding-right:0.5em}div.vectorTabs ul li{background-image:url(//static.mengniang.org/skin/tab-normal-fade.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,0.3),rgba(222,237,224,1)) }div.vectorTabs li.selected{background-image:url(//static.mengniang.org/skin/tab-current-fade.png);background-image:-webkit-linear-gradient(top,rgba(255,255,255,0.3),rgba(167,215,249,1)) }#content{box-shadow:0 0 20px rgba(0,0,0,0.3)}div#simpleSearch button#searchButton{padding-top:0.1em;padding-bottom:0.2em;padding-right:0.1em}#mainpage{display:block;width:100%;box-shadow:rgba(0,0,0,0.5) 0 0 .75em;border-collapse:collapse;text-align:left}.mainpage-newsbox{width:66.67%;float:left}.mainpage-box{float:left;width:33.33%}.mainpage-title{font-family:EasonPro,"黑体",serif;font-size:1.618em;color:#228b22;margin:0px;background:#deede0;font-weight:400;height:30px;line-height:30px;text-align:center;font-size-adjust:0.43}.mainpage-content,.mainpage-1stcontent{vertical-align:top;padding:.5em 2%;border-right:#AAA solid 1px;background-color:white;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffffff,EndColorStr=#ffeeeeee);background-image:linear-gradient(top,#BBB 0%,white 2%,#EEE 100%);background-image:-o-linear-gradient(top,#BBB 0%,white 2%,#EEE 100%);background-image:-moz-linear-gradient(top,#BBB 0%,white 2%,#EEE 100%);background-image:-webkit-linear-gradient(top,#BBB 0%,white 2%,#EEE 100%);background-image:-ms-linear-gradient(top,#BBB 0%,white 2%,white 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#BBB),color-stop(.02,white),color-stop(1,#EEE))}.mainpage-1stcontent{height:200px;font-size:1.1em}.clear-div{clear:both}h1{font-weight:bold;border-bottom:2px solid #0074f9}h2{font-weight:bold;border-bottom:1px solid #0074f9}div#content a.external:visited{color:#3366BB}#scrollDiv{width:100%;height:25px;line-height:25px;overflow:hidden}#scrollDiv li{height:25px;padding-left:10px;list-style:none}.common-box{padding:0.2em 0.4em;border:1px solid #ddd;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;-khtml-border-radius:10px;-o-border-radius:10px;-webkit-box-shadow:#666 0px 2px 3px;-moz-box-shadow:#666 0px 2px 3px ;box-shadow:#666 0px 2px 3px}.block{width :100% }.content-box{width :100% }.content-box{display :box;display :-moz-box;display :-webkit-box}.parallel .content-box{box-orient :horizontal;-moz-box-orient :horizontal;-webkit-box-orient :horizontal}.parallel .boite{box-flex :1;-moz-box-flex :1;-webkit-box-flex :1}.page-Mainpage h1.firstHeading,.page-Mainpage #siteSub,.page-Mainpage #contentSub,.page-Mainpage li#ca-viewsource,.page-Mainpage li#ca-talk{display:none}#siteSub{display:inline;font-size:90%;font-weight:normal;font-style:normal;text-align:right}.mp-aliceblue{margin:.5em 0 .5em 0;background-image:-moz-linear-gradient(top,white,aliceblue);background-image:-webkit-linear-gradient(top,white,aliceblue);background-image:-o-linear-gradient(top,white,aliceblue);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='white',endColorstr='aliceblue');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='white',endColorstr='aliceblue')"}.anonnotice{width:700px;margin:0 auto;text-align:center;background-image:-moz-linear-gradient(top,white,#FFFF6F);background-image:-webkit-linear-gradient(top,white,#FFFF6F);background-image:-o-linear-gradient(top,white,#FFFF6F);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='white',endColorstr='#FFFF6F');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='white',endColorstr='#FFFF6F')"}#footer-info-copyright{background:url('//static.mengniang.org/weixin_mengbai.jpg') 0 15px no-repeat;padding:15px 0 30px 0px;font-family:"Helvetica Neue",Arial,Helvetica,Geneva,sans-serif}#footer-moegirl{padding-left:160px;color:#2f2f2f}#footer-moegirl h4{color:#243c4a;font:normal normal AllerBold,"Helvetica Neue",Arial,Helvetica,Geneva,sans-serif;margin-bottom:8px}#footer-moegirl ul{float:left;margin:0 100px 20px 0;line-height:1.7;width:120px;font-size:12pt}#footer-moegirl ul.lastlist{margin-right:0}#footer-moegirl ul a{color:#2f2f2f}#footer-moegirl .copyright{clear:left;display:block;line-height:1.3;color:#999}.ns-0 div#content,.ns-0 div#p-cactions li a:hover,.ns-0 div#p-cactions li.selected a,.ns-0 div#content div.thumb{background-color:#F3F3F3}div#content,div#p-cactions li a:hover,div#p-cactions li.selected a,div#content div.thumb{background-color:#F8FCFF}#breadcrumb{font:bold 18px Arial,Helvetica,sans-serif;background-image:url('//static.mengniang.org/breadcrumb/bc_bg.png');background-size:100% 100%;color:red;border:solid 1px #cacaca;border-radius:10px;width:100%;overflow:hidden;margin:0px;padding:0px}#breadcrumb span{list-style-type:none;float:left;padding-left:10px}#breadcrumb a{text-align:center;vertical-align:middle;display:block;background-image:url('//static.mengniang.org/breadcrumb/bc_separator.png');background-repeat:no-repeat;background-position:right;padding-right:15px;text-decoration:none;color:#454545}.home{border:none;margin:8px 0px}#breadcrumb a:hover{color:#35acc5}.backToTop{display:none;width:20px;padding:5px 0;background-color:#000;color:#fff;font-size:12px;text-align:center;position:fixed;_position:absolute;right:0;bottom:100px;_bottom:"auto";cursor:pointer;opacity:.6;filter:Alpha(opacity=60)}#catlinks{box-shadow:5px 5px 20px #A1B4B0;text-shadow:#E2E2E2 0.1em 0.1em 0.2em;border-radius:5px} 2 | /* cache key: moegirlwiki:resourceloader:filter:minify-css:7:1940d09df31ac87022140f894d4abdb6 */ -------------------------------------------------------------------------------- /libs/android-support-v4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/libs/android-support-v4.jar -------------------------------------------------------------------------------- /proguard-project.txt: -------------------------------------------------------------------------------- 1 | # To enable ProGuard in your project, edit project.properties 2 | # to define the proguard.config property as described in that file. 3 | # 4 | # Add project specific ProGuard rules here. 5 | # By default, the flags in this file are appended to flags specified 6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt 7 | # You can edit the include path and order by changing the ProGuard 8 | # include property in project.properties. 9 | # 10 | # For more details, see 11 | # http://developer.android.com/guide/developing/tools/proguard.html 12 | 13 | # Add any project specific keep options here: 14 | 15 | # If your project uses WebView with JS, uncomment the following 16 | # and specify the fully qualified class name to the JavaScript interface 17 | # class: 18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 19 | # public *; 20 | #} 21 | -------------------------------------------------------------------------------- /project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system edit 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | # 10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 12 | 13 | # Project target. 14 | target=android-15 15 | -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-hdpi/ic_menu_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/res/drawable-hdpi/ic_menu_refresh.png -------------------------------------------------------------------------------- /res/drawable-ldpi/ic_menu_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/res/drawable-ldpi/ic_menu_refresh.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-mdpi/ic_menu_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/res/drawable-mdpi/ic_menu_refresh.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /res/drawable-xhdpi/ic_menu_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/res/drawable-xhdpi/ic_menu_refresh.png -------------------------------------------------------------------------------- /res/drawable/logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/res/drawable/logo1.png -------------------------------------------------------------------------------- /res/drawable/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/res/drawable/splash.png -------------------------------------------------------------------------------- /res/layout/about.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 21 | 22 | -------------------------------------------------------------------------------- /res/layout/activity_search_query_results.xml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /res/layout/activity_splash.xml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 17 | 18 | -------------------------------------------------------------------------------- /res/menu/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /res/menu/main_activity_actions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 14 | 19 | 20 | 21 | 26 | 31 | 36 | 37 | -------------------------------------------------------------------------------- /res/menu/search_query_results.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /res/menu/splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /res/values-sw600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /res/values-sw720dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 128dp 8 | 9 | 10 | -------------------------------------------------------------------------------- /res/values-v11/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /res/values-v14/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 0dp 5 | 0dp 6 | 7 | 8 | -------------------------------------------------------------------------------- /res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 萌娘百科 5 | Settings 6 | 编辑 7 | 关于 8 | Hello world! 9 | 搜索 10 | 搜索 萌娘百科 11 | 刷新 12 | 分享 13 | SearchQueryResults 14 | MoeGirlView/1.0 (Client; zh_cnaction_viewinbrowseraction_viewinbrowser) 15 | 在浏览器中打开 16 | SplashActivity 17 | 18 | 萌娘百科Android客户端 Alpha\n\n 19 | By:死宅小h\n Dedicated to this beautiful but cruel world 20 | \n\n 21 | 萌娘百科:zh.moegirl.org \n\n 萌娘百科的更新姬们:\n 22 | 大姐姐渣浪姬:新浪微博\n 23 | 人人更新姬:公共主页 \n 24 | 抖M微信姬:微信号 moegirlpedia \n 25 | 疼迅姬:腾讯微博 \n 26 | 27 | -------------------------------------------------------------------------------- /res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 14 | 15 | 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /res/xml/sreachable.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | -------------------------------------------------------------------------------- /src/org/moegirl/moegirlview/MainActivity.java: -------------------------------------------------------------------------------- 1 | package org.moegirl.moegirlview; 2 | 3 | import java.io.File; 4 | import java.io.FileInputStream; 5 | import java.io.FileOutputStream; 6 | import java.io.UnsupportedEncodingException; 7 | import java.lang.reflect.Field; 8 | import java.net.URLDecoder; 9 | import java.net.URLEncoder; 10 | import java.util.Locale; 11 | import java.util.Stack; 12 | import java.util.concurrent.ExecutorService; 13 | import java.util.concurrent.Executors; 14 | 15 | import org.apache.http.HttpEntity; 16 | import org.apache.http.HttpResponse; 17 | import org.apache.http.client.HttpClient; 18 | import org.apache.http.client.methods.HttpGet; 19 | import org.apache.http.impl.client.DefaultHttpClient; 20 | import org.apache.http.params.CoreProtocolPNames; 21 | import org.apache.http.util.EntityUtils; 22 | import org.json.JSONArray; 23 | import org.json.JSONObject; 24 | import org.json.JSONTokener; 25 | import org.moegirl.moegirlview.ShakeDetector.OnShakeListener; 26 | 27 | import android.app.Activity; 28 | import android.app.AlertDialog; 29 | import android.app.ProgressDialog; 30 | import android.app.SearchManager; 31 | import android.content.Context; 32 | import android.content.Intent; 33 | import android.content.res.Configuration; 34 | import android.net.ConnectivityManager; 35 | import android.net.NetworkInfo; 36 | import android.net.Uri; 37 | import android.os.AsyncTask; 38 | import android.os.Build.VERSION; 39 | import android.os.Bundle; 40 | import android.text.method.LinkMovementMethod; 41 | import android.util.Log; 42 | import android.view.KeyEvent; 43 | import android.view.LayoutInflater; 44 | import android.view.Menu; 45 | import android.view.MenuItem; 46 | import android.view.View; 47 | import android.view.ViewConfiguration; 48 | import android.view.ViewGroup; 49 | import android.webkit.WebSettings; 50 | import android.webkit.WebView; 51 | import android.webkit.WebViewClient; 52 | import android.widget.TextView; 53 | import android.widget.Toast; 54 | 55 | public class MainActivity extends Activity { 56 | private WebView webview1; 57 | private ShakeDetector shakeDetector; 58 | 59 | private String webview_html; 60 | private String title; 61 | private boolean isFromCache = false; 62 | private long revid; 63 | 64 | private boolean forceCache = false; 65 | private Stack pageHistory = new Stack(); 66 | 67 | private final String homePage = "Mainpage"; 68 | 69 | private ExecutorService executorService = Executors.newFixedThreadPool(3); 70 | 71 | // private final String homePage = "归宅部活动记录"; 72 | 73 | @Override 74 | protected void onCreate(Bundle savedInstanceState) { 75 | super.onCreate(savedInstanceState); 76 | 77 | // StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 78 | // .detectAll().build()); 79 | 80 | setTitle("萌娘百科"); 81 | setContentView(R.layout.activity_main); 82 | 83 | getOverflowMenu(); 84 | 85 | webview1 = (WebView) findViewById(R.id.webview); 86 | webview1.getSettings().setJavaScriptEnabled(true); 87 | webview1.getSettings().setDefaultTextEncodingName("utf-8"); 88 | webview1.getSettings().setBuiltInZoomControls(true); 89 | webview1.getSettings().setLoadWithOverviewMode(true); 90 | webview1.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 91 | webview1.setWebViewClient(new HelloWebViewClient()); 92 | 93 | if (detect() < 2) { 94 | forceCache = true; 95 | webview1.getSettings().setCacheMode( 96 | WebSettings.LOAD_CACHE_ELSE_NETWORK); 97 | } 98 | 99 | Intent it = this.getIntent(); 100 | String tSchema = it.getScheme(); 101 | Uri myURI = it.getData(); 102 | if (myURI != null) { 103 | if (savedInstanceState == null) { 104 | webview1.loadData("hello world", "text/html", "utf-8"); 105 | } else { 106 | String savedTitle = savedInstanceState.getString("title"); 107 | if (savedTitle.equals(myURI.getLastPathSegment())) { 108 | loadSaved(savedInstanceState); 109 | } else { 110 | webview1.loadData("hello world", "text/html", "utf-8"); 111 | } 112 | } 113 | } else if (Intent.ACTION_SEARCH.equals(it.getAction())) { 114 | String searchString = it.getStringExtra(SearchManager.QUERY).trim(); 115 | // Log.i("MoeGirl", searchString); 116 | loadtitle(searchString); 117 | } else if (savedInstanceState == null) { 118 | loadtitle(homePage); 119 | } else { 120 | loadSaved(savedInstanceState); 121 | } 122 | 123 | shakeDetector = new ShakeDetector(this); 124 | shakeDetector.registerOnShakeListener(new ShakeListener()); 125 | System.out.println("start_shake_to_random"); 126 | shakeDetector.start(); 127 | 128 | } 129 | 130 | private void loadSaved(Bundle savedInstanceState) { 131 | webview_html = savedInstanceState.getString("html"); 132 | title = savedInstanceState.getString("title"); 133 | revid = savedInstanceState.getLong("revid"); 134 | 135 | if (title.toLowerCase(Locale.getDefault()).equals("mainpage")) { 136 | setTitle("萌娘百科"); 137 | } else { 138 | setTitle(title); 139 | } 140 | webview1.loadDataWithBaseURL("http://m.moegirl.org/", webview_html, 141 | "text/html", "utf-8", null); 142 | } 143 | 144 | @Override 145 | protected void onSaveInstanceState(Bundle outState) { 146 | super.onSaveInstanceState(outState); 147 | outState.putString("html", webview_html); 148 | outState.putString("title", title); 149 | outState.putLong("revid", revid); 150 | } 151 | 152 | @Override 153 | public void onConfigurationChanged(Configuration newConfig) { 154 | super.onConfigurationChanged(newConfig); 155 | 156 | } 157 | 158 | @Override 159 | public boolean onCreateOptionsMenu(Menu menu) { 160 | // Inflate the menu; this adds items to the action bar if it is present. 161 | getMenuInflater().inflate(R.menu.main_activity_actions, menu); 162 | return true; 163 | } 164 | 165 | @Override 166 | public boolean onOptionsItemSelected(MenuItem item) { 167 | // Handle presses on the action bar items 168 | switch (item.getItemId()) { 169 | case R.id.action_search: 170 | onSearchRequested(); 171 | return true; 172 | case R.id.action_about: 173 | // openSettings(); 174 | // new AlertDialog.Builder(this) 175 | // .setTitle("关于") 176 | // .setMessage( 177 | // "萌娘百科Android客户端测试版\n\n" 178 | // + "By:死宅小h\n" 179 | // + "Dedicated to cwl and this beautiful cruel world\n\n" 180 | // + "wifi: " + !forceCache) 181 | // .setPositiveButton("确定", null).show(); 182 | LayoutInflater inflater = getLayoutInflater(); 183 | View aboutLayout = inflater.inflate(R.layout.about, 184 | (ViewGroup) findViewById(R.layout.about)); 185 | TextView a1 = (TextView) aboutLayout.findViewById(R.id.textView1); 186 | a1.setMovementMethod(LinkMovementMethod.getInstance()); 187 | // a1.setText(Html.fromHtml(getResources().getString( 188 | // R.string.about_text))); 189 | 190 | new AlertDialog.Builder(this).setTitle("关于").setView(aboutLayout) 191 | .setPositiveButton("确定", null).show(); 192 | 193 | return true; 194 | case R.id.action_refresh: 195 | GetPageTask task = new GetPageTask(this); 196 | task.execute(new String[] { title, "1" }); 197 | return true; 198 | case R.id.action_edit: 199 | try { 200 | Intent intent = new Intent(Intent.ACTION_VIEW); 201 | Uri content_url = Uri 202 | .parse("http://m.moegirl.org/index.php?action=edit&title=" 203 | + URLEncoder.encode(title, "utf-8")); 204 | intent.setData(content_url); 205 | startActivity(intent); 206 | } catch (UnsupportedEncodingException e) { 207 | // TODO Auto-generated catch block 208 | e.printStackTrace(); 209 | } 210 | return true; 211 | case R.id.action_share: 212 | try { 213 | Intent intent = new Intent(Intent.ACTION_SEND); 214 | intent.setType("text/plain"); 215 | intent.putExtra(Intent.EXTRA_SUBJECT, "萌娘百科 - " + title); 216 | intent.putExtra( 217 | Intent.EXTRA_TEXT, 218 | title + " http://zh.moegirl.org/" 219 | + URLEncoder.encode(title, "utf-8") + " #萌娘百科#"); 220 | startActivity(Intent 221 | .createChooser(intent, "分享 - " + getTitle())); 222 | } catch (UnsupportedEncodingException e) { 223 | // TODO Auto-generated catch block 224 | e.printStackTrace(); 225 | } 226 | return true; 227 | case R.id.action_viewinbrowser: 228 | try { 229 | Intent intent = new Intent(Intent.ACTION_VIEW); 230 | Uri content_url = Uri.parse("http://m.moegirl.org/" 231 | + URLEncoder.encode(title, "utf-8")); 232 | intent.setData(content_url); 233 | startActivity(intent); 234 | } catch (UnsupportedEncodingException e) { 235 | // TODO Auto-generated catch block 236 | e.printStackTrace(); 237 | } 238 | return true; 239 | default: 240 | return super.onOptionsItemSelected(item); 241 | } 242 | } 243 | 244 | private void getOverflowMenu() { 245 | try { 246 | ViewConfiguration config = ViewConfiguration.get(this); 247 | Field menuKeyField = ViewConfiguration.class 248 | .getDeclaredField("sHasPermanentMenuKey"); 249 | if (menuKeyField != null) { 250 | menuKeyField.setAccessible(true); 251 | menuKeyField.setBoolean(config, false); 252 | } 253 | } catch (Exception e) { 254 | e.printStackTrace(); 255 | } 256 | } 257 | 258 | @Override 259 | protected void onNewIntent(Intent intent) { 260 | setIntent(intent); 261 | handleIntent(intent); 262 | } 263 | 264 | private void handleIntent(Intent intent) { 265 | if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 266 | String query = intent.getStringExtra(SearchManager.QUERY); 267 | // Log.i("MoeGirl", query); 268 | // loadtitle(query); 269 | startSearch(query, false, null, false); 270 | } else if (Intent.ACTION_VIEW.equals(intent.getAction())) { 271 | String query = intent.getDataString(); 272 | if (!query.equals("")) { 273 | loadtitle(query); 274 | } 275 | } 276 | } 277 | 278 | private void loadtitle(String title) { 279 | loadtitle(title, true); 280 | } 281 | 282 | private GetPageTask task; 283 | private CheckUpdateTask task2; 284 | 285 | private void loadtitle(String title, boolean isPush) { 286 | if (title.equals(this.title)) { 287 | return; 288 | } 289 | Log.i("MoeGirl", "Try load title: " + title); 290 | if (isPush) { 291 | if (pageHistory.isEmpty()) { 292 | pageHistory.push(this.title); 293 | } else if (pageHistory.peek() != this.title) { 294 | pageHistory.push(this.title); 295 | } 296 | } 297 | 298 | this.title = title; 299 | 300 | // task.cancel(false); 301 | task = new GetPageTask(this); 302 | if (VERSION.SDK_INT >= 11) { 303 | task.executeOnExecutor(executorService, new String[] { title, "0" }); 304 | } else { 305 | task.execute(new String[] { title, "0" }); 306 | } 307 | } 308 | 309 | private class GetPageTask extends AsyncTask { 310 | ProgressDialog pdialog; 311 | 312 | String result; 313 | String result_extra; 314 | 315 | private JSONArray parse; 316 | 317 | public GetPageTask(Context context) { 318 | pdialog = new ProgressDialog(context); 319 | pdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 320 | pdialog.setMessage("载入中"); 321 | pdialog.setIndeterminate(true); 322 | pdialog.setCancelable(false); 323 | pdialog.show(); 324 | } 325 | 326 | private int getCache(String title1) { 327 | Log.i("MoeGirlCache", "Try Get Cache: " + title1); 328 | result_extra = title1; 329 | try { 330 | File tmp = new File(getCacheDir(), title1); 331 | if (tmp.exists()) { 332 | if (forceCache 333 | || System.currentTimeMillis() - tmp.lastModified() < 432000000) { 334 | 335 | FileInputStream inStream = new FileInputStream(tmp); 336 | byte[] revid_b = new byte[8]; 337 | byte[] buffer_len_b = new byte[8]; 338 | inStream.read(revid_b, 0, 8); 339 | inStream.read(buffer_len_b, 0, 8); 340 | revid = bytes2Long(revid_b); 341 | int buffer_len = (int) bytes2Long(buffer_len_b); 342 | 343 | byte[] buffer = new byte[buffer_len]; 344 | inStream.read(buffer); 345 | inStream.close(); 346 | 347 | // String result = EncodingUtils 348 | // .getString(buffer, "utf-8"); 349 | String result = new String(buffer, "utf-8"); 350 | 351 | Log.i("MoeGirlCache", "hit cache: " + title1 352 | + " revid: " + Long.toString(revid) 353 | + " length: " + Integer.toString(buffer_len)); 354 | 355 | if (revid != 0) { 356 | isFromCache = true; 357 | this.result = result; 358 | return 0; 359 | } else { 360 | int getcachetmp = getCache(result); 361 | if (getcachetmp == 0) { 362 | return 1; 363 | } else { 364 | return -1; 365 | } 366 | } 367 | } else { 368 | Log.i("MoeGirlCache", "cache expired: " + title1 369 | + " revid: " + Long.toString(revid)); 370 | return -1; 371 | } 372 | } else { 373 | Log.i("MoeGirlCache", "no cache: " + title1); 374 | return -1; 375 | } 376 | } catch (Exception e) { 377 | Log.e("MoeGirlGetCache", e.toString()); 378 | return -1; 379 | } 380 | } 381 | 382 | @Override 383 | protected Integer doInBackground(String... arg0) { 384 | // Log.i("MoeGirlDebug", "title:" + title); 385 | 386 | title = arg0[0]; 387 | String ForceUpdate = arg0[1]; 388 | 389 | if (ForceUpdate == "0") { 390 | int tmp = getCache(title); 391 | if (tmp != -1) { 392 | return tmp; 393 | } 394 | } 395 | 396 | String header = "\n" 397 | + "\n" 398 | + "\n" 399 | + "\n" 400 | + "\n\n" 401 | + "萌娘百科 万物皆可萌的百科全书 - zh.moegirl.org\n" 402 | + "\n" 403 | // + 404 | // "\n" 405 | + "\n" 406 | + "\n" 407 | + "\n" 408 | // + "\n" 409 | + "\n" 411 | + "" 412 | + "
"; 413 | 414 | String addonStyle = ""; 415 | 416 | String urladdr = ""; 417 | try { 418 | // redirects重定向 419 | urladdr = String 420 | .format("http://zh.moegirl.org/api.php?action=parse&format=json&redirects&page=%1$s", 421 | URLEncoder.encode(title, "utf-8")); 422 | } catch (UnsupportedEncodingException e1) { 423 | // TODO Auto-generated catch block 424 | e1.printStackTrace(); 425 | Log.e("MoeGirl", e1.toString()); 426 | return null; 427 | } 428 | 429 | String footer = "
" 430 | + "

本站全部内容禁止商业使用
文本内容除另有声明外,均在" 431 | + "知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 协议" 432 | + "下提供,附加条款亦可能应用
其他类型作品版权归属原作者,如有授权遵照授权协议使用

" 433 | + "
" 434 | + "" 435 | + "\n" 436 | + "\n" 437 | + "\n" 438 | + "\n" 439 | + "" 440 | + ""; 441 | 442 | HttpClient httpClient1 = new DefaultHttpClient(); 443 | httpClient1.getParams().setParameter(CoreProtocolPNames.USER_AGENT, 444 | getResources().getString(R.string.user_agent)); 445 | HttpGet httpRequest1 = new HttpGet(urladdr); 446 | 447 | try { 448 | HttpResponse response = httpClient1.execute(httpRequest1); 449 | HttpEntity entity = response.getEntity(); 450 | 451 | String getResult = EntityUtils.toString(entity); 452 | 453 | JSONTokener JsonParser = new JSONTokener(getResult); 454 | JSONObject all = (JSONObject) JsonParser.nextValue(); 455 | JSONObject parse = all.getJSONObject("parse"); 456 | JSONObject txt = parse.getJSONObject("text"); 457 | 458 | String returnTitle = parse.getString("title"); 459 | revid = parse.getLong("revid"); 460 | String result = txt.getString("*"); 461 | // String result = txt.getString("*").replace( 462 | // "
", 463 | // "
"); 464 | 465 | result = header + addonStyle + result + footer; 466 | 467 | try { 468 | if (returnTitle.equals(title)) { 469 | File tmp = new File(getCacheDir(), title); 470 | 471 | FileOutputStream outStream = new FileOutputStream(tmp); 472 | outStream.write(long2Bytes(revid)); 473 | byte[] buffertmp = result.getBytes("utf-8"); 474 | outStream.write(long2Bytes(buffertmp.length)); 475 | outStream.write(buffertmp); 476 | outStream.close(); 477 | 478 | Log.i("MoeGirl", "cache: " + title + " Length: " 479 | + Integer.toString(buffertmp.length)); 480 | 481 | } else { 482 | File tmp = new File(getCacheDir(), title); 483 | FileOutputStream outStream = new FileOutputStream(tmp); 484 | outStream.write(long2Bytes(0l)); 485 | byte[] buffertmp = returnTitle.getBytes("utf-8"); 486 | outStream.write(long2Bytes(buffertmp.length)); 487 | outStream.write(buffertmp); 488 | outStream.close(); 489 | 490 | tmp = new File(getCacheDir(), returnTitle); 491 | if (!tmp.exists()) { 492 | outStream = new FileOutputStream(tmp); 493 | outStream.write(long2Bytes(revid)); 494 | buffertmp = result.getBytes("utf-8"); 495 | outStream.write(long2Bytes(buffertmp.length)); 496 | outStream.write(buffertmp); 497 | outStream.close(); 498 | } 499 | } 500 | } catch (Exception e) { 501 | e.printStackTrace(); 502 | Log.e("MoeGirlGetTxt", e.toString()); 503 | } 504 | isFromCache = false; 505 | this.result = result; 506 | 507 | if (!returnTitle.equals(title)) { 508 | this.result_extra = returnTitle; 509 | return 1; 510 | } else { 511 | return 0; 512 | } 513 | // return sb.toString(); 514 | } catch (org.json.JSONException e) { 515 | // String errhtml = "-1"; 516 | return -1; 517 | } catch (Exception e) { 518 | e.printStackTrace(); 519 | Log.e("MoeGirl", e.toString()); 520 | } 521 | return -2; 522 | } 523 | 524 | @Override 525 | protected void onPostExecute(Integer result) { 526 | boolean isErr = false; 527 | if (result == -1) { 528 | webview1.loadDataWithBaseURL(null, "没有这个词条", "text/html", 529 | "utf-8", null); 530 | setTitle("萌娘百科"); 531 | isErr = true; 532 | } else if (result == null || result == -1) { 533 | webview1.loadDataWithBaseURL(null, "发生错误!", "text/html", 534 | "utf-8", null); 535 | setTitle("萌娘百科"); 536 | isErr = true; 537 | } else { 538 | if (result == 1) { 539 | title = this.result_extra; 540 | } 541 | 542 | Log.i("MoeGirlView", 543 | "title: " + title.toLowerCase(Locale.getDefault())); 544 | webview1.loadDataWithBaseURL("http://m.moegirl.org/", 545 | this.result, "text/html", "utf-8", null); 546 | 547 | if (title.toLowerCase(Locale.getDefault()).equals("mainpage")) { 548 | setTitle("萌娘百科"); 549 | } else { 550 | setTitle(title); 551 | } 552 | webview_html = this.result; 553 | } 554 | 555 | pdialog.dismiss(); 556 | 557 | if (!isErr && isFromCache && !forceCache && revid > 0) { 558 | task2 = new CheckUpdateTask(); 559 | task2.execute(new String[] { title, Long.toString(revid) }); 560 | } 561 | } 562 | } 563 | 564 | @Override 565 | public boolean onKeyDown(int keyCode, KeyEvent event) { 566 | if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() < 5) { 567 | if (title != homePage) { 568 | String target = goback(); 569 | while (target.equals(this.title)) { 570 | target = goback(); 571 | } 572 | loadtitle(target, false); 573 | return true; 574 | } 575 | } 576 | return super.onKeyDown(keyCode, event); 577 | } 578 | 579 | private String goback() { 580 | if (pageHistory.isEmpty()) { 581 | return homePage; 582 | } else { 583 | return pageHistory.pop(); 584 | } 585 | } 586 | 587 | private class HelloWebViewClient extends WebViewClient { 588 | @Override 589 | public boolean shouldOverrideUrlLoading(WebView view, String url) { 590 | // Log.i("MoeGirl", url); 591 | if (url.indexOf("http://m.moegirl.org/") >= 0) { 592 | String newtitle = url.replace("http://m.moegirl.org/", ""); 593 | if (url.indexOf("index.php") < 0 594 | && newtitle.indexOf("File:") < 0 595 | && newtitle.indexOf("Category:") < 0) { 596 | try { 597 | loadtitle(URLDecoder.decode(newtitle, "utf-8")); 598 | } catch (UnsupportedEncodingException e) { 599 | // TODO Auto-generated catch block 600 | e.printStackTrace(); 601 | } 602 | } else { 603 | Intent intent = new Intent(Intent.ACTION_VIEW); 604 | Uri content_url = Uri.parse(url.replace("redlink=1", "")); 605 | intent.setData(content_url); 606 | startActivity(intent); 607 | // view.loadUrl(url.replace("redlink=1", "")); 608 | // setTitle("萌娘百科"); 609 | } 610 | return true; 611 | } else { 612 | Intent intent = new Intent(Intent.ACTION_VIEW); 613 | Uri content_url = Uri.parse(url); 614 | intent.setData(content_url); 615 | startActivity(intent); 616 | return true; 617 | } 618 | 619 | } 620 | } 621 | 622 | private class CheckUpdateTask extends AsyncTask { 623 | 624 | String arg_title; 625 | 626 | @Override 627 | protected Boolean doInBackground(String... arg0) { 628 | arg_title = arg0[0]; 629 | 630 | long arg_revid = Long.parseLong(arg0[1]); 631 | 632 | String urladdr = ""; 633 | try { 634 | urladdr = String 635 | .format("http://zh.moegirl.org/api.php?action=query&prop=revisions&titles=%1$s&format=json", 636 | URLEncoder.encode(arg_title, "utf-8")); 637 | } catch (UnsupportedEncodingException e1) { 638 | // TODO Auto-generated catch block 639 | e1.printStackTrace(); 640 | return false; 641 | } 642 | 643 | HttpClient httpClient1 = new DefaultHttpClient(); 644 | httpClient1.getParams().setParameter(CoreProtocolPNames.USER_AGENT, 645 | getResources().getString(R.string.user_agent)); 646 | HttpGet httpRequest1 = new HttpGet(urladdr); 647 | 648 | try { 649 | HttpResponse response = httpClient1.execute(httpRequest1); 650 | HttpEntity entity = response.getEntity(); 651 | 652 | String getResult = EntityUtils.toString(entity); 653 | // BufferedReader reader = new BufferedReader( 654 | // new InputStreamReader(entity.getContent(), "utf-8")); 655 | // 656 | // StringBuffer sb = new StringBuffer(); 657 | // String line = null; 658 | // while ((line = reader.readLine()) != null) { 659 | // sb.append(line + '\n'); 660 | // } 661 | // reader.close(); 662 | // // Log.i("MoeGirl", sb.toString()); 663 | 664 | JSONTokener JsonParser = new JSONTokener(getResult); 665 | JSONObject all = (JSONObject) JsonParser.nextValue(); 666 | JSONObject query = all.getJSONObject("query").getJSONObject( 667 | "pages"); 668 | if (query.length() > 0) { 669 | JSONObject page = query.getJSONObject(query.names() 670 | .getString(0)); 671 | JSONArray revisions = page.getJSONArray("revisions"); 672 | long nowRevid = revisions.getJSONObject(0).getLong("revid"); 673 | 674 | Log.i("MoeGirlUpdateCheck", 675 | "NewRevid: " + Long.toString(nowRevid) 676 | + " CacheRevid: " 677 | + Long.toString(arg_revid)); 678 | if (nowRevid > arg_revid) { 679 | return true; 680 | } else { 681 | return false; 682 | } 683 | } else { 684 | return false; 685 | } 686 | // return sb.toString(); 687 | } catch (org.json.JSONException e) { 688 | Log.e("MoeGirlUpdateCheck", e.toString()); 689 | return false; 690 | } catch (Exception e) { 691 | Log.e("MoeGirlUpdateCheck", e.toString()); 692 | } 693 | return false; 694 | } 695 | 696 | @Override 697 | protected void onPostExecute(Boolean result) { 698 | // Log.i("MoeGirl", result.toString()); 699 | if (result && arg_title.equals(title)) { 700 | Toast.makeText(getApplicationContext(), "词条已经更新,点击右上角刷新查看", 701 | Toast.LENGTH_SHORT).show(); 702 | } 703 | } 704 | 705 | } 706 | 707 | public int detect() { 708 | ConnectivityManager manager = (ConnectivityManager) this 709 | .getSystemService(Context.CONNECTIVITY_SERVICE); 710 | if (manager == null) { 711 | return 0; 712 | } 713 | NetworkInfo networkinfo = manager.getActiveNetworkInfo(); 714 | 715 | if (networkinfo == null || !networkinfo.isAvailable()) { 716 | return 0; 717 | } 718 | if (networkinfo.getType() == ConnectivityManager.TYPE_MOBILE) { 719 | return 1; 720 | } else if (networkinfo.getType() == ConnectivityManager.TYPE_WIFI) { 721 | return 2; 722 | } 723 | return 0; 724 | } 725 | 726 | public static byte[] long2Bytes(long num) { 727 | byte[] byteNum = new byte[8]; 728 | for (int ix = 0; ix < 8; ++ix) { 729 | int offset = 64 - (ix + 1) * 8; 730 | byteNum[ix] = (byte) ((num >> offset) & 0xff); 731 | } 732 | return byteNum; 733 | } 734 | 735 | public static long bytes2Long(byte[] byteNum) { 736 | long num = 0; 737 | for (int ix = 0; ix < 8; ++ix) { 738 | num <<= 8; 739 | num |= (byteNum[ix] & 0xff); 740 | } 741 | return num; 742 | } 743 | 744 | @Override 745 | protected void onDestroy() { 746 | // TODO Auto-generated method stub 747 | super.onDestroy(); 748 | shakeDetector.stop(); 749 | } 750 | 751 | private class ShakeListener implements OnShakeListener { 752 | 753 | @Override 754 | public void onShake() { // TODO Auto-generated method stub 755 | webview1.loadUrl("http://m.moegirl.org/Special:%E9%9A%8F%E6%9C%BA%E9%A1%B5%E9%9D%A2"); 756 | } 757 | } 758 | 759 | } 760 | -------------------------------------------------------------------------------- /src/org/moegirl/moegirlview/SampleSearchActivity.java: -------------------------------------------------------------------------------- 1 | package org.moegirl.moegirlview; 2 | 3 | import android.app.ListActivity; 4 | import android.app.SearchManager; 5 | import android.content.Intent; 6 | import android.os.Bundle; 7 | import android.util.Log; 8 | import android.view.View; 9 | import android.widget.ListView; 10 | 11 | public class SampleSearchActivity extends ListActivity { 12 | @Override 13 | public void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | handleIntent(getIntent()); 16 | } 17 | 18 | @Override 19 | public void onNewIntent(Intent intent) { 20 | setIntent(intent); 21 | handleIntent(intent); 22 | } 23 | 24 | @Override 25 | public void onListItemClick(ListView l, View v, int position, long id) { 26 | // call detail activity for clicked entry 27 | } 28 | 29 | private void handleIntent(Intent intent) { 30 | if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 31 | String query = intent.getStringExtra(SearchManager.QUERY); 32 | doSearch(query); 33 | } 34 | } 35 | 36 | private void doSearch(String queryStr) { 37 | // get a Cursor, prepare the ListAdapter 38 | // and set it 39 | Log.i("MoeGirl", queryStr); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/org/moegirl/moegirlview/SearchSuggestionsProvider.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/src/org/moegirl/moegirlview/SearchSuggestionsProvider.java -------------------------------------------------------------------------------- /src/org/moegirl/moegirlview/ShakeDetector.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moegirlwiki/MoegirlAndroid/5be9a58dc34a062e6dd2730e8581ab04f669f5bf/src/org/moegirl/moegirlview/ShakeDetector.java -------------------------------------------------------------------------------- /src/org/moegirl/moegirlview/SplashActivity.java: -------------------------------------------------------------------------------- 1 | package org.moegirl.moegirlview; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.os.Handler; 7 | import android.view.Window; 8 | 9 | public class SplashActivity extends Activity { 10 | 11 | @Override 12 | protected void onCreate(Bundle savedInstanceState) { 13 | super.onCreate(savedInstanceState); 14 | 15 | requestWindowFeature(Window.FEATURE_NO_TITLE); 16 | 17 | setContentView(R.layout.activity_splash); 18 | 19 | new Handler().postDelayed(new Runnable() { 20 | public void run() { 21 | Intent i = new Intent(SplashActivity.this, MainActivity.class); 22 | SplashActivity.this.startActivity(i); 23 | SplashActivity.this.finish(); 24 | } 25 | }, 800); 26 | } 27 | 28 | class SplashHandler implements Runnable { 29 | public void run() { 30 | startActivity(new Intent(getApplication(), MainActivity.class)); 31 | SplashActivity.this.finish(); 32 | } 33 | } 34 | 35 | } 36 | --------------------------------------------------------------------------------