{"version":3,"sources":["weechat/parser.js","weechat/protocol.js","weechat/color.js","registerServiceWorker.js","store/createAction.js","store/buffers/actions.js","containers/withBuffers.js","store/composer/actions.js","store/weechat/flag.js","store/weechat/actions.js","containers/withMessage.js","containers/withMessages.js","containers/withWeechat.js","components/BufferList.js","components/Message.js","components/MessageList.js","components/BufferTitle.js","components/Buffer.js","components/Composer.js","screens/Main.js","App.js","weechat/index.js","store/messages/types.js","store/messages/actions.js","store/weechat/middleware.js","store/middleware.js","store/createReducer.js","store/activeBufferId/reducer.js","store/buffers/reducer.js","store/composer/reducer.js","store/messages/reducer.js","store/reducer.js","store/nicks/reducer.js","store/index.js","index.js"],"names":["zlib","require","Protocol","module","exports","cb","self","this","buffer","Buffer","alloc","total","unzipping","protocol","parseData","data","setData","id","getString","obj","parse","onData","part","bufferA","bufferB","length","copy","concatBuffers","from","getInt","slice","compression","getChar","getData","unzip","err","handleData","loop","range","i","types","chr","lon","getPointer","str","buf","TypeError","ptr","tim","htb","typeKeys","getType","typeValues","count","runType","hda","keys","paths","objs","hpath","split","map","key","tmp","pointers","path","forEach","push","inf","value","inl","arr","type","values","Error","c","l","s","toString","pointer","t","Object","name","d","fg","bg","attrs","colors","setAttrs","match","charAt","getColor","prefixes","text","f","parts","p","res","parseInt","filter","Boolean","window","location","hostname","createAction","flag","action","payload","actionType","selectBuffer","addBuffer","removeBuffer","mapStateToProps","state","activeBufferId","buffers","mapDispatchToProps","bufferActions","setMessage","setFocused","unsetFocused","Symbol","createRelayAction","connect","disconnect","sendMessage","openBuffer","getMessages","getNicks","getBuffers","message","composer","messages","weechat","styles","StyleSheet","create","view","backgroundColor","item","color","padding","cursor","activeItem","BufferName","props","active","style","Text","onClick","sortBuffers","compose","sortBy","prop","BufferList","ScrollView","PureComponent","black","brown","yellow","gray","white","bit","marginRight","lineHeight","flexDirection","Bit","children","StyledBit","relayStyle","Bits","bits","index","Message","prefix","View","MessageList","prevProps","listView","scrollToEnd","animated","ref","node","scrollsToTop","date","nick","position","left","right","height","flexShrink","paddingTop","paddingRight","fontSize","BufferTitle","number","topic","input","width","flex","borderColor","borderWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","borderStyle","borderRadius","bottom","bufferWrap","bufferList","Main","WrappedComponent","WeechatContainer","withWeechat","MessagesContainer","withMessages","MessageContainer","then","withMessage","BuffersContainer","withBuffers","App","events","Parser","aliases","line","open","close","renamed","localvar","title","nicklist","addMessage","NICK_REGEX","createBufferCommand","bufferId","createMessagesCommand","parseBufferLine","local_variables","channel","plugin","server","parseLine","tags","tags_array","highlight","displayed","find","includes","tag","exec","Number","replace","store","client","createClient","options","host","port","password","ssl","reconnect","Promise","resolve","em","EventEmitter","parser","Array","isArray","o","emit","connected","timeout","setTimeout","code","url","WebSocket","binaryType","addEventListener","clearTimeout","send","event","on","listener","arguments","msg","once","error","console","next","nextAction","process","dispatch","command","bufferLine","getState","reverse","thunk","createReducer","getInitialState","handlers","handler","unread","omit","focused","unique","uniqWith","equals","combineReducers","nicks","composeEnhancers","composeWithDevTools","realtime","createStore","reducer","applyMiddleware","middleware","render","document","getElementById"],"mappings":"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","file":"static/js/main.ce7b2de5.chunk.js","sourcesContent":["// TODO rewrite\nvar zlib = require('zlib')\nvar Protocol = require('./protocol.js')\n\nfunction Parser (cb) {\n var self = this\n var buffer = Buffer.alloc(0)\n var total = 0\n var unzipping = false\n var protocol = new Protocol()\n\n function parseData (data) {\n protocol.setData(data)\n var id = protocol.getString()\n var obj = protocol.parse()\n\n if (cb) cb(id, obj)\n total = 0\n }\n\n function handleData (data) {\n protocol.setData(data)\n // Remove total from data\n protocol.getInt()\n var compression = protocol.getChar()\n data = protocol.getData()\n\n if (compression) {\n unzipping = true\n zlib.unzip(data, function (err, data) {\n unzipping = false\n if (err) throw err\n parseData(data)\n self.onData()\n })\n } else {\n parseData(data)\n self.onData()\n }\n }\n\n function concatBuffers (bufferA, bufferB) {\n var buffer = Buffer.alloc(bufferA.length + bufferB.length)\n bufferA.copy(buffer)\n bufferB.copy(buffer, bufferA.length)\n return buffer\n }\n\n self.onData = function (part) {\n var data\n\n if (part) {\n buffer = concatBuffers(buffer, Buffer.from(part))\n }\n\n // Need at least 1 int (4 bytes) in buffer\n if (!unzipping && buffer.length > 4) {\n if (total === 0) {\n protocol.setData(buffer)\n total = protocol.getInt()\n }\n\n // Ready to parse buffer\n if (buffer.length >= total) {\n data = buffer.slice(0, total)\n buffer = buffer.slice(total)\n total = 0\n handleData(data)\n }\n }\n }\n}\n\nmodule.exports = Parser\n","// TODO rewrite\n//\n// http://www.weechat.org/files/doc/devel/weechat_relay_protocol.en.html\n//\n// Helper\nfunction loop (range, cb) {\n var i\n for (i = 0; i < range; i++) {\n cb(i)\n }\n}\n\nfunction Protocol () {\n var self = this\n var data\n var types = {\n chr: getChar,\n 'int': getInt,\n // hacks\n lon: getPointer,\n str: getString,\n buf: getBuffer,\n ptr: getPointer,\n // hacks\n tim: getPointer,\n htb: getHashtable,\n hda: getHdata,\n inf: getInfo,\n inl: getInfolist,\n arr: array\n }\n\n // Map all types to exports\n Object.keys(types).forEach(function (name) {\n var type = types[name]\n self[type.name] = type\n })\n\n function runType (type) {\n if (types[type]) {\n return types[type]()\n } else {\n throw new Error('Unknown type: ' + type)\n }\n }\n\n function getChar () {\n var c = data[0]\n data = data.slice(1)\n return c\n }\n\n function getInt () {\n var i = ((data[0] & 0xff) << 24) | ((data[1] & 0xff) << 16) | ((data[2] & 0xff) << 8) | (data[3] & 0xff)\n data = data.slice(4)\n return i >= 0 ? i : null\n }\n\n function getString () {\n var l = getInt()\n var s = data.slice(0, l)\n\n data = data.slice(l)\n return s.toString()\n }\n\n function getBuffer () {\n throw new TypeError('Type not implemented: Buffer')\n }\n\n function getPointer () {\n var l = data[0]\n var pointer = data.slice(1, l + 1)\n\n data = data.slice(l + 1)\n return pointer.toString()\n }\n\n function getHashtable () {\n var typeKeys = getType()\n var typeValues = getType()\n var count = getInt()\n var obj = {}\n\n loop(count, function () {\n obj[types[typeKeys]()] = runType(typeValues)\n })\n return obj\n }\n\n function getHdata () {\n var keys\n var paths\n var count\n var objs = []\n var hpath = getString()\n\n keys = getString().split(',')\n paths = hpath.split('/')\n count = getInt()\n\n keys = keys.map(function (key) {\n return key.split(':')\n })\n\n loop(count, function () {\n var tmp = {}\n // TODO: Why is path not used here?\n tmp.pointers = paths.map(function (path) {\n return getPointer()\n })\n keys.forEach(function (key) {\n tmp[key[0]] = runType(key[1])\n })\n objs.push(tmp)\n })\n return objs\n }\n\n function getInfo () {\n return {\n key: getString(),\n value: getString()\n }\n }\n\n function getType () {\n var t = data.slice(0, 3)\n data = data.slice(3)\n return t\n }\n\n function getInfolist () {\n throw new TypeError('Type not implemented: infolist')\n }\n\n function array () {\n var type\n var count\n var values\n\n type = getType()\n count = getInt()\n values = []\n loop(count, function () {\n values.push(runType(type))\n })\n return values\n }\n\n self.setData = function (d) {\n data = d\n }\n\n self.getData = function () {\n return data\n }\n\n self.parse = function () {\n if (data.length < 3) {\n return null\n }\n return runType(getType())\n }\n\n self.getInt = function () {\n return getInt()\n }\n\n self.getString = function () {\n return getString()\n }\n\n self.getChar = function () {\n return getChar()\n }\n\n}\n\nmodule.exports = Protocol\n","// TODO rewrite\n// http://weechat.org/files/doc/devel/weechat_dev.en.html#color_codes_in_strings\nvar part\nvar fg\nvar bg\nvar attrs\nvar colors = [\n '',\n 'black',\n 'dark gray',\n 'dark red',\n 'light red',\n 'dark green',\n 'light green',\n 'brown',\n 'yellow',\n 'dark blue',\n 'light blue',\n 'dark magenta',\n 'light magenta'\n , 'dark cyan'\n , 'light cyan',\n 'gray'\n , 'white'\n ]\n\nfunction setAttrs () {\n while (part.match(/^[_|*/]/)) {\n attrs.push(part.charAt(0))\n part = part.slice(1)\n }\n}\n\nfunction getColor () {\n var c\n if (part.match(/^@/)) {\n c = part.slice(1, 5)\n part = part.slice(5)\n } else {\n c = part.slice(0, 2)\n part = part.slice(2)\n }\n return c\n}\n\nvar prefixes = {\n '\\x19': function () {\n if (part.match(/^F/)) {\n part = part.slice(1)\n setAttrs()\n fg = getColor()\n } else if (part.match(/^B/)) {\n part = part.slice(1)\n setAttrs()\n bg = getColor()\n } else {\n setAttrs()\n fg = getColor()\n if (part.match(/^,/)) {\n part = part.slice(1)\n bg = getColor()\n }\n }\n },\n '\\x1A': function () {\n // Don't know what to do\n },\n '\\x1B': function () {\n attrs = []\n },\n '\\x1C': function () {\n fg = ''\n bg = ''\n }\n}\n\nexports.parse = function (text) {\n if (!text) {\n return text\n }\n var f\n\n // eslint-disable-next-line no-control-regex\n var parts = text.split(/(\\x19|\\x1A|\\x1B|\\x1C)/)\n\n if (parts.length === 1) {\n return [{\n text: parts[0]\n }]\n }\n\n attrs = []\n\n return parts.map(function (p) {\n var res\n var tmp = prefixes[p.charAt(0)]\n if (f) {\n part = p\n f()\n res = {\n text: part,\n fg: colors[parseInt(fg, 10)],\n bg: colors[parseInt(bg, 10)],\n attrs: attrs\n }\n if (!res.fg) res.fg = fg\n if (!res.bg) res.bg = bg\n }\n f = tmp\n return res\n }).filter(function (p) {\n return p\n })\n}\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n)\n\nexport default function register () {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl)\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl)\n }\n })\n }\n}\n\nfunction registerValidSW (swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.')\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker (swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl)\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n )\n })\n}\n\nexport function unregister () {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister()\n })\n }\n}\n","import {\n compose\n} from 'redux'\n\nexport default function createAction (type, flag) {\n function action (payload) {\n const action = {\n type,\n payload\n }\n\n if (flag) {\n return {\n [flag]: action\n }\n }\n\n return action\n }\n\n action.actionType = type\n\n return action\n}\n\nexport function createRequest (name, call) {\n const requestAction = createAction(`${name} request`)\n const successAction = createAction(`${name} success`)\n const failureAction = createAction(`${name} failure`)\n\n function action (payload) {\n return (dispatch, getState) => {\n const request = compose(dispatch, requestAction)\n const success = compose(dispatch, successAction)\n const failure = compose(dispatch, failureAction)\n\n request()\n\n call(payload)\n .then(success)\n .catch(failure)\n }\n }\n\n action.request = requestAction.actionType\n action.success = successAction.actionType\n action.failure = failureAction.actionType\n\n return action\n}\n","import createAction from '../createAction'\n\nexport const selectBuffer = createAction('select buffer')\n\nexport const addBuffer = createAction('add buffer')\n\nexport const removeBuffer = createAction('remove buffer')\n","import React, {PureComponent} from 'react'\nimport {connect} from 'react-redux'\n\nimport * as bufferActions from '../store/buffers/actions'\n\nfunction mapStateToProps (state) {\n const {\n activeBufferId,\n buffers\n } = state\n\n return {\n buffers,\n activeBufferId\n }\n}\n\nconst mapDispatchToProps = bufferActions\n\nexport default function withBuffers (options = {}) {\n return WrappedComponent => {\n class BuffersContainer extends PureComponent {\n selectBuffer = id => {\n const {\n selectBuffer,\n getMessages\n } = this.props\n\n selectBuffer(id)\n\n getMessages()\n }\n\n render () {\n return (\n \n )\n }\n }\n\n return connect(mapStateToProps, mapDispatchToProps)(BuffersContainer)\n }\n}\n","import createAction from '../createAction'\n\nexport const setMessage = createAction('set message')\n\nexport const setFocused = createAction('composer is focused')\n\nexport const unsetFocused = createAction('composer is unfocused')\n","export default Symbol('weechat')\n","import {default as createAction} from '../createAction'\n\nimport flag from './flag'\n\nfunction createRelayAction (type) {\n return createAction(type, flag)\n}\n\nexport const connect = createRelayAction('connect to relay')\n\nexport const disconnect = createRelayAction('disconnect from relay')\n\nexport const sendMessage = createRelayAction('send message')\n\nexport const openBuffer = createRelayAction('open buffer')\n\nexport const getMessages = createRelayAction('get messages')\n\nexport const getNicks = createRelayAction('get nicks')\n\nexport const getBuffers = createRelayAction('get buffers')\n","import React, {PureComponent} from 'react'\nimport {connect} from 'react-redux'\n\nimport {\n setMessage\n} from '../store/composer/actions'\n\nimport {\n sendMessage\n} from '../store/weechat/actions'\n\nfunction mapStateToProps (state) {\n const {\n composer: {\n message\n }\n } = state\n\n return {\n message\n }\n}\n\nconst mapDispatchToProps = {\n setMessage,\n sendMessage\n}\n\nexport default function withMessage (options = {}) {\n return WrappedComponent => {\n class MessageContainer extends PureComponent {\n sendMessage = () => {\n const {\n sendMessage,\n setMessage,\n message\n } = this.props\n\n return sendMessage({message})\n .then(() => setMessage(''))\n }\n\n render () {\n return (\n \n )\n }\n }\n\n return connect(mapStateToProps, mapDispatchToProps)(MessageContainer)\n }\n}\n","import React, {PureComponent} from 'react'\nimport {connect} from 'react-redux'\n\nimport {\n selectBuffer\n} from '../store/buffers/actions'\n\nfunction mapStateToProps (state) {\n const {\n messages,\n activeBufferId\n } = state\n\n return {\n messages,\n activeBufferId\n }\n}\n\nconst mapDispatchToProps = {\n selectBuffer\n}\n\nexport default function withMessages (options = {}) {\n return WrappedComponent => {\n class MessagesContainer extends PureComponent {\n render () {\n const {\n messages,\n activeBufferId\n } = this.props\n\n return (\n \n )\n }\n }\n\n return connect(mapStateToProps, mapDispatchToProps)(MessagesContainer)\n }\n}\n","import React, {PureComponent} from 'react'\nimport {connect} from 'react-redux'\n\nimport * as mapDispatchToProps from '../store/weechat/actions'\n\nfunction mapStateToProps (state) {\n const {\n weechat\n } = state\n\n return {\n weechat\n }\n}\n\nexport default function withWeechat (options = {}) {\n return WrappedComponent => {\n class WeechatContainer extends PureComponent {\n componentDidMount () {\n this.props.connect({})\n }\n\n render () {\n return (\n \n )\n }\n }\n\n return connect(mapStateToProps, mapDispatchToProps)(WeechatContainer)\n }\n}\n","import React, {PureComponent} from 'react'\n\nimport {\n sortBy,\n values,\n compose,\n prop\n} from 'ramda'\n\nimport {\n Text,\n ScrollView,\n StyleSheet\n} from 'react-native'\n\nconst styles = StyleSheet.create({\n view: {\n backgroundColor: '#366'\n },\n item: {\n color: 'white',\n padding: 6,\n cursor: 'pointer'\n },\n activeItem: {\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n color: '#366'\n }\n})\n\nconst BufferName = props => {\n const {\n name,\n active,\n selectBuffer,\n id\n } = props\n\n const style = [\n styles.item,\n active && styles.activeItem\n ].filter(Boolean)\n\n return (\n {\n selectBuffer(id)\n }}\n style={style}>\n {name}\n \n )\n}\n\nconst sortBuffers = compose(\n sortBy(prop('number')),\n values\n)\n\nexport default class BufferList extends PureComponent {\n render () {\n const {\n selectBuffer,\n activeBufferId,\n buffers = {},\n style\n } = this.props\n\n return (\n \n {sortBuffers(buffers).map(buffer =>\n \n )}\n \n )\n }\n}\n","import React, {PureComponent} from 'react'\n\nimport {\n Text,\n View,\n StyleSheet\n} from 'react-native'\n\nconst colors = {\n black: '#333',\n 'dark gray': '#666',\n 'dark red': '#900',\n 'light red': '#f66',\n 'dark green': '#393',\n 'light green': '#3f6',\n brown: '#a63',\n yellow: '#ff6',\n 'dark blue': '#339',\n 'light blue': '#3cf',\n 'dark magenta': '#c09',\n 'light magenta': '#f47',\n 'dark cyan': '#39a',\n 'light cyan': '#6cf',\n gray: '#999',\n white: '#eee'\n}\n\nconst styles = StyleSheet.create({\n bit: {\n marginRight: 4,\n lineHeight: '1.2em'\n },\n view: {\n flexDirection: 'row',\n padding: 2\n }\n})\n\nconst Bit = ({style, children}) =>\n \n {children}\n \n\nconst StyledBit = ({fg, bg, style, children}) => {\n const relayStyle = {\n color: colors[fg],\n backgroundColor: colors[bg]\n }\n return (\n \n {children}\n \n )\n}\n\nconst Bits = ({bits, style}) =>\n bits.map(({text, ...bit}, index) =>\n \n {text}\n \n )\n\nexport default class Message extends PureComponent {\n render () {\n const {\n prefix,\n message\n } = this.props\n\n return (\n \n {prefix &&\n \n }\n\n {message &&\n \n }\n \n )\n }\n}\n","import React, {PureComponent} from 'react'\n\nimport {\n ScrollView\n} from 'react-native'\n\nimport Message from './Message'\n\nexport default class MessageList extends PureComponent {\n componentDidUpdate (prevProps) {\n if (this.props.messages === prevProps.messages) return\n\n this.listView.scrollToEnd({animated: true})\n }\n\n render () {\n const {\n messages = []\n } = this.props\n\n return (\n { this.listView = node }}\n scrollsToTop={false}>\n {messages.map((message, index) =>\n \n )}\n \n )\n }\n}\n","import React, {PureComponent} from 'react'\n\nimport {\n View,\n StyleSheet,\n Text\n} from 'react-native'\n\nconst styles = StyleSheet.create({\n view: {\n flexDirection: 'row',\n padding: 4,\n backgroundColor: '#343436',\n position: 'sticky',\n left: 0,\n right: 0,\n height: 20,\n flexShrink: 1\n },\n item: {\n paddingTop: 1,\n paddingRight: 8,\n fontSize: 10,\n color: '#fff'\n }\n})\n\nexport default class BufferTitle extends PureComponent {\n render () {\n const {\n number = '',\n name = '',\n topic = ''\n } = this.props\n\n return (\n \n \n {number}\n \n \n {name}\n \n \n {topic}\n \n \n )\n }\n}\n","import React, {PureComponent} from 'react'\n\nimport {\n View,\n StyleSheet\n} from 'react-native'\n\nimport MessageList from './MessageList'\nimport Title from './BufferTitle'\n\nconst styles = StyleSheet.create({\n view: {\n flexDirection: 'column',\n backgroundColor: '#fcfcfc'\n }\n})\n\nexport default class Buffer extends PureComponent {\n render () {\n const {\n id,\n name,\n topic,\n number,\n messages,\n style\n } = this.props\n\n return (\n \n \n \n \n )\n }\n}\n","import React, {PureComponent} from 'react'\n\nimport {\n StyleSheet,\n TextInput,\n KeyboardAvoidingView\n} from 'react-native'\n\nconst styles = StyleSheet.create({\n input: {\n width: '100%',\n flex: 1,\n height: 40,\n padding: 6,\n borderColor: '#f25',\n borderWidth: 1,\n borderLeftWidth: 0,\n borderRightWidth: 0,\n borderBottomWidth: 0,\n borderStyle: 'solid',\n borderRadius: 3,\n backgroundColor: 'white',\n color: '#c6b',\n position: 'sticky',\n bottom: 0,\n left: 0,\n right: 0\n }\n})\n\nexport default class Composer extends PureComponent {\n handleSubmit = text => {\n this.props.sendMessage()\n .then(() => this.inputNode.focus())\n }\n\n render () {\n const {\n message,\n setMessage,\n setComposerFocused,\n unsetComposerFocused\n } = this.props\n\n return (\n \n { this.inputNode = node }}\n value={message}\n onChangeText={setMessage}\n onFocus={setComposerFocused}\n onBlur={unsetComposerFocused}\n onSubmitEditing={this.handleSubmit}\n returnKeyType='send'\n />\n \n )\n }\n}\n","import React, {PureComponent} from 'react'\n\nimport {\n View,\n StyleSheet\n} from 'react-native'\n\nimport {\n compose\n} from 'redux'\n\nimport withBuffers from '../containers/withBuffers'\nimport withMessage from '../containers/withMessage'\nimport withMessages from '../containers/withMessages'\nimport withWeechat from '../containers/withWeechat'\n\nimport BufferList from '../components/BufferList'\nimport Buffer from '../components/Buffer'\nimport Composer from '../components/Composer'\n\nconst styles = StyleSheet.create({\n view: {\n flex: 1,\n flexDirection: 'column',\n backgroundColor: '#fcfcfc',\n height: '100vh'\n },\n bufferWrap: {\n flex: 1,\n flexDirection: 'row',\n height: '100vh'\n },\n bufferList: {\n flex: 0.2,\n flexShrink: 1\n },\n buffer: {\n flex: 1\n }\n})\n\nclass Main extends PureComponent {\n componentDidUpdate (prevProps) {\n const {\n activeBufferId,\n getMessages\n } = this.props\n\n if (activeBufferId !== prevProps.activeBufferId) {\n getMessages()\n }\n }\n\n render () {\n const {\n buffers = {},\n messages,\n message,\n setMessage,\n sendMessage,\n selectBuffer,\n activeBufferId\n } = this.props\n\n const buffer = buffers[activeBufferId]\n\n return (\n \n \n \n \n \n {/*\n \n */}\n \n )\n }\n}\n\nexport default compose(\n withWeechat(),\n withMessages(),\n withMessage(),\n withBuffers()\n)(Main)\n","import React, {PureComponent} from 'react'\n\nimport Main from './screens/Main'\n\nclass App extends PureComponent {\n render () {\n return (\n
\n
\n
\n )\n }\n}\n\nexport default App\n","// TODO rewrite\n\nvar events = require('events')\nvar Parser = require('./parser')\nvar color = require('./color')\n\nvar aliases = {\n line: '_buffer_line_added',\n open: '_buffer_opened',\n close: '_buffer_closing',\n renamed: '_buffer_renamed',\n localvar: '_buffer_localvar_added',\n title: '_buffer_title_change',\n nicklist: '_nicklist'\n}\n\nexport function style (line) {\n return color.parse(line) || []\n}\n\nexport function noStyle (line) {\n var parts = style(line)\n\n return parts.map(function (part) {\n return part.text\n }).join('')\n}\n\nexport function connect (host, port, password, ssl, cb) {\n var self = {}\n var id = 0\n var em = new events.EventEmitter()\n var parser = new Parser(onParsed)\n var connected = false\n var client\n\n var timeout = setTimeout(function () {\n var err = new Error('Connect/handshake timeout')\n err.code = 'TIMEOUT'\n em.emit('error', err)\n }, 10000)\n\n function onParsed (id, obj) {\n if (!id) id = '';\n\n [id, '*'].forEach(function (l) {\n if (!Array.isArray(obj)) obj = [obj]\n\n obj = obj.map(function (o) {\n if (o.pointers) {\n o.pointers = o.pointers.map(function (p) {\n if (!p.match(/^0x/)) {\n return '0x' + p\n }\n return p\n })\n }\n if (o.buffer && !o.buffer.match(/^0x/)) {\n o.buffer = '0x' + o.buffer\n }\n return o\n })\n if (obj.length === 1) obj = obj[0]\n\n em.emit(l, obj, id)\n })\n }\n\n function onConnect () {\n clearTimeout(timeout)\n self.send('init password=' + password)\n self.send('info version', function () {\n connected = true\n self.send('sync')\n if (cb) cb()\n })\n }\n\n const protocol = ssl ? 'wss' : 'ws'\n\n const url = `${protocol}://${host}:${port}/weechat`\n\n client = new WebSocket(url)\n\n client.binaryType = 'arraybuffer'\n\n client.addEventListener('open', onConnect)\n\n client.addEventListener('message', function (event) {\n try {\n parser.onData(event.data)\n } catch (err) {\n em.emit('error', err)\n }\n })\n\n client.addEventListener('error', function (err) {\n clearTimeout(timeout)\n em.emit('error', err)\n })\n\n client.addEventListener('close', function () {\n clearTimeout(timeout)\n if (!connected) {\n var err = new Error('Wrong password')\n err.code = 'WRONGPASS'\n em.emit('error', err)\n } else {\n em.emit('end')\n }\n })\n\n self.on = function (listener, cb) {\n if (arguments.length === 1) {\n cb = listener\n listener = '*'\n }\n\n em.on(listener, cb)\n if (aliases[listener]) {\n em.on(aliases[listener], cb)\n }\n }\n\n self.send = function (msg, cb) {\n id++\n if (cb) em.once(id, cb)\n client.send('(' + id + ') ' + msg + '\\n')\n }\n\n self.disconnect = function () {\n client.close()\n }\n\n return self\n}\n","export const REGULAR_MESSAGE = 'irc_message'\nexport const JOIN_MESSAGE = 'irc_join'\nexport const PART_MESSAGE = 'irc_part'\nexport const QUIT_MESSAGE = 'irc_quit'\nexport const NICK_MESSAGE = 'irc_nick'\n","import createAction from '../createAction'\n\nexport const addMessage = createAction('add line')\n","import * as weechat from '../../weechat'\n\nimport {\n REGULAR_MESSAGE,\n JOIN_MESSAGE,\n PART_MESSAGE,\n QUIT_MESSAGE,\n NICK_MESSAGE\n} from '../messages/types'\n\nimport {\n addMessage\n} from '../messages/actions'\n\nimport {\n addBuffer,\n removeBuffer,\n selectBuffer\n} from '../buffers/actions'\n\nimport {\n connect,\n disconnect,\n sendMessage,\n openBuffer,\n getMessages,\n getNicks,\n getBuffers\n} from './actions'\n\nimport flag from './flag'\n\nconst NICK_REGEX = /^nick_(\\S+)/i\n\nfunction createBufferCommand ({bufferId = 'gui_buffers(*)'}) {\n return `hdata buffer:${bufferId} number,short_name,title,local_variables`\n}\n\nfunction createMessagesCommand ({bufferId, count = 10}) {\n return `hdata buffer:${bufferId}/own_lines/last_line(-${count})/data`\n}\n\nfunction parseBufferLine (buffer) {\n if (!buffer || !buffer.pointers) return null\n\n const id = buffer.pointers[0]\n\n const {\n nick,\n number = 0,\n local_variables: {\n channel: name = buffer.local_variables.plugin,\n server = 'weechat',\n type\n }\n } = buffer\n\n return {\n id,\n nick,\n number,\n name,\n server,\n type\n }\n}\n\nfunction parseLine (line) {\n const {\n tags_array: tags,\n date,\n highlight,\n prefix,\n buffer: bufferId,\n displayed,\n message\n } = line\n\n const types = [\n JOIN_MESSAGE,\n PART_MESSAGE,\n QUIT_MESSAGE,\n NICK_MESSAGE\n ]\n\n const type = types.find(type =>\n tags.includes(type)\n ) || REGULAR_MESSAGE\n\n const nick = tags.find(tag => {\n const match = NICK_REGEX.exec(tag)\n return match && match[1]\n })\n\n return {\n bufferId,\n prefix: weechat.style(prefix),\n date: Number(date),\n type,\n nick: nick && nick.replace(NICK_REGEX, '$1'),\n highlight: !!highlight,\n displayed: displayed == null || !!displayed,\n message: weechat.style(message)\n }\n}\n\nexport default function weechatMiddleware (store) {\n let client\n\n const createClient = function createClient (options) {\n const {\n host,\n port,\n password,\n ssl,\n reconnect\n } = options\n\n if (client && !reconnect) {\n return Promise.resolve(client)\n }\n\n return new Promise(resolve => {\n client = weechat.connect(host, port, password, ssl, () => {\n client.on('error', error => {\n console.error(error)\n })\n\n resolve(client)\n })\n })\n }\n\n return next => async nextAction => {\n const {\n [flag]: action\n } = nextAction\n\n if (!action) {\n return next(nextAction)\n }\n\n const {\n type,\n payload = {}\n } = action\n\n switch (type) {\n case connect.actionType: {\n const {\n host = process.env.REACT_APP_HOST,\n port = process.env.REACT_APP_PORT,\n password = process.env.REACT_APP_PASSWORD,\n ssl = process.env.REACT_APP_SSL==='true' ? true : false,\n reconnect\n } = payload\n\n await createClient({\n host,\n port,\n password,\n ssl,\n reconnect\n })\n\n client.on('open', buffer => {\n const bufferId = buffer.pointers[0]\n next(selectBuffer(bufferId))\n store.dispatch(getBuffers({bufferId}))\n })\n\n client.on('close', buffer => {\n const bufferId = buffer.pointers[0]\n next(removeBuffer(bufferId))\n })\n\n client.on('line', line => {\n const lines = Array.isArray(line)\n ? line\n : [line]\n\n lines.forEach(line => {\n next(addMessage(parseLine(line)))\n })\n })\n\n store.dispatch(getBuffers())\n\n return client\n }\n case getBuffers.actionType: {\n const {\n bufferId\n } = payload\n\n const command = createBufferCommand({bufferId})\n\n client.send(command, line => {\n const bufferLines = Array.isArray(line)\n ? line\n : [line]\n\n bufferLines.forEach(bufferLine => {\n const buffer = parseBufferLine(bufferLine)\n\n if (!buffer) return\n\n next(addBuffer(buffer))\n })\n })\n\n return\n }\n case getMessages.actionType: {\n const {\n count = 10\n } = payload\n\n const {\n activeBufferId\n } = store.getState()\n\n const bufferId = payload.bufferId || activeBufferId\n\n const command = createMessagesCommand({\n bufferId,\n count\n })\n\n client.send(command, line => {\n const lines = Array.isArray(line)\n ? line.reverse()\n : [line]\n\n lines.forEach(line => {\n next(addMessage(parseLine(line)))\n })\n })\n\n return\n }\n case sendMessage.actionType: {\n const {\n message\n } = payload\n\n const {\n activeBufferId\n } = store.getState()\n\n const bufferId = payload.bufferId || activeBufferId\n\n return client.send(`input ${bufferId} ${message}`)\n }\n case disconnect.actionType: {\n return client.disconnect()\n }\n default:\n }\n }\n}\n","import thunk from 'redux-thunk'\nimport weechat from './weechat/middleware'\n\nexport default [weechat, thunk]\n","export default function createReducer (getInitialState, handlers) {\n return function reducer (state = getInitialState(), action) {\n const {\n type,\n payload = {}\n } = action\n\n const handler = handlers[type]\n\n if (handler) return handler(state, payload)\n\n return state\n }\n}\n","import {\n selectBuffer\n} from '../buffers/actions'\n\nimport createReducer from '../createReducer'\n\nfunction getInitialState () {\n return null\n}\n\nexport default createReducer(getInitialState, {\n [selectBuffer.actionType] (state, payload) {\n return payload\n }\n})\n","import {\n omit\n} from 'ramda'\n\nimport {\n addBuffer,\n selectBuffer,\n removeBuffer\n} from './actions'\n\nimport {\n addMessage\n} from '../messages/actions'\n\nimport createReducer from '../createReducer'\n\nfunction getInitialState () {\n return {}\n}\n\nexport default createReducer(getInitialState, {\n [addBuffer.actionType] (state, payload) {\n return {\n ...state,\n [payload.id]: {\n ...payload,\n unread: 0\n }\n }\n },\n [selectBuffer.actionType] (state, payload) {\n const buffer = state[payload]\n\n if (!buffer) {\n console.error(`no buffer at ${payload}`)\n return state\n }\n\n return {\n ...state,\n [payload]: {\n ...buffer,\n unread: null\n }\n }\n },\n [addMessage.actionType] (state, payload) {\n const {\n bufferId\n } = payload\n\n const buffer = state[bufferId]\n\n if (!buffer) {\n console.error(`no buffer at ${bufferId}`)\n return state\n }\n\n return {\n ...state,\n [bufferId]: {\n ...buffer,\n unread: buffer.unread + 1\n }\n }\n },\n [removeBuffer.actionType] (state, payload) {\n return omit([payload], state)\n }\n})\n","import {\n setMessage,\n setFocused,\n unsetFocused\n} from './actions'\n\nimport createReducer from '../createReducer'\n\nfunction getInitialState () {\n return {\n message: '',\n focused: true\n }\n}\n\nexport default createReducer(getInitialState, {\n [setMessage.actionType] (state, payload) {\n return {\n ...state,\n message: payload\n }\n },\n [setFocused.actionType] (state) {\n return {\n ...state,\n focused: true\n }\n },\n [unsetFocused.actionType] (state) {\n return {\n ...state,\n focused: false\n }\n }\n})\n","import {\n uniqWith,\n equals\n} from 'ramda'\n\nimport {\n addMessage\n} from './actions'\n\nimport createReducer from '../createReducer'\n\nfunction getInitialState () {\n return {}\n}\n\nconst unique = uniqWith(equals)\n\nexport default createReducer(getInitialState, {\n [addMessage.actionType] (state, payload) {\n const {\n bufferId,\n ...message\n } = payload\n\n if (state[bufferId]) {\n const messages = [\n ...state[bufferId],\n message\n ]\n\n return {\n ...state,\n [bufferId]: unique(messages)\n }\n }\n\n\n\n return {\n ...state,\n [bufferId]: [message]\n }\n }\n})\n","import {\n combineReducers\n} from 'redux'\n\nimport activeBufferId from './activeBufferId/reducer'\nimport buffers from './buffers/reducer'\nimport composer from './composer/reducer'\nimport messages from './messages/reducer'\nimport nicks from './nicks/reducer'\n\nexport default combineReducers({\n activeBufferId,\n buffers,\n composer,\n messages,\n nicks\n})\n","export default function nicks (state = {}, action) {\n return state\n}\n","import {\n createStore,\n applyMiddleware\n} from 'redux'\n\n/*\nimport {\n composeWithDevTools\n} from 'remote-redux-devtools'\n */\n\nimport {\n composeWithDevTools\n} from 'redux-devtools-extension/developmentOnly'\n\nimport middleware from './middleware'\n\nimport reducer from './reducer'\n\nconst composeEnhancers = composeWithDevTools({\n realtime: true\n})\n\nexport default function configureStore () {\n const store = createStore(reducer, composeEnhancers(\n applyMiddleware(...middleware)\n ))\n\n if (module.hot) {\n module.hot.accept('./reducer', () => {\n store.replaceReducer(reducer)\n })\n\n module.hot.decline('./middleware')\n }\n\n return store\n}\n","import React from 'react'\nimport {render} from 'react-dom'\nimport {Provider} from 'react-redux'\n\nimport registerServiceWorker from './registerServiceWorker'\n\nimport App from './App'\n\nimport configureStore from './store'\n\nimport './index.css'\n\n//registerServiceWorker()\n\nconst store = configureStore()\n\nconst renderApp = () =>\n render(\n \n \n ,\n document.getElementById('root')\n )\n\nrenderApp()\n\nif (module.hot) {\n module.hot.accept('./store', renderApp)\n module.hot.accept('./App', renderApp)\n}\n"],"sourceRoot":""}