groove.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. !function(window) {
  2. window.Groove = {
  3. init: function(options) {
  4. this._options = options;
  5. if (typeof grooveOnReady != 'undefined') {grooveOnReady();}
  6. },
  7. createTicket: function(params, callback) {
  8. var postData = serialize({
  9. "ticket[enduser_name]": params["name"],
  10. "ticket[enduser_email]": params["email"],
  11. "ticket[title]": params["subject"],
  12. "ticket[enduser_about]": params["about"],
  13. "ticket[label_string]": params["labels"],
  14. "ticket[comments_attributes][0][body]": params["message"]
  15. });
  16. sendRequest(this._options.widget_ticket_url, function(req) {
  17. if (callback) {callback(req);}
  18. }, postData);
  19. }
  20. };
  21. // http://www.quirksmode.org/js/xmlhttp.html
  22. function sendRequest(url, callback, postData) {
  23. var req = createXMLHTTPObject();
  24. if (!req) return;
  25. var method = (postData) ? "POST" : "GET";
  26. req.open(method, url, true);
  27. if (postData){
  28. try {
  29. req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
  30. }
  31. catch(e) {
  32. req.contentType = 'application/x-www-form-urlencoded';
  33. };
  34. };
  35. req.onreadystatechange = function () {
  36. if (req.readyState != 4) return;
  37. callback(req);
  38. }
  39. if (req.readyState == 4) return;
  40. req.send(postData);
  41. }
  42. var XMLHttpFactories = [
  43. function () {return new XDomainRequest()},
  44. function () {return new XMLHttpRequest()},
  45. function () {return new ActiveXObject("Msxml2.XMLHTTP")},
  46. function () {return new ActiveXObject("Msxml3.XMLHTTP")},
  47. function () {return new ActiveXObject("Microsoft.XMLHTTP")}
  48. ];
  49. function createXMLHTTPObject() {
  50. var xmlhttp = false;
  51. for (var i = 0; i < XMLHttpFactories.length; i++) {
  52. try {
  53. xmlhttp = XMLHttpFactories[i]();
  54. }
  55. catch (e) {
  56. continue;
  57. }
  58. break;
  59. }
  60. return xmlhttp;
  61. }
  62. function serialize(obj) {
  63. var str = [];
  64. for(var p in obj) {
  65. if (obj[p]) {
  66. str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
  67. }
  68. }
  69. return str.join("&");
  70. }
  71. if (typeof grooveOnLoad != 'undefined') {grooveOnLoad();}
  72. }(window);
  73. Groove.init({"widget_ticket_url":"https://sharelatex-accounts.groovehq.com/widgets/f5ad3b09-7d99-431b-8af5-c5725e3760ce/ticket.json"});