PageRenderTime 56ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/app/views/layouts/application.html.erb_files/feedback-v2.js

https://github.com/ranaylor/sample_app
JavaScript | 275 lines | 220 code | 55 blank | 0 comment | 60 complexity | c990991b86719a112f1595033c9d0655 MD5 | raw file
  1. var GSFN;
  2. if(GSFN == undefined) {
  3. GSFN = {};
  4. }
  5. if(!GSFN.initialized) {
  6. GSFN.gId = function(id) {
  7. return document.getElementById(id);
  8. };
  9. GSFN.hasClassName = function(element, className) {
  10. var elementClassName = element.className;
  11. return (elementClassName.length > 0 && (elementClassName == className ||
  12. new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
  13. };
  14. GSFN.addClassName = function(element, className) {
  15. if (!GSFN.hasClassName(element, className))
  16. element.className += (element.className ? ' ' : '') + className;
  17. return element;
  18. };
  19. GSFN.removeClassName = function(element, className) {
  20. var newClass = GSFN.strip(element.className.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' '));
  21. element.className = newClass;
  22. return element;
  23. };
  24. GSFN.strip = function(string) {
  25. return string.replace(/^\s+/, '').replace(/\s+$/, '');
  26. };
  27. GSFN.add_css = function(css_content) {
  28. var head = document.getElementsByTagName('head')[0];
  29. var style = document.createElement('style');
  30. style.type = 'text/css';
  31. if(style.styleSheet) {
  32. style.styleSheet.cssText = css_content;
  33. } else {
  34. rules = document.createTextNode(css_content);
  35. style.appendChild(rules);
  36. }
  37. head.appendChild(style);
  38. }
  39. GSFN.initialized = true;
  40. }
  41. GSFN.feedback_widget = function(options) {
  42. this.widget_disabled = false;
  43. this.options = options;
  44. this.is_ssl = ("https:" == document.location.protocol);
  45. if(!this.options.display){ this.options.display = "overlay";}
  46. if(this.is_ssl) {
  47. this.feedback_base_url = this.local_ssl_base_url;
  48. this.asset_base_url = this.s3_ssl_base_url;
  49. } else {
  50. this.feedback_base_url = this.local_base_url;
  51. this.asset_base_url = this.s3_base_url;
  52. }
  53. if(this.options.local_assets == true) {
  54. this.asset_base_url = this.feedback_base_url;
  55. }
  56. var disable_tagging = this.options.auto_tag == false;
  57. this.query = [];
  58. if(!disable_tagging){
  59. if(this.options.product){
  60. this.query.push("product=" + encodeURIComponent(this.options.product));
  61. }
  62. if(this.options.tag){
  63. this.query.push("tag=" + encodeURIComponent(this.options.tag));
  64. }
  65. if(this.options.user_defined_code){
  66. this.query.push("user_defined_code=" + encodeURIComponent(this.options.user_defined_code));
  67. }
  68. }
  69. if(this.options.display){
  70. this.query.push("display=" + encodeURIComponent(this.options.display));
  71. }
  72. if(this.options.style){
  73. this.query.push("style=" + encodeURIComponent(this.options.style));
  74. }
  75. if(this.options.popular_topics){
  76. this.query.push("popular_topics=" + encodeURIComponent(this.options.popular_topics));
  77. }
  78. if(this.options.limit){
  79. this.query.push("limit=" + encodeURIComponent(this.options.limit));
  80. }
  81. if(this.options.problem){
  82. this.query.push("problem=" + encodeURIComponent(this.options.problem));
  83. }
  84. if(this.options.powered_by){
  85. this.query.push("powered_by=" + encodeURIComponent(this.options.powered_by));
  86. }
  87. if(this.options.custom_css){
  88. this.query.push("custom_css=" + encodeURIComponent(this.options.custom_css));
  89. }
  90. if(this.options.auto_tag == false){
  91. this.query.push("auto_tag=" + encodeURIComponent(this.options.auto_tag));
  92. }
  93. if(this.options.interstitial) {
  94. this.query.push("interstitial=" + encodeURIComponent(this.options.interstitial));
  95. }
  96. if(this.options.community_base_url) {
  97. this.query.push("community_base_url=" + encodeURIComponent(this.options.community_base_url));
  98. }
  99. if(this.options.document_domain) {
  100. this.query.push("document_domain=" + encodeURIComponent(this.options.document_domain));
  101. }
  102. var fastpass = this.get_fastpass_url(this.options);
  103. if(fastpass) {
  104. this.query.push("fastpass=" + encodeURIComponent(fastpass));
  105. }
  106. this.query_string = "?" + this.query.join("&");
  107. this.feedback_url = this.feedback_base_url + "/" + this.options.company + "/feedback/topics/new" + this.query_string;
  108. this.options = options ? options : {};
  109. this.options.placement = this.options.placement ? this.options.placement : 'left';
  110. this.options.color = this.options.color ? this.options.color : '#222';
  111. if(this.options.display == 'overlay') {
  112. this.initial_iframe_url = this.empty_url();
  113. if(!this.options.width) { this.options.width = "658px"; }
  114. if(!this.options.height) { this.options.height = "100%"; }
  115. } else {
  116. this.initial_iframe_url = this.feedback_url;
  117. if(!this.options.width) { this.options.width = "100%"; }
  118. if(!this.options.height) { this.options.height = "500px"; }
  119. }
  120. if (this.widget_disabled){
  121. this.iframe_html = '<div id="fdbk_iframe" style="position:relative; top: 20px; margin:20px;background:orange;color:purple;font-size:72px; padding: 20px;">'+
  122. 'WIDGETS ARE UNAVAILABLE LOL'+
  123. '</div>';
  124. }
  125. else {
  126. this.iframe_html = '<iframe id="fdbk_iframe" allowTransparency="true" scrolling="no" frameborder="0" class="loading"' +
  127. ' src="' + this.initial_iframe_url + '"' +
  128. ' width="' + this.options.width + '"' +
  129. ' height="' + this.options.height + '"' +
  130. ' style="width: ' + this.options.width + '; height: ' + this.options.height + ';"></iframe>';
  131. }
  132. this.tab_html = '<a href="#" id="fdbk_tab" class="fdbk_tab_'+this.options.placement+'" style="background-color:'+this.options.color+'">FEEDBACK</a>';
  133. this.overlay_html = '<div id="fdbk_overlay" style="display:none">' +
  134. '<div id="fdbk_container">' +
  135. '<a href="#" id="fdbk_close"></a>' +
  136. this.iframe_html +
  137. '</div>' +
  138. '<div id="fdbk_screen"></div>' +
  139. '</div>';
  140. if(this.options.display == 'overlay') {
  141. raw_css = "#fdbk_overlay {\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n z-index: 1000000;\n position: absolute; }\n\n#fdbk_screen {\n top: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n position: absolute;\n background-color: #000;\n opacity: 0.45;\n -moz-opacity: 0.45;\n filter: alpha(opacity=45); }\n\n#fdbk_container {\n width: 680px;\n height: 640px;\n margin: 0 auto;\n z-index: 2;\n position: relative; }\n #fdbk_container iframe {\n width: 658px;\n height: 100%;\n margin: 20px;\n background: transparent; }\n #fdbk_container iframe.loading {\n background: transparent url(https://s3.amazonaws.com/getsatisfaction.com/images/fb_loading.png) no-repeat; }\n\na#fdbk_tab {\n top: 25%;\n left: 0;\n width: 42px;\n height: 102px;\n color: #FFF;\n cursor: pointer;\n text-indent: -100000px;\n overflow: hidden;\n position: fixed;\n z-index: 100000;\n margin-left: -7px;\n background-image: url(https://s3.amazonaws.com/getsatisfaction.com/images/feedback_trans_tab.png);\n _position: absolute;\n _background-image: url(https://s3.amazonaws.com/getsatisfaction.com/images/feedback_tab_ie6.png); }\n a#fdbk_tab:hover {\n margin-left: -4px; }\n\na.fdbk_tab_right {\n right: 0 !important;\n left: auto !important;\n margin-right: 0 !important;\n margin-left: auto !important;\n width: 35px !important; }\n a.fdbk_tab_right:hover {\n width: 38px !important;\n margin-right: 0 !important;\n margin-left: auto !important; }\n\na.fdbk_tab_bottom {\n top: auto!important;\n bottom: 0 !important;\n left: 20% !important;\n height: 38px !important;\n width: 102px !important;\n background-position: 0 -102px !important;\n margin-bottom: -7px !important;\n margin-left: auto !important; }\n a.fdbk_tab_bottom:hover {\n margin-bottom: -4px !important;\n margin-left: auto !important; }\n\na.fdbk_tab_hidden {\n display: none !important; }\n\na#fdbk_close {\n position: absolute;\n cursor: pointer;\n outline: none;\n top: 0;\n left: 0;\n z-index: 4;\n width: 42px;\n height: 42px;\n overflow: hidden;\n background-image: url(https://s3.amazonaws.com/getsatisfaction.com/images/feedback-close.png);\n _background: none;\n _filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='https://s3.amazonaws.com/getsatisfaction.com/images/feedback-close.png', sizingMethod='crop'); }\n a#fdbk_close:hover {\n background-position: -42px 0; }\n\n.feedback_tab_on embed, .feedback_tab_on select, .feedback_tab_on object {\n visibility: hidden; }\n";
  142. replacer_regex = new RegExp(this.s3_ssl_base_url, "g");
  143. translated_css = raw_css.replace(replacer_regex, this.asset_base_url);
  144. GSFN.add_css(translated_css);
  145. if(this.options.container) {
  146. var container_el = GSFN.gId(this.options.container);
  147. container_el.innerHTML = this.tab_html + this.overlay_html;
  148. } else {
  149. document.write(this.tab_html);
  150. document.write(this.overlay_html);
  151. }
  152. var feedback_obj = this;
  153. GSFN.gId('fdbk_tab').onclick = function() { feedback_obj.show(); return false; }
  154. GSFN.gId('fdbk_close').onclick = function() { feedback_obj.hide(); return false; }
  155. GSFN.gId('fdbk_iframe').setAttribute("src", this.empty_url());
  156. } else {
  157. if(this.options.container) {
  158. var container_el = GSFN.gId(this.options.container);
  159. container_el.innerHTML = this.iframe_html;
  160. } else {
  161. document.write(this.iframe_html);
  162. }
  163. }
  164. };
  165. GSFN.feedback_widget.prototype = {
  166. local_base_url: "http://getsatisfaction.com",
  167. local_ssl_base_url: "https://getsatisfaction.com",
  168. s3_base_url: "http://s3.amazonaws.com/getsatisfaction.com",
  169. s3_ssl_base_url: "https://s3.amazonaws.com/getsatisfaction.com",
  170. asset_url: function(asset) {
  171. return this.asset_base_url + asset;
  172. },
  173. empty_url : function() {
  174. return this.asset_url("/images/transparent.gif");
  175. },
  176. set_position : function() {
  177. this.scroll_top = document.documentElement.scrollTop || document.body.scrollTop;
  178. this.scroll_height = document.documentElement.scrollHeight;
  179. this.client_height = window.innerHeight || document.documentElement.clientHeight;
  180. GSFN.gId('fdbk_screen').style.height = this.scroll_height+"px";
  181. GSFN.gId('fdbk_container').style.top = this.scroll_top+(this.client_height*0.1)+"px";
  182. },
  183. show : function() {
  184. GSFN.gId('fdbk_iframe').setAttribute("src", this.feedback_url);
  185. if (GSFN.gId('fdbk_iframe').addEventListener) {
  186. GSFN.gId('fdbk_iframe').addEventListener("load", this.loaded, false);
  187. } else if (GSFN.gId('fdbk_iframe').attachEvent) {
  188. GSFN.gId('fdbk_iframe').attachEvent("onload", this.loaded);
  189. }
  190. this.set_position();
  191. GSFN.addClassName(document.getElementsByTagName('html')[0], 'feedback_tab_on');
  192. GSFN.gId('fdbk_overlay').style.display = "block";
  193. },
  194. hide : function() {
  195. if (GSFN.gId('fdbk_iframe').addEventListener) {
  196. GSFN.gId('fdbk_iframe').removeEventListener("load", this.loaded, false);
  197. } else if (GSFN.gId('fdbk_iframe').attachEvent) {
  198. GSFN.gId('fdbk_iframe').detachEvent("onload", this.loaded);
  199. }
  200. GSFN.gId('fdbk_overlay').style.display = "none";
  201. GSFN.gId('fdbk_iframe').setAttribute("src", this.empty_url());
  202. GSFN.gId('fdbk_iframe').className = "loading";
  203. GSFN.removeClassName(document.getElementsByTagName('html')[0], 'feedback_tab_on');
  204. },
  205. loaded : function() {
  206. GSFN.gId('fdbk_iframe').className = "loaded";
  207. },
  208. get_fastpass_url : function(options) {
  209. if(options.fastpass){
  210. return options.fastpass;
  211. }
  212. var script_tags = document.getElementsByTagName('script');
  213. for (var i = 0; i < script_tags.length; i++) {
  214. var tag = script_tags[i];
  215. if(tag.src.match(/\/fastpass/ && tag.src.match(/oauth/))){
  216. return tag.src;
  217. }
  218. }
  219. }
  220. }