WME Chat Resize

Adds resize buttons to the chat window

当前为 2014-11-03 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME Chat Resize
  3. // @description Adds resize buttons to the chat window
  4. // @namespace RickZabel@gmail.com
  5. // @grant none
  6. // @grant GM_info
  7. // @version 0.0.51
  8. // @match https://editor-beta.waze.com/*editor/*
  9. // @match https://www.waze.com/*editor/*
  10. // @author Rick Zabel '2014
  11. // @license MIT/BSD/X11
  12. // ==/UserScript==
  13.  
  14.  
  15. /* Changelog
  16. * 0.0.51 - more tweaks applied css for chat jumper buttons
  17. * 0.0.44 - More css tweaks
  18. * 0.0.43 - Working with SeekingSerenity we found out that the tall chat on some resolutions the top of the chat would be unreachable so I switched from px to %
  19. * 0.0.42 - very minor 4 pixel changes to the normal chat height
  20. * 0.0.4 - removed the open space on the right of the chat
  21. * 0.0.3 - few div size corrections
  22. * 0.0.2 - made the buttons not Interfere with each other
  23. * 0.0.1 - initial version
  24. */
  25.  
  26. var WMEChatResizeVersion = "0.0.51";
  27.  
  28. var WMEChatResizeVersionUpdateNotes = "WME Chat Resize has been updated to " + WMEChatResizeVersion;
  29. WMEChatResizeVersionUpdateNotes = WMEChatResizeVersionUpdateNotes + "\r\n" + "This script adds buttons to the chat title bar and removes the space on the right of the chat.";
  30. WMEChatResizeVersionUpdateNotes = WMEChatResizeVersionUpdateNotes + "\r\n" + "The buttons will let you hide or show the users list";
  31. WMEChatResizeVersionUpdateNotes = WMEChatResizeVersionUpdateNotes + " " + "and will let you make the chat tall or normal heights.";
  32. WMEChatResizeVersionUpdateNotes = WMEChatResizeVersionUpdateNotes + "\r\n" + "this version brings more css tweaks to chat jumper's buttons.";
  33. WMEChatResizeVersionUpdateNotes = WMEChatResizeVersionUpdateNotes + "\r\n" + "There still something going on with waze resetting the message space to the default height once and a while. for now i only seen it on the tall chat and will look into it more later!";
  34. WMEChatResizeVersionUpdateNotes = WMEChatResizeVersionUpdateNotes + "\n" + "As usual let me know if there are any issues -RickZabel";
  35.  
  36. //alert the user in WMEChatResize version updates
  37. if (localStorage.getItem('WMEChatResizeVersion') == WMEChatResizeVersion) {
  38. console.log("UR Comments Version " + WMEChatResizeVersion);
  39. } else {
  40. alert(WMEChatResizeVersionUpdateNotes);
  41. localStorage.setItem('WMEChatResizeVersion', WMEChatResizeVersion);
  42. }
  43.  
  44.  
  45.  
  46. //setup some global vars to be used in the functions
  47. //currently i plan on lettings the chat default to normal on page load
  48. window.WMEChatResizeHeight = "short"; //short or tall
  49. window.WMEChatResizeUsers = "shown"; //shown or hidden
  50.  
  51.  
  52.  
  53.  
  54.  
  55. function WMEChatResize_bootstrap() {
  56. var bGreasemonkeyServiceDefined = false;
  57. try {
  58. var ver = window.navigator.appVersion.match(/Chrome\/(.*?) /)[1];
  59. } catch(err) {
  60. var ver = null;
  61. }
  62. if (null !== ver) {
  63. var itschrome = true;
  64. ///ver = "27.0.1438.7"; // last old working version
  65. // example: 32.0.1700.107
  66. // [0] - major versin
  67. // [2] - minor version
  68. ver = ver.split(".");
  69. ver[0] = parseInt(ver[0]);
  70. ver[2] = parseInt(ver[2]);
  71. if (ver[0] > 27) {
  72. var newmethod = true;
  73. } else if (ver[0] == 27) {
  74. if (ver[2] <= 1438) {
  75. var newmethod = false;
  76. } else {
  77. var newmethod = true;
  78. }
  79. } else {
  80. var newmethod = false;
  81. }
  82. } else {
  83. var itschrome = false;
  84. var newmethod = false;
  85. }
  86. try
  87. {
  88. if ("object" === typeof Components.interfaces.gmIGreasemonkeyService) // Firefox tells that "Components" is deprecated
  89. {
  90. bGreasemonkeyServiceDefined = true;
  91. }
  92. } catch (err) { };
  93. try
  94. {
  95. if ("object" === typeof GM_info)
  96. {
  97. bGreasemonkeyServiceDefined = true;
  98. }
  99. } catch (err) { };
  100. if ( "undefined" === typeof unsafeWindow || ! bGreasemonkeyServiceDefined)
  101. {
  102. try {
  103. unsafeWindow = ( function ()
  104. {
  105. var dummyElem = document.createElement('p');
  106. dummyElem.setAttribute ('onclick', 'return window;');
  107. return dummyElem.onclick ();
  108. } ) ();
  109. }
  110. catch (err)
  111. {
  112. //Ignore.
  113. }
  114. }
  115. /* FIX IT !!!! */
  116. var itschrome = true;
  117. var newmethod = true;
  118. var bGreasemonkeyServiceDefined = false;
  119. //And check again for new chrome, and no tamper(grease)monkey
  120. if ( itschrome && newmethod && !bGreasemonkeyServiceDefined)
  121. {
  122. //use "dirty" but effective method with injection to document
  123. var DLscript = document.createElement("script");
  124. DLscript.textContent ='unsafeWindow=window; \n'+ // need this for compatibility
  125. WMEChatResize_init.toString()+' \n'+
  126. 'WMEChatResize_init();';
  127. DLscript.setAttribute("type", "application/javascript");
  128. document.body.appendChild(DLscript);
  129. document.body.removeChild(DLscript);
  130. } else {
  131. /* begin running the code! */
  132. WMEChatResize_init();
  133. ///setTimeout(WMEChatResize_init,200);
  134. }
  135. }
  136.  
  137. function WMEChatResize_init() {
  138. WMEChatResize = {
  139. last: new Array(),
  140. isLast: false,
  141. isLSsupported: false,
  142. zoom: false
  143. };
  144. WMEChatResize.init = function() {
  145. //add the buttons to the chat title bar
  146. //hide/show user list
  147. var b = $('<button id="WMEChatResize-HideUsers" class="WMEChatResize" style="position:absolute;Right:50px;color:#CC0000" title="Hide Users" type="button">></button>');
  148. b.click (WMEChatResize.Hide);
  149. var c = $('<button id="WMEChatResize-ShowUsers" class="WMEChatResize" style="position:absolute;Right:50px;color:#CC0000" title="Show Users" type="button"><</button>');
  150. c.click (WMEChatResize.Show);
  151. $("#chat .header").append(b);
  152. $("#chat .header").append(c);
  153. document.getElementById('WMEChatResize-ShowUsers').style.visibility="hidden";
  154. //tall / short chat
  155. var d = $('<button id="WMEChatResize-ShortChat" class="WMEChatResize" style="position:absolute;Right:70px;color:#CC0000" title="Short Chat" type="button">v</button>');
  156. d.click (WMEChatResize.ShortChat);
  157. var e = $('<button id="WMEChatResize-TallChat" class="WMEChatResize" style="position:absolute;Right:70px;color:#CC0000" title="Tall Chat" type="button">^</button>');
  158. e.click (WMEChatResize.TallChat);
  159. // var f = $('/r<button id="WMEChatResize-TallChat" class="WMEChatResize" style="position:absolute;Right:70px;color:#CC0000;" title="Very short Chat" type="button">vv</button>');
  160. //f.click (WMEChatResize.TallChat);
  161. $("#chat .header").append(d);
  162. $("#chat .header").append(e);
  163. //$("#chat .header").append(f);
  164. // since the chat jumper link isnt alway present I had to apply the style to the head
  165. var g = $('<style type="text/css">#ChatJumper-JUMP.ChatJumper, #ChatJumper-JUMP-clear { font-size: 11px !important; padding-left: 1px !important; padding-right: 1px !important; }</style>');
  166. $("head").append(g);
  167. document.getElementById('WMEChatResize-ShortChat').style.visibility="hidden";
  168. //move the chat all the way to the right
  169. document.getElementById('chat-overlay').style.right="0px";
  170. //shrink down the chat title bar stuff to work with chat jumper
  171. //single-room-label
  172. var divsToModify = document.getElementsByClassName("single-room-label");
  173. for(var i = 0; i < divsToModify.length; i++) {
  174. divsToModify[i].style.fontSize="11px";
  175. divsToModify[i].style.paddingLeft="8px";
  176. }
  177. //dropdown-toggle
  178. var divsToModify = document.getElementsByClassName("dropdown-toggle");
  179. for(var i = 0; i < divsToModify.length; i++) {
  180. divsToModify[i].style.paddingLeft="5px";
  181. divsToModify[i].style.paddingRight="0px";
  182. }
  183. //status
  184. var divsToModify = document.getElementsByClassName("status");
  185. for(var i = 0; i < divsToModify.length; i++) {
  186. divsToModify[i].style.fontSize="11px";
  187. }
  188. /* only works on the one present on load
  189. // class ChatJumper
  190. var x = document.getElementsByClassName("ChatJumper");
  191. //go trough all of the eletemnts that match the requested class
  192. for(var i = 0, j=x.length; i<j; i++){
  193. //var btnHtml = (i + " - " + x[i].innerHTML);
  194. // alert (btnHtml);
  195. x[i].style.fontSize="11px";
  196. x[i].style.paddingLeft="1px";
  197. x[i].style.paddingRight="1px";
  198. }
  199. */
  200. }
  201. WMEChatResize.Hide = function() {
  202. //hide users list
  203. var divsToHide = document.getElementsByClassName("users");
  204. for(var i = 0; i < divsToHide.length; i++) {
  205. divsToHide[i].style.visibility="hidden";
  206. }
  207. //document.getElementById('chat-overlay').style.width="455px"; //497
  208. document.getElementById('chat').style.width="275px"; //497
  209. var divsToModify = document.getElementsByClassName("chat-body");
  210. for(var i = 0; i < divsToModify.length; i++) {
  211. divsToModify[i].style.width="275px"; //497
  212. }
  213. //messages width
  214. var divsToModify = document.getElementsByClassName("messages");
  215. for(var i = 0; i < divsToModify.length; i++) {
  216. divsToModify[i].style.width="348px"; //348
  217. }
  218. //message-list width
  219. var divsToModify = document.getElementsByClassName("message-list");
  220. for(var i = 0; i < divsToModify.length; i++) {
  221. divsToModify[i].style.width="275px"; //318
  222. divsToModify[i].style.maxHeight="246px"; //318
  223. }
  224. //new-message width
  225. var divsToModify = document.getElementsByClassName("new-message");
  226. for(var i = 0; i < divsToModify.length; i++) {
  227. divsToModify[i].style.width="275px"; // 305
  228. }
  229. //message-inpuit width
  230. var divsToModify = document.getElementsByClassName("message-input");
  231. for(var i = 0; i < divsToModify.length; i++) {
  232. divsToModify[i].style.width="100%"; // 273
  233. }
  234. //unread-messages-notification width
  235. var divsToModify = document.getElementsByClassName("unread-messages-notification");
  236. for(var i = 0; i < divsToModify.length; i++) {
  237. divsToModify[i].style.width="275px"; //332
  238. }
  239. if(WMEChatResizeHeight == "short") { //short or tall
  240. document.getElementById('chat').style.height="353px";
  241. } else {
  242. //tall
  243. document.getElementById('chat').style.height="100%"; //600px
  244. }
  245. document.getElementById('WMEChatResize-HideUsers').style.visibility="hidden";
  246. document.getElementById('WMEChatResize-ShowUsers').style.visibility="visible";
  247. }
  248. WMEChatResize.Show = function() {
  249. //show chat
  250. var divsToHide = document.getElementsByClassName("users");
  251. for(var i = 0; i < divsToHide.length; i++) {
  252. divsToHide[i].style.visibility="visible";
  253. }
  254. // document.getElementById('chat-overlay').style.width="497px"; //497
  255. document.getElementById('chat').style.width="497px"; //497
  256. var divsToModify = document.getElementsByClassName("chat-body");
  257. for(var i = 0; i < divsToModify.length; i++) {
  258. divsToModify[i].style.width="497px"; //497
  259. }
  260. //messages width
  261. var divsToModify = document.getElementsByClassName("messages");
  262. for(var i = 0; i < divsToModify.length; i++) {
  263. divsToModify[i].style.width="350px"; //348
  264. }
  265. //message-list width
  266. var divsToModify = document.getElementsByClassName("message-list");
  267. for(var i = 0; i < divsToModify.length; i++) {
  268. divsToModify[i].style.width="348px"; //318
  269. divsToModify[i].style.maxHeight="246px"; //318
  270. }
  271. //new-message width
  272. var divsToModify = document.getElementsByClassName("new-message");
  273. for(var i = 0; i < divsToModify.length; i++) {
  274. divsToModify[i].style.width="350px"; // 305
  275. }
  276. //message-input width
  277. var divsToModify = document.getElementsByClassName("message-input");
  278. for(var i = 0; i < divsToModify.length; i++) {
  279. divsToModify[i].style.width="100%"; // 273
  280. }
  281. //unread-messages-notification width
  282. var divsToModify = document.getElementsByClassName("unread-messages-notification");
  283. for(var i = 0; i < divsToModify.length; i++) {
  284. divsToModify[i].style.width="332px"; //332
  285. }
  286. if(WMEChatResizeHeight == "short") { //short or tall
  287. document.getElementById('chat').style.height="353px";
  288. } else {
  289. //tall
  290. document.getElementById('chat').style.height="100%"; //600px
  291. }
  292. document.getElementById('WMEChatResize-HideUsers').style.visibility="visible";
  293. document.getElementById('WMEChatResize-ShowUsers').style.visibility="hidden";
  294. }
  295. WMEChatResize.ShortChat = function() {
  296. WMEChatResizeHeight = "short";
  297. document.getElementById('WMEChatResize-ShortChat').style.visibility="hidden";
  298. document.getElementById('WMEChatResize-TallChat').style.visibility="visible";
  299. //change the chat height
  300. document.getElementById('chat').style.height="357px";
  301. //change chat-body
  302. var divsToModify = document.getElementsByClassName("chat-body");
  303. for(var i = 0; i < divsToModify.length; i++) {
  304. divsToModify[i].style.height="314px";
  305. }
  306. //messages height
  307. var divsToModify = document.getElementsByClassName("messages");
  308. for(var i = 0; i < divsToModify.length; i++) {
  309. divsToModify[i].style.height="314px";
  310. }
  311. //message-list height
  312. var divsToModify = document.getElementsByClassName("message-list");
  313. for(var i = 0; i < divsToModify.length; i++) {
  314. divsToModify[i].style.height="250px";
  315. divsToModify[i].style.maxHeight="250px";
  316. }
  317. //change users height
  318. var divsToModify = document.getElementsByClassName("users");
  319. for(var i = 0; i < divsToModify.length; i++) {
  320. divsToModify[i].style.height="310px";
  321. }
  322. document.getElementById('chat-overlay').style.bottom="24px";
  323. document.getElementById('chat-overlay').style.height="353px";
  324. }
  325. WMEChatResize.TallChat = function() {
  326. WMEChatResizeHeight = "tall";
  327. document.getElementById('WMEChatResize-ShortChat').style.visibility="visible";
  328. document.getElementById('WMEChatResize-TallChat').style.visibility="hidden";
  329. //change the chat height
  330. document.getElementById('chat').style.height="100%";
  331. //change chat-body
  332. var divsToModify = document.getElementsByClassName("chat-body");
  333. for(var i = 0; i < divsToModify.length; i++) {
  334. divsToModify[i].style.height="95%";
  335. }
  336. //messages height
  337. var divsToModify = document.getElementsByClassName("messages");
  338. for(var i = 0; i < divsToModify.length; i++) {
  339. divsToModify[i].style.height="90%";
  340. }
  341. //message-list height
  342. var divsToModify = document.getElementsByClassName("message-list");
  343. for(var i = 0; i < divsToModify.length; i++) {
  344. divsToModify[i].style.height="90%";
  345. divsToModify[i].style.maxHeight="90%";
  346. }
  347. //change users height
  348. var divsToModify = document.getElementsByClassName("users");
  349. for(var i = 0; i < divsToModify.length; i++) {
  350. divsToModify[i].style.height="95%";
  351. divsToModify[i].style.maxHeight="95%";
  352. }
  353. document.getElementById('chat-overlay').style.bottom="24px";
  354. document.getElementById('chat-overlay').style.height="95%";
  355. }
  356. WMEChatResize.startcode = function () {
  357. // Check if WME is loaded, if not, waiting a moment and checks again. if yes init WMEChatResize
  358. try {
  359. if ("undefined" != typeof unsafeWindow.W.model.chat.rooms._events.listeners.add[0].obj.userPresenters[unsafeWindow.Waze.model.loginManager.user.id] ) {
  360. console.log("WMEChatResize ready to resize");
  361. WMEChatResize.init()
  362. } else {
  363. setTimeout(WMEChatResize.startcode, 200);
  364. }
  365. } catch(err) {
  366. setTimeout(WMEChatResize.startcode, 200);
  367. }
  368. }
  369. //setTimeout(WMEChatResize.startcode, 5000);
  370. WMEChatResize.startcode();
  371. }
  372.  
  373. WMEChatResize_bootstrap();