Giter Site home page Giter Site logo

awful.apk's Introduction

Awful

Awful is an iOS 15.0+ app that's Better Than Safari for browsing the Something Awful Forums. Its story is told in its thread (and the thread before that (and the thread before that (and the thread before that))).

Not sure what to work on? There's a list of issues, or just post in the thread and someone will share their pet peeves for your amusement!

Screenshot of Awful as it appears on an iPhone

An unofficial app

This app is not endorsed by Something Awful.

Build

Please drop by the thread if you could use a hand with any of these steps!

You need Xcode 15 to build and run Awful. You can download Xcode for free from Apple. Then:

  1. Clone the repository: git clone --recursive https://github.com/Awful/Awful.app Awful-app
  2. Open the Xcode project and build away: xed Awful-app

You may see build warnings of the form "Unable to find included file '../Local.xcconfig'". You should still be able to build and run, just with a couple of features turned off. If you'd like to enable those features, or just make the warnings go away, please scroll on down to the "Local build settings" section below.

The only required dependencies for building Awful that are not included directly in this repository are those managed by Swift Package Manager. Files generated by other utilities are included in the repository. The only submodule is the thread-tags repository, which is not strictly needed for building; if you don't need it, you can leave off the --recursive part from step one.

If you'd like to build to your device, set the DEVELOPMENT_TEAM build setting as mentioned in the Local build settings section below.

Local build settings

There are some local build settings that can be useful to include but should not be committed to a public repo. Store those in an Xcode configuration file at Local.xcconfig; see Local.sample.xcconfig for an example. You'll get a build warning until you put a file at that location; it can be an empty file if you just want Xcode to be quiet.

Awful uses an App Group to communicate and share data with the Smilie Keyboard. Unfortunately, App Group identifiers must be unique, so we can't simply set it up in this repository and have it work for everybody work. By default, Awful builds without an App Group configured, which means that the Smilie Keyboard won't be able to download new smilies, remember recent smilies, or store favourite smilies. If you like, you can:

  1. Create an App Group in your iOS Developer account.
  2. Copy Local.sample.entitlements to Local.entitlements.
  3. Copy and paste your App Group identifier into Local.entitlements.
  4. Set the CODE_SIGN_ENTITLEMENTS build setting in Local.xcconfig for the targets Awful and SmilieKeyboard (see Local.sample.xcconfig for a suggested setup).
  5. After a build and run, full keyboard functionality should be yours.

Tests

There are unit tests, that don't cover much, running continuously via GitHub Actions.

Build Status

Updating dependencies

Dependencies not managed via Swift Package Manager are placed in the Vendor folder and manually kept up-to-date. They include:

  • ARChromeActivity and TUSafariActivity assets. We've implemented our own UIActivity subclasses but continue to use the libraries' images.
  • MRProgress, PSMenuItem, and PullToRefresh, which do not have their own Package.swift. (If you know otherwise, let's move it over!)

Version scheme

Bump the major version when changing the minimum required iOS version (deployment target). Otherwise, bump the minor version.

Also, when changing the iOS deployment target, please tag the last commit that supports any no-longer-supported deployment target(s) and update the table in the section "iOS deployment targets" below.

Handy utilities

If you peek in the Scripts folder you'll find:

  • beta, a script that bumps the build number and then runs xcodebuild to create an archive suitable for uploading to App Store Connect. See beta --help for more, including how to set up automatic uploads to App Store Connect.
    • If you've released to the App Store, it's time to bump at least the minor version number by passing the --minor parameter, e.g. beta --minor.
  • bump, a script that can increment the build, minor, or major version number throughtout the project. See bump --help for more.

And in the Xcode project itself you'll find:

  • SmilieExtractor, an iOS app that takes showsmilies.webarchive and extracts resources for Smilie Keyboard. To update smilies, first save a fresh showsmilies.webarchive from the Forums, then run SmilieExtractor.
  • CopyMarkdownApp, a macOS Safari App Extension that adds a "Copy Awful Markdown" context menu item to the Forums. The copied markdown is ready to be pasted into a GitHub issue.

Loading fixtures into the app and/or working offline

If you've stashed some .html files from the Forums, you can load those into a debug build of the app. And if you forgot to stash some, you're in luck: we've stashed some as test fixtures. See FixtureURLProtocol for more info.

Contribute

You can help! See our contribution guidelines and please come visit the thread to say hi.

Project Structure

Awful is broken down somewhat:

  • Awful is the iOS app.
  • AwfulCore is a Swift package that does the scraping and networking with the Forums. It's meant to be compatible with all Apple platforms, but nobody's really tried beyond iOS.
  • Smilies is a Swift package that downloads smilies and presents them as a keyboard. It's meant to be compatible with all Apple platforms, but nobody's really tried beyond iOS.

Theming

Awful's posts view is fully customizable using CSS. There's a default theme, as well as themes for specific forums such as YOSPOS and FYAD. We use Less to generate our stylesheets during Awful's build process, so you'll want to edit .less files but you'll see .css files in the build products and in the Web Inspector.

The rest of Awful is themed in a a big plist. If you can't find a theme key you'd like to use, ask and we'll add it!

Thread Tags

Diabolik900 and The Dave have largely fashioned Awful with its own [set of thread tags][thread tags] that look great on the iPhone and the iPad. They're distributed with the app. New thread tags can also appear in Awful without us having to send an update through the App Store. This is done by hosting the icons via GitHub Pages.

To add a new thread tag you just made:

  1. Add it to the thread tags repository and push.

  2. Update the awfulapp.com repository repository per its README.

  3. In this (Awful.app) repository, update the App/Resources/Thread Tags submodule and push:

    cd path/to/awful-app/repo
    cd App/Resources/Thread\ Tags
    git pull origin master
    cd ..
    git commit -am "Updated thread tags."
    git push

Alternate App Icons

To add a new alternative app icon:

  1. Open App/App Icons.xcassets.
  2. Add a new iOS App Icon.
  3. Name your app icon something appropriate, including the _appicon suffix.
  4. Drag your 1024×1024 image file over.
  5. Add a new Image Set with the same name as your icon set plus _preview.
  6. Drag 60pt icons into your preview icon set.
  7. Open App/Settings/SettingsViewController.swift.
  8. Add your new app icon info to the appIcons array.

The bookkeeping and duplicate images are unfortunate, but there's no public API to list app icon sets or to load app icon images for display. Instead of hacking together something that could break later, we'll do it ourselves.

URL schemes

Awful answers to a couple URL schemes:

  • awful: opens Awful directly to various screens. This URL scheme is documented at http://handleopenurl.com and at Launch Center Pro.
    • awful://forums opens the Forums tab.
    • awful://forums/:forumid opens the Forums tab to the identified forum.
    • awful://threads/:threadid opens the first page of the identified thread. For example, awful://threads/3510131 opens Awful's thread.
    • awful://threads/:threadid/pages/:page opens the given page of the identified thread. For example, awful://threads/3510131/pages/15 opens the fifteenth page of Awful's thread.
    • awful://posts/:postid opens the identified post's page of its thread and jumps to it. For example, awful://posts/408179339 opens the OP of Awful's thread.
    • awful://bookmarks opens the Bookmarks tab.
    • awful://messages opens the Messages tab.
    • awful://messages/:messageid opens the identified private message. (I guess the idea is to handle a link from one message to another?)
    • awful://settings opens the Settings tab.
    • awful://users/:userid opens the identified user's profile. For example, awful://users/106125 opens pokeyman's profile.
    • awful://banlist opens the Leper's Colony.
    • awful://banlist/:userid opens the identified user's rap sheet. For example, awful://banlist/106125 opens pokeyman's rap sheet.
  • awfulhttp: and awfulhttps: handle Forums website URLs by opening the corresponding screen when possible.
    • The idea is you take your https://forums.somethingawful.com/… URL, put awful in front, and now it opens in Awful.

iOS deployment targets

For iOS Check out tag/branch
17 main
16 main
15 main
14 ios-14
13 ios-13
12 ios-12
11 ios-11
10 ios-10
9 ios-9
8 ios-8
7 ios-7
6 ios-6
5 ios-5

License

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 United States License

Credit

Awful development is led by pokeyman aka Nolan Waite.

Awful includes contributions from:

awful.apk's People

Contributors

2fast2fourier avatar aschleck avatar baka-kaba avatar bonnett avatar danieljennings avatar dbjorge avatar drasticactions avatar gibb3h avatar jamesmoran avatar jamezmoran avatar jeremybrowne avatar jsulli avatar kahays avatar kl avatar lastinline avatar maximob avatar mensab avatar nelsonjchen avatar powerje avatar scottferg avatar sereri avatar sockbot avatar tazjin avatar thomasboyt avatar wardog1uk avatar wmbest2 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

awful.apk's Issues

thread displayed as blank white page in certain circumstance

If the thread in question has n*40-1 posts (eg. next post will start a new page) and the user has the whole thread marked as read, when they try to open the thread it will display as a blank white page.

Someone added that this happened to them without having read the thread, but I can't reproduce that.

Force Close on Menu popup rotation in thread view

  1. View a Thread
  2. Press the Menu Button
  3. Rotate your device
  4. force close
06-16 13:03:38.928: ERROR/AndroidRuntime(4399): FATAL EXCEPTION: main
        java.lang.IllegalStateException: Fragment ThreadDisplayFragment{40789240 #0 id=0xffffffff} not attached to Activity
        at android.support.v4.app.Fragment.getResources(Fragment.java:477)
        at android.support.v4.app.Fragment.getString(Fragment.java:499)
        at com.ferg.awful.ThreadDisplayFragment.onPrepareOptionsMenu(ThreadDisplayFragment.java:219)
        at android.support.v4.app.FragmentManagerImpl.dispatchPrepareOptionsMenu(FragmentManager.java:1743)
        at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:409)
        at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:337)
        at com.android.internal.policy.impl.PhoneWindow.openPanel(PhoneWindow.java:425)
        at com.android.internal.policy.impl.PhoneWindow.openPanelsAfterRestore(PhoneWindow.java:1595)
        at com.android.internal.policy.impl.PhoneWindow.access$900(PhoneWindow.java:93)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onAttachedToWindow(PhoneWindow.java:2045)
        at android.view.View.dispatchAttachedToWindow(View.java:6173)
        at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:1122)
        at android.view.ViewRoot.performTraversals(ViewRoot.java:765)
        at android.view.ViewRoot.handleMessage(ViewRoot.java:1860)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:123)
        at android.app.ActivityThread.main(ActivityThread.java:3835)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:507)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
        at dalvik.system.NativeStart.main(Native Method)

Bookmark thread from app

I don't know if this is possible given the way bookmarks are handled in the forums. This would be a great feature if reading a thread and realizing it's better suited for the desktop for whatever reason.

Crash when resuming app after a period of time

When I try to open the app again after a certain time has passed, like 30 minutes, it will either crash outright or once I try to get to the UCP. Following crash log from logcat:

06-21 22:14:37.500: ERROR/AndroidRuntime(7050): FATAL EXCEPTION: main
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): java.lang.RuntimeException: Unable to resume activity {com.ferg.awful/com.ferg.awful.UserCPActivity}: java.lang.NullPointerException
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.os.Looper.loop(Looper.java:130)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.app.ActivityThread.main(ActivityThread.java:3687)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at java.lang.reflect.Method.invoke(Method.java:507)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at dalvik.system.NativeStart.main(Native Method)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): Caused by: java.lang.NullPointerException
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at com.ferg.awful.thread.AwfulForum.getChild(AwfulForum.java:233)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at com.ferg.awful.service.AwfulServiceConnection$AwfulListAdapter.getItemId(AwfulServiceConnection.java:320)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.widget.ListView.setSelectionFromTop(ListView.java:1939)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.widget.ListView.setSelection(ListView.java:1907)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at com.ferg.awful.UserCPFragment.dataUpdate(UserCPFragment.java:210)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at com.ferg.awful.service.AwfulServiceConnection$ForumListAdapter.loadPage(AwfulServiceConnection.java:138)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at com.ferg.awful.service.AwfulServiceConnection$AwfulListAdapter.refresh(AwfulServiceConnection.java:417)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at com.ferg.awful.UserCPFragment.onResume(UserCPFragment.java:142)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:840)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:991)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:974)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.support.v4.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1650)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.support.v4.app.FragmentActivity.onPostResume(FragmentActivity.java:393)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.app.Activity.performResume(Activity.java:3841)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2114)
06-21 22:14:37.500: ERROR/AndroidRuntime(7050): ... 10 more

Quote indicator overlaps text

The blue line indicating text is from a quoted post can overlap the text itself. Perhaps push the quoted text a few pixels to the right to help differentiate it more, and stop it from overlapping?

Background color adjustment

Background color adjustment setting to go along with the font color setting. Many prefer dark or black backgrounds (easier on battery, some find it easier to read)

Pressing Reply in closed Thread results in crash

Might also be a good idea to disable the button if the thread is closed in the first place.
Crashlog below. It's something about Form cookies

06-22 20:44:58.485: ERROR/AndroidRuntime(339): FATAL EXCEPTION: main
06-22 20:44:58.485: ERROR/AndroidRuntime(339): java.lang.NullPointerException
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at com.ferg.awful.PostReplyFragment$FetchFormCookieTask.onPostExecute(PostReplyFragment.java:309)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at com.ferg.awful.PostReplyFragment$FetchFormCookieTask.onPostExecute(PostReplyFragment.java:1)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at android.os.AsyncTask.finish(AsyncTask.java:417)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at android.os.AsyncTask.access$300(AsyncTask.java:127)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at android.os.Handler.dispatchMessage(Handler.java:99)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at android.os.Looper.loop(Looper.java:123)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at java.lang.reflect.Method.invokeNative(Native Method)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at java.lang.reflect.Method.invoke(Method.java:521)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-22 20:44:58.485: ERROR/AndroidRuntime(339): at dalvik.system.NativeStart.main(Native Method)

Crash when trying to post while on probation

I've recently had the great shame of being put on probation, but thought it was an excellent oppurtunity to find out what happened if I tried to post.

Well, the app crashed. I sent a report, along with a description from my phone, so you should be able to find it.

I wonder what happens when you're banned ...?

Access to sub-sub-forums

Right now, users can only access top-level forums and their immediate child forums. Some of those children forums also have child forums, but tere's no way into them via the app.

Incremental page loading

The app currently can't display anything useful while a page is still loading. It would be super neat if it could start filling in the list as the page downloads.

Quote post = lots of scrolling.

So basically, if you quote a post the edit box starts all the way at the top of the quoted text, so you have to scroll through all of it to start typing your response.

Would be nice if we could eliminate the scrolling.

Highlight specific poster

From SA thread:

Is it possible to include the ability track a highlight a specific poster? What I was thinking is the ability to press and hold on a user's ID to open a quick menu for enabling or disabling tracking, after which all posts by the user would be highlighted.

No way to cancel a loading attempt

While trying to open a thread, go to the control panel or go to the forums list, etc there is a modal loading widget that is displayed. While that widget is attempting to load the page there is no way to cancel or go back to the previous page.

This isn't normally an issue except that the user control panel often takes a long time to load. The only way to "cancel" and retry is to exit the app and re-open it.

I can see this being more of an issue for people with slow connections though. If they accidentally tap the wrong place on the screen they'd have to wait while the page they accidentally selected loads before being able to go back or stop the loading process.

Improved feedback when pressing next page button.

When pressing the next page button when you're on the last page of a thread, nothing happens. In fact, it's not uncommon for me to hit it a couple times because I can't tell if I missed hitting it.

Possible solution: Toast a "no more pages, fool" message when already on last page.

Make clicking on name in forum list open forum

It seems a little annoying that clicking on the forum name opens the subforum list. I liked it better when the arrow to the left opened the subforum menu and clicking the name opened the forum. Plus, the arrow is a touch too small a target on the smaller screens (my emulator is running the small resolution and I keep missing it, imagine what it's like to try and click with big greasy sausage fingers instead of a mouse).

Persistent image caching

Smilies and avatars at least should be cached with something more persistent than the current in-memory cache. The cache library from the droid-fu project looks promising for this (and its lazy image loader is also much cleaner than the CWAC version the avatars currently use).

timg tags act the same as img tags

images inside [timg] tags, such as quoted images, seem to act the same as regular [img] tags and the full image is displayed instead of a thumbnail.

Twitter-style new page load on forum thread list

In the forum thread list, there's no warning you're going to start loading a new page of threads as you scroll down. Maybe the twitter-style "resistance" could be used to confirm/indicate scrolling further is going to lock up your forum and start loading.

Maybe it could also be used on thread view instead of the next button?

Going to user control panel often takes a very long time

About 3/4 of the time that I try to open the app then go to the user control panel it takes more than a minute of waiting for the loading to complete (if I don't touch the screen it will time out to save power). Usually I just give up and exit the app then re-launch it. After 3 or 4 tries of launching the app, pressing the home button then pressing the user control panel gear icon it will eventually go through and load the page.

This problem happens on 3g as well as over wifi so it doesn't appear to be a connection issue.

I have 47 threads bookmarked. Not sure if that may cause any issues.

Visual Indicator of More Pages

Currently, it's not possible to tell if the current thread has more pages without hitting "Next" and seeing if it loads. If we're not enabling endless scrolling, I think an indicator there's another page after this one would be useful.

PM functionality

from 1) long press on avatar/user name
2) when viewing profile (previous feature request)
3) some other menu, maybe UserCP so we can make PMs without finding a post of the targeted user

Option to put submit button above text window

I use Swiftkey, so I'm constantly clicking on predicted words when I type. The submit button is right above those words, so I often accidentally click on submit in the middle of typing. If the submit button was moved to be above the text area, this wouldn't happen.

bookmarked thread postcount display bug and request

Threads that are bookmarked but unread display a "new post" indicator of "-1" instead of a blank space or a "null" indicator.

It would be nice to have a couple options for handling the "no posts unread" situation. Instead of displaying a "0", I'd personally like to have the option for the square to disappear entirely - it's easier to distinguish threads I've read from threads I haven't. I understand not everyone may want this feature, but it would be nice as an option

Login cookies cleared on app restart

If the app gets stopped after being navigated away from and the user comes back to a screen NOT the usercp or forums index, login cookies don't get reinitialized and the user gets a logged-out view of the thread they were looking at.

No Indication that Last Read Post won't work

In order to show last read posts in a different color or to jump to the last read post when appropriate, the app depends upon the user having enabled the "show read posts in a different color" setting on SA. This is non-intuitive for many users - it would be good if the app could detect this setting being off and prompt the user about whether they'd like to enable it (through a native interface or by directing them to the settings page in the browser, even)

Refresh in Forum view doesn't work

The Refresh button while in a forum isn't properly refreshing. It brings up a loading screen, but after the loading screen is completed all the unread post counts remain un-updated.

However, it seems to work in the subscribed threads view.

Nicer "Go To Page" interface

Some vagabonds have been complaining about the "enter a number" interface for the Go To Page options menu item. The suggestion in the thread was "My only thought using the app so far is the 'jump to page option' just has you input it, could be nice to just have the numbers to select from." Other options include making it a Spinner or adding some sort of slider bar (in addition to the option to enter a number).

Animated gif support

In its current state, animated gif's embedded in posts just display the first frame and don't animate. I really have no idea what level of support android has for animated gifs in general so I don't know if this can be easily implemented.

Thread Voting

golden manbabies or minecraft fairy torture stories?

The ability to view a thread's rating and vote would be good.

Foreign Currency Support?

Would it be possible to add support for foreign currency symbols? Specifically the GB Pound and Euro?

Go to page bug.

When I enter number and click "ok" it sends me again to current page. I have to enter number, click + and - to bump number up and down and then click "ok" for it to work. Swype keyboard

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.