-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js.map
1 lines (1 loc) · 19.5 KB
/
app.js.map
1
{"version":3,"sources":["webpack:///webpack/bootstrap 30d35cfa6915f0d1b8da","webpack:///./public/app/js/app.js","webpack:///./public/app/js/middle.js","webpack:///./public/app/js/ang/chatapp.js","webpack:///./public/app/js/chat.js","webpack:///./public/app/js/config.js","webpack:///./public/app/js/connect.js","webpack:///./public/app/js/pubsub.js","webpack:///./public/app/js/ang/useravatar.component.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;;AAEL,EAAC;;;;;;;ACtBD;AACA;;;AAGA;;AAEA;AACA;;;;;;;ACPA;AACA;;AAEA;;AAEA;;;;AAIA;;AAEA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,EAAC;;AAED;;;;;;;ACvBA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY,OAAO;AACnB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA,UAAS;;AAET,MAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAY,OAAO;AACnB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY,OAAO;AACnB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAY,OAAO;AACnB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,EAAC;;AAED;;AAEA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA;;;AAGA;;;;;;;AClPA;AACA;AACA;AACA;;AAEA;;;;;;;ACLA;;;AAGA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;;AAEL;;AAEA,MAAK;;AAEL;;AAEA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,UAAS;AACT;;AAEA;;AAEA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,aAAY,OAAO;AACnB,aAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;;;;;;AClMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA,4BAA2B,qCAAqC;AAChE;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpCA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0DAAyD,aAAa;AACtE,+BAA8B,eAAe;AAC7C,6CAA4C,qBAAqB;AACjE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;;AAED","file":"app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 30d35cfa6915f0d1b8da","var middle = require('./middle');\nvar chatApp = require('./ang/chatapp');\n\nvar chat = require('./chat');\nvar userAvatarComponent = require('./ang/useravatar.component');\nmiddle.userAvatarComponent = userAvatarComponent;\n\n$(function() {\n\n $(\"#init\").modal('show');\n\n $(\"[name='my-checkbox']\").bootstrapSwitch({\n size: 'small',\n onColor: 'success',\n onText: '开启',\n offText: '关闭',\n onSwitchChange: function(event, state) {\n console.log(state);\n chat.settingMsgSoundPrompt();\n }\n });\n\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./public/app/js/app.js\n// module id = 0\n// module chunks = 0","// 持有 后端 和前台渲染的公共变量\n// 解决互相依赖导致某些前端渲染被超前执行\n\n\nvar middle = {};\n\nmiddle.my_connect = null;\nmodule.exports = middle;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./public/app/js/middle.js\n// module id = 1\n// module chunks = 0","var middle = require('../middle');\nvar chat = require('../chat');\n\nvar chatApp = angular.module('chatApp', []);\n\nchatApp.controller('sign', function($scope, $http) {\n\n\n\n $scope.signUser = function() {\n\n if (undefined === $scope.username || $scope.username.trim() === '') {\n alert('请输入用户名');\n } else {\n $(\"#init\").modal('hide');\n chat.signinuser.username = $scope.username;\n chat.signIn($scope.username);\n }\n\n };\n\n});\n\nmodule.exports = chatApp;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./public/app/js/ang/chatapp.js\n// module id = 2\n// module chunks = 0","var config = require('./config');\nvar Connect = require('./connect');\nvar middle = require('./middle');\n\n// 没有<> 就变成选取元素了\nvar templateDiv = $(\"<div>\");\n\n// 自己的聊天消息\nvar chatMsgRight;\n// 他人的聊天消息\nvar chatMsgLeft;\n// 聊天窗口\nvar chatWindow;\n\n\nvar msg_input;\n\nvar msg_end;\n\n// 聊天框显示出最新的\nfunction msgScrollEnd() {\n msg_end[0].scrollIntoView();\n}\n\n/**\n * 自己的消息\n * 一条消息需要名字,时间,头像,内容\n * @return {[type]} [description]\n */\nfunction insertChatMsgRight(content) {\n var date = new Date();\n var clone = chatMsgRight.clone();\n clone.find(\".direct-chat-timestamp\").html((new Date()).toLocaleTimeString());\n clone.find(\".direct-chat-text\").html(content);\n msg_end.before(clone);\n}\n\n/**\n * 对方的消息\n * @return {[type]} [description]\n */\nfunction insertChatMsgLeft(message) {\n var date = new Date();\n var clone = chatMsgLeft.clone();\n clone.find(\".direct-chat-timestamp\").html((new Date()).toLocaleTimeString());\n clone.find(\".direct-chat-text\").html(message.content);\n clone.find('img').attr('src', message.avatar);\n msg_end.before(clone);\n}\n\nfunction Chat() {\n this.connect = null;\n this.users = [];\n this.currentChat = {\n theUser: null,\n username: null,\n chatname: null\n };\n this.signinuser = {\n username: null\n };\n // key username value chat window dom\n this.chatWindowDom = new Map();\n}\n\n/**\n * 清除掉未读信息\n * @param {[type]} user [description]\n * @return {[type]} [description]\n */\nChat.prototype.clearUnread = function(user) {\n user.unreadMsgCount = 0;\n middle.userAvatarComponent.userListScope.$apply();\n};\n\nChat.prototype.toggleChatView = function(user) {\n\n var chat = this;\n console.log(chat.chatWindow);\n console.log(this);\n\n console.log(chat);\n var userDom = chat.chatWindowDom.get(user.username);\n\n if (userDom === undefined || userDom === null) {\n userDom = chat.chatWindow.clone();\n chat.chatWindowDom.set(user.username, userDom);\n userDom.find('#chatWindow-username').html(user.username);\n userDom.find('#msg-input').on('keydown', function(event) {\n\n if (event.keyCode === 13) {\n // 回车\n chat.say();\n }\n });\n\n userDom.find('#say').click(function() {\n chat.say();\n });\n\n } else {\n\n console.log('userdom is not null');\n }\n\n msg_input = userDom.find(\"#msg-input\");\n msg_end = userDom.find(\"#msg_end\");\n\n console.log(msg_input);\n console.log(msg_end);\n\n $('#chatWindowDiv').replaceWith(userDom);\n};\n\n/**\n * 接收到消息,但不一定会显示出来,只有当前的窗口就是该消息来源时才会显示\n * @param {[type]} message [description]\n * @return {[type]} [description]\n */\nChat.prototype.receiveMessage = function(message) {\n playMsgComingPromptTone();\n var sendUserName = message.sendUser;\n if (sendUserName === this.currentChat.username) {\n // 正式当前聊天的\n message.avatar = this.currentChat.theUser.avatar;\n this.listen(message);\n } else {\n // 当前窗口并不是该用户\n var user = this.usersMap.get(sendUserName);\n // 未读消息加1\n if (user.unreadMsgCount === undefined) {\n user.unreadMsgCount = 0;\n }\n user.unreadMsgCount += 1;\n middle.userAvatarComponent.userListScope.$apply();\n }\n};\n\n/**\n * 该方法在会显示出 对方的消息\n * @param {[type]} message [description]\n * @return {[type]} [description]\n */\nChat.prototype.listen = function(message) {\n insertChatMsgLeft(message);\n msgScrollEnd();\n};\n\nChat.prototype.say = function() {\n var msg = msg_input.val();\n if (msg !== '') {\n msg_input.val(null);\n insertChatMsgRight(msg);\n msgScrollEnd();\n\n var letter = {\n directive: {\n send: {\n message: null\n }\n },\n message: {\n sendUser: chat.signinuser.username,\n content: msg\n }\n };\n if (chat.currentChat.username !== null) {\n // 单聊\n letter.message.receiveUser = chat.currentChat.username;\n letter.message.type = 'one';\n } else {\n // 群聊\n letter.message.receiveUser = chat.currentChat.chatname;\n letter.message.type = 'some';\n }\n\n // 发送到服务器\n this.connect.sendToUser(letter);\n }\n};\n\nChat.prototype.refreshUserList = function() {\n middle.userAvatarComponent.userListScope.$apply();\n};\n\nChat.prototype.signIn = function(username) {\n this.connect.sign_in(username);\n};\n\n// key username ,value 客户端 user\nChat.prototype.usersMap = new Map();\n\n// 引用设置项\nChat.prototype.setting = {\n msgSoundPrompt: true\n};\n\n/**\n * 设置是否开启消息声音提示,如果不传参数会在两种状态间切换\n * @param {[type]} value [description]\n * @return {[type]} [description]\n */\nChat.prototype.settingMsgSoundPrompt = function(value) {\n if (value === undefined) {\n this.setting.msgSoundPrompt = !this.setting.msgSoundPrompt;\n } else {\n this.setting.msgSoundPrompt = value;\n }\n};\n\nvar chat = new Chat();\nvar connect = new Connect(chat);\nchat.connect = connect;\n\n// 连接server\nconnect.connect(config.communication_server_host);\n\n// TODO 防止缓存的问题\ntemplateDiv.load('/public/app/template/template.html', function() {\n\n chatMsgRight = templateDiv.find(\"#msg-right>div\");\n chatMsgLeft = templateDiv.find(\"#msg-left>div\");\n chatWindow = templateDiv.find(\"#chatWindow>div\");\n\n // 加载完在赋值\n chat.chatWindow = chatWindow;\n\n});\n\nvar audio;\n\n$(function() {\n audio = document.getElementById('audio');\n});\n\nfunction playMsgComingPromptTone() {\n if (chat.setting.msgSoundPrompt) {\n audio.play();\n }\n}\n\n\nmodule.exports = chat;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./public/app/js/chat.js\n// module id = 3\n// module chunks = 0","var my_config = {\n // 通讯服务器地址\n communication_server_host: window.location.href\n};\n\nmodule.exports = my_config;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./public/app/js/config.js\n// module id = 4\n// module chunks = 0","var Pubsub = require('./pubsub');\n\n\nvar pubsub = new Pubsub();\n// 初始化事件\npubsub.addEvent(\"signinBack\");\npubsub.addEvent(\"signoutBack\");\npubsub.addEvent(\"msgfromUser\");\npubsub.addEvent('chat');\n\n\n\n/**\n * 聊天消息回调\n * @param content\n */\nfunction chatBack(content) {\n pubsub.emit('chat', content);\n}\n\n/**\n * 登录事件回调\n * @param content\n */\nfunction signInBack(content) {\n console.log(\"sign in success!\");\n pubsub.emit(\"signinBack\", content);\n}\n\n/**\n * 登出事件回调\n * @param content\n */\nfunction signOutBack(content) {\n pubsub.emit(\"signoutBack\", content);\n}\n\nvar public_chat;\n\nfunction Connect(chat) {\n this.chat = chat;\n public_chat = chat;\n this.socket = null;\n}\n\nConnect.prototype.connect = function(host) {\n var socket = io(host);\n this.socket = socket;\n\n // 以下是socketio 的内部事件\n socket.on('connect', function() {\n console.log(\"已连接到服务器\");\n });\n\n socket.on('event', function(data) {\n\n });\n\n socket.on('disconnect', function() {\n\n });\n\n socket.on('error', function(obj) {\n console.log(obj);\n });\n\n socket.on('reconnect', function(number) {\n console.log(number);\n });\n\n socket.on('reconnecting', function(number) {\n console.log(number);\n });\n\n socket.on('reconnet_error', function(obj) {\n console.log(obj);\n });\n\n /**\n * letter 是自定义的消息事件\n */\n socket.on('letter', function(letter) {\n console.log(letter);\n // letter = JSON.parse(letter);\n\n var key = Object.keys(letter.directive)[0];\n\n if (directive[key] === undefined) {\n console.log('directive ' + key + ' 未实现');\n } else {\n directive[key](letter);\n\n }\n\n });\n};\n\nConnect.prototype.deliver = function(letter) {\n this.socket.emit(\"letter\", JSON.stringify(letter));\n console.log(\"deliver a letter: \");\n console.log(JSON.stringify(letter));\n};\n\nConnect.prototype.sendToUser = function(letter) {\n this.deliver(letter);\n};\n\nConnect.prototype.sign_in = function(username) {\n var letter = {\n directive: {\n client: {\n sign_in: null\n }\n },\n user: {\n username: username\n }\n };\n this.deliver(letter);\n};\n\nConnect.prototype.user_presence = function(letter) {\n\n};\n\n/**\n * 通知服务器 本人用户名字\n * @param {[type]} username [description]\n * @return {[type]} [description]\n */\nConnect.prototype.setUsername = function(username) {\n // letter 如果不指定收件人,则 postoffice 处理\n // var letter = {};\n var letter = {\n directive: {\n set: {\n username: username\n }\n }\n };\n this.deliver(letter);\n};\n\n/**\n * 指令对象\n */\nfunction Directive() {\n\n}\n\nDirective.prototype.client = function(letter) {\n var client = {};\n // 有其他用户上线时会调用\n client.user_presence = function(letter) {\n var user = letter.user;\n user.avatar = genereateAvatarImg();\n public_chat.users.push(user);\n public_chat.usersMap.set(user.username, user);\n public_chat.refreshUserList();\n\n };\n // 登陆后加载当前已经登录的用户\n client.init_userList = function(letter) {\n\n // 这样使用 第二个参数是参数数组, 而其正好就是一个数组\n Array.prototype.push.apply(public_chat.users, letter.directive.client.init_userList);\n\n public_chat.users.forEach(function(user) {\n user.avatar = genereateAvatarImg();\n public_chat.usersMap.set(user.username, user);\n });\n\n public_chat.refreshUserList();\n };\n var key = Object.keys(letter.directive.client);\n client[key](letter);\n\n};\n\n// 随机生成一个用户的头像\nfunction genereateAvatarImg() {\n return '/public/app/img/avatar/avatar' + (Math.floor(Math.random() * 5) + 1) + '.png';\n}\n\nDirective.prototype.receive = function(letter) {\n var receive = {};\n receive.message = function(letter) {\n var message = letter.message;\n };\n public_chat.receiveMessage(letter.message);\n};\n\nvar directive = new Directive();\n\nmodule.exports = Connect;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./public/app/js/connect.js\n// module id = 5\n// module chunks = 0","function Pubsub() {\n this.handlers = {};\n}\n\nPubsub.prototype = {\n on: function(eventType, handler) {\n var self = this;\n if (!(eventType in self.handlers)) {\n self.handlers[eventType] = [];\n }\n self.handlers[eventType].push(handler);\n return this;\n },\n // 在emit 方法中 会回调 on 中设置的方法 ()\n emit: function(eventType) {\n var self = this;\n if (self.handlers[eventType] !== undefined) {\n var handlerArgs = arguments.slice(1);\n for (var i = 0; i < self.handlers[eventType].length; i++) {\n // 调用方法传递参数\n // 参数都来自于发出事件时的参数\n self.handlers[eventType][i].apply(self, handlerArgs);\n }\n } else {\n // 没有此事件的监听者\n }\n return this;\n },\n addEvent: function(eventType) {\n if (!(eventType in this.handlers)) {\n this.handlers[eventType] = [];\n }\n return this;\n }\n};\n\nmodule.exports = Pubsub;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./public/app/js/pubsub.js\n// module id = 6\n// module chunks = 0","var chat = require('../chat');\nvar userAvatarComponent = {\n userListScope: null\n};\n\n// angular 好像使用不了map\nangular.module('chatApp').component('userList', {\n template: `<div class='user-list'>\n <div class='user-list-item' ng-click='toggleChat(user)' ng-repeat='user in users'>\n <img class=\"user-avatar\" ng-src='{{user.avatar}}' alt=\"\" />\n <span>{{user.username}}</span>\n <span class=\"badge\">{{user.unreadMsgCount}}</span>\n </div>\n </div>`,\n controller: function UserListController($scope) {\n\n // 使用scope 是因为 在外界改变了 users 的值 为了使用 $scope.$apply方法\n $scope.users = chat.users;\n userAvatarComponent.userListScope = $scope;\n $scope.toggleChat = function(user) {\n chat.currentChat.username = user.username;\n chat.currentChat.theUser = user;\n chat.toggleChatView(user);\n user.unreadMsgCount = null;\n };\n }\n});\n\nmodule.exports = userAvatarComponent;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./public/app/js/ang/useravatar.component.js\n// module id = 7\n// module chunks = 0"],"sourceRoot":""}