Avatars Plus! and More for Google+

Google+ is now lively and fun! No more small, static and low resolution avatars, also restore In Your Circles section. Other cool features are waiting for you to discover!

目前为 2014-07-18 提交的版本,查看 最新版本

  1. /*
  2.  
  3. Following code belongs to Avatars Plus! and More for Google+.
  4. Copyright (C) 2013 Jackson Tan
  5. This program is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation, either version 3 of the License, or
  8. (at your option) any later version.
  9.  
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program. If not, see <http://www.gnu.org/licenses/>.
  17.  
  18. */
  19.  
  20. // ==UserScript==
  21. // @id AvatarsPlusnMore
  22. // @name Avatars Plus! and More for Google+
  23. // @version 5.30.2
  24. // @namespace gplus.avatarsPlus
  25. // @author Jackson Tan
  26. // @description Google+ is now lively and fun! No more small, static and low resolution avatars, also restore In Your Circles section. Other cool features are waiting for you to discover!
  27. // @include https://plus.google.com/*
  28. // @exclude /https://plus\.google\.com(/u/\d+)?/?stream/circles/.+/i
  29. // @exclude /https://plus\.google\.com(/u/\d+)?/?b/.+/i
  30. // @run-at document-end
  31. // @grant GM_xmlhttpRequest
  32. // ==/UserScript==
  33.  
  34. GM_addStyle = function (css) {
  35. var head = document.getElementsByTagName('head')[0], style = document.createElement('style');
  36. if (!head) { return }
  37. style.type = 'text/css';
  38. try { style.innerHTML = css } catch (x) { style.innerText = css }
  39. head.appendChild(style);
  40. }
  41.  
  42. if (localStorage["IYC_Display"] == 'undefined' || localStorage["IYC_Display"] == undefined)
  43. localStorage["IYC_Display"] = 'Display';
  44. if (localStorage["WallofAvatars"] == 'undefined' || localStorage["WallofAvatars"] == undefined)
  45. localStorage["WallofAvatars"] = '400';
  46. if (localStorage["IYC_Num"] == 'undefined' || localStorage["IYC_Num"] == undefined)
  47. localStorage["IYC_Num"] = '30';
  48. if (localStorage["IYC_Size"] == 'undefined' || localStorage["IYC_Size"] == undefined)
  49. localStorage["IYC_Size"] = '62';
  50. if (localStorage["GIF_Avatars"] == 'undefined' || localStorage["GIF_Avatars"] == undefined)
  51. localStorage["GIF_Avatars"] = 'Enabled';
  52. if (localStorage["IYC_Animations"] == 'undefined' || localStorage["IYC_Animations"] == undefined)
  53. localStorage["IYC_Animations"] = 'Disabled';
  54. if (localStorage["Scaling_Animations"] == 'undefined' || localStorage["Scaling_Animations"] == undefined)
  55. localStorage["Scaling_Animations"] = 'Enabled';
  56. if (localStorage["NotiWin_Animations"] == 'undefined' || localStorage["NotiWin_Animations"] == undefined)
  57. localStorage["NotiWin_Animations"] = 'Enabled';
  58. if (localStorage["CmtBox_Animations"] == 'undefined' || localStorage["CmtBox_Animations"] == undefined)
  59. localStorage["CmtBox_Animations"] = 'Enabled';
  60. if (localStorage["ShareBox_Animations"] == 'undefined' || localStorage["ShareBox_Animations"] == undefined)
  61. localStorage["ShareBox_Animations"] = 'Enabled';
  62. if (localStorage["Btn_Animations"] == 'undefined' || localStorage["Btn_Animations"] == undefined)
  63. localStorage["Btn_Animations"] = 'Enabled';
  64. if (localStorage["Clock_Fonts"] == 'undefined' || localStorage["Clock_Fonts"] == undefined)
  65. localStorage["Clock_Fonts"] = 'Segoe UI Mono';
  66. if (localStorage["Clock_Font_Size"] == 'undefined' || localStorage["Clock_Font_Size"] == undefined)
  67. localStorage["Clock_Font_Size"] = '32';
  68. if (localStorage["Clock_TS"] == 'undefined' || localStorage["Clock_TS"] == undefined)
  69. localStorage["Clock_TS"] = 'Enabled';
  70. if (localStorage["Clock_Day_Indctr"] == 'undefined' || localStorage["Clock_Day_Indctr"] == undefined)
  71. localStorage["Clock_Day_Indctr"] = '☼';
  72. if (localStorage["Clock_Night_Indctr"] == 'undefined' || localStorage["Clock_Night_Indctr"] == undefined)
  73. localStorage["Clock_Night_Indctr"] = '☪';
  74. if (localStorage["Clock_Show"] == 'undefined' || localStorage["Clock_Show"] == undefined)
  75. localStorage["Clock_Show"] = 'Show';
  76. if (localStorage["Remove_Borders"] == 'undefined' || localStorage["Remove_Borders"] == undefined)
  77. localStorage["Remove_Borders"] = 'Enabled';
  78. if (localStorage["Remove_Gaps"] == 'undefined' || localStorage["Remove_Gaps"] == undefined)
  79. localStorage["Remove_Gaps"] = 'Enabled';
  80. if (localStorage["Resize_NotiWindow"] == 'undefined' || localStorage["Resize_NotiWindow"] == undefined)
  81. localStorage["Resize_NotiWindow"] = 'Default';
  82. if (localStorage["Background_Content_Type"] == 'undefined' || localStorage["Background_Content_Type"] == undefined)
  83. localStorage["Background_Content_Type"] = 'Default';
  84. if (localStorage["Background_URL"] == 'undefined' || localStorage["Background_URL"] == undefined)
  85. localStorage["Background_URL"] = 'None';
  86. if (localStorage["Background_Opacity"] == 'undefined' || localStorage["Background_Opacity"] == undefined)
  87. localStorage["Background_Opacity"] = '1';
  88. if (localStorage["Posts_Opacity"] == 'undefined' || localStorage["Posts_Opacity"] == undefined)
  89. localStorage["Posts_Opacity"] = '0.8';
  90. if (localStorage["Background_Display"] == 'undefined' || localStorage["Background_Display"] == undefined)
  91. localStorage["Background_Display"] = 'Tile';
  92. if (localStorage["Background_Color"] == 'undefined' || localStorage["Background_Color"] == undefined)
  93. localStorage["Background_Color"] = '#F1F1F1';
  94. if (localStorage["currentLatitude"] == 'undefined' || localStorage["currentLatitude"] == undefined)
  95. localStorage["currentLatitude"] = 'undefined';
  96. if (localStorage["currentLongitude"] == 'undefined' || localStorage["currentLongitude"] == undefined)
  97. localStorage["currentLongitude"] = 'undefined';
  98. if (localStorage["cityName1033"] == 'undefined' || localStorage["cityName1033"] == undefined)
  99. localStorage["cityName1033"] = 'undefined';
  100. if (localStorage["countryName"] == 'undefined' || localStorage["countryName"] == undefined)
  101. localStorage["countryName"] = 'undefined';
  102. if (localStorage["cityNameLocalized"] == 'undefined' || localStorage["cityNameLocalized"] == undefined)
  103. localStorage["cityNameLocalized"] = 'undefined';
  104.  
  105. function onLoad() {
  106. var languagePairs = {
  107. '首页': { language: 'zh-CN' },
  108. '主頁': { language: 'zh-HK' },
  109. '首頁': { language: 'zh-TW' },
  110. 'ホーム': { language: 'ja' },
  111. 'Default': { language: 'en-US' }
  112. }
  113.  
  114. var matchPair;
  115. if (document.getElementsByClassName("lCd Hyc fJb").length > 0) {
  116. matchPair = languagePairs[document.getElementsByClassName("lCd Hyc fJb")[0].textContent];
  117. if (!matchPair)
  118. matchPair = languagePairs['Default'];
  119. }
  120. else
  121. matchPair = languagePairs['Default'];
  122. var language = matchPair.language;
  123.  
  124. var currentLocation;
  125. if (currentLocation == undefined) {
  126. navigator.geolocation.getCurrentPosition(function (position) {
  127. currentLocation = position;
  128. console.log(position);
  129. }, function (positionError) {
  130. console.error(positionError);
  131. });
  132. }
  133.  
  134. if (localStorage["currentLatitude"] != currentLocation.coords.latitude || localStorage["currentLongitude"] != currentLocation.coords.longitude) {
  135. localStorage["currentLatitude"] = currentLocation.coords.latitude;
  136. localStorage["currentLongitude"] = currentLocation.coords.longitude;
  137. }
  138.  
  139. var cityName1033Original = localStorage["cityName1033"];
  140.  
  141. var ajaxFetch = new XMLHttpRequest();
  142. ajaxFetch.onreadystatechange = function () {
  143. if (ajaxFetch.readyState == 4 && ajaxFetch.status == 200) {
  144. var locationResponseXML = ajaxFetch.responseXML;
  145. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  146. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "locality") {
  147. localStorage["cityName1033"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  148. break;
  149. }
  150. }
  151. if (localStorage["cityName1033"] == "undefined" || localStorage["cityName1033"] == undefined || localStorage["cityName1033"] == null || localStorage["cityName1033"] == "") {
  152. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  153. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_3") {
  154. localStorage["cityName1033"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  155. break;
  156. }
  157. }
  158. }
  159. if (localStorage["cityName1033"] == "undefined" || localStorage["cityName1033"] == undefined || localStorage["cityName1033"] == null || localStorage["cityName1033"] == "") {
  160. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  161. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_2") {
  162. localStorage["cityName1033"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  163. break;
  164. }
  165. }
  166. }
  167. if (localStorage["cityName1033"] == "undefined" || localStorage["cityName1033"] == undefined || localStorage["cityName1033"] == null || localStorage["cityName1033"] == "") {
  168. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  169. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_1") {
  170. localStorage["cityName1033"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  171. break;
  172. }
  173. }
  174. }
  175. localStorage["countryName"] = locationResponseXML.getElementsByTagName('result')[5].getElementsByTagName('long_name')[1].textContent;
  176. }
  177. };
  178. ajaxFetch.open('GET', 'https://maps.googleapis.com/maps/api/geocode/xml?language=en-US&&latlng=' + localStorage["currentLatitude"] + ',' + localStorage["currentLongitude"] + '&&sensor=false&_reqid=' + (new Date().getTime() % 1000000) + '&rt=j', true);
  179. ajaxFetch.send();
  180.  
  181. var ajaxSecondFetch = new XMLHttpRequest();
  182. ajaxSecondFetch.onreadystatechange = function () {
  183. if (ajaxSecondFetch.readyState == 4 && ajaxSecondFetch.status == 200) {
  184. var locationResponseXML = ajaxSecondFetch.responseXML;
  185. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  186. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "locality") {
  187. localStorage["cityNameLocalized"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  188. break;
  189. }
  190. }
  191. if (localStorage["cityNameLocalized"] == "undefined" || localStorage["cityNameLocalized"] == undefined || localStorage["cityNameLocalized"] == null || localStorage["cityNameLocalized"] == "") {
  192. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  193. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_3") {
  194. localStorage["cityNameLocalized"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  195. break;
  196. }
  197. }
  198. }
  199. if (localStorage["cityNameLocalized"] == "undefined" || localStorage["cityNameLocalized"] == undefined || localStorage["cityNameLocalized"] == null || localStorage["cityNameLocalized"] == "") {
  200. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  201. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_2") {
  202. localStorage["cityNameLocalized"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  203. break;
  204. }
  205. }
  206. }
  207. if (localStorage["cityNameLocalized"] == "undefined" || localStorage["cityNameLocalized"] == undefined || localStorage["cityNameLocalized"] == null || localStorage["cityNameLocalized"] == "") {
  208. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  209. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_1") {
  210. localStorage["cityNameLocalized"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  211. break;
  212. }
  213. }
  214. }
  215. }
  216. };
  217. ajaxSecondFetch.open('GET', 'https://maps.googleapis.com/maps/api/geocode/xml?language=' + language + '&&latlng=' + localStorage["currentLatitude"] + ',' + localStorage["currentLongitude"] + '&&sensor=false&_reqid=' + (new Date().getTime() % 1000000) + '&rt=j', true);
  218. ajaxSecondFetch.send();
  219. }
  220.  
  221. setTimeout(onLoad, 10000);
  222.  
  223. var IYC_Display = localStorage["IYC_Display"];
  224. var WallofAvatars = localStorage["WallofAvatars"];
  225. var IYC_Num = localStorage["IYC_Num"];
  226. var IYC_Size = localStorage["IYC_Size"];
  227. var GIF_Avatars = localStorage["GIF_Avatars"];
  228. var IYC_Animations = localStorage["IYC_Animations"];
  229. var Scaling_Animations = localStorage["Scaling_Animations"];
  230. var NotiWin_Animations = localStorage["NotiWin_Animations"];
  231. var CmtBox_Animations = localStorage["CmtBox_Animations"];
  232. var ShareBox_Animations = localStorage["ShareBox_Animations"];
  233. var Btn_Animations = localStorage["Btn_Animations"];
  234. var Clock_Fonts = localStorage["Clock_Fonts"];
  235. var Clock_Font_Size = localStorage["Clock_Font_Size"];
  236. var Clock_TS = localStorage["Clock_TS"];
  237. var Clock_Day_Indctr = localStorage["Clock_Day_Indctr"];
  238. var Clock_Night_Indctr = localStorage["Clock_Night_Indctr"];
  239. var Clock_Show = localStorage["Clock_Show"];
  240. var Remove_Borders = localStorage["Remove_Borders"];
  241. var Remove_Gaps = localStorage["Remove_Gaps"];
  242. var Resize_NotiWindow = localStorage["Resize_NotiWindow"];
  243. var Resize_NotiWindow_Actual_Size = Resize_NotiWindow - 30;
  244. var Resize_NotiWindow_Post_Text_Size = Resize_NotiWindow - 50;
  245. var Background_Content_Type = localStorage["Background_Content_Type"];
  246. var Background_URL = localStorage["Background_URL"];
  247. var Background_Opacity = localStorage["Background_Opacity"];
  248. var Posts_Opacity = localStorage["Posts_Opacity"];
  249. var Background_Display = localStorage["Background_Display"];
  250. var Background_Color = localStorage["Background_Color"];
  251.  
  252. function getIYC() {
  253. var languagePairs = {
  254. '首页': { head: '人在您的圈子中', weather: '天气', middle: '更新排名', foot: '查看全部', loading: '正在载入天气信息...' },
  255. '主頁': { head: '人在你的社交圈中', weather: '天氣', middle: '更新排名', foot: '檢視全部', loading: '正在載入天氣信息...' },
  256. '首頁': { head: '人在你的社交圈中', weather: '天氣', middle: '更新排名', foot: '檢視全部', loading: '正在載入天氣信息...' },
  257. 'ホーム': { head: '人をサークルに追加', weather: '天気', middle: 'アップデート', foot: 'すべて表示', loading: '気象情報読み込み中...' },
  258. 'Default': { head: 'In your circles', weather: 'Weather', middle: 'Update', foot: 'View all', loading: 'Loading weather...' }
  259. }
  260.  
  261. var languagePairsThin = {
  262. '首页': { head: '人在 </br> 您的圈子中', weather: '天气', middle: '更新排名', foot: '查看全部', loading: '正在载入天气信息...' },
  263. '主頁': { head: '人在你的 </br> 社交圈中', weather: '天氣', middle: '更新排名', foot: '檢視全部', loading: '正在載入天氣信息...' },
  264. '首頁': { head: '人在你的 </br> 社交圈中', weather: '天氣', middle: '更新排名', foot: '檢視全部', loading: '正在載入天氣信息...' },
  265. 'ホーム': { head: '人を </br> サークルに追加', weather: '天気', middle: 'アップデート', foot: 'すべて表示', loading: '気象情報読み込み中...' },
  266. 'Default': { head: 'In </br> your circles', weather: 'Weather', middle: 'Update', foot: 'View all', loading: 'Loading weather...' }
  267. }
  268.  
  269. if (document.URL.match(/https:\/\/plus\.google\.com(\/u\/\d)?/)) {
  270. var ajax = new XMLHttpRequest();
  271. ajax.onreadystatechange = function () {
  272. if (ajax.readyState == 4 && ajax.status == 200) {
  273. var arr = eval('//' + ajax.responseText);
  274. var userptr = arr[0][1][2];
  275. var userRanksArr = new Array();
  276. var userRankUpdateDate = new Array();
  277. localStorage.setItem('IYC_Data', ajax.responseText);
  278. var IYC_Data = localStorage["IYC_Data"];
  279.  
  280. var matchPair;
  281. if (document.getElementsByClassName("lCd Hyc fJb").length > 0) {
  282. if (document.getElementsByClassName("Ypa jw Yc am").length > 0 && document.getElementsByClassName("Ypa jw Yc am")[0].clientWidth >= 400) {
  283. matchPair = languagePairs[document.getElementsByClassName("lCd Hyc fJb")[0].textContent];
  284. if (!matchPair)
  285. matchPair = languagePairs['Default'];
  286. }
  287. else {
  288. matchPair = languagePairsThin[document.getElementsByClassName("lCd Hyc fJb")[0].textContent];
  289. if (!matchPair)
  290. matchPair = languagePairsThin['Default'];
  291. }
  292. }
  293. else
  294. matchPair = languagePairs['Default'];
  295.  
  296. var container;
  297. if (document.getElementsByClassName('ona Fdb bsa')[0] != undefined) {
  298. if (document.getElementsByClassName('ona Fdb bsa')[0].clientWidth >= 1080)
  299. container = document.getElementsByClassName('Ypa jw Yc am')[2];
  300. else if (document.getElementsByClassName('ona Fdb bsa')[0].clientWidth >= 720)
  301. container = document.getElementsByClassName('Ypa jw Yc am')[1];
  302. }
  303. var html = '<div class="B3 Kg"><ul class="Bx wg"><li class="Zz fj c7c" rowindex="0"><div class="N5 Mq"><div><div class="Sla">';
  304. for (var i = 0; i < Math.min(userptr.length, WallofAvatars) ; i++) {
  305. userRanksArr[i] = new Array(13);
  306. if (userptr[i] != undefined && userptr[i] != null) {
  307. if (userptr[i][0] != undefined && userptr[i][2] != undefined && userptr[i][0] != null && userptr[i][2] != null) {
  308. if (userptr[i][0][2] != undefined && userptr[i][2][0] != undefined && userptr[i][0][2] != null && userptr[i][2][0] != null) {
  309. var userid = userptr[i][0][2];
  310. var username = userptr[i][2][0];
  311. var relevance, userimg;
  312. if (userptr[i][2][3] != undefined && userptr[i][2][3] != null)
  313. relevance = userptr[i][2][3];
  314. else
  315. relevance = 0.0;
  316. var relevanceAprox = userptr[i][2][19];
  317. var usermail = userptr[i][0][0];
  318. if (userptr[i][0][0] == undefined)
  319. usermail = 'N\/A';
  320. if (userptr[i][2][8] != undefined && userptr[i][2][8] != null)
  321. userimg = userptr[i][2][8];
  322. else
  323. userimg = "ssl.gstatic.com/s2/profiles/images/silhouette64.png";
  324. var imgid = 'gbimg' + i
  325. userimg = userimg.replace('/photo.jpg', '/s' + 2 * IYC_Size + '-c-k/photo.jpg');
  326. var tmp1 = '<div class="w0a d-k-l qgc o-U-s" colindex="' + i + '" style="float: left;"><div class="gbrlvc">' + '' + '</div><a href="./' + userid + '" class="ob Jk" oid="' + userid + '"><img src="' + userimg + '" width="' + IYC_Size + 'px" height="' + IYC_Size + 'px" alt="' + username + '" class="ho rgc" id="' + imgid + '" oid="' + userid + '" title="' + userid + ' ' + username + ' ' + relevance + ' ' + usermail + '"></a></div>';
  327. if (i < Math.min(userptr.length, IYC_Num))
  328. html += tmp1;
  329. userRanksArr[i][0] = userid;
  330. userRanksArr[i][1] = username;
  331. userRanksArr[i][2] = relevance;
  332. userRanksArr[i][3] = relevanceAprox;
  333. userRanksArr[i][7] = username;
  334. userRanksArr[i][10] = userimg;
  335. }
  336. }
  337. }
  338. }
  339. Date.prototype.getDOY = function () {
  340. var onejan = new Date(this.getFullYear(), 0, 1);
  341. return Math.ceil((this - onejan) / 86400000);
  342. }
  343. function commafy(num) {
  344. var str = num.toString().split('.');
  345. if (str[0].length >= 4) {
  346. str[0] = str[0].replace(/(\d)(?=(\d{3})+$)/g, '$1,');
  347. }
  348. if (str[1] && str[1].length >= 4) {
  349. str[1] = str[1].replace(/(\d{3})/g, '$1 ');
  350. }
  351. return str.join('.');
  352. }
  353. if (localStorage["userRankArrPresent"] == undefined || localStorage["userRankArrPresent"] == "") {
  354. userRankUpdateDate[0] = new Date().getFullYear();
  355. userRankUpdateDate[1] = new Date().getMonth();
  356. userRankUpdateDate[2] = new Date().getDate();
  357. for (var i = 0; i < userRanksArr.length; i++) {
  358. if (userRanksArr[i] != undefined) {
  359. userRanksArr[i][6] = true;
  360. userRanksArr[i][8] = false;
  361. userRanksArr[i][11] = false;
  362. }
  363. }
  364. localStorage["userRankArrPresent"] = JSON.stringify(userRanksArr);
  365. localStorage["userRankUpdateDate"] = JSON.stringify(userRankUpdateDate);
  366. }
  367. if (localStorage["userRankUpdateDate"] == undefined) {
  368. userRankUpdateDate[0] = new Date().getFullYear();
  369. userRankUpdateDate[1] = new Date().getMonth();
  370. userRankUpdateDate[2] = new Date().getDate();
  371. localStorage["userRankUpdateDate"] = JSON.stringify(userRankUpdateDate);
  372. }
  373. else if (JSON.stringify(userRanksArr) != localStorage["userRankArrPresent"]) {
  374. var storedUserRankArr = JSON.parse(localStorage["userRankArrPresent"]);
  375. var storedUpdateDateArr = JSON.parse(localStorage["userRankUpdateDate"]);
  376. var storedUpdateDate = new Date(storedUpdateDateArr[0], storedUpdateDateArr[1], storedUpdateDateArr[2]);
  377. if ((storedUpdateDateArr[0] == new Date().getFullYear() && new Date().getDOY() - storedUpdateDate.getDOY() > 1) || (storedUpdateDateArr[0] < new Date().getFullYear())) {
  378. var rankDifference;
  379. var relevanceDifference;
  380. for (var j = 0; j < userRanksArr.length; j++) {
  381. var searchUIDTarget = storedUserRankArr[j][0];
  382. for (k = 0; k < userRanksArr.length; k++) {
  383. if (userRanksArr[k] != undefined) {
  384. if (userRanksArr[k][0] == searchUIDTarget) {
  385. rankDifference = j - k;
  386. relevanceDifference = (storedUserRankArr[k][2] * 100 - userRanksArr[j][2] * 100).toFixed(1);
  387. userRanksArr[k][4] = rankDifference;
  388. userRanksArr[k][5] = relevanceDifference;
  389. if (j > IYC_Num - 1 && k <= IYC_Num - 1) {
  390. userRanksArr[k][6] = true;
  391. }
  392. else if (j == k) {
  393. userRanksArr[k][6] = false;
  394. }
  395. else if (j < IYC_Num - 1 && k <= IYC_Num - 1) {
  396. userRanksArr[k][6] = false;
  397. }
  398. if (userRanksArr[k][9] == null) {
  399. userRanksArr[k][9] = userRanksArr[k][7];
  400. }
  401. if (storedUserRankArr[k][7] == userRanksArr[k][7]) {
  402. userRanksArr[k][8] = false;
  403. userRanksArr[k][9] = userRanksArr[k][7];
  404. }
  405. else if (storedUserRankArr[k][7] != userRanksArr[k][7]) {
  406. userRanksArr[k][8] = true;
  407. }
  408. if (userRanksArr[k][12] == null) {
  409. userRanksArr[k][12] = userRanksArr[k][10];
  410. }
  411. if (storedUserRankArr[k][10] == userRanksArr[k][10]) {
  412. userRanksArr[k][11] = false;
  413. userRanksArr[k][12] = userRanksArr[k][10];
  414. }
  415. else if (storedUserRankArr[k][9] != userRanksArr[k][9]) {
  416. userRanksArr[k][11] = true;
  417. }
  418. }
  419. }
  420. }
  421. }
  422. localStorage["userRankArrPresent"] = JSON.stringify(userRanksArr);
  423. userRankUpdateDate[0] = new Date().getFullYear();
  424. userRankUpdateDate[1] = new Date().getMonth();
  425. userRankUpdateDate[2] = new Date().getDate();
  426. localStorage["userRankUpdateDate"] = JSON.stringify(userRankUpdateDate);
  427. }
  428. }
  429. else {
  430. var storedUserRankArr = JSON.parse(localStorage["userRankArrPresent"]);
  431. var storedUpdateDateArr = JSON.parse(localStorage["userRankUpdateDate"]);
  432. var storedUpdateDate = new Date(storedUpdateDateArr[0], storedUpdateDateArr[1], storedUpdateDateArr[2]);
  433. if ((storedUpdateDateArr[0] == new Date().getFullYear() && new Date().getDOY() - storedUpdateDate.getDOY() > 1) || (storedUpdateDateArr[0] < new Date().getFullYear())) {
  434. if (JSON.stringify(userRanksArr) == localStorage["userRankArrPresent"]) {
  435. for (var j = 0; j < userRanksArr.length; j++) {
  436. if (userRanksArr[j] != undefined) {
  437. userRanksArr[j][4] = 0;
  438. userRanksArr[j][6] = false;
  439. userRanksArr[j][8] = false;
  440. userRanksArr[j][11] = false;
  441. }
  442. }
  443. localStorage["userRankArrPresent"] = JSON.stringify(userRanksArr);
  444. userRankUpdateDate[0] = new Date().getFullYear();
  445. userRankUpdateDate[1] = new Date().getMonth();
  446. userRankUpdateDate[2] = new Date().getDate();
  447. localStorage["userRankUpdateDate"] = JSON.stringify(userRankUpdateDate);
  448. }
  449. }
  450. }
  451. html += '</div></div></div><div class="Xp"></li></ul></div></div>';
  452. var nav_wrap = document.createElement('div');
  453. //var linkOptions = "chrome-extension://" + extid + "/avatarsWall.html";
  454. //var linkOptions2 = "'" + linkOptions + "'";
  455. var linkOptions2 = "'" + "https://plus.google.com/circles" + "'";
  456. nav_wrap.innerHTML += '<div class="Tr TA" componentid="6"><div class="card"><div class="Ee fP Ue front"><div class="a5 Gi"><h3 class="EY Ni zj"><span>' + commafy(userptr.length) + '&nbsp;' + matchPair.head + '</span></h3><span role="button" class="d-s Hy Xc" id="gbweather" title="Flip to local weather card" tabindex="0" style="right: 135px;">' + matchPair.weather + '</span><span role="button" class="d-s Hy Xc" id="gbaupdt" title="Update circle ranks"tabindex="0" style="right: 65px;">' + matchPair.middle + '</span><span role="button" class="d-s Hy Xc" id="gbabtn" title="View all" tabindex="0" onclick="javascript:window.open(' + linkOptions2 + ')">' + matchPair.foot + '</span></div>' + html + '<div class="Ee fP back" style="display: none;"><font style="font-weight: bold;text-transform: uppercase;font-size: 26px;">' + matchPair.loading + '</font></div></div></div></div>';
  457. function flip() {
  458. if (document.getElementsByClassName('card')[0].childNodes[0].style.display != 'none') {
  459. document.getElementsByClassName('card')[0].className = 'card flipped';
  460. setTimeout(function () { document.getElementsByClassName('card')[0].childNodes[1].style.display = ''; document.getElementsByClassName('card')[0].childNodes[0].style.display = 'none'; }, 200);
  461. }
  462. else if (document.getElementsByClassName('card')[0].childNodes[0].style.display == 'none') {
  463. document.getElementsByClassName('card')[0].className = 'card';
  464. setTimeout(function () { document.getElementsByClassName('card')[0].childNodes[0].style.display = ''; document.getElementsByClassName('card')[0].childNodes[1].style.display = 'none'; }, 200);
  465. }
  466. }
  467.  
  468. setInterval(function () {
  469. if (document.getElementsByClassName('Sla').length == 0) {
  470. var container;
  471. if (document.getElementsByClassName('ona Fdb bsa')[0] != undefined) {
  472. if (document.getElementsByClassName('ona Fdb bsa')[0].clientWidth >= 1080)
  473. container = document.getElementsByClassName('Ypa jw Yc am')[2];
  474. else if (document.getElementsByClassName('ona Fdb bsa')[0].clientWidth >= 720)
  475. container = document.getElementsByClassName('Ypa jw Yc am')[1];
  476. }
  477. if (typeof (container) == 'undefined')
  478. return;
  479. container.insertBefore(nav_wrap, container.childNodes[0]);
  480. for (var i = 0; i < userRanksArr.length; i++) {
  481. var storedUserRankArr = JSON.parse(localStorage["userRankArrPresent"]);
  482. var rankChangeText, relevanceChangeText, debutText;
  483. var nameChangeText, avatarChangeHTML;
  484. if (storedUserRankArr[i][4] != null && storedUserRankArr[i][4] != undefined) {
  485. if (storedUserRankArr[i][4] > 0)
  486. rankChangeText = "▲" + storedUserRankArr[i][4] + " ";
  487. else if (storedUserRankArr[i][4] == 0)
  488. rankChangeText = "〓 " + " ";
  489. else if (storedUserRankArr[i][4] < 0)
  490. rankChangeText = "▼" + -storedUserRankArr[i][4] + " ";
  491. }
  492. else
  493. //rankChangeText = "N/A ";
  494. rankChangeText = "";
  495. if (storedUserRankArr[i][5] != null && storedUserRankArr[i][5] != undefined) {
  496. if (storedUserRankArr[i][5] > 0)
  497. relevanceChangeText = "(+" + storedUserRankArr[i][5] + ") ";
  498. else if (storedUserRankArr[i][5] == 0)
  499. relevanceChangeText = "";
  500. else if (storedUserRankArr[i][5] < 0)
  501. relevanceChangeText = "(" + storedUserRankArr[i][5] + ") ";
  502. }
  503. else
  504. //relevanceChangeText = "(N/A) ";
  505. relevanceChangeText = "";
  506. if (storedUserRankArr[i][6] == true)
  507. debutText = "NEW";
  508. else
  509. debutText = "";
  510. if (storedUserRankArr[i][8] == true) {
  511. nameChangeText = storedUserRankArr[i][9];
  512. }
  513. else if (storedUserRankArr[i][8] == false) {
  514. nameChangeText = "";
  515. }
  516. if (storedUserRankArr[i][11] == true) {
  517. avatarChangeHTML = "<img src='https://" + storedUserRankArr[i][12] + " width='32px' height='32px' class='ho rgc'>";
  518. }
  519. else if (storedUserRankArr[i][11] == false) {
  520. avatarChangeHTML = "";
  521. }
  522. document.getElementsByClassName("gbrlvc")[i].innerText = rankChangeText + relevanceChangeText + debutText;
  523. if (storedUserRankArr[i][4] > 0)
  524. document.getElementsByClassName("gbrlvc")[i].style.color = "#259b24";
  525. else if (storedUserRankArr[i][4] == 0) {
  526. document.getElementsByClassName("gbrlvc")[i].style.color = "#9e9e9e";
  527. document.getElementsByClassName("gbrlvc")[i].style.display = "none";
  528. }
  529. else if (storedUserRankArr[i][4] < 0 || storedUserRankArr[i][4] < 0)
  530. document.getElementsByClassName("gbrlvc")[i].style.color = "#e51c23";
  531. else
  532. document.getElementsByClassName("gbrlvc")[i].style.color = "#ff9800";
  533. if (storedUserRankArr[i][12] == "ssl.gstatic.com/s2/profiles/images/silhouette64.png") {
  534. document.getElementsByClassName("gbrlvc")[i].innerHTML = "NOT FOUND";
  535. document.getElementsByClassName("gbrlvc")[i].style.color = "#d01716";
  536. document.getElementsByClassName("gbrlvc")[i].style.opacity = "1";
  537. }
  538. document.getElementById("gbaupdt").addEventListener('click', updateManually);
  539. }
  540. }
  541. else if (document.getElementsByClassName('ona Fdb bsa')[0] != undefined) {
  542. if (document.getElementsByClassName('ona Fdb bsa')[0].clientWidth >= 1080) {
  543. if (document.getElementsByClassName('Ypa jw Yc am')[2].childNodes[0].childNodes[0].className != "Tr TA") {
  544. document.getElementsByClassName("Ypa jw Yc am")[2].insertBefore(document.getElementsByClassName("Tr TA")[0], document.getElementsByClassName("Ypa jw Yc am")[2].firstChild);
  545. }
  546. }
  547. else if (document.getElementsByClassName('ona Fdb bsa')[0].clientWidth >= 720) {
  548. if (document.getElementsByClassName('Ypa jw Yc am')[1].childNodes[0].childNodes[0].className != "Tr TA") {
  549. document.getElementsByClassName("Ypa jw Yc am")[1].insertBefore(document.getElementsByClassName("Tr TA")[0], document.getElementsByClassName("Ypa jw Yc am")[1].firstChild);
  550. }
  551. }
  552. }
  553. if (document.getElementById('gbweather') != undefined && document.getElementsByClassName("Ee fP back")[0] != undefined) {
  554. document.getElementById('gbweather').removeEventListener('click', flip, false);
  555. document.getElementsByClassName("Ee fP back")[0].removeEventListener('click', flip, false);
  556. document.getElementById('gbweather').addEventListener('click', flip, false);
  557. document.getElementsByClassName("Ee fP back")[0].addEventListener('click', flip, false);
  558. }
  559. }, 3000);
  560. }
  561. };
  562. ajax.open('GET', document.URL.match(/https:\/\/plus\.google\.com(\/b\/\d+)/) != undefined ? document.URL.match(/https:\/\/plus\.google\.com(\/b\/\d+)/)[0] + '/_/socialgraph/lookup/circles/?ct=2&m=true&tag=fg&_reqid=' + (new Date().getTime() % 1000000) + '&rt=j' : document.URL.match(/https:\/\/plus\.google\.com(\/u\/\d)?/)[0] + '/_/socialgraph/lookup/circles/?ct=2&m=true&tag=fg&_reqid=' + (new Date().getTime() % 1000000) + '&rt=j', true);
  563. ajax.send();
  564. }
  565. }
  566.  
  567. function updateManually() {
  568. var languagePairs = {
  569. '首页': { head: '人在您的圈子中', weather: '天气', middle: '更新排名', foot: '查看全部', loading: '正在载入天气信息...' },
  570. '主頁': { head: '人在你的社交圈中', weather: '天氣', middle: '更新排名', foot: '檢視全部', loading: '正在載入天氣信息...' },
  571. '首頁': { head: '人在你的社交圈中', weather: '天氣', middle: '更新排名', foot: '檢視全部', loading: '正在載入天氣信息...' },
  572. 'ホーム': { head: '人をサークルに追加', weather: '天気', middle: 'アップデート', foot: 'すべて表示', loading: '気象情報読み込み中...' },
  573. 'Default': { head: 'In your circles', weather: 'Weather', middle: 'Update', foot: 'View all', loading: 'Loading weather...' }
  574. }
  575.  
  576. var languagePairsThin = {
  577. '首页': { head: '人在 </br> 您的圈子中', weather: '天气', middle: '更新排名', foot: '查看全部', loading: '正在载入天气信息...' },
  578. '主頁': { head: '人在你的 </br> 社交圈中', weather: '天氣', middle: '更新排名', foot: '檢視全部', loading: '正在載入天氣信息...' },
  579. '首頁': { head: '人在你的 </br> 社交圈中', weather: '天氣', middle: '更新排名', foot: '檢視全部', loading: '正在載入天氣信息...' },
  580. 'ホーム': { head: '人を </br> サークルに追加', weather: '天気', middle: 'アップデート', foot: 'すべて表示', loading: '気象情報読み込み中...' },
  581. 'Default': { head: 'In </br> your circles', weather: 'Weather', middle: 'Update', foot: 'View all', loading: 'Loading weather...' }
  582. }
  583.  
  584. if (document.URL.match(/https:\/\/plus\.google\.com(\/u\/\d)?/)) {
  585. var ajax = new XMLHttpRequest();
  586. ajax.onreadystatechange = function () {
  587. if (ajax.readyState == 4 && ajax.status == 200) {
  588. var arr = eval('//' + ajax.responseText);
  589. var userptr = arr[0][1][2];
  590. var userRanksArr = new Array();
  591. var userRankUpdateDate = new Array();
  592. localStorage.setItem('IYC_Data', ajax.responseText);
  593. var IYC_Data = localStorage["IYC_Data"];
  594.  
  595. var matchPair;
  596. if (document.getElementsByClassName("lCd Hyc fJb").length > 0) {
  597. if (document.getElementsByClassName("Ypa jw Yc am").length > 0 && document.getElementsByClassName("Ypa jw Yc am")[0].clientWidth >= 400) {
  598. matchPair = languagePairs[document.getElementsByClassName("lCd Hyc fJb")[0].textContent];
  599. if (!matchPair)
  600. matchPair = languagePairs['Default'];
  601. }
  602. else {
  603. matchPair = languagePairsThin[document.getElementsByClassName("lCd Hyc fJb")[0].textContent];
  604. if (!matchPair)
  605. matchPair = languagePairsThin['Default'];
  606. }
  607. }
  608. else
  609. matchPair = languagePairs['Default'];
  610.  
  611. var container;
  612. if (document.getElementsByClassName('ona Fdb bsa')[0] != undefined) {
  613. if (document.getElementsByClassName('ona Fdb bsa')[0].clientWidth >= 1080)
  614. container = document.getElementsByClassName('Ypa jw Yc am')[2];
  615. else if (document.getElementsByClassName('ona Fdb bsa')[0].clientWidth >= 720)
  616. container = document.getElementsByClassName('Ypa jw Yc am')[1];
  617. }
  618. var html = '<div class="B3 Kg"><ul class="Bx wg"><li class="Zz fj c7c" rowindex="0"><div class="N5 Mq"><div><div class="Sla">';
  619. for (var i = 0; i < Math.min(userptr.length, WallofAvatars) ; i++) {
  620. userRanksArr[i] = new Array(13);
  621. if (userptr[i] != undefined && userptr[i] != null) {
  622. if (userptr[i][0] != undefined && userptr[i][2] != undefined && userptr[i][0] != null && userptr[i][2] != null) {
  623. if (userptr[i][0][2] != undefined && userptr[i][2][0] != undefined && userptr[i][0][2] != null && userptr[i][2][0] != null) {
  624. var userid = userptr[i][0][2];
  625. var username = userptr[i][2][0];
  626. var relevance, userimg;
  627. if (userptr[i][2][3] != undefined && userptr[i][2][3] != null)
  628. relevance = userptr[i][2][3];
  629. else
  630. relevance = 0.0;
  631. var relevanceAprox = userptr[i][2][19];
  632. var usermail = userptr[i][0][0];
  633. if (userptr[i][0][0] == undefined)
  634. usermail = 'N\/A';
  635. if (userptr[i][2][8] != undefined && userptr[i][2][8] != null)
  636. userimg = userptr[i][2][8];
  637. else
  638. userimg = "ssl.gstatic.com/s2/profiles/images/silhouette64.png";
  639. var imgid = 'gbimg' + i
  640. userimg = userimg.replace('/photo.jpg', '/s' + 2 * IYC_Size + '-c-k/photo.jpg');
  641. var tmp1 = '<div class="w0a d-k-l qgc o-U-s" colindex="' + i + '" style="float: left;"><div class="gbrlvc">' + '' + '</div><a href="./' + userid + '" class="ob Jk" oid="' + userid + '"><img src="' + userimg + '" width="' + IYC_Size + 'px" height="' + IYC_Size + 'px" alt="' + username + '" class="ho rgc" id="' + imgid + '" oid="' + userid + '" title="' + userid + ' ' + username + ' ' + relevance + ' ' + usermail + '"></a></div>';
  642. if (i < Math.min(userptr.length, IYC_Num))
  643. html += tmp1;
  644. userRanksArr[i][0] = userid;
  645. userRanksArr[i][1] = username;
  646. userRanksArr[i][2] = relevance;
  647. userRanksArr[i][3] = relevanceAprox;
  648. userRanksArr[i][7] = username;
  649. userRanksArr[i][10] = userimg;
  650. }
  651. }
  652. }
  653. }
  654. Date.prototype.getDOY = function () {
  655. var onejan = new Date(this.getFullYear(), 0, 1);
  656. return Math.ceil((this - onejan) / 86400000);
  657. }
  658. function commafy(num) {
  659. var str = num.toString().split('.');
  660. if (str[0].length >= 4) {
  661. str[0] = str[0].replace(/(\d)(?=(\d{3})+$)/g, '$1,');
  662. }
  663. if (str[1] && str[1].length >= 4) {
  664. str[1] = str[1].replace(/(\d{3})/g, '$1 ');
  665. }
  666. return str.join('.');
  667. }
  668. if (localStorage["userRankArrPresent"] == undefined || localStorage["userRankArrPresent"] == "") {
  669. userRankUpdateDate[0] = new Date().getFullYear();
  670. userRankUpdateDate[1] = new Date().getMonth();
  671. userRankUpdateDate[2] = new Date().getDate();
  672. for (var i = 0; i < userRanksArr.length; i++) {
  673. if (userRanksArr[i] != undefined) {
  674. userRanksArr[i][6] = true;
  675. userRanksArr[i][8] = false;
  676. userRanksArr[i][11] = false;
  677. }
  678. }
  679. localStorage["userRankArrPresent"] = JSON.stringify(userRanksArr);
  680. localStorage["userRankUpdateDate"] = JSON.stringify(userRankUpdateDate);
  681. }
  682. if (localStorage["userRankUpdateDate"] == undefined) {
  683. userRankUpdateDate[0] = new Date().getFullYear();
  684. userRankUpdateDate[1] = new Date().getMonth();
  685. userRankUpdateDate[2] = new Date().getDate();
  686. localStorage["userRankUpdateDate"] = JSON.stringify(userRankUpdateDate);
  687. }
  688. else if (JSON.stringify(userRanksArr) != localStorage["userRankArrPresent"]) {
  689. var storedUserRankArr = JSON.parse(localStorage["userRankArrPresent"]);
  690. var storedUpdateDateArr = JSON.parse(localStorage["userRankUpdateDate"]);
  691. var storedUpdateDate = new Date(storedUpdateDateArr[0], storedUpdateDateArr[1], storedUpdateDateArr[2]);
  692. var rankDifference;
  693. var relevanceDifference;
  694. for (var j = 0; j < userRanksArr.length; j++) {
  695. var searchUIDTarget = storedUserRankArr[j][0];
  696. for (k = 0; k < userRanksArr.length; k++) {
  697. if (userRanksArr[k] != undefined) {
  698. if (userRanksArr[k][0] == searchUIDTarget) {
  699. rankDifference = j - k;
  700. relevanceDifference = (storedUserRankArr[k][2] * 100 - userRanksArr[j][2] * 100).toFixed(1);
  701. userRanksArr[k][4] = rankDifference;
  702. userRanksArr[k][5] = relevanceDifference;
  703. if (j > IYC_Num - 1 && k <= IYC_Num - 1) {
  704. userRanksArr[k][6] = true;
  705. }
  706. else if (j == k) {
  707. userRanksArr[k][6] = false;
  708. }
  709. else if (j < IYC_Num - 1 && k <= IYC_Num - 1) {
  710. userRanksArr[k][6] = false;
  711. }
  712. if (userRanksArr[k][9] == null) {
  713. userRanksArr[k][9] = userRanksArr[k][7];
  714. }
  715. if (storedUserRankArr[k][7] == userRanksArr[k][7]) {
  716. userRanksArr[k][8] = false;
  717. userRanksArr[k][9] = userRanksArr[k][7];
  718. }
  719. else if (storedUserRankArr[k][7] != userRanksArr[k][7]) {
  720. userRanksArr[k][8] = true;
  721. }
  722. if (userRanksArr[k][12] == null) {
  723. userRanksArr[k][12] = userRanksArr[k][10];
  724. }
  725. if (storedUserRankArr[k][10] == userRanksArr[k][10]) {
  726. userRanksArr[k][11] = false;
  727. userRanksArr[k][12] = userRanksArr[k][10];
  728. }
  729. else if (storedUserRankArr[k][9] != userRanksArr[k][9]) {
  730. userRanksArr[k][11] = true;
  731. }
  732. }
  733. }
  734. }
  735. }
  736. localStorage["userRankArrPresent"] = JSON.stringify(userRanksArr);
  737. userRankUpdateDate[0] = new Date().getFullYear();
  738. userRankUpdateDate[1] = new Date().getMonth();
  739. userRankUpdateDate[2] = new Date().getDate();
  740. localStorage["userRankUpdateDate"] = JSON.stringify(userRankUpdateDate);
  741. }
  742. else {
  743. var storedUserRankArr = JSON.parse(localStorage["userRankArrPresent"]);
  744. var storedUpdateDateArr = JSON.parse(localStorage["userRankUpdateDate"]);
  745. var storedUpdateDate = new Date(storedUpdateDateArr[0], storedUpdateDateArr[1], storedUpdateDateArr[2]);
  746. if ((storedUpdateDateArr[0] == new Date().getFullYear() && new Date().getDOY() - storedUpdateDate.getDOY() > 1) || (storedUpdateDateArr[0] < new Date().getFullYear())) {
  747. if (JSON.stringify(userRanksArr) == localStorage["userRankArrPresent"]) {
  748. for (var j = 0; j < userRanksArr.length; j++) {
  749. if (userRanksArr[j] != undefined) {
  750. userRanksArr[j][4] = 0;
  751. userRanksArr[j][6] = false;
  752. userRanksArr[j][8] = false;
  753. userRanksArr[j][11] = false;
  754. }
  755. }
  756. localStorage["userRankArrPresent"] = JSON.stringify(userRanksArr);
  757. userRankUpdateDate[0] = new Date().getFullYear();
  758. userRankUpdateDate[1] = new Date().getMonth();
  759. userRankUpdateDate[2] = new Date().getDate();
  760. localStorage["userRankUpdateDate"] = JSON.stringify(userRankUpdateDate);
  761. }
  762. }
  763. }
  764. html += '</div></div></div><div class="Xp"></li></ul></div></div>';
  765. var nav_wrap = document.createElement('div');
  766. //var linkOptions = "chrome-extension://" + extid + "/avatarsWall.html";
  767. //var linkOptions2 = "'" + linkOptions + "'";
  768. var linkOptions2 = "'" + "https://plus.google.com/circles" + "'";
  769. nav_wrap.innerHTML += '<div class="Tr TA" componentid="6"><div class="card"><div class="Ee fP Ue front"><div class="a5 Gi"><h3 class="EY Ni zj"><span>' + commafy(userptr.length) + '&nbsp;' + matchPair.head + '</span></h3><span role="button" class="d-s Hy Xc" id="gbweather" title="Flip to local weather card" tabindex="0" style="right: 135px;">' + matchPair.weather + '</span><span role="button" class="d-s Hy Xc" id="gbaupdt" title="Update circle ranks"tabindex="0" style="right: 65px;">' + matchPair.middle + '</span><span role="button" class="d-s Hy Xc" id="gbabtn" title="View all" tabindex="0" onclick="javascript:window.open(' + linkOptions2 + ')">' + matchPair.foot + '</span></div>' + html + '<div class="Ee fP back" style="display: none;"><font style="font-weight: bold;text-transform: uppercase;font-size: 26px;">' + matchPair.loading + '</font></div></div></div></div>';
  770. if (document.getElementsByClassName('Ypa jw Yc am')[2] != undefined) {
  771. document.getElementsByClassName('Ypa jw Yc am')[2].firstChild.innerHTML = nav_wrap.innerHTML;
  772. for (var i = 0; i < userRanksArr.length; i++) {
  773. var storedUserRankArr = JSON.parse(localStorage["userRankArrPresent"]);
  774. var rankChangeText, relevanceChangeText, debutText;
  775. var nameChangeText, avatarChangeHTML;
  776. if (storedUserRankArr[i][4] != null && storedUserRankArr[i][4] != undefined) {
  777. if (storedUserRankArr[i][4] > 0)
  778. rankChangeText = "▲" + storedUserRankArr[i][4] + " ";
  779. else if (storedUserRankArr[i][4] == 0)
  780. rankChangeText = "〓 " + " ";
  781. else if (storedUserRankArr[i][4] < 0)
  782. rankChangeText = "▼" + -storedUserRankArr[i][4] + " ";
  783. }
  784. else
  785. //rankChangeText = "N/A ";
  786. rankChangeText = "";
  787. if (storedUserRankArr[i][5] != null && storedUserRankArr[i][5] != undefined) {
  788. if (storedUserRankArr[i][5] > 0)
  789. relevanceChangeText = "(+" + storedUserRankArr[i][5] + ") ";
  790. else if (storedUserRankArr[i][5] == 0)
  791. relevanceChangeText = "";
  792. else if (storedUserRankArr[i][5] < 0)
  793. relevanceChangeText = "(" + storedUserRankArr[i][5] + ") ";
  794. }
  795. else
  796. //relevanceChangeText = "(N/A) ";
  797. relevanceChangeText = "";
  798. if (storedUserRankArr[i][6] == true)
  799. debutText = "NEW";
  800. else
  801. debutText = "";
  802. if (storedUserRankArr[i][8] == true) {
  803. nameChangeText = storedUserRankArr[i][9];
  804. }
  805. else if (storedUserRankArr[i][8] == false) {
  806. nameChangeText = "";
  807. }
  808. if (storedUserRankArr[i][11] == true) {
  809. avatarChangeHTML = "<img src='https://" + storedUserRankArr[i][12] + " width='32px' height='32px' class='ho rgc'>";
  810. }
  811. else if (storedUserRankArr[i][11] == false) {
  812. avatarChangeHTML = "";
  813. }
  814. document.getElementsByClassName("gbrlvc")[i].innerText = rankChangeText + relevanceChangeText + debutText;
  815. if (storedUserRankArr[i][4] > 0)
  816. document.getElementsByClassName("gbrlvc")[i].style.color = "#259b24";
  817. else if (storedUserRankArr[i][4] == 0) {
  818. document.getElementsByClassName("gbrlvc")[i].style.color = "#9e9e9e";
  819. }
  820. else if (storedUserRankArr[i][4] < 0 || storedUserRankArr[i][4] < 0)
  821. document.getElementsByClassName("gbrlvc")[i].style.color = "#e51c23";
  822. else
  823. document.getElementsByClassName("gbrlvc")[i].style.color = "#ff9800";
  824. if (storedUserRankArr[i][12] == "ssl.gstatic.com/s2/profiles/images/silhouette64.png") {
  825. document.getElementsByClassName("gbrlvc")[i].innerHTML = "NOT FOUND";
  826. document.getElementsByClassName("gbrlvc")[i].style.color = "rgba(255, 10, 0, 0.9)";
  827. document.getElementsByClassName("gbrlvc")[i].style.opacity = "#d01716";
  828. }
  829. document.getElementById("gbaupdt").addEventListener('click', updateManually);
  830. }
  831. }
  832. else if (document.getElementsByClassName('Ypa jw Yc am')[1] != undefined) {
  833. document.getElementsByClassName('Ypa jw Yc am')[1].firstChild.innerHTML = nav_wrap.innerHTML;
  834. for (var i = 0; i < userRanksArr.length; i++) {
  835. var storedUserRankArr = JSON.parse(localStorage["userRankArrPresent"]);
  836. var rankChangeText, relevanceChangeText, debutText;
  837. var nameChangeText, avatarChangeHTML;
  838. if (storedUserRankArr[i][4] != null && storedUserRankArr[i][4] != undefined) {
  839. if (storedUserRankArr[i][4] > 0)
  840. rankChangeText = "▲" + storedUserRankArr[i][4] + " ";
  841. else if (storedUserRankArr[i][4] == 0)
  842. rankChangeText = "〓 " + " ";
  843. else if (storedUserRankArr[i][4] < 0)
  844. rankChangeText = "▼" + -storedUserRankArr[i][4] + " ";
  845. }
  846. else
  847. //rankChangeText = "N/A ";
  848. rankChangeText = "";
  849. if (storedUserRankArr[i][5] != null && storedUserRankArr[i][5] != undefined) {
  850. if (storedUserRankArr[i][5] > 0)
  851. relevanceChangeText = "(+" + storedUserRankArr[i][5] + ") ";
  852. else if (storedUserRankArr[i][5] == 0)
  853. relevanceChangeText = "";
  854. else if (storedUserRankArr[i][5] < 0)
  855. relevanceChangeText = "(" + storedUserRankArr[i][5] + ") ";
  856. }
  857. else
  858. //relevanceChangeText = "(N/A) ";
  859. relevanceChangeText = "";
  860. if (storedUserRankArr[i][6] == true)
  861. debutText = "NEW";
  862. else
  863. debutText = "";
  864. if (storedUserRankArr[i][8] == true) {
  865. nameChangeText = storedUserRankArr[i][9];
  866. }
  867. else if (storedUserRankArr[i][8] == false) {
  868. nameChangeText = "";
  869. }
  870. if (storedUserRankArr[i][11] == true) {
  871. avatarChangeHTML = "<img src='https://" + storedUserRankArr[i][12] + " width='32px' height='32px' class='ho rgc'>";
  872. }
  873. else if (storedUserRankArr[i][11] == false) {
  874. avatarChangeHTML = "";
  875. }
  876. document.getElementsByClassName("gbrlvc")[i].innerText = rankChangeText + relevanceChangeText + debutText;
  877. if (storedUserRankArr[i][4] > 0)
  878. document.getElementsByClassName("gbrlvc")[i].style.color = "#259b24";
  879. else if (storedUserRankArr[i][4] == 0) {
  880. document.getElementsByClassName("gbrlvc")[i].style.color = "#9e9e9e";
  881. }
  882. else if (storedUserRankArr[i][4] < 0 || storedUserRankArr[i][4] < 0)
  883. document.getElementsByClassName("gbrlvc")[i].style.color = "#e51c23";
  884. else
  885. document.getElementsByClassName("gbrlvc")[i].style.color = "#ff9800";
  886. if (storedUserRankArr[i][12] == "ssl.gstatic.com/s2/profiles/images/silhouette64.png") {
  887. document.getElementsByClassName("gbrlvc")[i].innerHTML = "NOT FOUND";
  888. document.getElementsByClassName("gbrlvc")[i].style.color = "#d01716";
  889. document.getElementsByClassName("gbrlvc")[i].style.opacity = "1";
  890. }
  891. document.getElementById("gbaupdt").addEventListener('click', updateManually);
  892. }
  893. }
  894. }
  895. };
  896. ajax.open('GET', document.URL.match(/https:\/\/plus\.google\.com(\/b\/\d+)/) != undefined ? document.URL.match(/https:\/\/plus\.google\.com(\/b\/\d+)/)[0] + '/_/socialgraph/lookup/circles/?ct=2&m=true&tag=fg&_reqid=' + (new Date().getTime() % 1000000) + '&rt=j' : document.URL.match(/https:\/\/plus\.google\.com(\/u\/\d)?/)[0] + '/_/socialgraph/lookup/circles/?ct=2&m=true&tag=fg&_reqid=' + (new Date().getTime() % 1000000) + '&rt=j', true);
  897. ajax.send();
  898. }
  899. }
  900.  
  901. if (IYC_Display == 'Display') {
  902. getIYC();
  903. }
  904.  
  905. var css_Stream_Profile_Photo = ".Uk.wi.hE {\nheight: 64px !important;\nmargin-top: 10px !important;\nwidth: 64px !important;\n}\n\n.Ol.Rf, .fK {\n-webkit-transition:all .5s ease;\n-moz-transition:all .5s ease;\n-o-transition:all .5s ease;\n}\n\n.Ol.Rf:hover {\n-webkit-transform:scale(1.5);\n-moz-transform:scale(1.5);\n-o-transform:scale(1.5);\n-webkit-transition:all .5s ease;\n-moz-transition:all .5s ease;\n-o-transition:all .5s ease;\n}\n}";
  906.  
  907. var css_Profile_Photo_Animations = ".Ol.Rf:hover, .fK:hover, .Ut:hover {\n-webkit-transform:scale(1.5);\n-moz-transform:scale(1.5);\n-o-transform:scale(1.5);\n-webkit-transition:all .5s ease;\n-moz-transition:all .5s ease;\n-o-transition:all .5s ease;\n}\n}";
  908.  
  909. var css_Upper_Right = ".hp, .qu {\nbackground-color: transparent !important;\n}\n\n.Om {\nwidth: 275px !important;\n}\n\n.bja {\nwidth: auto;\n}\n\n.TA {\npadding-top: 0px !important;\n}\n\n.ag, .fK, .Zb {\nheight: 48px !important;\nwidth: 48px !important;\n}\n\n#gbimg0, #gbimg1 {\nwidth: 128px;\nheight: 128px;\n-webkit-transform:scale(1);\n-moz-transform:scale(1);\n-o-transform:scale(1);\n-webkit-transform:rotate(0deg);\n-moz-transform:rotate(0deg);\n-o-transform:rotate(0deg);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg0:hover, #gbimg1:hover {\n-webkit-transform:scale(1);\n-moz-transform:scale(1);\n-o-transform:scale(1);\n-webkit-transform:rotate(360deg);\n-moz-transform:rotate(360deg);\n-o-transform:rotate(360deg);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg2, #gbimg3, #gbimg4 {\nwidth: 85.33px;\nheight: 85.33px;\n-webkit-transform:scale(1);\n-moz-transform:scale(1);\n-o-transform:scale(1);\n-webkit-transform:rotate(0deg);\n-moz-transform:rotate(0deg);\n-o-transform:rotate(0deg);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg2:hover, #gbimg3:hover, #gbimg4:hover {\n-webkit-transform:scale(1);\n-moz-transform:scale(1);\n-o-transform:scale(1);\n-webkit-transform:rotate(360deg);\n-moz-transform:rotate(360deg);\n-o-transform:rotate(360deg);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg5, #gbimg6, #gbimg7, #gbimg8 {\nwidth: 64px;\nheight: 64px;\n-webkit-transform:scale(1);\n-moz-transform:scale(1);\n-o-transform:scale(1);\n-webkit-transform:rotate(0deg);\n-moz-transform:rotate(0deg);\n-o-transform:rotate(0deg);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg5:hover, #gbimg6:hover, #gbimg7:hover, #gbimg8:hover {\n-webkit-transform:scale(1);\n-moz-transform:scale(1);\n-o-transform:scale(1);\n-webkit-transform:rotate(360deg);\n-moz-transform:rotate(360deg);\n-o-transform:rotate(360deg);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg9, #gbimg10, #gbimg11, #gbimg12, #gbimg13 {\nwidth: 51.2px;\nheight: 51.2px;\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg9:hover, #gbimg10:hover, #gbimg11:hover, #gbimg12:hover, #gbimg13:hover {\n-webkit-transform:scale(3);\n-moz-transform:scale(3);\n-o-transform:scale(3);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg14, #gbimg15, #gbimg16, #gbimg17, #gbimg18, #gbimg19 {\nwidth: 42.66px;\nheight: 42.66px;\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg14:hover, #gbimg15:hover, #gbimg16:hover, #gbimg17:hover, #gbimg18:hover, #gbimg19:hover {\n-webkit-transform:scale(3);\n-moz-transform:scale(3);\n-o-transform:scale(3);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg20, #gbimg21, #gbimg22, #gbimg23, #gbimg24, #gbimg25, #gbimg26 {\nwidth: 36.57px;\nheight: 36.57px;\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg20:hover, #gbimg21:hover, #gbimg22:hover, #gbimg23:hover, #gbimg24:hover, #gbimg25:hover, #gbimg26:hover {\n-webkit-transform:scale(3);\n-moz-transform:scale(3);\n-o-transform:scale(3);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg27, #gbimg28, #gbimg29, #gbimg30, #gbimg31, #gbimg32, #gbimg33, #gbimg34 {\nwidth: 32px;\nheight: 32px;\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg27:hover, #gbimg28:hover, #gbimg29:hover, #gbimg30:hover, #gbimg31:hover, #gbimg32:hover, #gbimg33:hover, #gbimg34:hover {\n-webkit-transform:scale(3);\n-moz-transform:scale(3);\n-o-transform:scale(3);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg35, #gbimg36, #gbimg37, #gbimg38, #gbimg39, #gbimg40, #gbimg41, #gbimg42, #gbimg43 {\nwidth: 28.44px;\nheight: 28.44px;\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg35:hover, #gbimg36:hover, #gbimg37:hover, #gbimg38:hover, #gbimg39:hover, #gbimg40:hover, #gbimg41:hover, #gbimg42:hover, #gbimg43:hover {\n-webkit-transform:scale(3);\n-moz-transform:scale(3);\n-o-transform:scale(3);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg44, #gbimg45, #gbimg46, #gbimg47, #gbimg48, #gbimg49, #gbimg50, #gbimg51, #gbimg52, #gbimg53 {\nwidth: 25.6px;\nheight: 25.6px;\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n\n#gbimg44:hover, #gbimg45:hover, #gbimg46:hover, #gbimg47:hover, #gbimg48:hover, #gbimg49:hover, #gbimg50:hover, #gbimg51:hover, #gbimg52:hover, #gbimg53:hover {\n-webkit-transform:scale(3);\n-moz-transform:scale(3);\n-o-transform:scale(3);\n-webkit-transition:all 1s ease;\n-moz-transition:all 1s ease;\n-o-transition:all 1s ease;\n}\n}";
  910.  
  911. var css_Icons = ".hp, .qu {\nbackground-color: transparent !important;\n}\n\n.bja {\nwidth: auto;\n}\n\n.Ala {\npadding-top: 20px !important;\nmargin-top: 0px !important;\ntop: initial !important;\n}\n\n.go {\nheight: 48px !important;\nwidth: 48px !important;\n}\n\n.go {\nborder-radius: 50% !important;\n}\n\n.roster_row>button>img, .ho {\nborder-radius: 50% !important;\n}\n\n.co {\nborder-radius: 50% !important;\n}\n\n.om {\nborder-radius: 50% !important;\n}.Wh {\nmargin: 0 0 0 -52px !important;\n}\n\n.oBNzfb {\npadding-left: 0 !important;\n}\n}";
  912.  
  913. var css_Settings_Card_Your_Photo = "#gbmpi {\nheight: 128px !important;\nwidth: 128px !important;\n}\n}";
  914.  
  915. var css_Mention_List = ".t-C-J {\nheight: 48px !important;\nwidth: 48px !important;\n}\n}";
  916.  
  917. var css_Notification_Photos_and_Border = ".om {\nborder: 0px solid #444 !important;\nheight: 56px !important;\nwidth: 56px !important;\nmargin-top: -6px !important;\n}\n\n.Lv {\nheight: 56px !important;\nwidth: 56px !important;\n}\n\n.Kaa {\nborder: 0px solid black !important;\ntop: -4px !important;\nleft: 2px !important;\n}\n\n.Jaa {\nborder: 0px solid #3D3D3D !important;\ntop: -2px !important;\nleft: 4px !important;\n}\n\n.Gf.Lu {\nheight: 56px !important;\nwidth: 56px !important;\nmargin-top: -6px !important;\n}\n\n.WtbUqb.Wm.F76eVc {\nborder: 0px solid black !important;\ntop: -2px !important;\nleft: 4px !important;\n}\n\n.WtbUqb.Wm.G31rIe {\nborder: 0px solid #3D3D3D !important;top: -4px !important;\nleft: 2px !important;\n}\n\n.wE.dPbJNd.iK.ek {\nwidth: 56px !important;\nheight: 56px !important;\n}\n\n.dPbJNd.iK.ek.Lu {\nwidth: 56px !important;\nheight: 56px !important;\n}\n\nspan.Xm, img.Xm {\nborder: 0px solid #444 !important;\n}\n\ndiv.Gf.no {\nheight: 52px !important;\nwidth: 52px !important;\n}\n}";
  918.  
  919. var css_Notifications_Animations = ".Jc.yl.jfa.en:hover {\n background-color: red;\n -webkit-transition: background-color 1s linear, color 1s linear, width 1s linear;\n -moz-transition: background-color 1s linear, color 1s linear, width 1s linear;\n -o-transition: background-color 1s linear, color 1s linear, width 1s linear;\n-webkit-transition-duration:1s;\n-moz-transition-duration:1s;\n-o-transition-duration:1s;\n}\n\n.Jc.yl.jfa.mfa:hover {\n background-color: aqua;\n -webkit-transition: background-color 1s linear, color 1s linear, width 1s linear;\n -moz-transition: background-color 1s linear, color 1s linear, width 1s linear;\n -o-transition: background-color 1s linear, color 1s linear, width 1s linear;\n-webkit-transition-duration:1s;\n-moz-transition-duration:1s;\n-o-transition-duration:1s;\n}\n}";
  920.  
  921. var css_Buttons_Animations = ".d-k-l.b-c:hover {\n-webkit-transform: scale(1.2);\n-moz-transform: scale(1.2);\n-o-transform: scale(1.2);\n-webkit-transition-duration:.0s;\n-moz-transition-duration:.0s;\n-o-transition-duration:.0s;\n}\n}";
  922.  
  923. var css_Share_Box_Animations = ".Ff {\nbackground: white;\n-webkit-transition: background-color 1s linear, color 1s linear, width 1s linear !important;\n-moz-transition: background-color 1s linear, color 1s linear, width 1s linear !important;\n-o-transition: background-color 1s linear, color 1s linear, width 1s linear !important;\n}\n\n.Ff:hover {\nbackground: aqua;\n-webkit-transition: background-color 1s linear, color 1s linear, width 1s linear;\n-moz-transition: background-color 1s linear, color 1s linear, width 1s linear;\n-o-transition: background-color 1s linear, color 1s linear, width 1s linear;\n}\n}";
  924.  
  925. var css_Notifications_Resize_Arrangement = "#gbwc {\nwidth: " + Resize_NotiWindow + "px !important;\n}\n\n#gbsf {\nwidth: " + Resize_NotiWindow + "px !important;\n}\n\n#gbd1 {\nwidth: " + Resize_NotiWindow + "px !important;\n}\n\n.lfa {\nwidth: " + Resize_NotiWindow_Post_Text_Size + "px !important;\n}\n\n.Laa {\nmax-height: 64px !important;\n}.Yy>.Tg.Sb {\nwidth: auto !important;\n}\n\n.Yy.oeIGR {\nwidth: auto !important;\n}\n\n.ws .Yy {\npadding-bottom: 0 !important;\npadding-top: 0 !important;\n}\n\n.zl .ws {\npadding-left: 0 !important;\npadding-right: 0 !important;\n}\n\n.gbmwc.gbmwca.gbem, .gbmwc.gbmwca.gbexxl {\nright: 0 !important;\n}\n}";
  926.  
  927. var css_Notifications_Fix = ".wm.VC {\npadding-left: 0px !important;\n}\n}";
  928.  
  929. var css_Remove_Photos_Border = ".Fg {\nbackground-color: white !important;\n}\n\n.Km, .Lm, .Jt, .It {border-left: 0px solid transparent !important;\nborder-right: 0px solid transparent !important;\nborder-top: 0px solid transparent !important;\nborder-bottom: 0px solid transparent !important;}\n\n\n}";
  930.  
  931. var css_Comment_Box_Animations = ".Tt.bj {\nheight: 30px;\n-webkit-transition:all .5s ease;\n-moz-transition:all .5s ease;\n-o-transition:all .5s ease;\n}\n\n.Tt.bj:hover {\nheight: 58px;\n-webkit-transition:all .5s ease;\n-moz-transition:all .5s ease;\n-o-transition:all .5s ease;\n}\n}";
  932.  
  933. var css_Suggestions_Text_Arrangement = ".ala {\nmargin-left: 20px !important;\n}\n\n.QK {\nmargin-top: 20px !important;\n}\n}";
  934.  
  935. var css_Photo_Wall = ".yp {\nmin-height: 180px !important;\nwidth: 940px !important;\n}\n\n.uc {\nheight: 180px !important;\nwidth: 180px !important;\nmargin: 0px !important;\n}\n\n.fz {\nheight: 180px !important;\nwidth: 180px !important;\n}\n\n.aq {\nmargin-top: 0px !important;\n}\n\n.GT {\nwidth: 0px !important;\n}.Vt {\n-webkit-box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.1) !important;\n-moz-box-shadow: 0px 0px 0px rgba(0,0,0,0.1) !important;\nbox-shadow: 0px 0px 0px rgba(0, 0, 0, 0.1) !important;\nbackground-color: transparent !important;\nborder: 0px solid #E3E3E3 !important;\n}\n\n.lCa {\nbackground-color: transparent !important;\n}\n\n.vCa {\n-webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1) !important;\n-moz-box-shadow: 0 0 0 rgba(0,0,0,.1) !important;\nbox-shadow: 0 0 0 rgba(0, 0, 0, .1) !important;\nbackground-color: transparent !important;\nborder: 0px solid #CCC !important;\n}\n\n.g-oa-Sa-R-ca {\nbackground-color: transparent !important;\n}\n\n.Oka {\nborder-right: 0px solid #CCC !important;\nborder-left: 0px solid #CCC !important;\nborder-bottom: 0px solid #CCC !important;\nmargin: -5px 3px 0 5px !important;\nwidth: 250px !important;\n}\n\n.KC {\npadding: 10px 0px 5px 15px !important;\n}\n\n.Xt {\nbackground-color: transparent !important;\nborder: 0px solid #DDD !important;\n}\n}";
  936.  
  937. var css_Background_Image_Norm = ".CF.he {\nbackground: no-repeat url(" + Background_URL + ");\nposition: fixed;\nopacity: " + Background_Opacity + ";\n}\n\n#contentPane {\nbackground: no-repeat url(" + Background_URL + ");\nposition: fixed;\nopacity: " + Background_Opacity + ";\n}\n}";
  938.  
  939. var css_Background_Image_Tile = ".CF.he {\nbackground: url(" + Background_URL + ");\nposition: fixed;\nopacity: " + Background_Opacity + ";\n}\n\n#contentPane {\nbackground: url(" + Background_URL + ");\nposition: fixed;\nopacity: " + Background_Opacity + ";\n}\n}";
  940.  
  941. var css_Background_Color = "#contentPane {\nbackground: " + Background_Color + ";\n}\n\n.Vra {\nbackground: " + Background_Color + " !important;\n}\n}";
  942.  
  943. var css_Posts_Opacity = ".Sb, .Pvkdsd, .kJHn5, .Fg, .Hw, .bI, .ii, .Je, .EyKftc.HWTYYe .Ng, #sync_container, .Um8btf, .RWa.KiWa0b .Teb, .xWa, .ZX, .cuuzrf {\nbackground-color: transparent !important;\n}\n\n.r6Rtbe, .Om, .On, .EyKftc {\nbackground-color: rgba(245,245,245," + Posts_Opacity + ") !important;\n-webkit-border-radius: 0px !important;\nborder-radius: 0px !important;\n}\n\n.ZuZuKf, .xe, .i-j-h-tb-x, .Od.esw, .dk, .iYjCM, .wH3YRe, .c-b-T, .Rm {\nbackground-color: rgba(245,245,245," + Posts_Opacity + ") !important;\n}\n\n.a-q, .u8yTrb {\nbackground-color: rgba(255,255,255," + Posts_Opacity + ") !important;\n}\n.dJa, .Yo, .Bb, .Xp, .YA {\nbackground-color: transparent !important;\n}\n\n.Xb {\nbackground-color: rgba(245,245,245," + Posts_Opacity + ") !important;\n}\n\n.Teb, .gbnotify, .jt {\nbackground-color: rgba(245, 245, 245, " + Posts_Opacity + ") !important;\n}\n\n.woHNpb {\nopacity: 0 !important;\n}\n}";
  944.  
  945. //var css_Relevance_Aprox = ".gbrlvc {\nopacity: 0;\ntext-align: right;\nposition: absolute;\ncolor: #DD4B39;\nbackground-color: rgba(0, 0, 0, 0.6);\n-webkit-border-radius: 16px;\n-moz-border-radius: 16px;\nborder-radius: 16px;\n-webkit-transition:all .5s ease;\n-moz-transition:all .5s ease;\n-o-transition:all .5s ease;\nz-index: 1;\n}\n\n.gbrlvc:hover {\nopacity: 1;\ntext-align: right;\nposition: absolute;\ncolor: #DD4B39;\nbackground-color: rgba(0, 0, 0, 0.6);\n-webkit-border-radius: 16px;\n-moz-border-radius: 16px;\nborder-radius: 16px;\n-webkit-transition:all .5s ease;\n-moz-transition:all .5s ease;\n-o-transition:all .5s ease;\nz-index: 1;\n}\n}";
  946.  
  947. var css_Relevance_Aprox = ".gbrlvc:hover {opacity: 1;-webkit-transition: all .5s ease-in-out;font-weight: bold;}.gbrlvc {opacity: 0.9;position: absolute;background-color: #fff;-webkit-transition: all .5s ease-in-out;z-index: 1;font-weight: normal;font-size: 12px;}";
  948.  
  949. var css_Time_Div = ".Yc {font: 11px arial,sans-serif;margin-top: -7px;position: relative;-webkit-transition: opacity .218s;-moz-transition: opacity .218s;-o-transition: opacity .218s;transition: opacity .218s;filter: alpha(opacity=0);opacity: 0;}.Yc:hover {font: 11px arial,sans-serif;margin-top: -7px;position: relative;-webkit-transition: opacity .218s;-moz-transition: opacity .218s;-o-transition: opacity .218s;transition: opacity .218s;filter: alpha(opacity=1);opacity: 1;}";
  950.  
  951. var css_Time_Text = ".time {\n-webkit-transition:all 2s ease;\n-moz-transition:all 2s ease;\n-o-transition:all 2s ease;\nmax-height: 300px;\n}\n\n.time_Text{\nborder-radius: 16px;\nline-height: 32px;\nmargin-right: 6px;\n}\n}";
  952.  
  953. //var css_Auto_Refresh = ".pdsQUd.vqlG {\nvisibility: hidden;\n}\n\n.pdsQUd.vqlG.WrxPu.CVep0d {\nvisibility: visible !important;\n}\n}";
  954.  
  955. var css_Flip_Cards = ".Tr.TA {\n-webkit-perspective: 800;\npadding-top: 0px !important;\n}\n\n.Tr.TA .card.flipped {\n-webkit-transform: rotatey(180deg);\n}\n\n.Tr.TA .card {\n-webkit-transform-style: preserve-3d;\n-webkit-transition: 0.8s;\n}\n\n.Tr.TA .card .ge.lO {\nz-index: 2;\n}\n.Tr.TA .card .front {\nz-index: 1;\ncursor: pointer;\n}\n\n.Tr.TA .card .back {\n-webkit-transform: rotatey(180deg);\ncursor: pointer;\nheight: auto;\nwidth: auto;\n}\n\n.On {\nbackground-color: #fff;\nwidth: auto;\nmargin: 10px 0 20px 0;\n}\n}";
  956.  
  957. //var css_post_Animation = ".Sb {\n-webkit-transition: opacity ease 0.8s;\n}\n}";
  958.  
  959. var css_Weather_Now = ".content-box {\nborder-radius:3px;\nbox-shadow: rgba(0, 0, 0, 0.2) 0px 2px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px;\ndisplay: -webkit-box;\ncolor: #666;\n}\n\n.content-box h2 {\nfont-size: 22px;\nfont-weight: normal;\n}\n\n#box-weather {\n-webkit-box-orient: vertical;\npadding: 20px;\n}\n\n#box-weather h2 {\nmargin: 0px;\n}\n\n#weather-date {\nfont-size: 16px;\n}\n#weather-current {\n-webkit-box-align: center;\n-webkit-box-orient: horizontal;\ndisplay: -webkit-box;\npadding-top: 10px;\nwidth: 300px;\n}\n\n#weather-current-box {\n-webkit-box-orient: vertical;\ndisplay: -webkit-box;\nfont-size: 16px;\npadding-left: 10px;\nwidth: 140px;\n}\n\n#weather-current-icon {\nwidth: 96px;\nheight: 96px;\n}\n\n#weather-current-temperature {\n-webkit-box-align: start;\n-webkit-box-orient: horizontal;\ndisplay: -webkit-box;\n}\n\n#weather-temperature {\ncolor: #666;\ndisplay: -webkit-box;\nfont-size: 96px;\npadding-left: 20px;\n}\n\n#celsius {\ndisplay: -webkit-box;\nposition: relative;\ntop: 10px;\n}\n\n#weather-forecast-box {\n-webkit-box-orient: horizontal;\n-webkit-box-pack: justify;\ndisplay: -webkit-box;\npadding: 15px 0px 0 8px;\n}\n\n.weather-forecast div {\ncolor: #666;\nfont-size: 14px;\ntext-align: center;\ntext-transform: uppercase;\n}\n\n.weather-forecast img {\nwidth: 64px;\nheight: 64px;\n}\n\n.temperature-high {\ncolor: #666;\n}\n\n.temperature-low {\ncolor: #AAA;\n}\n\n#weather-geolocation-permission {\ndisplay: -webkit-box;\noverflow: hidden;\npadding-top: 16px;\n-webkit-transition: height 200ms;\n}\n\n#weather-geolocation-permission.hidden {\nheight: 0;\n}\n\n#weather-geolocation-permission a:hover {\ncolor: #000;\ntext-decoration: none;\n}\n\n.weather-forecast {\nborder-right: 2px solid #DDD;\npadding-right: 20px;\n}\n\n#weather-condition {\ntext-transform: uppercase;\n}\n\n.weather-forecast.last-forecast {\nborder: none;\n}\n}";
  960.  
  961. var css_Posts_Overflow = ".ee3yFe>.ChZ7Rc {\noverflow-x: hidden;\n}\n}";
  962.  
  963. GM_addStyle(css_Stream_Profile_Photo);
  964. GM_addStyle(css_Profile_Photo_Animations);
  965. //GM_addStyle(css_Auto_Refresh);
  966. GM_addStyle(css_Flip_Cards);
  967. //GM_addStyle(css_post_Animation);
  968. GM_addStyle(css_Weather_Now);
  969. GM_addStyle(css_Posts_Overflow);
  970. if (IYC_Animations == "Enabled")
  971. GM_addStyle(css_Upper_Right);
  972. else
  973. GM_addStyle(css_Icons);
  974. GM_addStyle(css_Settings_Card_Your_Photo);
  975. GM_addStyle(css_Mention_List);
  976. if (Remove_Borders == "Enabled")
  977. GM_addStyle(css_Notification_Photos_and_Border);
  978. if (NotiWin_Animations == "Enabled")
  979. GM_addStyle(css_Notifications_Animations);
  980. if (Btn_Animations == "Enabled")
  981. GM_addStyle(css_Buttons_Animations);
  982. if (ShareBox_Animations == "Enabled")
  983. GM_addStyle(css_Share_Box_Animations);
  984. if (Resize_NotiWindow !== "Default")
  985. GM_addStyle(css_Notifications_Resize_Arrangement);
  986. GM_addStyle(css_Notifications_Fix);
  987. if (Remove_Borders == "Enabled")
  988. GM_addStyle(css_Remove_Photos_Border);
  989. if (CmtBox_Animations == "Enabled")
  990. GM_addStyle(css_Comment_Box_Animations);
  991. GM_addStyle(css_Suggestions_Text_Arrangement);
  992. //if (Remove_Gaps == "Enabled")
  993. //GM_addStyle(css_Photo_Wall);
  994. if (Background_Content_Type == "Image" && Background_Display == "Tile") {
  995. GM_addStyle(css_Background_Image_Tile);
  996. GM_addStyle(css_Posts_Opacity);
  997. }
  998. else if (Background_Content_Type == "Image" && Background_Display == "Normal") {
  999. GM_addStyle(css_Background_Image_Norm);
  1000. GM_addStyle(css_Posts_Opacity);
  1001. }
  1002. else if (Background_Content_Type == "Color") {
  1003. GM_addStyle(css_Background_Color);
  1004. };
  1005. GM_addStyle(css_Relevance_Aprox);
  1006. if (Clock_Show == 'Show') {
  1007. //GM_addStyle(css_Time_Div);
  1008. GM_addStyle(css_Time_Text);
  1009. }
  1010.  
  1011. if (GIF_Avatars == "Enabled") {
  1012. function replaceImg(target) {
  1013. if (target && target.src) {
  1014. var distHeight = target.clientHeight != 0 ? target.clientHeight * 2 : 64;
  1015. target.src = target.src.replace(/s\d{2,}-c-k/g, 's' + distHeight + '-c')
  1016. .replace('photo.jpg', 'photo.gif')
  1017. .replace(/\?sz=\d{2,}/, '');
  1018. return target.src;
  1019. }
  1020. }
  1021.  
  1022. function batchReplace(targets) {
  1023. if (targets && targets.length)
  1024. for (var i = 0; i < targets.length ; i++)
  1025. replaceImg(targets[i]);
  1026. }
  1027.  
  1028. //Speacial preprocessing for Webkit Browsers.
  1029. batchReplace(document.body.getElementsByClassName('hE')); // Your Stream Profile Photo
  1030. //batchReplace(document.body.getElementsByClassName('Ep')); // Others Stream Profile Photo
  1031. batchReplace(document.body.getElementsByClassName('ho')); // Profile Photo in In Your Circles
  1032. batchReplace(document.body.getElementsByClassName('go')); // Profile Photo in Comments
  1033. //batchReplace(document.body.getElementsByClassName('Zb')); // In Your Circles Profile Page Photos
  1034. //batchReplace(document.body.getElementsByClassName('l-tk')); // Large Profile Photo in Settings
  1035.  
  1036. document.body.addEventListener('DOMNodeInserted', function (e) {
  1037. if (e.target.nodeType != 3 && e.target.tagName == 'DIV') {
  1038. batchReplace(e.target.getElementsByClassName('hE')); // Your Stream Profile Photo
  1039. //batchReplace(e.target.getElementsByClassName('rs Hk')); // Reshare Box Your Stream Profile Photo
  1040. //batchReplace(e.target.getElementsByClassName('Ep')); // Others Stream Profile Photo
  1041. batchReplace(e.target.getElementsByClassName('ho')); // Profile Photo in In Your Circles
  1042. batchReplace(e.target.getElementsByClassName('go')); // Profile Photo in Comments
  1043. batchReplace(e.target.getElementsByClassName('we')); // Profile Photo in Hover Card
  1044. batchReplace(e.target.getElementsByClassName('e4a')); // Notifications Profile Photos
  1045. //batchReplace(e.target.getElementsByClassName('l-tk')); // Your Large Profile Photo in Profile Page
  1046. batchReplace(e.target.getElementsByClassName('t-C-J')); // Profile Photos in Mention List
  1047. //batchReplace(e.target.getElementsByClassName('HPb')); // In Your Circles Profile Photos
  1048. //batchReplace(e.target.getElementsByClassName('Zb')); // Profile Photos of Hang out
  1049. //batchReplace(e.target.getElementsByClassName('L6')); // Sharebox Profile Photo
  1050. }
  1051. }, false);
  1052. };
  1053.  
  1054. function fillZero(v) {
  1055. if (v < 10) {
  1056. v = '0' + v;
  1057. }
  1058. return v;
  1059. }
  1060.  
  1061. function currentWeather() {
  1062. var languagePairs = {
  1063. '首页': { language: 'zh-CN' },
  1064. '主頁': { language: 'zh-HK' },
  1065. '首頁': { language: 'zh-TW' },
  1066. 'ホーム': { language: 'ja' },
  1067. 'Default': { language: 'en-US' }
  1068. }
  1069.  
  1070. var currentCondition, currentTempF, currentTempC, currentTemp, humidityChance, currentWind, highToday, lowToday, unitSystem, unitIndicator;
  1071. var todayWeatherImage, forecastDay0, forecastDay0Low, forecastDay0High, forecastDay0Condition, forecastDay0Image, forecastDay1, forecastDay1Low, forecastDay1High, forecastDay1Condition, forecastDay1Image, forecastDay2, forecastDay2Low, forecastDay2High, forecastDay2Condition, forecastDay2Image, forecastDay3, forecastDay3Low, forecastDay3High, forecastDay3Condition, forecastDay3Image;
  1072.  
  1073. var matchPair;
  1074. if (document.getElementsByClassName("lCd Hyc fJb").length > 0) {
  1075. matchPair = languagePairs[document.getElementsByClassName("lCd Hyc fJb")[0].textContent];
  1076. if (!matchPair)
  1077. matchPair = languagePairs['Default'];
  1078. }
  1079. else
  1080. matchPair = languagePairs['Default'];
  1081. var language = matchPair.language;
  1082.  
  1083. var fetchWeather = setInterval(function () {
  1084. if (localStorage["currentLatitude"] == "undefined" || localStorage["currentLatitude"] == undefined || localStorage["currentLongitude"] == "undefined" || localStorage["currentLongitude"] == undefined) {
  1085. navigator.geolocation.getCurrentPosition(function (position) {
  1086. console.log(position);
  1087. localStorage["currentLatitude"] = position.coords.latitude;
  1088. localStorage["currentLongitude"] = position.coords.longitude;
  1089. }, function (positionError) {
  1090. console.error(positionError);
  1091. });
  1092. }
  1093.  
  1094. if (localStorage["cityNameLocalized"] == "undefined" || localStorage["cityNameLocalized"] == undefined) {
  1095. var ajax = new XMLHttpRequest();
  1096. ajax.onreadystatechange = function () {
  1097. if (ajax.readyState == 4 && ajax.status == 200) {
  1098. var locationResponseXML = ajax.responseXML;
  1099. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  1100. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "locality") {
  1101. localStorage["cityNameLocalized"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  1102. break;
  1103. }
  1104. }
  1105. if (localStorage["cityNameLocalized"] == "undefined" || localStorage["cityNameLocalized"] == undefined || localStorage["cityNameLocalized"] == null || localStorage["cityNameLocalized"] == "") {
  1106. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  1107. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_3") {
  1108. localStorage["cityNameLocalized"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  1109. break;
  1110. }
  1111. }
  1112. }
  1113. if (localStorage["cityNameLocalized"] == "undefined" || localStorage["cityNameLocalized"] == undefined || localStorage["cityNameLocalized"] == null || localStorage["cityNameLocalized"] == "") {
  1114. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  1115. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_2") {
  1116. localStorage["cityNameLocalized"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  1117. break;
  1118. }
  1119. }
  1120. }
  1121. if (localStorage["cityNameLocalized"] == "undefined" || localStorage["cityNameLocalized"] == undefined || localStorage["cityNameLocalized"] == null || localStorage["cityNameLocalized"] == "") {
  1122. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  1123. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_1") {
  1124. localStorage["cityNameLocalized"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  1125. break;
  1126. }
  1127. }
  1128. }
  1129. }
  1130. };
  1131. ajax.open('GET', 'https://maps.googleapis.com/maps/api/geocode/xml?language=' + language + '&&latlng=' + localStorage["currentLatitude"] + ',' + localStorage["currentLongitude"] + '&&sensor=false&_reqid=' + (new Date().getTime() % 1000000) + '&rt=j', true);
  1132. ajax.send();
  1133. }
  1134. var currentDate = new Date();
  1135.  
  1136.  
  1137. GM_xmlhttpRequest({
  1138. method: "GET",
  1139. url: 'https://www.google.com/ig/api?hl=' + language + '&weather=' + localStorage["cityName1033"] + '&expflags=Dispatchers__force_signed_weather_api%3Afalse&oauth_signature=en&referrer=igoogle&_reqid=' + (new Date().getTime() % 1000000) + '&rt=j',
  1140. headers: {
  1141. "User-Agent": "Mozilla/5.0", // If not specified, navigator.userAgent will be used.
  1142. "Accept": "text/xml" // If not specified, browser defaults will be used.
  1143. },
  1144. onload: function (response) {
  1145. var responseXML = null;
  1146. // Inject responseXML into existing Object (only appropriate for XML content).
  1147. if (!response.responseXML) {
  1148. responseXML = new DOMParser()
  1149. .parseFromString(response.responseText, "text/xml");
  1150. }
  1151. if (localStorage["cityName1033"] == "undefined" || localStorage["cityName1033"] == undefined) {
  1152. var ajaxSecondFetch = new XMLHttpRequest();
  1153. ajaxSecondFetch.onreadystatechange = function () {
  1154. if (ajaxSecondFetch.readyState == 4 && ajaxSecondFetch.status == 200) {
  1155. var locationResponseXML = ajaxSecondFetch.responseXML;
  1156. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  1157. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "locality") {
  1158. localStorage["cityName1033"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  1159. break;
  1160. }
  1161. }
  1162. if (localStorage["cityName1033"] == "undefined" || localStorage["cityName1033"] == undefined || localStorage["cityName1033"] == null || localStorage["cityName1033"] == "") {
  1163. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  1164. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_3") {
  1165. localStorage["cityName1033"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  1166. break;
  1167. }
  1168. }
  1169. }
  1170. if (localStorage["cityName1033"] == "undefined" || localStorage["cityName1033"] == undefined || localStorage["cityName1033"] == null || localStorage["cityName1033"] == "") {
  1171. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  1172. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_2") {
  1173. localStorage["cityName1033"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  1174. break;
  1175. }
  1176. }
  1177. }
  1178. if (localStorage["cityName1033"] == "undefined" || localStorage["cityName1033"] == undefined || localStorage["cityName1033"] == null || localStorage["cityName1033"] == "") {
  1179. for (var i = 0; i < locationResponseXML.getElementsByTagName('type').length; i++) {
  1180. if (locationResponseXML.getElementsByTagName('type')[i].textContent == "administrative_area_level_1") {
  1181. localStorage["cityName1033"] = locationResponseXML.getElementsByTagName('type')[i].parentNode.getElementsByTagName("short_name")[0].textContent;
  1182. break;
  1183. }
  1184. }
  1185. }
  1186. localStorage["countryName"] = locationResponseXML.getElementsByTagName('result')[5].getElementsByTagName('long_name')[1].textContent;
  1187. }
  1188. };
  1189. ajaxSecondFetch.open('GET', 'https://maps.googleapis.com/maps/api/geocode/xml?language=en-US&latlng=' + localStorage["currentLatitude"] + ',' + localStorage["currentLongitude"] + '&&sensor=false&_reqid=' + (new Date().getTime() % 1000000) + '&rt=j', true);
  1190. ajaxSecondFetch.send();
  1191. }
  1192. else {
  1193. currentCondition = responseXML.getElementsByTagName("current_conditions")[0].childNodes[0].getAttribute("data");
  1194. currentTempF = responseXML.getElementsByTagName("current_conditions")[0].childNodes[1].getAttribute("data");
  1195. currentTempC = responseXML.getElementsByTagName("current_conditions")[0].childNodes[2].getAttribute("data");
  1196. humidityChance = responseXML.getElementsByTagName("current_conditions")[0].childNodes[3].getAttribute("data");
  1197. currentWind = responseXML.getElementsByTagName("current_conditions")[0].childNodes[5].getAttribute("data");
  1198. highToday = responseXML.getElementsByTagName("forecast_conditions")[0].childNodes[2].getAttribute("data");
  1199. lowToday = responseXML.getElementsByTagName("forecast_conditions")[0].childNodes[1].getAttribute("data");
  1200. unitSystem = responseXML.getElementsByTagName("forecast_information")[0].childNodes[6].getAttribute("data");
  1201. forecastDay0 = responseXML.getElementsByTagName("forecast_conditions")[0].childNodes[0].getAttribute("data");
  1202. forecastDay0Low = responseXML.getElementsByTagName("forecast_conditions")[0].childNodes[1].getAttribute("data");
  1203. forecastDay0High = responseXML.getElementsByTagName("forecast_conditions")[0].childNodes[2].getAttribute("data");
  1204. forecastDay0Condition = responseXML.getElementsByTagName("forecast_conditions")[0].childNodes[4].getAttribute("data");
  1205. forecastDay1 = responseXML.getElementsByTagName("forecast_conditions")[1].childNodes[0].getAttribute("data");
  1206. forecastDay1Low = responseXML.getElementsByTagName("forecast_conditions")[1].childNodes[1].getAttribute("data");
  1207. forecastDay1High = responseXML.getElementsByTagName("forecast_conditions")[1].childNodes[2].getAttribute("data");
  1208. forecastDay1Condition = responseXML.getElementsByTagName("forecast_conditions")[1].childNodes[4].getAttribute("data");
  1209. forecastDay2 = responseXML.getElementsByTagName("forecast_conditions")[2].childNodes[0].getAttribute("data");
  1210. forecastDay2Low = responseXML.getElementsByTagName("forecast_conditions")[2].childNodes[1].getAttribute("data");
  1211. forecastDay2High = responseXML.getElementsByTagName("forecast_conditions")[2].childNodes[2].getAttribute("data");
  1212. forecastDay2Condition = responseXML.getElementsByTagName("forecast_conditions")[2].childNodes[4].getAttribute("data");
  1213. forecastDay3 = responseXML.getElementsByTagName("forecast_conditions")[3].childNodes[0].getAttribute("data");
  1214. forecastDay3Low = responseXML.getElementsByTagName("forecast_conditions")[3].childNodes[1].getAttribute("data");
  1215. forecastDay3High = responseXML.getElementsByTagName("forecast_conditions")[3].childNodes[2].getAttribute("data");
  1216. forecastDay3Condition = responseXML.getElementsByTagName("forecast_conditions")[3].childNodes[4].getAttribute("data");
  1217. if (localStorage["countryName"] != 'United States' && language == 'en-US') {
  1218. if (document.getElementsByClassName("Tr TA").length > 0 && document.getElementsByClassName("Tr TA")[0].clientWidth >= 420) {
  1219. currentTemp = ((parseInt(currentTempF) - 32) / 9 * 5).toFixed(1);
  1220. highToday = ((parseInt(highToday) - 32) / 9 * 5).toFixed(1);
  1221. lowToday = ((parseInt(lowToday) - 32) / 9 * 5).toFixed(1);
  1222. forecastDay0High = ((parseInt(forecastDay0High) - 32) / 9 * 5).toFixed(1);
  1223. forecastDay0Low = ((parseInt(forecastDay0Low) - 32) / 9 * 5).toFixed(1);
  1224. forecastDay1High = ((parseInt(forecastDay1High) - 32) / 9 * 5).toFixed(1);
  1225. forecastDay1Low = ((parseInt(forecastDay1Low) - 32) / 9 * 5).toFixed(1);
  1226. forecastDay2High = ((parseInt(forecastDay2High) - 32) / 9 * 5).toFixed(1);
  1227. forecastDay2Low = ((parseInt(forecastDay2Low) - 32) / 9 * 5).toFixed(1);
  1228. forecastDay3High = ((parseInt(forecastDay3High) - 32) / 9 * 5).toFixed(1);
  1229. forecastDay3Low = ((parseInt(forecastDay3Low) - 32) / 9 * 5).toFixed(1);
  1230. }
  1231. else {
  1232. currentTemp = currentTempC;
  1233. highToday = Math.round((parseInt(highToday) - 32) / 9 * 5);
  1234. lowToday = Math.round((parseInt(lowToday) - 32) / 9 * 5);
  1235. forecastDay0High = Math.round((parseInt(forecastDay0High) - 32) / 9 * 5);
  1236. forecastDay0Low = Math.round((parseInt(forecastDay0Low) - 32) / 9 * 5);
  1237. forecastDay1High = Math.round((parseInt(forecastDay1High) - 32) / 9 * 5);
  1238. forecastDay1Low = Math.round((parseInt(forecastDay1Low) - 32) / 9 * 5);
  1239. forecastDay2High = Math.round((parseInt(forecastDay2High) - 32) / 9 * 5);
  1240. forecastDay2Low = Math.round((parseInt(forecastDay2Low) - 32) / 9 * 5);
  1241. forecastDay3High = Math.round((parseInt(forecastDay3High) - 32) / 9 * 5);
  1242. forecastDay3Low = Math.round((parseInt(forecastDay3Low) - 32) / 9 * 5);
  1243. }
  1244. unitIndicator = "C";
  1245. }
  1246. else if ((localStorage["countryName"] == 'United States' && language == 'en-US')) {
  1247. currentTemp = currentTempF;
  1248. unitIndicator = "F";
  1249. }
  1250. else {
  1251. if (document.getElementsByClassName("Tr TA").length > 0 && document.getElementsByClassName("Tr TA")[0].clientWidth >= 420)
  1252. currentTemp = ((parseInt(currentTempF) - 32) / 9 * 5).toFixed(1);
  1253. else
  1254. currentTemp = currentTempC;
  1255. unitIndicator = "C";
  1256. }
  1257. }
  1258.  
  1259. GM_log([
  1260. response.status,
  1261. response.statusText,
  1262. response.readyState,
  1263. response.responseHeaders,
  1264. response.responseText,
  1265. response.finalUrl,
  1266. responseXML
  1267. ].join("\n"));
  1268. }
  1269. });
  1270. if (currentCondition != undefined) {
  1271. if (document.getElementsByClassName("Ee fP back")[0] != undefined) {
  1272. if (currentCondition.match(/Partly Cloudy|Mostly Cloudy|局部多云|局部有雲|ところにより曇り/gi)) {
  1273. todayWeatherImage = "https://ssl.gstatic.com/onebox/weather/128/partly_cloudy.png";
  1274. }
  1275. else if (currentCondition.match(/Thunderstorm|storm|雷|激しい風雨/gi)) {
  1276. todayWeatherImage = "https://ssl.gstatic.com/onebox/weather/128/rain_s_cloudy.png";
  1277. }
  1278. else if (currentCondition.match(/rain|drizzle|showers|雨/gi)) {
  1279. todayWeatherImage = "https://ssl.gstatic.com/onebox/weather/128/rain.png";
  1280. }
  1281. else if (currentCondition.match(/cloudy|overcast|云|雲|阴|陰|曇り/gi)) {
  1282. todayWeatherImage = "https://ssl.gstatic.com/onebox/weather/128/cloudy.png";
  1283. }
  1284. else if (currentCondition.match(/fog|haze|hazy|雾|霧|曇/gi)) {
  1285. todayWeatherImage = "https://ssl.gstatic.com/onebox/weather/128/fog.png";
  1286. }
  1287. else if (currentCondition.match(/Partly Sunny|Mostly Sunny|晴间多云|多雲時晴|ところにより晴れ/gi)) {
  1288. todayWeatherImage = "https://ssl.gstatic.com/onebox/weather/128/partly_cloudy.png";
  1289. }
  1290. else if (currentCondition.match(/clear|晴/gi)) {
  1291. todayWeatherImage = "https://ssl.gstatic.com/onebox/weather/128/sunny.png";
  1292. }
  1293. if (forecastDay0Condition.match(/Partly Cloudy|Mostly Cloudy|局部多云|局部有雲|ところにより曇り/gi)) {
  1294. forecastDay0Image = "https://ssl.gstatic.com/onebox/weather/64/partly_cloudy.png";
  1295. }
  1296. else if (forecastDay0Condition.match(/Thunderstorm|storm|雷|激しい風雨/gi)) {
  1297. forecastDay0Image = "https://ssl.gstatic.com/onebox/weather/64/rain_s_cloudy.png";
  1298. }
  1299. else if (forecastDay0Condition.match(/rain|drizzle|showers|雨/gi)) {
  1300. forecastDay0Image = "https://ssl.gstatic.com/onebox/weather/64/rain.png";
  1301. }
  1302. else if (forecastDay0Condition.match(/cloudy|overcast|云|雲|阴|陰|曇り/gi)) {
  1303. forecastDay0Image = "https://ssl.gstatic.com/onebox/weather/64/cloudy.png";
  1304. }
  1305. else if (forecastDay0Condition.match(/fog|haze|hazy|雾|霧|曇/gi)) {
  1306. forecastDay0Image = "https://ssl.gstatic.com/onebox/weather/64/fog.png";
  1307. }
  1308. else if (forecastDay0Condition.match(/Partly Sunny|Mostly Sunny|晴间多云|多雲時晴|ところにより晴れ/gi)) {
  1309. forecastDay0Image = "https://ssl.gstatic.com/onebox/weather/64/partly_cloudy.png";
  1310. }
  1311. else if (forecastDay0Condition.match(/clear|晴/gi)) {
  1312. forecastDay0Image = "https://ssl.gstatic.com/onebox/weather/64/sunny.png";
  1313. }
  1314. if (forecastDay1Condition.match(/Partly Cloudy|Mostly Cloudy|局部多云|局部有雲|ところにより曇り/gi)) {
  1315. forecastDay1Image = "https://ssl.gstatic.com/onebox/weather/64/partly_cloudy.png";
  1316. }
  1317. else if (forecastDay1Condition.match(/Thunderstorm|storm|雷|激しい風雨/gi)) {
  1318. forecastDay1Image = "https://ssl.gstatic.com/onebox/weather/64/rain_s_cloudy.png";
  1319. }
  1320. else if (forecastDay1Condition.match(/rain|drizzle|showers|雨/gi)) {
  1321. forecastDay1Image = "https://ssl.gstatic.com/onebox/weather/64/rain.png";
  1322. }
  1323. else if (forecastDay1Condition.match(/cloudy|overcast|云|雲|阴|陰|曇り/gi)) {
  1324. forecastDay1Image = "https://ssl.gstatic.com/onebox/weather/64/cloudy.png";
  1325. }
  1326. else if (forecastDay1Condition.match(/fog|haze|hazy|雾|霧|曇/gi)) {
  1327. forecastDay1Image = "https://ssl.gstatic.com/onebox/weather/64/fog.png";
  1328. }
  1329. else if (forecastDay1Condition.match(/Partly Sunny|Mostly Sunny|晴间多云|多雲時晴|ところにより晴れ/gi)) {
  1330. forecastDay1Image = "https://ssl.gstatic.com/onebox/weather/64/partly_cloudy.png";
  1331. }
  1332. else if (forecastDay1Condition.match(/clear|晴/gi)) {
  1333. forecastDay1Image = "https://ssl.gstatic.com/onebox/weather/64/sunny.png";
  1334. }
  1335. if (forecastDay2Condition.match(/Partly Cloudy|Mostly Cloudy|局部多云|局部有雲|ところにより曇り/gi)) {
  1336. forecastDay2Image = "https://ssl.gstatic.com/onebox/weather/64/partly_cloudy.png";
  1337. }
  1338. else if (forecastDay2Condition.match(/Thunderstorm|storm|雷|激しい風雨/gi)) {
  1339. forecastDay2Image = "https://ssl.gstatic.com/onebox/weather/64/rain_s_cloudy.png";
  1340. }
  1341. else if (forecastDay2Condition.match(/rain|drizzle|showers|雨/gi)) {
  1342. forecastDay2Image = "https://ssl.gstatic.com/onebox/weather/64/rain.png";
  1343. }
  1344. else if (forecastDay2Condition.match(/cloudy|overcast|云|雲|阴|陰|曇り/gi)) {
  1345. forecastDay2Image = "https://ssl.gstatic.com/onebox/weather/64/cloudy.png";
  1346. }
  1347. else if (forecastDay2Condition.match(/fog|haze|hazy|雾|霧|曇/gi)) {
  1348. forecastDay2Image = "https://ssl.gstatic.com/onebox/weather/64/fog.png";
  1349. }
  1350. else if (forecastDay2Condition.match(/Partly Sunny|Mostly Sunny|晴间多云|多雲時晴|ところにより晴れ/gi)) {
  1351. forecastDay2Image = "https://ssl.gstatic.com/onebox/weather/64/partly_cloudy.png";
  1352. }
  1353. else if (forecastDay2Condition.match(/clear|晴/gi)) {
  1354. forecastDay2Image = "https://ssl.gstatic.com/onebox/weather/64/sunny.png";
  1355. }
  1356. if (forecastDay3Condition.match(/Partly Cloudy|Mostly Cloudy|局部多云|局部有雲|ところにより曇り/gi)) {
  1357. forecastDay3Image = "https://ssl.gstatic.com/onebox/weather/64/partly_cloudy.png";
  1358. }
  1359. else if (forecastDay3Condition.match(/Thunderstorm|storm|雷|激しい風雨/gi)) {
  1360. forecastDay3Image = "https://ssl.gstatic.com/onebox/weather/64/rain_s_cloudy.png";
  1361. }
  1362. else if (forecastDay3Condition.match(/rain|drizzle|showers|雨/gi)) {
  1363. forecastDay3Image = "https://ssl.gstatic.com/onebox/weather/64/rain.png";
  1364. }
  1365. else if (forecastDay3Condition.match(/cloudy|overcast|云|雲|阴|陰|曇り/gi)) {
  1366. forecastDay3Image = "https://ssl.gstatic.com/onebox/weather/64/cloudy.png";
  1367. }
  1368. else if (forecastDay3Condition.match(/fog|haze|hazy|雾|霧|曇/gi)) {
  1369. forecastDay3Image = "https://ssl.gstatic.com/onebox/weather/64/fog.png";
  1370. }
  1371. else if (forecastDay3Condition.match(/Partly Sunny|Mostly Sunny|晴间多云|多雲時晴|ところにより晴れ/gi)) {
  1372. forecastDay3Image = "https://ssl.gstatic.com/onebox/weather/64/partly_cloudy.png";
  1373. }
  1374. else if (forecastDay3Condition.match(/clear|晴/gi)) {
  1375. forecastDay3Image = "https://ssl.gstatic.com/onebox/weather/64/sunny.png";
  1376. }
  1377. }
  1378. }
  1379. var text = '<div class="content-box" id="box-weather"><h2>' + localStorage["cityNameLocalized"] + '</h2><div id="weather-date">' + new Date().toLocaleString().replace(new Date().toLocaleString().match(/\d+:\d{2}:\d{2}\s*\w*/), new Date().toLocaleString().match(/(\d+:\d{2}):\d{2}(\s*\w*)/)[1] + new Date().toLocaleString().match(/(\d+:\d{2}):\d{2}(\s*\w*)/)[2]) + '</div><div id="weather-current"><div><img id="weather-current-icon" src="' + todayWeatherImage + '" title="' + currentCondition + '"><div id="weather-current-box"><div id="weather-condition">' + currentCondition + '</div><div id="weather-wind">' + currentWind + '</div><div id="weather-humidity">' + humidityChance + '</div></div></div><div id="weather-current-temperature"><div id="weather-temperature">' + currentTemp + '°</div></div></div><div id="weather-forecast-box"><div class="weather-forecast"><div>' + forecastDay0 + '</div><img src="' + forecastDay0Image + '" title="' + forecastDay0Condition + '"><div><span class="temperature-high">' + forecastDay0High + '°</span><br><span class="temperature-low">' + forecastDay0Low + '°</span></div></div><div class="weather-forecast"><div>' + forecastDay1 + '</div><img src="' + forecastDay1Image + '" title="' + forecastDay1Condition + '"><div><span class="temperature-high">' + forecastDay1High + '°</span><br><span class="temperature-low">' + forecastDay1Low + '°</span></div></div><div class="weather-forecast"><div>' + forecastDay2 + '</div><img src="' + forecastDay2Image + '" title="' + forecastDay2Condition + '"><div><span class="temperature-high">' + forecastDay2High + '°</span><br><span class="temperature-low">' + forecastDay2Low + '°</span></div></div><div class="weather-forecast last-forecast"><div>' + forecastDay3 + '</div><img src="' + forecastDay3Image + '" title="' + forecastDay3Condition + '"><div><span class="temperature-high">' + forecastDay3High + '°</span><br><span class="temperature-low">' + forecastDay3Low + '°</span></div></div></div><div id="weather-geolocation-permission" class="hidden">Using current location.</div></div>';
  1380. if (currentTemp != undefined) {
  1381. if (document.getElementsByClassName('Ee fP back')[0] != undefined)
  1382. document.getElementsByClassName("Ee fP back")[0].innerHTML = text;
  1383. }
  1384. }, 10000);
  1385. }
  1386.  
  1387. currentWeather();