index-jquery.min.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. var chatUI = function (e) {
  2. function t(e, t) {
  3. var n, i = t || 200;
  4. return function () {
  5. var t = this, c = arguments;
  6. clearTimeout(n), n = setTimeout(function () {
  7. e.apply(t, Array.prototype.slice.call(c))
  8. }, i)
  9. }
  10. }
  11. var n = {};
  12. return n.container = e.append('<div id="cb-container"></div>'), n.config = null, n.bubbles = [], n.ID = 0, n.keys = {}, n.types = {}, n.inputState = !1, n.height = 0, n.scroll = n.container.append('<div id="cb-flow"></div>'), n.flow = n.scroll.append('<div class="cb-inner"></div>'), n.input = n.container.append('<div id="cb-input" style="display:none;"></div>'), n.input.append('<div id="cb-input-container"><input type="text" /></div>'), n.input.append("<button>+</button>"), n.updateContainer = function () {
  13. n.height = n.container.outerHeight(), n.flow.css("padding-top", n.height + "px"), n.scroll.css("height", n.height - (1 == n.inputState ? 77 : 0) + "px"), n.scrollTo("end")
  14. }, n.addBubble = function (e, t) {
  15. if (t = t || function () {
  16. }, e.type in n.types) {
  17. n.ID++;
  18. var i = n.ID;
  19. n.bubbles.push({id: i, type: e.type}), n.keys[i] = n.bubbles.length - 1;
  20. var c = n.flow.append('<div class="cb-segment cb-' + e.class + " cb-bubble-type-" + e.type + '" id="cb-segment-' + i + '"></div>');
  21. c.append('<div class="cb-icon"></div>');
  22. var l = c.append('<div class="cb-bubble ' + e.class + '"><div class="cb-inner"></div></div>');
  23. return c.append("<hr />"), n.types[e.type](l, e, t), n.scrollTo("end"), n.ID
  24. }
  25. throw"Unknown bubble type"
  26. }, n.types.select = function (e, t, n) {
  27. t.value.forEach(function (t) {
  28. e.append('<div class="cb-choice">' + t.label + "</div>").on("click", function () {
  29. $(this).addClass("cb-active"), $(this).parent().find(".cb-choice").on("click", function () {
  30. }), n(t)
  31. })
  32. })
  33. }, n.types.text = function (e, t, i) {
  34. "delay" in t && t.delay ? (e.append('<div class="cb-waiting"><div class="circle"></div><div class="circle"></div><div class="circle"></div></div>'), setTimeout(function () {
  35. e.find(".cb-waiting").remove(), n.appendText(e, t, i)
  36. }, isNaN(t.delay) ? 1e3 : t.delay)) : n.appendText(e, t, i)
  37. }, n.appendText = function (e, t, n) {
  38. e.attr("class", "bubble-ctn-" + t.class).append("<p>" + t.value + "</p>").animate({
  39. width: "auto",
  40. opacity: 1
  41. }, 200), chat.scrollTo("end"), n()
  42. }, n.showInput = function (e, t) {
  43. n.inputState = !0, t ? n.input.find("input").on("change", function () {
  44. t($(this).val())
  45. }) : n.input.find("input").on("change", function () {
  46. }), n.input.find("input").on("keyup", function (t) {
  47. 13 == t.keyCode && (e(n.input.find("input").val()), n.input.find("input").val(""))
  48. }), n.input.find("button").on("click", function () {
  49. e(n.input.find("input").val()), n.input.find("input").val("")
  50. }), n.input.css("display", "block"), n.updateContainer(), n.input.find("input").focus(), n.scrollTo("end")
  51. }, n.hideInput = function () {
  52. n.input.find("input").blur(), n.input.css("display", "none"), n.inputState = !1, n.updateContainer(), n.scrollTo("end")
  53. }, n.removeBubble = function (e) {
  54. n.flow.find("#cb-segment-" + e).remove(), n.bubbles.splice(n.keys[e], 1), delete n.keys[e]
  55. }, n.removeBubbles = function (e) {
  56. for (var t = n.bubbles.length - 1; t >= n.keys[e]; t--) n.removeBubble(n.bubbles[t].id)
  57. }, n.getBubble = function (e) {
  58. return {el: n.flow.find("#cb-segment-" + e), obj: n.bubbles[n.keys[e]]}
  59. }, n.scrollTo = function (e) {
  60. var t = 0;
  61. "end" == e && (t = document.getElementById("cb-flow").scrollHeight - (window.innerHeight - 77)), $("#cb-flow").stop().animate({scrollTop: t}, 300)
  62. }, $(window).on("resize", t(function () {
  63. n.updateContainer()
  64. }, 200)), n.updateContainer(), n
  65. };