roost-im / roost-client Goto Github PK
View Code? Open in Web Editor NEWThe official client for Roost.
License: MIT License
The official client for Roost.
License: MIT License
Roost where owls go to sleep Roost is an experimental new web-based zephyr client with proper authentication. This is the official web-based frontend. The backend lives in the companion roost.git repository. If you only wish to hack on the frontend, only this repository is needed. By default, it will point against the official backend deployment. https://github.com/davidben/roost This client is intended to support recent versions of modern browsers. Most notably, it does not intend to support IE8 and earlier. Getting started: npm install -g bower grunt-cli npm install bower install Running dev server: grunt server Building: grunt # output will go into dist directory Running server on built files: grunt server:dist Running unit tests: grunt test Change default config by passing command-line arguments to grunt: # Point to a different roost backend. grunt --server=http://localhost:8080 server
Narrowing and then un-narrowing at the same position (or close to it) is a really common case. We should avoid flashing the "Loading..." bars by holding on to the previous message list. Probably we should separate MessageView into yet another model/view split. The middle model manages tails and cache state. #10 might benefit from this too, as an animated transition would want to hold onto both of them briefly.
Actual release is out now.
What the title says. Roost is currently unusable for sending from a touchscreen-only phone. (I have long heard of a way to pull up the keyboard anywhere in Android, but I have always found it to be a myth when I tried to use it on the devices I interact with.) This should be very high priority. Compose should be easy, reply is a little less clear. If we go with the Humbug "click on message" version, it could be tough to select/copy text from messages. Maybe just a little "reply" link in a corner of the header or footer of each message......geez this is getting a lot like a forum UI now :P next we'll have a "quote" button....actually, that's not a bad idea
Uh, yeah.
Uh, what?
Angular seems to blow up. Not sure why yet.
Incorrectly filed as davidben/webathena#62
It's kind of a pain, but I think it would actually work for us because we're all static content. Might be worth looking into.
I forget the exact wording and was dumb and refreshed, but I got this error trying to send a zephyr and the UI got stuck: Error checking zephyr creds: request failed
Look into what that's about and why the error-handling's not working.
Done on the client, of course.
Might be related to the new MutationObserver thing. Unfortunate. Maybe revert that along with #20... still need a DOM-based templating system though.
The auth tokens last about a month, compared to tickets which (even after renewal is implemented) about a week. We should cache the auth token in localStorage too. Do not prompt for a new server ticket until the token expires. Of course, if we need a zephyr ticket for an action, we'll have to prompt early. But if you have a client you're only using the read zephyrs and periodically send, let's avoid prompting.
Should jump less
Shouldn't be too hard.
Monospace fonts are silly. But zephyrs are currently displayed in them. Can we do something nicer with that and line-wrapping and the like?
Figure out what happened there. Maybe set up some timeouts, I dunno. I had to manually clear some variables and unthrottle.
Siiiiiigh.
Yeah, those would be handy.
See if it's worth an optimization to close sockets on idle. Do it when all tails are full or perhaps when visibility events say we've been idle for a while? Mumble server push mumble? Mostly I'm thinking about mobile here.
Balance this with state change notifications when we get around to doing that.
Uh, yeah. Been careful to avoid/polyfill anything that's not in IE9, but I should actually test it.
It makes me sad as far as layering goes, but would solve the current focusing problem. It also doesn't seem like Chrome knows to composite them yet? But they should fix that, and they seem to be working on it...
Surprisingly enough, browsers don't like it when you infinite-scroll from the top.
Can we do anything about this? Hide the scrollbar and build a fake one? Detect when you're using the scrollbar and delay doing anything to the top until the user's released. As it's kind of a nightmare.
The latter doesn't seem that terrible of an idea. We can even change the loadingAbove_ text to say something like "Release scrollbar to continue."
Actually detecting the scrollbar would probably require ALL THE HEURISTICS, but that's fine. Mousedown down on the right 10px of the screen or something.
Add UI and backend support for:
That would be kinda handy probably.
Client should check for new versions of itself and ask to refresh when appropriate.
No, seriously.
Hitting shift-v doesn't keep the scroll constant. Only on retina, so it's probably some rounding problem.
After spending two days fighting with Angular. :-/ Problems with it:
$apply
calls and replace with manual $digest
s. But since a lot of stuff happens at the top-level controller, every time that changes, I still have to digest all the messages. This is pretty pointless, given that the messages very rarely change. Of course, part of this is probably that I'm using CSP mode, but I'm not losing that.Requirements for new thing
innerHTML
+ escapinghttp://blog.getbootstrap.com/2013/08/13/bootstrap-3-rc2/
They renamed some things.
When narrowing by clicking a message, that's obvious.
For widening by mouse, consider something like
When narrowing (or switching to an uncomparable view) by, say, a search box or subs list, maybe something like... find the first (last?) message on screen that matches the filter? Or perhaps the heuristic above? Not sure. Probably depends a lot on the particular filter feature.
Managing your scroll position is a problem right now. The recent positions was an experiment to automagic multiple head positions, but it seems to not work well. This bug will serve as a dumping ground for random thoughts.
Some use cases that should be served, ideally:
One thought: several operations should push the scroll position into the back/forward history. Or something more explicit in the UI so you don't accidentally go back past Roost. That would honestly handle a lot of use cases.
The current scheme tried to make having multiple saved scroll positions do some auto-fork thing. It doesn't seem to work well. Specifically, it makes 4 up there hard and doesn't make much sense. For reference, this is how it works:
While scrolling, I'll see the bubble for "Roost could not verify the sender of this message." appear in the left (the right edge of the bubble covers the first few characters of a class name) randomly. It appears there without prompt. It cannot be dismissed as far as I can tell.
UI is temporary, but sometimes the reply box covers the message. Probably similar logic to what we'll need in #13.
Anything where the browser jumps around for you gets in the way of the infinite scroll and triggers more loads. What can we do here?
That would be kinda fancy. And help a lot for visualizing things.
like humbug, would be good
when I narrow into a class/instance meme this is helpful for seeing what is really old and what is continuous
Bootstrap's column system is nice, but I actually do need it measured in pixels.
Also color-blindness is a thing to worry about.
Seriously. Also replace with sleeping owl gif or something equally amusing.
Apparently if you suspend and resume, Chrome or SockJS or somebody doesn't notice that WebSockets are now disconnected? Figure out what's going on here.
Apparently you can just tell chai.js to use assertions instead of this weird should thing. Let's use that. It makes more sense. Also mocha can be configured in "TDD" mode instead of "BDD" mode, but it's not clear that makes much difference.
Not necessarily things that would be good to do, but things that would be funny...
We should have some standard styling, maybe an emblem and/or a color change, on buttons that require zephyr/zephyr tickets and, because existing ones are expired, would request new tickets. We can add some Bootstrap-y tooltip on hover to explain in more detail what's going on there. This way users are hopefully not completely surprised when they get a popup like that.
Could also decorate the login buttons with that icon too to drive the point home that that icon means Webathena prompt.
Seems getting a ticket from Webathena doesn't always goes through? Not sure yet what's going on.
WebKit/Blink doesn't do smooth scroll of overflow; scroll
divs. Firefox does, actually. It's much easier to visually page down through them with a bit of animation there. Consider UA-sniffing and faking the smooth scroll.
Yeah, what that says.
Still need to figure that out.
States should not get rekeyed if they didn't change. In particular, just opening roost and not scrolling shouldn't do anything. Or selecting a state in the dropdown.
Alternatively, it should do something (namely move the state to the front), but it shouldn't change the id unless you've scrolled significantly.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.