WME Color Speeds

Adds colours to road segments to show their speed

目前为 2016-09-11 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name WME Color Speeds
  3. // @name:fr WME Color Speeds
  4. // @version 1.1.1
  5. // @description Adds colours to road segments to show their speed
  6. // @description:fr Colorisation des segments selon leurs vitesses.
  7. // @include https://www.waze.com/editor/*
  8. // @include https://www.waze.com/*/editor/*
  9. // @include https://beta.waze.com/editor/*
  10. // @include https://beta.waze.com/*/editor/*
  11. // @exclude https://www.waze.com/user/*
  12. // @exclude https://www.waze.com/*/user/*
  13. // @namespace https://gf.qytechs.cn/scripts/14044-wme-color-speeds
  14. // @author French Script Team
  15. // @copyright Sebiseba, seb-d59 & DummyD2 - 2015
  16. // ==/UserScript==
  17.  
  18. var WMECSpeeds = {};
  19. var CSpeeds_Version = "1.1.1";
  20.  
  21. var CSpeeds_OldVersion = CSpeeds_Version;
  22.  
  23. var icon_undo="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";
  24. var icon_delete="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";
  25. var icon_submit="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";
  26. var icon_edit="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";
  27.  
  28. var couleurs=new Array("(255,0,128)","(255,0,160)","(255,0,192)","(255,0,224)","(255,0,255)","(224,0,255)","(192,0,255)","(160,0,255)","(128,0,255)","(96,0,255)","(64,0,255)","(32,0,255)","(0,0,255)","(0,32,255)","(0,64,255)","(0,96,255)","(0,128,255)","(0,160,255)","(0,192,255)","(0,224,255)","(0,255,255)","(0,255,224)","(0,255,192)","(0,255,160)","(0,255,128)","(0,255,96)","(0,255,64)","(0,255,32)","(0,255,0)","(32,255,0)","(64,255,0)","(96,255,0)","(128,255,0)","(160,255,0)","(192,255,0)","(224,255,0)","(255,255,0)","(255,224,0)","(255,192,0)","(255,160,0)","(255,128,0)","(255,96,0)","(255,64,0)","(255,0,0)","Pink","LightPink","HotPink","DeepPink","PaleVioletRed","MediumVioletRed","LightSalmon","Salmon","DarkSalmon","LightCoral","IndianRed","Crimson","FireBrick","DarkRed","Red","OrangeRed","Tomato","Coral","DarkOrange","Orange","Yellow","LightYellow","LemonChiffon","LightGoldenrodYellow","PapayaWhip","Moccasin","PeachPuff","PaleGoldenrod","Khaki","DarkKhaki","Gold","Cornsilk","BlanchedAlmond","Bisque","NavajoWhite","Wheat","BurlyWood","Tan","RosyBrown","SandyBrown","Goldenrod","DarkGoldenrod","Peru","Chocolate","SaddleBrown","Sienna","Brown","Maroon","DarkOliveGreen","Olive","OliveDrab","YellowGreen","LimeGreen","Lime","LawnGreen","Chartreuse","GreenYellow","SpringGreen","MediumSpringGreen","LightGreen","PaleGreen","DarkSeaGreen","MediumAquamarine","MediumSeaGreen","SeaGreen","ForestGreen","Green","DarkGreen","Aqua","Cyan","LightCyan","PaleTurquoise","Aquamarine","Turquoise","MediumTurquoise","DarkTurquoise","LightSeaGreen","CadetBlue","DarkCyan","Teal","LightSteelBlue","PowderBlue","LightBlue","SkyBlue","LightSkyBlue","DeepSkyBlue","DodgerBlue","CornflowerBlue","SteelBlue","RoyalBlue","Blue","MediumBlue","DarkBlue","Navy","MidnightBlue","Lavender","Thistle","Plum","Violet","Orchid","Fuchsia","Magenta","MediumOrchid","MediumPurple","BlueViolet","DarkViolet","DarkOrchid","DarkMagenta","Purple","Indigo","DarkSlateBlue","RebeccaPurple","SlateBlue","MediumSlateBlue","Snow","Honeydew","MintCream","Azure","AliceBlue","GhostWhite","WhiteSmoke","Seashell","Beige","OldLace","FloralWhite","Ivory","AntiqueWhite","Linen","LavenderBlush","MistyRose","LightSlateGray","SlateGray","DarkSlateGray","White","#EEE","Gainsboro","#DDD","LightGrey","#CCC","Silver","#BBB","#AAA","DarkGray","#999","#888","Gray","#777","DimGray","#666","#555","#444","#333","#222","#111","Black");
  29. //var couleurs=new Array("#000","#111","#222","#333","#444","#555","#666","#777","#888","#999","#AAA","#BBB","#CCC","#DDD","#EEE","#300","#600","#900","#C00","#F00","#030","#330","#630","#930","#C30","#F30","#060","#360","#660","#960","#C60","#F60","#090","#390","#690","#990","#C90","#F90","#0C0","#3C0","#6C0","#9C0","#CC0","#FC0","#0F0","#3F0","#6F0","#9F0","#CF0","#FF0","#003","#303","#603","#903","#C03","#F03","#033","#333","#633","#933","#C33","#F33","#063","#363","#663","#963","#C63","#F63","#093","#393","#693","#993","#C93","#F93","#0C3","#3C3","#6C3","#9C3","#CC3","#FC3","#0F3","#3F3","#6F3","#9F3","#CF3","#FF3","#006","#306","#606","#906","#C06","#F06","#036","#336","#636","#936","#C36","#F36","#066","#366","#666","#966","#C66","#F66","#096","#396","#696","#996","#C96","#F96","#0C6","#3C6","#6C6","#9C6","#CC6","#FC6","#0F6","#3F6","#6F6","#9F6","#CF6","#FF6","#009","#309","#609","#909","#C09","#F09","#039","#339","#639","#939","#C39","#F39","#069","#369","#669","#969","#C69","#F69","#099","#399","#699","#999","#C99","#F99","#0C9","#3C9","#6C9","#9C9","#CC9","#FC9","#0F9","#3F9","#6F9","#9F9","#CF9","#FF9","#00C","#30C","#60C","#90C","#C0C","#F0C","#03C","#33C","#63C","#93C","#C3C","#F3C","#06C","#36C","#66C","#96C","#C6C","#F6C","#09C","#39C","#69C","#99C","#C9C","#F9C","#0CC","#3CC","#6CC","#9CC","#CCC","#FCC","#0FC","#3FC","#6FC","#9FC","#CFC","#FFC","#00F","#30F","#60F","#90F","#C0F","#F0F","#03F","#33F","#63F","#93F","#C3F","#F3F","#06F","#36F","#66F","#96F","#C6F","#F6F","#09F","#39F","#69F","#99F","#C9F","#F9F","#0CF","#3CF","#6CF","#9CF","#CCF","#FCF","#0FF","#3FF","#6FF","#9FF","#CFF","#FFF");
  30.  
  31. // speedColors[unit][speed] = color //-----> Default
  32. WMECSpeeds.speedColors = {
  33. kmh : {10:"#ff6232",20:"#ff6232",30:"#ff6232",40:"#f9805a",45:"#fc9a3c",50:"#ffad2d",60:"#fffc28",70:"#afff23",80:"#09ff34",90:"#14ff88",100:"#0fffdf",110:"#0ac2ff",130:"#076aff"},
  34. mph : {5:"#ff6232",10:"#ff6232",15:"#ff6232",20:"#f9805a",25:"#fc9a3c",30:"#ffad2d",35:"#fffc28",40:"#afff23",45:"#09ff34",50:"#14ff88",55:"#0fffdf",60:"#0ac2ff",65:"#076aff",70:"#0055dd",75:"#0036db",80:"#0b07ff",85:"#8f07ff"},
  35. Others : "#f00",
  36. };
  37.  
  38. colorsUS = {Alabama:{}, Alaska:{}, Arizona:{}, Arkansas:{}, California:{}, Colorado:{}, Connecticut:{}, Delaware:{}, District_of_Columbia:{}, Florida:{}, Georgia:{}, Hawaii:{}, Idaho:{}, Illinois:{}, Indiana:{}, Iowa:{}, Kansas:{}, Kentucky:{}, Louisiana:{}, Maine:{}, Maryland:{}, Massachusetts:{}, Michigan:{}, Minnesota:{}, Mississippi:{}, Missouri:{}, Montana:{}, Nebraska:{}, Nevada:{}, New_Hampshire:{}, New_Jersey:{}, New_Mexico:{}, New_York:{}, North_Carolina:{}, North_Dakota:{}, Ohio:{}, Oklahoma:{}, Oregon:{}, Pennsylvania:{}, Rhode_Island:{}, South_Carolina:{}, South_Dakota:{}, Tennessee:{}, Texas:{}, Utah:{}, Vermont:{}, Virginia:{}, Washington:{}, West_Virginia:{}, Wisconsin:{}, Wyoming:{}, United_States_Minor_Outlying_Islands:{}, United_States_Virgin_Islands:{}};
  39.  
  40.  
  41.  
  42. var MultiplePalette=false;
  43.  
  44. var unit;
  45. var selectedState;
  46. var debug=true;
  47. var colorspeeds_mapLayer=[];
  48.  
  49. var zoom=0;
  50. var RoadToScan = [3,6,7,4,2,1,8,20,17,999];
  51. //var RoadUpToStreet = [2,3,6,7];
  52. //var highway = [3,6,7];
  53.  
  54. var typeOfRoad = {
  55. //---Type Road-----------
  56. 3: {"name":"Freeways","checked":true,"zoom":0},
  57. 6: {"name":"Major Highway","checked":true,"zoom":1},
  58. 7: {"name":"Minor Highway","checked":true,"zoom":2},
  59. 4: {"name":"Ramps","checked":true,"zoom":2},
  60. 2: {"name":"Primary Street","checked":false,"zoom":3},
  61. 1: {"name":"Streets","checked":false,"zoom":4},
  62. 8: {"name":"Dirt roads","checked":false,"zoom":4},
  63. 20: {"name":"Parking Lot Road","checked":false,"zoom":4},
  64. 17: {"name":"Private Road","checked":false,"zoom":4},
  65. 999: {"name":"Roundabout","checked":false,"zoom":false}
  66. };
  67.  
  68. WMECSpeeds.typeOfRoad = typeOfRoad;
  69.  
  70. // 5: "Walking Trails",
  71. // 10: "Pedestrian Bw",
  72. // 14: "Ferry",
  73. // 16: "Stairway",
  74. // 17: "Private Road",
  75. // 18: "Railroad",
  76. // 19: "Runway/Taxiway"
  77. // 21: "Service Road"
  78.  
  79. //WMECSpeeds.selectedRoadType = [];
  80.  
  81. var dashStyles = [
  82. "Solid",
  83. "ShortDash",
  84. "ShortDot",
  85. "ShortDashDot",
  86. "ShortDashDotDot",
  87. "Dot",
  88. "Dash",
  89. "LongDash",
  90. "DashDot",
  91. "LongDashDot",
  92. "LongDashDotDot"
  93. ];
  94.  
  95. WMECSpeeds.visibility = true;
  96.  
  97. var offsetValue = 3;
  98. var opacityValue = 0.8;
  99. var thicknessValue = 6;
  100.  
  101. // *********************
  102. // ** HELPER FUNCTION **
  103. // *********************
  104.  
  105. function log(msg, obj)
  106. {
  107. if (obj==null)
  108. console.log(GM_info.script.name + " v" + CSpeeds_Version + " - " + msg);
  109. else if (debug)
  110. console.debug(GM_info.script.name + " v" + CSpeeds_Version + " - " + msg + " " ,obj);
  111. }
  112.  
  113. function getId(node) {
  114. return document.getElementById(node);
  115. }
  116. function getElementsByClassName(classname, node) {
  117. node || (node = document.getElementsByTagName("body")[0]);
  118. for (var a = [], re = new RegExp("\\b" + classname + "\\b"), els = node.getElementsByTagName("*"), i = 0, j = els.length;i < j;i++) {
  119. re.test(els[i].className) && a.push(els[i]);
  120. }
  121. return a;
  122. }
  123. function getFunctionWithArgs(func, args) {
  124. return (
  125. function () {
  126. var json_args = JSON.stringify(args);
  127. return function() {
  128. var args = JSON.parse(json_args);
  129. func.apply(this, args);
  130. }
  131. }
  132. )();
  133. }
  134. function IsJsonString(str) {
  135. try {
  136. JSON.parse(str);
  137. } catch (e) {
  138. return false;
  139. }
  140. return true;
  141. }
  142.  
  143. function cloneObj(obj){
  144. var copy = JSON.parse(JSON.stringify(obj));
  145. return copy;
  146. }
  147.  
  148. function Rgb2String(rgb) {
  149. rgb = roundDecimals(rgb);
  150. return "rgb(" + rgb.r +","+ rgb.g +","+ rgb.b +")";
  151. //return "rgb(" + Math.round(rgb.r) +","+ Math.round(rgb.g) +","+ Math.round(rgb.b) +")";
  152. }
  153.  
  154. function color2Rgb(c){
  155. var typ, arr = [], arrlength, i, match, rgb={}, colornames = [], colorrgbs = [], colorHex = [];
  156. c = c.toLowerCase();
  157. if (c.substr(0, 3) == "rgb") {
  158. typ = c.substr(0, 3);
  159. c = c.substr(3);
  160. arrlength = 3;
  161. c = c.replace("(", "");
  162. c = c.replace(")", "");
  163. arr = c.split(",");
  164. if (typ == "rgb") {
  165. if (arr.length != arrlength) {
  166. rgb = {r : 0, g : 0, b : 0 };
  167. //continue;
  168. }
  169. for (i = 0; i < arrlength; i++) {
  170. arr[i] = arr[i].trim();
  171. if (arr[i] == "" || arr[i] == " ") {arr[i] = "0"; }
  172. if (isNaN(arr[i])) {
  173. rgb = {r : 0, g : 0, b : 0, name : null};
  174. break;
  175. }
  176. if (i < 3) {
  177. arr[i] = parseInt(arr[i]);
  178. if (arr[i] > 255) {arr[i] = 255;}
  179. }
  180. }
  181. colorrgbs = getColorArr('rgbs');
  182. for (i = 0; i < colorrgbs.length; i++) {
  183. if (JSON.stringify(arr) == JSON.stringify(colorrgbs[i])) {
  184. colornames = getColorArr('names');
  185. rgb = {r : arr[0], g : arr[1], b : arr[2], name : colornames[i]};
  186. break;
  187. }else rgb = {r : arr[0], g : arr[1], b : arr[2], name : null};
  188. }
  189. }
  190. } else {
  191. match = false;
  192. colornames = getColorArr('names');
  193. for (i = 0; i < colornames.length; i++) {
  194. if (c.toLowerCase() == colornames[i].toLowerCase()) {
  195. colorrgbs = getColorArr('rgbs');
  196. match = true;
  197. rgb = {
  198. r : colorrgbs[i][0],
  199. g : colorrgbs[i][1],
  200. b : colorrgbs[i][2],
  201. name : colornames[i]
  202. };
  203. break;
  204. }
  205. }
  206. if (match == false) {
  207. c = c.replace("#", "");
  208. colorHex = getColorArr('hexs');
  209. for (i = 0; i < colorHex.length; i++) {
  210. if (c == colorHex[i]) {
  211. colornames = getColorArr('names');
  212. rgb["name"] = colornames[i];
  213. break;
  214. }
  215. }
  216. if (c.length == 3) {c = c.substr(0,1) + c.substr(0,1) + c.substr(1,1) + c.substr(1,1) + c.substr(2,1) + c.substr(2,1);}
  217. arr[0] = parseInt(c.substr(0,2), 16);
  218. arr[1] = parseInt(c.substr(2,2), 16);
  219. arr[2] = parseInt(c.substr(4,2), 16);
  220. for (i = 0; i < 3; i++) {
  221. if (isNaN(arr[i])) {
  222. rgb = {r : 0, g : 0, b : 0, name : null};
  223. break;
  224. }
  225. }
  226. rgb["r"] = arr[0];
  227. rgb["g"] = arr[1];
  228. rgb["b"] = arr[2];
  229. }
  230. }
  231. rgb = roundDecimals(rgb);
  232. //log("color2Rgb rgb",rgb);
  233. return rgb;
  234. }
  235. function getColorArr(x) {
  236. if (x == "names") {return ['AliceBlue','AntiqueWhite','Aqua','Aquamarine','Azure','Beige','Bisque','Black','BlanchedAlmond','Blue','BlueViolet','Brown','BurlyWood','CadetBlue','Chartreuse','Chocolate','Coral','CornflowerBlue','Cornsilk','Crimson','Cyan','DarkBlue','DarkCyan','DarkGoldenRod','DarkGray','DarkGrey','DarkGreen','DarkKhaki','DarkMagenta','DarkOliveGreen','DarkOrange','DarkOrchid','DarkRed','DarkSalmon','DarkSeaGreen','DarkSlateBlue','DarkSlateGray','DarkSlateGrey','DarkTurquoise','DarkViolet','DeepPink','DeepSkyBlue','DimGray','DimGrey','DodgerBlue','FireBrick','FloralWhite','ForestGreen','Fuchsia','Gainsboro','GhostWhite','Gold','GoldenRod','Gray','Grey','Green','GreenYellow','HoneyDew','HotPink','IndianRed','Indigo','Ivory','Khaki','Lavender','LavenderBlush','LawnGreen','LemonChiffon','LightBlue','LightCoral','LightCyan','LightGoldenRodYellow','LightGray','LightGrey','LightGreen','LightPink','LightSalmon','LightSeaGreen','LightSkyBlue','LightSlateGray','LightSlateGrey','LightSteelBlue','LightYellow','Lime','LimeGreen','Linen','Magenta','Maroon','MediumAquaMarine','MediumBlue','MediumOrchid','MediumPurple','MediumSeaGreen','MediumSlateBlue','MediumSpringGreen','MediumTurquoise','MediumVioletRed','MidnightBlue','MintCream','MistyRose','Moccasin','NavajoWhite','Navy','OldLace','Olive','OliveDrab','Orange','OrangeRed','Orchid','PaleGoldenRod','PaleGreen','PaleTurquoise','PaleVioletRed','PapayaWhip','PeachPuff','Peru','Pink','Plum','PowderBlue','Purple','RebeccaPurple','Red','RosyBrown','RoyalBlue','SaddleBrown','Salmon','SandyBrown','SeaGreen','SeaShell','Sienna','Silver','SkyBlue','SlateBlue','SlateGray','SlateGrey','Snow','SpringGreen','SteelBlue','Tan','Teal','Thistle','Tomato','Turquoise','Violet','Wheat','White','WhiteSmoke','Yellow','YellowGreen']; }
  237. if (x == "hexs") {return ['f0f8ff','faebd7','00ffff','7fffd4','f0ffff','f5f5dc','ffe4c4','000000','ffebcd','0000ff','8a2be2','a52a2a','deb887','5f9ea0','7fff00','d2691e','ff7f50','6495ed','fff8dc','dc143c','00ffff','00008b','008b8b','b8860b','a9a9a9','a9a9a9','006400','bdb76b','8b008b','556b2f','ff8c00','9932cc','8b0000','e9967a','8fbc8f','483d8b','2f4f4f','2f4f4f','00ced1','9400d3','ff1493','00bfff','696969','696969','1e90ff','b22222','fffaf0','228b22','ff00ff','dcdcdc','f8f8ff','ffd700','daa520','808080','808080','008000','adff2f','f0fff0','ff69b4','cd5c5c','4b0082','fffff0','f0e68c','e6e6fa','fff0f5','7cfc00','fffacd','add8e6','f08080','e0ffff','fafad2','d3d3d3','d3d3d3','90ee90','ffb6c1','ffa07a','20b2aa','87cefa','778899','778899','b0c4de','ffffe0','00ff00','32cd32','faf0e6','ff00ff','800000','66cdaa','0000cd','ba55d3','9370db','3cb371','7b68ee','00fa9a','48d1cc','c71585','191970','f5fffa','ffe4e1','ffe4b5','ffdead','000080','fdf5e6','808000','6b8e23','ffa500','ff4500','da70d6','eee8aa','98fb98','afeeee','db7093','ffefd5','ffdab9','cd853f','ffc0cb','dda0dd','b0e0e6','800080','663399','ff0000','bc8f8f','4169e1','8b4513','fa8072','f4a460','2e8b57','fff5ee','a0522d','c0c0c0','87ceeb','6a5acd','708090','708090','fffafa','00ff7f','4682b4','d2b48c','008080','d8bfd8','ff6347','40e0d0','ee82ee','f5deb3','ffffff','f5f5f5','ffff00','9acd32']; }
  238. if (x == "rgbs") {return [[240,248,255],[250,235,215],[0,255,255],[127,255,212],[240,255,255],[245,245,220],[255,228,196],[0,0,0],[255,235,205],[0,0,255],[138,43,226],[165,42,42],[222,184,135],[95,158,160],[127,255,0],[210,105,30],[255,127,80],[100,149,237],[255,248,220],[220,20,60],[0,255,255],[0,0,139],[0,139,139],[184,134,11],[169,169,169],[169,169,169],[0,100,0],[189,183,107],[139,0,139],[85,107,47],[255,140,0],[153,50,204],[139,0,0],[233,150,122],[143,188,143],[72,61,139],[47,79,79],[47,79,79],[0,206,209],[148,0,211],[255,20,147],[0,191,255],[105,105,105],[105,105,105],[30,144,255],[178,34,34],[255,250,240],[34,139,34],[255,0,255],[220,220,220],[248,248,255],[255,215,0],[218,165,32],[128,128,128],[128,128,128],[0,128,0],[173,255,47],[240,255,240],[255,105,180],[205,92,92],[75,0,130],[255,255,240],[240,230,140],[230,230,250],[255,240,245],[124,252,0],[255,250,205],[173,216,230],[240,128,128],[224,255,255],[250,250,210],[211,211,211],[211,211,211],[144,238,144],[255,182,193],[255,160,122],[32,178,170],[135,206,250],[119,136,153],[119,136,153],[176,196,222],[255,255,224],[0,255,0],[50,205,50],[250,240,230],[255,0,255],[128,0,0],[102,205,170],[0,0,205],[186,85,211],[147,112,219],[60,179,113],[123,104,238],[0,250,154],[72,209,204],[199,21,133],[25,25,112],[245,255,250],[255,228,225],[255,228,181],[255,222,173],[0,0,128],[253,245,230],[128,128,0],[107,142,35],[255,165,0],[255,69,0],[218,112,214],[238,232,170],[152,251,152],[175,238,238],[219,112,147],[255,239,213],[255,218,185],[205,133,63],[255,192,203],[221,160,221],[176,224,230],[128,0,128],[102,51,153],[255,0,0],[188,143,143],[65,105,225],[139,69,19],[250,128,114],[244,164,96],[46,139,87],[255,245,238],[160,82,45],[192,192,192],[135,206,235],[106,90,205],[112,128,144],[112,128,144],[255,250,250],[0,255,127],[70,130,180],[210,180,140],[0,128,128],[216,191,216],[255,99,71],[64,224,208],[238,130,238],[245,222,179],[255,255,255],[245,245,245],[255,255,0],[154,205,50]]; }
  239. }
  240. function roundDecimals(c) {
  241. c.r = Math.round(c.r);
  242. c.g = Math.round(c.g);
  243. c.b = Math.round(c.b);
  244. return c;
  245. }
  246.  
  247. function Check_Unit() {
  248. if (CSpeedsModel.isImperial) { unit = "mph"; }
  249. else { unit = "kmh"; }
  250. log(unit);
  251. if (getId('CStable')) {
  252. getId('CStable').innerHTML="";
  253. getId('CSroadType').innerHTML="";
  254. LoadSettings();
  255. getId('unitvalue').innerHTML="("+unit+")";
  256. }
  257. }
  258.  
  259.  
  260. function CSTestVersion() {
  261. if (CSpeeds_OldVersion != CSpeeds_Version) {
  262. var CSpeeds_Maj = GM_info.script.name + " v" + CSpeeds_Version + "\n";
  263. if (CSpeedsI18n == "fr"){
  264. CSpeeds_Maj +="Quoi de neuf:\n";
  265. CSpeeds_Maj +="Compatibilité WME Beta.\n";
  266. }else {
  267. CSpeeds_Maj +="What's new:\n";
  268. CSpeeds_Maj +="WME Beta compatibility.";
  269. }
  270. rectif_WMECSpeeds_speedColors();
  271. alert(CSpeeds_Maj);
  272. WMECSpeeds.version = CSpeeds_Version;
  273. }
  274. }
  275.  
  276.  
  277. function rectif_WMECSpeeds_speedColors(){
  278. /*************************************************************************
  279. /* Executé une seul fois pour:
  280. Enlever touts les espace dans WMECSpeeds.speedColors rgb()
  281. formatage de toutes les valeur memorisé en format rgb()
  282. /**************************************************************************/
  283. for (var valSpeed in WMECSpeeds.speedColors.kmh) {
  284. var color = color2Rgb(WMECSpeeds.speedColors.kmh[valSpeed]);
  285. WMECSpeeds.speedColors.kmh[valSpeed] = Rgb2String(color);
  286. }
  287. for (var valSpeed in WMECSpeeds.speedColors.mph) {
  288. var color = color2Rgb(WMECSpeeds.speedColors.mph[valSpeed]);
  289. WMECSpeeds.speedColors.mph[valSpeed] = Rgb2String(color);
  290. }
  291. var color = color2Rgb(WMECSpeeds.speedColors.Others);
  292. WMECSpeeds.speedColors.Others = Rgb2String(color);
  293.  
  294. for (var state in WMECSpeeds.speedColors.US){
  295. if (WMECSpeeds.speedColors.US[state].hasOwnProperty("kmh")){
  296. for (var valSpeed in WMECSpeeds.speedColors.US[state].kmh) {
  297. var color = color2Rgb(WMECSpeeds.speedColors.US[state].kmh[valSpeed]);
  298. WMECSpeeds.speedColors.US[state].kmh[valSpeed] = Rgb2String(color);
  299. }
  300. }
  301. if (WMECSpeeds.speedColors.US[state].hasOwnProperty("mph")){
  302. for (var valSpeed in WMECSpeeds.speedColors.US[state].mph) {
  303. var color = color2Rgb(WMECSpeeds.speedColors.US[state].mph[valSpeed]);
  304. WMECSpeeds.speedColors.US[state].mph[valSpeed] = Rgb2String(color);
  305. }
  306. }
  307. }
  308. log("WMECSpeeds.speedColors ",WMECSpeeds.speedColors);
  309. saveOption();
  310. }
  311. function saveOption(){
  312. localStorage.setItem('WMEColorSpeeds', JSON.stringify(WMECSpeeds));
  313. }
  314.  
  315.  
  316. // *************
  317. // ** INIT **
  318. // *************
  319. function CSpeeds_bootstrap() {
  320. if (typeof unsafeWindow === "undefined") {
  321. unsafeWindow = ( function () {
  322. var dummyElem = document.createElement('p');
  323. dummyElem.setAttribute('onclick', 'return window;');
  324. return dummyElem.onclick();
  325. }) ();
  326. }
  327.  
  328. /* begin running the code! */
  329. log("starting");
  330. CSpeeds_init();
  331. }
  332.  
  333.  
  334. function CSpeeds_init(){
  335. // Waze object needed
  336. CSpeedsWaze = unsafeWindow.Waze;
  337. if(typeof(CSpeedsWaze) === 'undefined'){
  338. if (debug) { console.error("WME ColorSpeeds - CSpeedsWaze : NOK"); }
  339. window.setTimeout(CSpeeds_init, 500);
  340. return;
  341. }
  342. CSpeedsMap = CSpeedsWaze.map;
  343. if(typeof(CSpeedsMap) == 'undefined'){
  344. if (debug) { console.error("WME ColorSpeeds - CSpeedsmap : NOK"); }
  345. window.setTimeout(CSpeeds_init, 500);
  346. return;
  347. }
  348. CSpeedsModel = CSpeedsWaze.model;
  349. if(typeof(CSpeedsModel) == 'undefined'){
  350. if (debug) { console.error("WME ColorSpeeds - CSpeedsModel DOM : NOK"); }
  351. window.setTimeout(CSpeeds_init, 500);
  352. return;
  353. }
  354. CSpeedsCountries = CSpeedsModel.countries;
  355. if(typeof(CSpeedsCountries) == 'undefined'){
  356. if (debug) { console.error("WME ColorSpeeds - CSpeedsCountries DOM : NOK"); }
  357. window.setTimeout(CSpeeds_init, 500);
  358. return;
  359. }
  360. if(typeof(CSpeedsCountries.top) == 'undefined'){
  361. if (debug) { console.error("WME ColorSpeeds - CSpeedsCountries.top DOM : NOK"); }
  362. window.setTimeout(CSpeeds_init, 500);
  363. return;
  364. }
  365. if(typeof(CSpeedsCountries.top.name) == 'undefined'){
  366. if (debug) { console.error("WME ColorSpeeds - CSpeedsCountries.top.name DOM : NOK"); }
  367. window.setTimeout(CSpeeds_init, 500);
  368. return;
  369. }
  370. // OpenLayers
  371. CSpeedOpenLayers = unsafeWindow.OpenLayers;
  372. if(typeof(CSpeedOpenLayers) === 'undefined'){
  373. if (debug) { console.error("WME ColorSpeeds - OpenLayers : NOK"); }
  374. window.setTimeout(CSpeeds_init, 500);
  375. return;
  376. }
  377. // Traductions
  378. CSpeedsI18n = unsafeWindow.I18n.locale;
  379. if(typeof(CSpeedsI18n) == 'undefined'){
  380. if (debug) { console.error("WME ColorSpeeds - CSpeedsI18n : NOK"); }
  381. setTimeout(CSpeeds_init, 500);
  382. return;
  383. }
  384. // Waze GUI needed
  385. CSpeedshandle = getId("user-info");
  386. if(typeof(CSpeedshandle) == 'undefined'){
  387. if (debug) { console.error("WME ColorSpeeds - CSpeedshandle : NOK"); }
  388. setTimeout(CSpeeds_init, 500);
  389. return;
  390. }
  391. CSpeedshandleClass = getElementsByClassName("nav-tabs", CSpeedshandle)[0];
  392. if(typeof(CSpeedshandleClass) === 'undefined'){
  393. if (debug) { console.error("WME ColorSpeeds - CSpeedshandleClass : NOK"); }
  394. setTimeout(CSpeeds_init, 500);
  395. return;
  396. }
  397. CSpeedshandleClass2 = getElementsByClassName("tab-content", CSpeedshandle)[0];
  398. if(typeof(CSpeedshandleClass2) === 'undefined'){
  399. if (debug) { console.error("WME ColorSpeeds - CSpeedshandleClass2 : NOK"); }
  400. setTimeout(CSpeeds_init, 500);
  401. return;
  402. }
  403.  
  404. // Verify localStorage. Init if empty or not correct
  405. if (typeof(localStorage.WMEColorSpeeds) !== "undefined" && IsJsonString(localStorage.getItem('WMEColorSpeeds'))) {
  406. WMECSpeeds = JSON.parse(localStorage.WMEColorSpeeds);
  407. if (WMECSpeeds.speedColors.Others === undefined) WMECSpeeds.speedColors.Others = "#f00";
  408. if (WMECSpeeds.speedColors.US === undefined) WMECSpeeds.speedColors.US = cloneObj(colorsUS);
  409. if (WMECSpeeds.MultiplePalette === undefined) WMECSpeeds.MultiplePalette = MultiplePalette;
  410. if (WMECSpeeds.offsetValue === undefined) WMECSpeeds.offsetValue = offsetValue;
  411. if (WMECSpeeds.opacityValue === undefined) WMECSpeeds.opacityValue = opacityValue;
  412. if (WMECSpeeds.thicknessValue === undefined) WMECSpeeds.thicknessValue = thicknessValue;
  413. for (var key in typeOfRoad) {
  414. if (WMECSpeeds.typeOfRoad.hasOwnProperty(key) === false ){
  415. WMECSpeeds.typeOfRoad[key] = cloneObj(typeOfRoad[key]);
  416. }
  417. }
  418. if (WMECSpeeds.version === undefined) {CSpeeds_OldVersion = 0;
  419. }else if (WMECSpeeds.version !== undefined) { CSpeeds_OldVersion = WMECSpeeds.version;}
  420. WMECSpeeds.MultiplePalette = (CSpeedsCountries.top.name == "United States")? WMECSpeeds.MultiplePalette : false;
  421. log("init ok");
  422. }else {
  423. localStorage.setItem('WMEColorSpeeds', JSON.stringify(WMECSpeeds));
  424. setTimeout(CSpeeds_init, 500);
  425. return;
  426. }
  427. //======================================================
  428.  
  429. // Translation
  430. if (CSpeedsI18n == "fr") {
  431. CSlang = new Array("Vitesses","Configuration des Couleurs","Couleurs","Ajouter nouvelle vitesse","Supprimer","Annuler","Autres","Modifier","Type de route","Zoom","Rouge","Vert","Bleu","Valider","Decalage","Opacite","Epaisseur","Rond-Point");
  432. }
  433. else {
  434. CSlang = new Array("Speeds","Color Control Panel","Colors","Add new speed","Delete","Cancel","Others","Edit","Road type","Zoom","Red","Green","Blue","Validate","Offset","Opacity","Thickness","Roundabound");
  435. }
  436. Check_Unit();
  437.  
  438. // WME Layers check
  439. var layers = CSpeedsMap.getLayersBy("uniqueName","__WME_Color_Speeds");
  440. if(layers.length == 0) {
  441. var colorspeeds_style = new CSpeedOpenLayers.Style({
  442. pointRadius: 2,
  443. fontWeight: "normal",
  444. label : "${labelText}",
  445. fontFamily: "Tahoma, Courier New",
  446. labelOutlineColor: "#FFFFFF",
  447. labelOutlineWidth: 2,
  448. fontColor: '#000000',
  449. fontSize: "10px"
  450. });
  451.  
  452. colorspeeds_mapLayer = new CSpeedOpenLayers.Layer.Vector("Color Speeds", {
  453. displayInLayerSwitcher: true,
  454. uniqueName: "__WME_Color_Speeds",
  455. styleMap: new CSpeedOpenLayers.StyleMap(colorspeeds_style)
  456. });
  457.  
  458. I18n.translations.en.layers.name["__WME_Color_Speeds"] = "Color Speeds";
  459. CSpeedsMap.addLayer(colorspeeds_mapLayer);
  460. colorspeeds_mapLayer.setVisibility(WMECSpeeds.visibility);
  461.  
  462. }
  463. //log('colorspeeds_mapLayer ',colorspeeds_mapLayer);
  464. // Then running
  465. CSpeeds_css();
  466. getElementsByClassName('btn-group')[0].onclick=(function(){ Check_Unit(); });
  467. }
  468.  
  469.  
  470.  
  471.  
  472. function CSpeeds_css() {
  473. var Scss = document.createElement("style");
  474. Scss.type = "text/css";
  475. var css =".CScontent {width:255px; margin-left:10px; box-shadow: 0 4px 10px #aaa;}";
  476. css +=".divStateChoise {width:250px; margin-left:10px;}";
  477. css +=".divHeadline {height:26px; font-weight:bold; padding-top:2px; border:2px solid #3d3d3d; background-color:#BEDCE5;}";
  478. css +=".divContent {clear:both;height:26px; border:2px solid #3d3d3d; border-top:0;}";
  479. css +=".divContentZoom { clear:both; height:26px; border:2px solid #3d3d3d; border-top:0;}";
  480. css +=".divc {float:center; text-align:center;}";
  481. css +=".divl {float:left; text-align:center;}";
  482. css +=".divll {float:left; text-align:left;}";
  483. css +=".divr {float:right; text-align:center;}";
  484. css +=".speed {margin-top:2px; width:65px; height:20px; color:#59899e; font-weight:bold; vertical-align: middle;}";
  485. css +=".divcolor { width:80px; height:17px; margin:4px 0 0 0; vertical-align: middle;}";
  486. css +=".CStype {margin-top:2px; margin-left:10px; height:20px; color:#59899e; font-weight:bold; text-align:left; vertical-align: middle;}";
  487. css +=".CScheck { float:left; width:22px; height:22px;}";
  488. css +=".CSzoom {margin-top:2px; height:20px; color:#59899e; font-weight:bold; vertical-align: middle}";
  489. css +="#newspeed {width:65px; height:26px; font-weight:bold;text-align:center;}";
  490. css +="#editzoom { display:none;}";
  491. css +="#newvalzoom {width:45px; height:24px; font-weight:bold;text-align:center;}";
  492. css +=".CScontentConf {width:280px; margin-left:5px;}";
  493. css +=".divContentConf {clear:both; line-height:24px; height:28px;}";
  494. css +=".valColor {color:#59899e; font-weight:bold;}";
  495. css +="#valRed {width:80px; height:28px; font-weight:bold; color:red;text-align:center;}";
  496. css +="#valGreen {width:80px; height:28px; font-weight:bold; color:green;text-align:center;}";
  497. css +="#valBlue {width:80px; height:28px; font-weight:bold; color:blue;text-align:center;}";
  498. css +="#valOffset {width:80px; height:28px; font-weight:bold;text-align:center;}";
  499. css +="#valOpacity {width:80px; height:28px; font-weight:bold;text-align:center;}";
  500. css +="#valThickness {width:80px; height:28px; font-weight:bold;text-align:center;}";
  501. css +="#ConfColor.dropdown-menu li:hover, #ConfColor+.dropdown-menu li:active, #ConfColor+.dropdown-menu li:focus { cursor: pointer; outline: #3B99FC dotted 1px; }";
  502. css +="#ConfColor.btn { box-shadow: inset 0px -1px 0px rgba(0,0,0,0.2); border-radius: 4px; border: 1px solid rgba(0,0,0,0.25); height:22px; width:90px; }";
  503. css +="#nameColor {width:120px; height:22px;}";
  504. //css +="#ConfDash.dropdown-menu li:hover, #ConfDash+.dropdown-menu li:active, #ConfDash+.dropdown-menu li:focus { cursor: pointer; outline: #3B99FC dotted 1px; }";
  505. //css +="#ConfDash.btn { box-shadow: inset 0px -1px 0px rgba(0,0,0,0.2); border-radius: 4px; border: 1px solid rgba(0,0,0,0.25); height:22px; width:90px; }";
  506. Scss.innerHTML = css;
  507. document.body.appendChild(Scss);
  508. CSpeeds_Mainhtml();
  509. }
  510.  
  511.  
  512. function init_CSpeeds_cfgdialog(){
  513. var CSpeeds_cfgdialog = document.createElement('div');
  514. CSpeeds_cfgdialog.id = 'CSpeeds_cfgdialog';
  515. //CSpeeds_cfgdialog.style.fontSize = '90%';
  516. CSpeeds_cfgdialog.style.display = 'none';
  517. CSpeeds_cfgdialog.style.top='10px';
  518. CSpeeds_cfgdialog.style.left='-30px';
  519. CSpeeds_cfgdialog.style.width='290px';
  520. CSpeeds_cfgdialog.style.height='700px';
  521. CSpeeds_cfgdialog.style.marginLeft='20px';
  522. CSpeeds_cfgdialog.style.borderRadius='10px';
  523. CSpeeds_cfgdialog.style.border='2px solid #BEDCE5';
  524. CSpeeds_cfgdialog.style.position= 'relative';
  525. //CSpeeds_cfgdialog.style.padding= '.2em';
  526. CSpeeds_cfgdialog.style.overflow= 'auto';
  527. CSpeeds_cfgdialog.style.background= 'rgba(255, 255, 255, 1)';
  528.  
  529. var content = "<div style='clear:both; padding-top:10px;'></div>";
  530. //content += "<div class='divc' style='width:400px; font-weight:bold;'> WME Color Speeds - "+ CSlang[1]+":</div>";
  531. content += "<div class='divc' style='width:200px; font-weight:bold;'>"+ CSlang[1]+":</div>";
  532. content += "<div style='clear:both; padding-top:10px;'></div>";
  533. //header table
  534. content += "<div class='CScontentConf'>";
  535. // Edit other color
  536. content += "<div class='divContentConf' id='Conf_Others' style='display:none;'>";
  537. content += "<div class='divll' style='width:70px;font-weight:bold;'>"+ CSlang[0]+": </div>";
  538. content += "<div class='divll' style='width:60px;font-weight:bold;'>"+ CSlang[6] +"</div>";
  539. content += "<div class='divl' style='width:45px;'>&nbsp;</div>";
  540. content += "<div style='clear:both; padding-top:10px;'></div>";
  541. content += "<div class='divll' style='width:70px;font-weight:bold;'>"+ CSlang[2] +": </div>";
  542. content += "</div>";
  543. // Edit speed color
  544. content += "<div class='divContentConf' id='Conf_Color' style='display:none;'>";
  545. content += "<div class='divll' style='width:70px;font-weight:bold;'>"+ CSlang[0]+": </div>";
  546. content += "<div class='divll speed' style='width:60px;'><input type='text' value='' id='newspeed'/></div>";
  547. content += "<div class='divl' id='unitvalue' style='width:45px;font-size:11px;font-weight:bold;line-height:20px;'>("+unit+")</div>";
  548. content += "<div style='clear:both; padding-top:10px;'></div>";
  549. content += "<div class='divll' style='width:70px;font-weight:bold;'>"+ CSlang[2] +":</div>";
  550. content += "</div>";
  551. content += "<div class='divl dropdown' style='width:90px; text-align:left;'><button id='ConfColor' class='btn dropdown-toggle' style='background-color:"+WMECSpeeds.speedColors.Others+";' type='button' data-toggle='dropdown'></button><ul class='dropdown-menu' style='height: 400px; overflow: scroll; margin: 0; padding: 0; min-width: 90px;'>";
  552. for (var i=0; couleurs[i]; ++i) {
  553. var test = (couleurs[i].match(/\(/)) ? true : false;
  554. switch(test) {
  555. case true:
  556. content +="<li style='background-color:rgb"+ couleurs[i] +"'>&nbsp;</li>";
  557. break;
  558. case false:
  559. content +="<li style='background-color:"+ couleurs[i] +"'>&nbsp;</li>";
  560. break;
  561. }
  562. }
  563. content +="</ul></div>";
  564. content += "<span class='divl valColor' id=nameColor></span>";
  565. content += "</div>";
  566. content += "<div style='clear:both; padding-top:10px;'></div>";
  567. // Red Value
  568. content += "<div class='CScontentConf'>";
  569. content += "<div class='divContentConf'>";
  570. content += "<div class='divll' style='width:60px;font-weight:bold; color:red;'>"+ CSlang[10]+":</div>";
  571. content += "<div style='clear:both; padding-top:2px;'></div>";
  572. content += "<div class='divl valColor' style='width:80px; height:28px;'><input type='number' max='255' min='0' value='' id='valRed' pattern='[0-9]{3}' /></div>";
  573. content += "<div class='divr'><input id='sliderRed' type='range' max='255' min='0' style='width:180px;height:24px;'></div>";
  574. content += "</div>";
  575.  
  576. // Green Value
  577. content += "<div style='clear:both; padding-top:10px;'></div>";
  578. content += "<div class='divContentConf'>";
  579. content += "<div class='divll' style='width:60px;font-weight:bold; color:green;'>"+ CSlang[11]+":</div>";
  580. content += "<div style='clear:both; padding-top:2px;'></div>";
  581. content += "<div class='divl valColor' style='width:80px; height:28px;'><input type='number' max='255' min='0' value='' id='valGreen' pattern='[0-9]{3}' /></div>";
  582. content += "<div class='divr'><input id='sliderGreen' type='range' max='255' min='0' style='width:180px;height:24px;'></div>";
  583. content += "</div>";
  584. content += "<div style='clear:both; padding-top:10px;'></div>";
  585. // Bleu Value
  586. content += "<div class='divContentConf'>";
  587. content += "<div class='divll' style='width:60px;font-weight:bold; color:blue;'>"+ CSlang[12]+":</div>";
  588. content += "<div style='clear:both; padding-top:2px;'></div>";
  589. content += "<div class='divl valColor' style='width:80px; height:28px;'><input type='number' max='255' min='0' value='' id='valBlue' pattern='[0-9]{3}' /></div>";
  590. content += "<div class='divr'><input id='sliderBlue' type='range' max='255' min='0' style='width:180px;height:24px;'></div>";
  591. content += "</div>";
  592.  
  593. content += "<div style='clear:both; padding-top:10px;'></div>";
  594. content += "<div class='divr' style='width:40px; height:40x'><a href='#'><img id='cancel' style='width:20px;' title='"+ CSlang[5] +"' src='data:image/png;base64,"+ icon_undo +"' /></a></div>";
  595. content += "<div class='divr' style='width:40px; height:40x;'><a href='#'><img id='submit' style='width:20px;' title='"+ CSlang[13] +"' src='data:image/png;base64,"+ icon_submit +"' /></a></div>";
  596. //content += "<div class='divc' style='width:270px; font-weight:bold;'><button id='OkButton'>Ok</button></div>";
  597. content += "</div>";
  598. CSpeeds_cfgdialog.innerHTML = content;
  599. //document.body.appendChild(CSpeeds_cfgdialog);
  600. //CSpeedshandleClass2.appendChild(CSpeeds_cfgdialog);
  601. getId('sidepanel-colorspeeds').appendChild(CSpeeds_cfgdialog);
  602. }
  603.  
  604.  
  605. // *************
  606. // ** HTML **
  607. // *************
  608.  
  609. function CSpeeds_Mainhtml() {
  610. //Create content in CSpeeds's tab
  611. var newtab = document.createElement('li');
  612. newtab.innerHTML = "<a href='#sidepanel-colorspeeds' data-toggle='tab'><span class='fa fa-dashboard' title='"+ CSlang[0] +"'></span></a>";
  613. CSpeedshandleClass.appendChild(newtab);
  614.  
  615. var addon = document.createElement('section');
  616. // colorspeeds header
  617. var content = "<div style='float:left; margin-left:5px;'><b><a href='https://gf.qytechs.cn/scripts/14044-wme-color-speeds' target='_blank'><u>WME Color Speeds</u></a></b> v"+ CSpeeds_Version +"</div>";
  618. content += "<div id='colorspeedsDiv'>";
  619. // Mutiple pallete
  620. content += "<div style='clear:both; padding-top:10px;'></div>";
  621. content += "<div class='divStateChoise' id='stateChoise' style='display:block;'><input type='checkbox' class='CScheck' id='cbMultiplePalette'>&nbsp;Multiple Palette of color.";
  622. content += "<div style='clear:both; padding-top:10px;'></div>"; //Couleurs pour </div>";
  623. content += "<select id='selectState' style='height:22px; active:none;'>";
  624. for (var state in WMECSpeeds.speedColors.US) { content +="<option value='"+state+"'>"+state.replace(/_/g, ' ')+"</option>";}
  625. content += "</select></div>";
  626. //header Speed table
  627. content += "<div style='clear:both; padding-top:10px;'></div><div class='CScontent'>";
  628. content += "<div class='divHeadline'><div class='divl' style='width:60px;'>"+ CSlang[0]+"</div><div class='divr' id='unitvalue' style='width:45px;font-size:11px;line-height:20px;'>("+unit+")</div><div class='divr' style='width:130px;'>"+ CSlang[2] +"</div></div>";
  629.  
  630. // Speed table
  631. content += "<div class='divContent'><div class='divl speed' style='width:60px;'>"+ CSlang[6] +"</div>";
  632. content += "<div class='divr' style='width:20px;'>&nbsp;</div>";
  633. content += "<div class='divr' style='width:20px;'><a href='#'><img id='edit_others' style='width:16px;' title='"+ CSlang[7] +"' src='data:image/png;base64,"+ icon_edit +"' /></a></div>";
  634. content += "<div class='divr' style='width:120px;'><div id='color_others' class='divcolor' style='background-color:"+WMECSpeeds.speedColors.Others+";'>&nbsp;</div></div></div>";
  635. content += "<div id='CStable'></div></div><div id='divadd'></div>";
  636. // header Type road
  637. content += "<br><div style='clear:both; padding-top:10px;'></div><div class='CScontent'>";
  638. content += "<div class='divHeadline'><div class='divl' style='width:120px;'>"+ CSlang[8]+"</div><div class='divr' style='width:60px; margin-right:20px;'>"+ CSlang[9] +"</div></div>";
  639. // edit zoom
  640. content += "<div class='divContent' id='editzoom'><div class='divl speed' style='width:110px;'><span id='texttype'></span></div>";
  641. content += "<div class='divr' style='width:20px;'><a href='#'><img id='cancelZoom' style='width:20px;' title='"+ CSlang[5] +"' src='data:image/png;base64,"+ icon_undo +"' /></a></div>";
  642. content += "<div class='divr' style='width:20px;'><a href='#'><img id='submitZoom' style='width:20px;' title='"+ CSlang[13] +"' src='data:image/png;base64,"+ icon_submit +"' /></a></div>";
  643. content += "<div class='divr speed' style='width:60px;'><input type='text' value='' id='newvalzoom'/></div>";
  644. content +="</div>";
  645. content += "<div id='CSroadType'></div></div>";
  646. // offset Value
  647. content += "<br><div style='clear:both; padding-top:10px;'></div>";
  648. content += "<div class='divContentConf'>";
  649. content += "<div class='divll' style='width:65px;font-weight:bold;color:#59899e;'>"+ CSlang[14]+":</div>";
  650. content += "<div style='clear:both; padding-top:2px;'></div>";
  651. content += "<div class='divl valColor' style='width:80px; height:28px;'><input type='number' id='valOffset' min='1' max='10' value='' pattern='[0-9]{2}'/></div>";
  652. content += "<div class='divr'><input id='sliderOffset' type='range' max='10' min='1' step='1' style='width:180px;height:24px;'></div>";
  653. content += "</div>";
  654. // Opacity Value
  655. content += "<div style='clear:both; padding-top:10px;'></div>";
  656. content += "<div class='divContentConf'>";
  657. content += "<div class='divll' style='width:65px;font-weight:bold;color:#59899e;'>"+ CSlang[15]+":</div>";
  658. content += "<div style='clear:both; padding-top:2px;'></div>";
  659. content += "<div class='divl valColor' style='width:80px; height:28px;'><input type='number' id='valOpacity' min='20' max='100' value='' pattern='[0-9]{3}'/></div>";
  660. content += "<div class='divr'><input id='sliderOpacity' type='range' max='100' min='20' step='1' style='width:180px;height:24px;'></div>";
  661. content += "</div>";
  662. // Thickness Value
  663. content += "<div style='clear:both; padding-top:10px;'></div>";
  664. content += "<div class='divContentConf'>";
  665. content += "<div class='divll' style='width:65px;font-weight:bold;color:#59899e;'>"+ CSlang[16]+":</div>";
  666. content += "<div style='clear:both; padding-top:2px;'></div>";
  667. content += "<div class='divl valColor' style='width:80px; height:28px;'><input type='number' id='valThickness' min='2' max='10' value='' pattern='[0-9]{2}'/></div>";
  668. content += "<div class='divr'><input id='sliderThickness' type='range' max='10' min='2' step='1' style='width:180px;height:24px;'></div>";
  669. content += "</div>";
  670.  
  671. /*
  672. // Dash Style
  673. content += "<div class='divContentConf'>";
  674. content += "<div style='clear:both; padding-top:10px;'></div>";
  675. content += "<div class='divll' style='width:140px;font-weight:bold;color:#59899e;'>Dash Style:</div>";
  676. content += "<div class='divl dropdown' style='width:90px; text-align:left;'><button id='ConfDash' class='btn dropdown-toggle' style='background-color:rgb(255,255,255);' type='button' data-toggle='dropdown'></button><ul class='dropdown-menu' style='height: 400px; overflow: scroll; margin: 0; padding: 0; min-width: 90px;'>";
  677. for (var i=0; dashStyles[i]; ++i) {
  678. content +="<li>&nbsp;"+ dashStyles[i] +"&nbsp;</li>";
  679. }
  680. content += "</ul></div>";
  681. */
  682.  
  683.  
  684. content += "</div>";
  685. addon.innerHTML = content;
  686. addon.id = "sidepanel-colorspeeds";
  687. addon.className = "tab-pane";
  688. CSpeedshandleClass2.appendChild(addon);
  689. init_CSpeeds_cfgdialog();
  690. getId('divadd').innerHTML = "<br/><center><input type='button' id='addbutton' name='add' value='"+ CSlang[3] +"' /></center>";
  691. //getId('divadd').innerHTML +="<br/><center><input type='button' id='supspeed' name='btnSupspeed' value='supspeed' /></center>";
  692. getId('addbutton').onclick = (function() {
  693. getId('Conf_Others').style.display = "none";
  694. getId('Conf_Color').style.display = "block";
  695. getId('colorspeedsDiv').style.display = "none";
  696. getId('newspeed').value="";
  697. //getId('ConfColor_speed').style.backgroundColor="#fff";
  698. getId('ConfColor').style.backgroundColor="#fff";
  699. CSpeeds_cfgdialog.style.display= 'block';
  700. var c = getId('ConfColor').style.backgroundColor;
  701. c = color2Rgb(c);
  702. actualiseColorRGB(c);
  703. });
  704. //getId('supspeed').onclick = (function() { delete WMECSpeeds.speedColors.US;});
  705. //log("CSpeedsModel.countries.top.name = "+CSpeedsModel.countries.top.name);
  706. getId('stateChoise').style.display = (CSpeedsCountries.top.name == "United States")? "block" : "none";
  707. if (WMECSpeeds.MultiplePalette==true){
  708. var stateToSelect = CSpeedsModel.states.top.name.replace(/ /g, '_');
  709. for (var index=0; getId('selectState').options[index].value != stateToSelect; index++) {};
  710. getId('selectState').options[index].selected=true;
  711. }
  712. getId('valOffset').value = WMECSpeeds.offsetValue;
  713. getId('sliderOffset').value = WMECSpeeds.offsetValue;
  714. getId('valOpacity').value = Number(WMECSpeeds.opacityValue*100).toFixed(0);
  715. getId('sliderOpacity').value = Number(WMECSpeeds.opacityValue*100).toFixed(0);
  716. getId('valThickness').value = WMECSpeeds.thicknessValue;
  717. getId('sliderThickness').value = WMECSpeeds.thicknessValue;
  718. CSTestVersion();
  719. LoadSettings();
  720. //window.setInterval(SCColor,2500);
  721. window.setTimeout(SCColor,400);
  722. CSpeedsWaze.selectionManager.events.register("selectionchanged", null, SCColor);
  723. CSpeedsModel.actionManager.events.register("afterclearactions", null, SCColor);
  724. CSpeedsModel.actionManager.events.register("afterundoaction", null, SCColor);
  725. CSpeedsMap.events.register("zoomend", null, SCColor);
  726. CSpeedsMap.events.register("moveend", null, SCColor);
  727. window.addEventListener("beforeunload", saveOption, false);
  728. }
  729.  
  730. function LoadSettings(){
  731.  
  732. getId('cbMultiplePalette').checked=WMECSpeeds.MultiplePalette;
  733. getId('selectState').style.display = (WMECSpeeds.MultiplePalette)? "block" : "none";
  734. if (WMECSpeeds.MultiplePalette == false){
  735. for (var valSpeed in WMECSpeeds.speedColors[unit]) {
  736. var color = WMECSpeeds.speedColors[unit][valSpeed];
  737. var div = document.createElement('div'); div.className="divContent";
  738. var divspeed = document.createElement('div'); divspeed.className="divl speed"; divspeed.style.width="60px"; divspeed.innerHTML=valSpeed;
  739. div.appendChild(divspeed);
  740.  
  741. var divsuppr = document.createElement('div'); divsuppr.className="divr"; divsuppr.style.width="20px";
  742. var divsuppra = document.createElement('a');
  743. divsuppra.innerHTML="<img style='width:20px;' title='"+ CSlang[4] +"' src='data:image/png;base64,"+ icon_delete +"' />";
  744. divsuppra.href = "#"; divsuppra.className="delSpeed"; divsuppra.id="delSpeed_"+valSpeed;
  745. divsuppr.appendChild(divsuppra);
  746. div.appendChild(divsuppr);
  747.  
  748. var divedit = document.createElement('div'); divedit.className="divr"; divedit.style.width="20px";
  749. var divedita = document.createElement('a');
  750. divedita.innerHTML="<img style='width:16px;' title='"+ CSlang[7] +"' src='data:image/png;base64,"+ icon_edit +"' />";
  751. divedita.href = "#";
  752. divedita.onclick = getFunctionWithArgs(CSModifCouleur, [unit,valSpeed,color,null]);
  753. divedit.appendChild(divedita);
  754. div.appendChild(divedit);
  755.  
  756. var divcolor = document.createElement('div'); divcolor.className="divr"; divcolor.style.width="120px"; divcolor.innerHTML="<div class='divcolor' style='background-color:"+ color +";'>&nbsp;</div>";
  757. div.appendChild(divcolor);
  758. getId('CStable').appendChild(div);
  759. }
  760. log("LoadSettings WMECSpeeds.speedColors."+unit+" = ",WMECSpeeds.speedColors[unit]);
  761. }
  762. if (WMECSpeeds.MultiplePalette == true){
  763. selectedState = getId('selectState').options[getId('selectState').selectedIndex].value;
  764. log("selectedState = ", selectedState);
  765. if (WMECSpeeds.speedColors.US[selectedState][unit]===undefined){
  766. WMECSpeeds.speedColors.US[selectedState][unit] = cloneObj(WMECSpeeds.speedColors[unit]);
  767. }
  768. for (var valSpeed in WMECSpeeds.speedColors.US[selectedState][unit]) {
  769. var color = WMECSpeeds.speedColors.US[selectedState][unit][valSpeed];
  770. var div = document.createElement('div'); div.className="divContent";
  771. var divspeed = document.createElement('div'); divspeed.className="divl speed"; divspeed.style.width="60px"; divspeed.innerHTML=valSpeed;
  772. div.appendChild(divspeed);
  773.  
  774. var divsuppr = document.createElement('div'); divsuppr.className="divr"; divsuppr.style.width="20px";
  775. var divsuppra = document.createElement('a');
  776. divsuppra.innerHTML="<img style='width:20px;' title='"+ CSlang[4] +"' src='data:image/png;base64,"+ icon_delete +"' />";
  777. divsuppra.href = "#"; divsuppra.className="delSpeed"; divsuppra.id="delSpeed_"+valSpeed;
  778. divsuppr.appendChild(divsuppra);
  779. div.appendChild(divsuppr);
  780.  
  781. var divedit = document.createElement('div'); divedit.className="divr"; divedit.style.width="20px";
  782. var divedita = document.createElement('a');
  783. divedita.innerHTML="<img style='width:16px;' title='"+ CSlang[7] +"' src='data:image/png;base64,"+ icon_edit +"' />";
  784. divedita.href = "#";
  785. divedita.onclick = getFunctionWithArgs(CSModifCouleur, [unit,valSpeed,color,selectedState]);
  786. divedit.appendChild(divedita);
  787. div.appendChild(divedit);
  788.  
  789. var divcolor = document.createElement('div'); divcolor.className="divr"; divcolor.style.width="120px"; divcolor.innerHTML="<div class='divcolor' style='background-color:"+ color +";'>&nbsp;</div>";
  790. div.appendChild(divcolor);
  791. getId('CStable').appendChild(div);
  792. }
  793. log("LoadSettings WMECSpeeds.speedColors.US."+selectedState+"."+unit+" = ",WMECSpeeds.speedColors.US[selectedState][unit]);
  794. }
  795. for (var i=0; i < RoadToScan.length; ++i){
  796. var type = RoadToScan[i];
  797. var div = document.createElement('div'); div.className="divContentZoom";
  798. var divcheck = document.createElement('div'); divcheck.className="divl";
  799. divcheck.innerHTML= '<input type="checkbox" style="margin:1px 1px;" class="CScheck" id="cbRoad'+type+'">';
  800. div.appendChild(divcheck);
  801.  
  802. if (type != 999){
  803. var divtype = document.createElement('div'); divtype.className="divl CStype"; divtype.style.width="130px"; divtype.innerHTML= WMECSpeeds.typeOfRoad[type].name;
  804. div.appendChild(divtype);
  805. var divedit = document.createElement('div'); divedit.className="divr"; divedit.style.width="20px";
  806. var divedita = document.createElement('a');
  807. divedita.innerHTML="<img style='width:16px;' title='"+ CSlang[7] +"' src='data:image/png;base64,"+ icon_edit +"' />";
  808. divedita.href = "#"; divedita.className="modifyZoom"; divedita.id="zoom_"+type;
  809. divedit.appendChild(divedita);
  810. div.appendChild(divedit);
  811. var divzoom = document.createElement('div'); divzoom.className="divr CSzoom"; divzoom.style.width="60px"; divzoom.innerHTML= WMECSpeeds.typeOfRoad[type].zoom;
  812. div.appendChild(divzoom);
  813. }else if (type == 999){
  814. var divtype = document.createElement('div'); divtype.className="divl CStype"; divtype.style.width="130px"; divtype.innerHTML= CSlang[17];
  815. div.appendChild(divtype);
  816. }
  817. getId('CSroadType').appendChild(div);
  818. getId('cbRoad'+type).checked = WMECSpeeds.typeOfRoad[type].checked;
  819. //getId('cbRoad'+type).style.marginLeft = "2px";
  820. //getId('cbRoad'+type).style.marginTop = "2px";
  821. //getId('cbRoad'+type).style.width = "12px";
  822. //getId('cbRoad'+type).style.height = "12px";
  823.  
  824. }
  825. setupHandler();
  826. }
  827.  
  828. function setupHandler(){
  829. var rgb = {r: 0, g:0, b:0, name:null};
  830. var listeDelSpeed = getId("CStable");
  831. var btnDelSpeed = getElementsByClassName("delSpeed", listeDelSpeed);
  832. for (var i=0; i<btnDelSpeed.length; i++)
  833. {
  834. var target=btnDelSpeed[i];
  835. var index = target.id.split('_')[1];
  836. target.onclick = getFunctionWithArgs(SCSpeeds, [unit,index,selectedState]);
  837. }
  838. var listeEditZoom = getId("CSroadType");
  839. var btnEditZoom = getElementsByClassName("modifyZoom", listeEditZoom);
  840. for (var i=0; i<btnEditZoom.length; i++)
  841. {
  842. var target=btnEditZoom[i];
  843. var index = target.id.split('_')[1];
  844. var val = WMECSpeeds.typeOfRoad[parseInt(index)].zoom;
  845. target.onclick = getFunctionWithArgs(SCEditZoom, [index, val]);
  846. }
  847. getId('cbMultiplePalette').onclick = (function() {
  848. getId('selectState').style.display = (getId('cbMultiplePalette').checked)? "block" : "none";
  849. WMECSpeeds.MultiplePalette=getId('cbMultiplePalette').checked;
  850. if (WMECSpeeds.MultiplePalette==true){
  851. var stateToSelect = CSpeedsModel.states.top.name.replace(/ /g, '_');
  852. for (var index=0; getId('selectState').options[index].value != stateToSelect; index++) {};
  853. getId('selectState').options[index].selected=true;
  854. }
  855. getId('CStable').innerHTML="";
  856. getId('CSroadType').innerHTML="";
  857. LoadSettings();
  858. SCColor();
  859. });
  860. getId('selectState').onclick = (function(){
  861. getId('CStable').innerHTML="";
  862. getId('CSroadType').innerHTML="";
  863. LoadSettings();
  864. });
  865. getId('edit_others').onclick = (function(){
  866. getId('Conf_Others').style.display="block";
  867. getId('Conf_Color').style.display = "none";
  868. getId('colorspeedsDiv').style.display = "none";
  869. getId('newspeed').value=null;
  870. getId('ConfColor').style.backgroundColor=WMECSpeeds.speedColors.Others;
  871. getId('CSpeeds_cfgdialog').style.display= 'block';
  872. rgb = color2Rgb(WMECSpeeds.speedColors.Others);
  873. actualiseColorRGB(rgb);
  874. });
  875. getId('cancel').onclick=(function(){
  876. getId('Conf_Others').style.display="none";
  877. getId('Conf_Color').style.display = "none";
  878. getId('CSpeeds_cfgdialog').style.display= 'none';
  879. getId('colorspeedsDiv').style.display = "block";
  880. getId('newspeed').value="";
  881. });
  882. getId('submit').onclick=(function(){
  883. var newSpeed = getId('newspeed').value;
  884. var newColor = getId('ConfColor').style.backgroundColor;
  885. //log("newSpeed = ", newSpeed);log("newColor = ", newColor);
  886. if (getId('Conf_Color').style.display =="block" && newSpeed && newColor) {
  887. if (WMECSpeeds.MultiplePalette == true){
  888. WMECSpeeds.speedColors.US[selectedState][unit][newSpeed] = newColor;
  889. }else if (WMECSpeeds.MultiplePalette == false){
  890. WMECSpeeds.speedColors[unit][newSpeed] = newColor;
  891. }
  892. }
  893. if (getId('Conf_Others').style.display == "block" && newColor) {
  894. WMECSpeeds.speedColors.Others=newColor;
  895. getId('color_others').style.backgroundColor=WMECSpeeds.speedColors.Others;
  896. }
  897. getId('newspeed').value="";
  898. newSpeed = null;
  899. newColor = null;
  900. getId('CStable').innerHTML="";
  901. getId('CSroadType').innerHTML="";
  902. getId('Conf_Others').style.display="none";
  903. getId('Conf_Color').style.display = "none";
  904. getId('CSpeeds_cfgdialog').style.display= 'none';
  905. getId('colorspeedsDiv').style.display = "block";
  906. LoadSettings();
  907. SCColor();
  908. });
  909. $("#ConfColor.dropdown-toggle").dropdown();
  910. $('#ConfColor+.dropdown-menu li').click(function(){
  911. getId('ConfColor').style.backgroundColor=this.style.backgroundColor;
  912. rgb = color2Rgb(this.style.backgroundColor);
  913. actualiseColorRGB(rgb);
  914. });
  915. /*
  916. $("#ConfDash.dropdown-toggle").dropdown();
  917. $('#ConfDash+.dropdown-menu li').click(function(){
  918. getId('ConfDash').text=this.text;
  919. });
  920. */
  921. getId('sliderRed').onmousemove = function(){
  922. getId('valRed').value=getId('sliderRed').value;
  923. rgb.r = getId('valRed').value;
  924. rgb.g = getId('valGreen').value;
  925. rgb.b = getId('valBlue').value;
  926. rgb = color2Rgb(Rgb2String(rgb));
  927. actualiseColorRGB(rgb);
  928. };
  929. getId('sliderGreen').onmousemove = function(){
  930. getId('valGreen').value=getId('sliderGreen').value;
  931. rgb.r = getId('valRed').value;
  932. rgb.g = getId('valGreen').value;
  933. rgb.b = getId('valBlue').value;
  934. rgb = color2Rgb(Rgb2String(rgb));
  935. actualiseColorRGB(rgb);
  936. };
  937. getId('sliderBlue').onmousemove = function(){
  938. getId('valBlue').value=getId('sliderBlue').value;
  939. rgb.r = getId('valRed').value;
  940. rgb.g = getId('valGreen').value;
  941. rgb.b = getId('valBlue').value;
  942. rgb = color2Rgb(Rgb2String(rgb));
  943. actualiseColorRGB(rgb);
  944. };
  945. getId('sliderOffset').onmousemove = function(){
  946. WMECSpeeds.offsetValue=getId('sliderOffset').value;
  947. getId('valOffset').value = getId('sliderOffset').value;
  948. SCColor();
  949. };
  950. getId('sliderOpacity').onmousemove = function(){
  951. WMECSpeeds.opacityValue= Number(getId('sliderOpacity').value/100).toFixed(2);
  952. getId('valOpacity').value = getId('sliderOpacity').value;
  953. SCColor();
  954. };
  955. getId('sliderThickness').onmousemove = function(){
  956. WMECSpeeds.thicknessValue= getId('sliderThickness').value;
  957. getId('valThickness').value = getId('sliderThickness').value;
  958. SCColor();
  959. };
  960. getId('valRed').onchange = function(){
  961. var R = parseInt(getId('valRed').value);
  962. if ((R >= 0) && (R <= 255)){
  963. getId('sliderRed').value = getId('valRed').value;
  964. rgb.r = getId('valRed').value;
  965. rgb.g = getId('valGreen').value;
  966. rgb.b = getId('valBlue').value;
  967. rgb = color2Rgb(Rgb2String(rgb));
  968. actualiseColorRGB(rgb);
  969. }else {
  970. getId('valRed').value = getId('sliderRed').value;
  971. }
  972. };
  973. getId('valGreen').onchange = function(){
  974. var G = parseInt(getId('valGreen').value);
  975. if ((G >= 0) && (G <= 255)){
  976. getId('sliderGreen').value=getId('valGreen').value;
  977. rgb.r = getId('valRed').value;
  978. rgb.g = getId('valGreen').value;
  979. rgb.b = getId('valBlue').value;
  980. rgb = color2Rgb(Rgb2String(rgb));
  981. actualiseColorRGB(rgb);
  982. }else {
  983. getId('valGreen').value=getId('sliderGreen').value;
  984. }
  985. };
  986. getId('valBlue').onchange = function(){
  987. var B = parseInt(getId('valBlue').value);
  988. if ((B >= 0) && (B <= 255)){
  989. getId('sliderBlue').value=getId('valBlue').value;
  990. rgb.r = getId('valRed').value;
  991. rgb.g = getId('valGreen').value;
  992. rgb.b = getId('valBlue').value;
  993. rgb = color2Rgb(Rgb2String(rgb));
  994. actualiseColorRGB(rgb);
  995. }else {
  996. getId('valBlue').value=getId('sliderBlue').value;
  997. }
  998. };
  999. getId('valOffset').onchange = function(){
  1000. var R = parseInt(getId('valOffset').value);
  1001. if ((R >= 1) && (R <= 10)){
  1002. getId('sliderOffset').value = getId('valOffset').value;
  1003. WMECSpeeds.offsetValue=getId('valOffset').value;
  1004. SCColor();
  1005. }else {
  1006. getId('valOffset').value = getId('sliderOffset').value;
  1007. }
  1008. };
  1009. getId('valOpacity').onchange = function(){
  1010. var R = parseInt(getId('valOpacity').value);
  1011. if ((R >= 0) && (R <= 100)){
  1012. getId('sliderOpacity').value = getId('valOpacity').value;
  1013. WMECSpeeds.opacityValue= Number(getId('valOpacity').value/100).toFixed(2);
  1014. SCColor();
  1015. }else {
  1016. getId('valOpacity').value = getId('sliderOpacity').value;
  1017. }
  1018. };
  1019. getId('valThickness').onchange = function(){
  1020. var R = parseInt(getId('valThickness').value);
  1021. if ((R >= 2) && (R <= 10)){
  1022. getId('sliderThickness').value = getId('valThickness').value;
  1023. WMECSpeeds.thicknessValue= getId('valThickness').value;
  1024. SCColor();
  1025. }else {
  1026. getId('valThickness').value = getId('sliderThickness').value;
  1027. }
  1028. };
  1029. }
  1030.  
  1031. function CSModifCouleur(unit,id,color,state){
  1032. getId('Conf_Others').style.display = "none";
  1033. getId('Conf_Color').style.display = "block";
  1034. getId('colorspeedsDiv').style.display = "none";
  1035. getId('newspeed').value=id;
  1036. getId('ConfColor').style.backgroundColor=color;
  1037. CSpeeds_cfgdialog.style.display= 'block';
  1038. var c = color2Rgb(color);
  1039. actualiseColorRGB(c);
  1040. }
  1041.  
  1042. function actualiseColorRGB(c){
  1043. log("color: ",c);
  1044. getId('valRed').value = c.r;
  1045. getId('valGreen').value = c.g;
  1046. getId('valBlue').value = c.b;
  1047. getId('sliderRed').value = c.r;
  1048. getId('sliderGreen').value = c.g;
  1049. getId('sliderBlue').value = c.b;
  1050. getId('ConfColor').style.backgroundColor = Rgb2String(c);
  1051. getId('nameColor').innerHTML = c.name;
  1052. }
  1053.  
  1054. function SCSpeeds(unit,idx,state){
  1055. if (WMECSpeeds.MultiplePalette === true){
  1056. var answer = window.confirm(CSlang[4] +" "+idx+" "+unit+" for "+state+" ?");
  1057. }else{var answer = window.confirm(CSlang[4] +" "+idx+" "+unit+" ?");}
  1058. if (answer){
  1059. if (WMECSpeeds.MultiplePalette === true){
  1060. delete WMECSpeeds.speedColors.US[state][unit][idx];
  1061. }else{delete WMECSpeeds.speedColors[unit][idx];}
  1062. getId('CStable').innerHTML="";
  1063. getId('CSroadType').innerHTML="";
  1064. LoadSettings();
  1065. }
  1066. }
  1067.  
  1068. function SCEditZoom(idx, val){
  1069. getId('editzoom').style.display = "block";
  1070. getId('newvalzoom').value=val;
  1071. getId('texttype').textContent = WMECSpeeds.typeOfRoad[idx].name;
  1072. getId('submitZoom').onclick=(function(){
  1073. var newValZoom = getId('newvalzoom').value;
  1074. if (newValZoom) {
  1075. WMECSpeeds.typeOfRoad[idx].zoom = newValZoom;
  1076. }
  1077. getId('editzoom').style.display = "none";
  1078. getId('newvalzoom').value="";
  1079. getId('CStable').innerHTML="";
  1080. getId('CSroadType').innerHTML="";
  1081. LoadSettings();
  1082. });
  1083. getId('cancelZoom').onclick=(function(){
  1084. getId('editzoom').style.display = "none";
  1085. getId('newvalzoom').value="";
  1086. getId('CStable').innerHTML="";
  1087. getId('CSroadType').innerHTML="";
  1088. LoadSettings();
  1089. });
  1090. }
  1091.  
  1092.  
  1093. function shiftGeometry(d, line, trigo) // d=distance to shift, line=collection of OL points, trigo=boolean: true=left(trigo=CCW) false=right(CW) : fwd is CW, rev is trigo
  1094. {
  1095. if (!trigo)
  1096. d=-d;
  1097. function getOrthoVector(p1, p2)
  1098. {
  1099. return [p1.y-p2.y , p2.x-p1.x];
  1100. }
  1101. function normalizeVector(v)
  1102. {
  1103. if (v[0]*v[0]+v[1]*v[1]==0)
  1104. return v;
  1105. var l=Math.sqrt(v[0]*v[0]+v[1]*v[1]);
  1106. return [v[0]/l , v[1]/l];
  1107. }
  1108. var points = [];
  1109. for (var i=0; i<line.length; i++)
  1110. {
  1111. var vcount=0;
  1112. // compute orthogonal vectors:
  1113. var prevVector=[0,0];
  1114. var nextVector=[0,0];
  1115. if (i>0) // can compute prev
  1116. {
  1117. var p1=line[i-1];
  1118. var p2=line[i];
  1119. prevVector=getOrthoVector(p1, p2);
  1120. prevVector=normalizeVector(prevVector);
  1121. vcount++;
  1122. }
  1123. if (i<line.length-1) // can compute next
  1124. {
  1125. var p1=line[i];
  1126. var p2=line[i+1];
  1127. nextVector=getOrthoVector(p1, p2);
  1128. nextVector=normalizeVector(nextVector);
  1129. vcount++;
  1130. }
  1131. // sum vectors and normalize
  1132. var v = [0, 0];
  1133. if (vcount!=0)
  1134. v = [(prevVector[0]+nextVector[0])/vcount, (prevVector[1]+nextVector[1])/vcount];
  1135. //v=normalizeVector(v);
  1136. points.push(new CSpeedOpenLayers.Geometry.Point(line[i].x+v[0]*d, line[i].y+v[1]*d));
  1137. }
  1138. return points;
  1139. }
  1140.  
  1141. function SCColor(){
  1142. if (CSpeedsCountries !== undefined && CSpeedsCountries.top !== undefined){
  1143. getId('stateChoise').style.display = (CSpeedsCountries.top.name == "United States")? "block" : "none";
  1144. }
  1145. try { colorspeeds_mapLayer.destroyFeatures();
  1146. }catch(err){log('err destroyFeatures: ',err);}
  1147. var lineFeature = [];
  1148. for (var i=0; i < RoadToScan.length; ++i){
  1149. var type = RoadToScan[i];
  1150. WMECSpeeds.typeOfRoad[type].checked = getId('cbRoad'+type).checked;
  1151. }
  1152. for (var seg in CSpeedsModel.segments.objects) {
  1153. var segment = CSpeedsModel.segments.get(seg);
  1154. var attributes = segment.attributes;
  1155. var roadType = attributes.roadType;
  1156. var roundabout = (attributes.junctionID === null) ? false : true;
  1157. var line = getId(segment.geometry.id);
  1158. var fwdspeed = attributes.fwdMaxSpeed;
  1159. var revspeed = attributes.revMaxSpeed;
  1160. var fwdspeedUnverified = attributes.fwdMaxSpeedUnverified;
  1161. var revspeedUnverified = attributes.revMaxSpeedUnverified;
  1162. var fwddir = attributes.fwdDirection;
  1163. var revdir = attributes.revDirection;
  1164. //var fwdID = "",revID="";
  1165. var isSelected = (segment.selected == true)? true : false;
  1166. var isModified = (segment.state == "Update")? true : false;
  1167. if (attributes.primaryStreetID === null || attributes.primaryStreetID === undefined) continue;
  1168. if (Waze.model.streets.get(attributes.primaryStreetID) === null || Waze.model.streets.get(attributes.primaryStreetID) === undefined){
  1169. log("Waze.model.streets.get("+attributes.primaryStreetID+") =",Waze.model.streets.get(attributes.primaryStreetID));
  1170. continue;
  1171. }
  1172. var cid = Waze.model.streets.get(attributes.primaryStreetID).cityID;
  1173. var stateID =null;
  1174. if (Waze.model.cities.get(cid).hasOwnProperty("attributes"))
  1175. stateID = Waze.model.cities.get(cid).attributes.stateID; //for Beta éditor
  1176. else stateID = Waze.model.cities.get(cid).stateID; //for prod éditor
  1177.  
  1178. var state = Waze.model.states.get(stateID).name.replace(/ /g, '_');
  1179. if (WMECSpeeds.MultiplePalette==true && WMECSpeeds.speedColors.US[state][unit]===undefined){
  1180. WMECSpeeds.speedColors.US[state][unit] = cloneObj(WMECSpeeds.speedColors[unit]);
  1181. //log("SCColor WMECSpeeds.speedColors.US."+state+"."+unit+" = ",WMECSpeeds.speedColors.US[state][unit]);
  1182. }
  1183. // check that WME hasn't highlighted this segment
  1184. if (isSelected || isModified) continue;
  1185.  
  1186. if (zoom != CSpeedsMap.zoom) {
  1187. zoom = CSpeedsMap.zoom;
  1188. //log('zoom = ' + zoom + 'Waze.map.getResolution() = '+Waze.map.getResolution());
  1189. }
  1190. var shiftValue= WMECSpeeds.offsetValue*Waze.map.getResolution();
  1191. if (RoadToScan.indexOf(roadType) == -1 ) continue;
  1192. if ((roundabout != false) && (WMECSpeeds.typeOfRoad['999'].checked==false)) continue;
  1193. if (unit == 'mph'){
  1194. fwdspeed = (fwdspeed!=null) ? (Math.trunc(fwdspeed*0.625)) : null;
  1195. revspeed = (revspeed!=null) ? (Math.trunc(revspeed*0.625)) : null;
  1196. }
  1197. //log("fwdspeed= "+ fwdspeed + " " + unit + " ; revspeed= " + revspeed + " " + unit);
  1198. // turn off highlights when roads are no longer visible
  1199. if ((zoom < WMECSpeeds.typeOfRoad[roadType].zoom) || !WMECSpeeds.typeOfRoad[roadType].checked) {
  1200. continue;
  1201. }
  1202. WMECSpeeds.visibility = colorspeeds_mapLayer.visibility;
  1203. if (fwdspeed && WMECSpeeds.visibility) {
  1204. //Color for forward speed
  1205. var newWidth="", newColor="", newDashes="", newOpacity="";
  1206.  
  1207. if (WMECSpeeds.MultiplePalette === false){
  1208. if (WMECSpeeds.speedColors[unit].hasOwnProperty(fwdspeed)) newColor=WMECSpeeds.speedColors[unit][fwdspeed];
  1209. }else if (WMECSpeeds.MultiplePalette === true){
  1210. if (WMECSpeeds.speedColors.US[state][unit].hasOwnProperty(fwdspeed)) newColor=WMECSpeeds.speedColors.US[state][unit][fwdspeed];
  1211. }
  1212. /*
  1213. if (newColor!=""){
  1214. //Dashes
  1215. if (fwddir==true && fwdspeed && !fwdspeedUnverified) { newWidth = 6; newOpacity = 0.8; newDashes = "5 10"; } // verified speed
  1216. else if (fwddir==true && fwdspeed && fwdspeedUnverified) { newColor = WMECSpeeds.speedColors.Others; newWidth = 4; newOpacity = 0.8; newDashes = "2 10";} // unverified speed
  1217. }else if (fwddir==true && fwdspeed) { newWidth = 4; newColor = WMECSpeeds.speedColors.Others; newOpacity = 0.9; newDashes = "5 5"; } // other
  1218. */
  1219. if (newColor!=""){
  1220. //Dashes
  1221. if (fwddir==true && fwdspeed && !fwdspeedUnverified) { newWidth = WMECSpeeds.thicknessValue; newOpacity = WMECSpeeds.opacityValue; newDashes = "5 10"; } // verified speed
  1222. else if (fwddir==true && fwdspeed && fwdspeedUnverified) { newColor = WMECSpeeds.speedColors.Others; newWidth = WMECSpeeds.thicknessValue; newOpacity = 0.8; newDashes = "2 10";} // unverified speed
  1223. }else if (fwddir==true && fwdspeed) { newWidth = WMECSpeeds.thicknessValue; newColor = WMECSpeeds.speedColors.Others; newOpacity = WMECSpeeds.opacityValue; newDashes = "5 5"; } // other
  1224. if (newColor!=""){
  1225. var style = {
  1226. strokeColor: newColor,
  1227. strokeOpacity: newOpacity,
  1228. strokeWidth: newWidth,
  1229. strokeDashstyle: newDashes
  1230. };
  1231. var points = [];
  1232. var segID = attributes.id;
  1233. points=shiftGeometry(shiftValue, segment.geometry.getVertices(), CSpeedsModel.countries.top.leftHandTraffic);
  1234.  
  1235. var newline = new CSpeedOpenLayers.Geometry.LineString(points);
  1236.  
  1237. lineFeature.push(new CSpeedOpenLayers.Feature.Vector(newline, null, style));
  1238. //log("segment id: " + attributes.id + ' newColor: '+ newColor + ' segment.CSpeedsFwd.fwdColor: ' + segment.CSpeedsFwd.fwdColor + ' lineFeature: ',lineFeature);
  1239. }
  1240. }
  1241. if (revspeed && WMECSpeeds.visibility) {
  1242. //Color for reverse speed
  1243. var newWidth="", newColor="", newDashes="", newOpacity="", newDashOffset="";
  1244.  
  1245. if (WMECSpeeds.MultiplePalette === false){
  1246. if (WMECSpeeds.speedColors[unit].hasOwnProperty(revspeed)) newColor=WMECSpeeds.speedColors[unit][revspeed];
  1247. }else if (WMECSpeeds.MultiplePalette === true){
  1248. if (WMECSpeeds.speedColors.US[state][unit].hasOwnProperty(revspeed)) newColor=WMECSpeeds.speedColors.US[state][unit][revspeed];
  1249. }
  1250. /*
  1251. if (newColor!=""){
  1252. //Dashes
  1253. if (revdir==true && revspeed && !revspeedUnverified) { newWidth = 6; newOpacity = 0.8; newDashes = "5 10"; } // verified speed
  1254. else if (revdir==true && revspeed && revspeedUnverified) { newColor = WMECSpeeds.speedColors.Others; newWidth = 4; newOpacity = 0.8; newDashes = "2 10";} // unverified speed
  1255. }else if (revdir==true && revspeed) { newWidth = 4; newColor = WMECSpeeds.speedColors.Others; newOpacity = 0.9; newDashes = "5 5"; } // other
  1256. */
  1257. if (newColor!=""){
  1258. //Dashes
  1259. if (revdir==true && revspeed && !revspeedUnverified) { newWidth = WMECSpeeds.thicknessValue; newOpacity = WMECSpeeds.opacityValue; newDashes = "5 10"; } // verified speed
  1260. else if (revdir==true && revspeed && revspeedUnverified) { newColor = WMECSpeeds.speedColors.Others; newWidth = WMECSpeeds.thicknessValue; newOpacity = WMECSpeeds.opacityValue; newDashes = "2 10";} // unverified speed
  1261. }else if (revdir==true && revspeed) { newWidth = WMECSpeeds.thicknessValue; newColor = WMECSpeeds.speedColors.Others; newOpacity = WMECSpeeds.opacityValue; newDashes = "5 5"; } // other
  1262. if (newColor!=""){
  1263. var style = {
  1264. strokeColor: newColor,
  1265. strokeOpacity: newOpacity,
  1266. strokeWidth: newWidth,
  1267. strokeDashstyle: newDashes,
  1268. };
  1269.  
  1270. var points = [];
  1271. var segID = attributes.id;
  1272. points=shiftGeometry(shiftValue, segment.geometry.getVertices(), !CSpeedsModel.countries.top.leftHandTraffic);
  1273.  
  1274. var newline = new CSpeedOpenLayers.Geometry.LineString(points);
  1275.  
  1276. lineFeature.push(new CSpeedOpenLayers.Feature.Vector(newline, null, style));
  1277. }
  1278. }
  1279.  
  1280. }
  1281. //log("lineFeature = ",lineFeature);
  1282. // Display new array of segments
  1283. try{
  1284. colorspeeds_mapLayer.addFeatures(lineFeature);
  1285. }catch(err){log('err addFeatures: ',err);}
  1286. }
  1287.  
  1288. /* begin running the code! */
  1289. CSpeeds_bootstrap ();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址