Chatyuk! (Let chat!) is very early in its development phase. It hopes to grow up to an easy to embed multi user chatroom for any webpage.
- Run
npm install
to install required packages for development - Install browserify globally
npm install browserify -g
- Install watchify globally
npm install watchify -g
Run vagrant up
Due to the way some of the configurations are hardcoded now, you will need to add these following 2 settings to your /etc/hosts file.
127.0.0.1 chatyuk.com
127.0.0.1 conference.chatyuk.com
- Run
npm run-script build-components
to continuosly build the code. - In the root directory run
python -m SimpleHTTPServer
- Access the application at http://localhost:8000/public/chat.html
- Run
npm run-script build-tests
to continuosly build the tests. - In the root directory run
python -m SimpleHTTPServer
- Access the tests at http://localhost:8000/jasmine/SpecRunner.html
- To run the acceptance tests
npm run nightwatch
- Add the application bundle to your page like and and initialize the Chatyuk app like so
<script type="text/javascript" src="path/to/scripts/bundle.js" >
<script type="text/javascript">
Chatyuk.init(document.querySelector('#chatarea'), {display_mode: 'onpage'});
</script>
- Chatyuk.init(element, config); config accepts the following keys
- display_mode
- 'onpage', the chat window floats on an existing page
- 'inpage', the chat window is embedded into the page
- Has basic emoticon support
- Detects urls and embeds
- images and gifs
- youtube videos
- vidio videos
- links into clickable links into chat window.
- Has different display modes
- in page - embed the chat window into a particular div on your page
- on page - a floating window that can be minimised a-la FB chat that can be easily added to any page
- Logout if I reload the page or close the tab - ask for user confirmation ?
- Figure out if using browserify for the main Chatyuk object will be a hinderance when integrating with websites that also use some form of modules
- Create a script that will run both jasmine and acceptance test headless so that we can run it on a CI
- Add source maps to help with debugging
- Add sample on how to embed chatyuk on existing page
- Improve default style
- Scrollbar in chat window is ugly
- On Firefox when display_mode = 'inpage', the messagepane is not expanded
- Removed unused CSS in chatyuk.css file
- Remove hardcoded domain names from both client and server configurations
- Websocket support
- Fix bug with rejoining rooms without logging out.
- store the auth sessions in a cookie on the browser so that users can resume after reloading page
- converse.js had the same issue and they fixed it be removing strophe.muc.js, yikes
- Implement sample server code to create a pre-bound session and integrate with comms.js
- Ruby lib to create prebound sessions
- Django example
- Example of client connecting to prebound session
- End obj - auto login to room based on auth from the server
- Disable the ability for clients to connect apart from getting a prebound connection from the server
- Admin controls
- control rooms from server, valid rooms vs auto created rooms
- Refactor current stylesheets - either move everything to React components or leave in stylesheet or halhway house ?
- Display roster
- UI elements for presence (when people join or leave)
- How would we set certain users as admins ?
- Identify them in the roster
- Give them the ability to ban users
- Automatically kick abusive users out of rooms
- Deps management - Use browserify-shim for strophe and linkifyjs. Stop changing code for strophe.
- Emoji/Image picker
- Add ability to set chat room name in chat window
- When I am chatting, although scrolled up, scroll the chat window down
- Add the "More chats below" ala Twitch
- Figure out best way to handle customization => themes, emoticons
- There is a DDOS vulnerability with LuaExpat 1.2 that ships with 14.04
- HTTPs ?
- Error handling for cases where the server sends back an error when you try to send a message
- comms.js in onMessage, if there is an error the messageBody will be undefined as the body element is not in the response.
- Code should be acompanied with tests.
- If it is a new user facing feature, add an acceptance test to tests/acceptance as well.
- Add test file to jasmine/spec/ as per the structure of the actual code in the app folder. For e.g. tests for app/comms.js go into jasmine/spec/comms_spec.js, tests for app/components/message.jsx go into jasmine/spec/components/message_spec.jsx
- Add a require entry to the relevant spec file in jasmine/spec/suite.js, it should be automatically picked up by browserify and included in the specs.
- Code entry points is app/chatyuk.jsx.
- General code goes into app/
- Add all UI related components into app/components.
- Create directories to keep commmon files together.
- Always use strict mode. Add "use strict"; to the top of your js or jsx files.
- Ensure both your code and tests pass jshint by running
npm run jshint
before committing.
- Chatbox (InPageChatbox, OnPageChatbox)
- ChatBoxHead
- MessagePane
- Message
- Message
- LoginForm/LoggedInBox
- MessageBox
- Parsing links from text - http://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links
This project has borrowed/used/copied code from:
- Converse.js - https://conversejs.org/
- Strophe.js
- Twemoji awesome - http://ellekasai.github.io/twemoji-awesome/
- Linkify - https://github.com/SoapBox/jQuery-linkify