// Generated by LiveScript 1.2.0 var ref$, flatten, sum, drop, each, take, map, keys, listsToObj, maxMlt, parseDate, shNaN, typShNaN, ggl, c, color, view, lsmkt, lssbtype, lstyphon, lscolor, lsveggie, lsgdname, tbgdname, enname, lsenname, datechage, datebetween; ref$ = require("prelude-ls"), flatten = ref$.flatten, sum = ref$.sum, drop = ref$.drop, each = ref$.each, take = ref$.take, map = ref$.map, keys = ref$.keys, listsToObj = ref$.listsToObj; maxMlt = 1.5; parseDate = function(string){ var y, m, d; y = string.split("年")[0]; m = string.split("年")[1].split("月")[0]; d = string.split("月")[1].split("日")[0]; return new Date(((+y) + 1911) + " " + m + " " + d); }; shNaN = { "date": true, "mktname": true, "sbtype": true, "transformation": true, "middleprice": false, "quantity": false }; typShNaN = { "alertDate": true, "force7km": null, "force10km": null, "id": false, "level": true, "maxMS": false, "minhPa": false, "name": true, "nameEn": true, "numAlert": false, "path": null, "year": false }; ggl = {}; ggl.red = "rgb(255, 0, 71)"; ggl.brown = "rgb(255, 110, 100)"; ggl.green = "rgb(0,249,153)"; ggl.blue = "rgb(104,126,255)"; ggl.white = "rgb(226,211,255)"; ggl.grey = "rgb(59,50,78)"; ggl.purple = "rgb(164, 51, 216)"; ggl.orange = "rgb(255,79,32)"; ggl.pink = "rgb(255, 130, 162)"; ggl.bck = "rgb(39,39,39)"; c = d3.scale.category20(); color = function(it){ return d3.rgb(c(it)).brighter(1); }; view = "middleprice"; lsmkt = {}; lssbtype = {}; lstyphon = {}; lscolor = {}; lsveggie = ["LI萵苣菜", "FY玉米", "LA甘藍", "SG大蒜", "LC包心白", "FG苦瓜", "SE青蔥", "LG芹菜", "FV辣椒", "FL豌豆", "FN敏豆", "FK甜椒", "FI茄子", "FH扁蒲", "FF絲瓜", "FJ番茄", "LJ芥菜", "LB小白菜", "SP薑", "SA蘿蔔", "FT南瓜", "FB花椰菜", "SJ芋", "SX芽菜類", "FM菜豆", "FC胡瓜", "SB胡蘿蔔", "FD花胡瓜", "SO甘薯", "FE冬瓜", "LF蕹菜", "LK芥藍菜", "SV蘆筍", "LM莧菜", "FR青花苔", "SF韭菜", "SU薯蕷", "LH菠菱菜", "SD洋蔥", "OX其他", "SQ茭白筍", "LD青江白菜", "SC馬鈴薯", "SF3韭菜(韭菜花)", "LX蕨菜", "SW球莖甘藍", "FU準人瓜", "LN油菜", "FP萊豆", "SH1竹筍(麻竹筍)", "OA鹹菜", "LL茼蒿", "LE皇宮菜", "SM牛蒡", "FZ落花生", "SN蓮藕", "LP2九層塔", "SS大心菜", "OH桶筍", "SF2韭菜(韭菜黃)", "FQ毛豆", "LO甘薯葉", "LP芫荽", "LQ紅鳳菜", "LT海菜", "FA1黃秋葵", "SL1豆薯", "MA洋菇", "ME金絲菇", "OE醃瓜", "LZ薺菜", "SH2竹筍(綠竹筍)", "MC木耳", "SH5竹筍(烏殼綠)", "MD香菇", "SR菱角", "MI秀珍菇", "MJ杏鮑菇", "MF蠔菇", "MB草菇", "SI萵苣莖", "SK荸薺", "LS茴香", "OG熟筍", "FS越瓜", "LV巴西利", "OB雪里紅", "OD蘿蔔乾", "MX其他菇類", "MK鴻禧菇", "SH4竹筍(孟宗筍)", "FU3石蓮花", "ML珊瑚菇", "FW金針花", "OC榨菜", "FX2虎豆(福豆)", "SZ3金針筍", "OI4筍茸", "MN柳松菇", "SH7竹筍(去殼)", "OI3筍片", "OI1筍乾", "OI2筍絲", "LU菾菜", "LY1西洋菜", "SZ1半天筍", "FX1花豆", "SZ4百合", "OL朴菜", "ST蕎頭", "SH3竹筍(桂竹筍)", "MH松茸", "LY2黑甜仔菜", "MG白菇", "SH6竹筍(箭竹筍)", "FA0其他花類", "MM猴頭菇", "FW2洛神花", "SZ5草石蠶", "LY5珍珠菜", "LT3水蓮", "LY6香椿", "SZ6半天花", "FA9百果(進口)", "FO蠶豆", "LY3豬母菜", "LY4人參葉", "SZ2甘蔗筍", "LR塌棵塔", "FA2樊花", "SY慈菇", "SL2菊芋(雪蓮薯)", "FA4瓊花", "SH9竹筍(進口)", "ZZ其他"]; lsgdname = ["萵苣菜", "玉米", "甘藍", "大蒜", "包心白", "苦瓜", "青蔥", "芹菜", "辣椒", "豌豆", "敏豆", "甜椒", "茄子", "扁蒲", "絲瓜", "番茄", "芥菜", "小白菜", "薑", "蘿蔔", "南瓜", "花椰菜", "芋", "芽菜類", "菜豆", "胡瓜", "胡蘿蔔", "花胡瓜", "甘薯", "冬瓜", "蕹菜", "芥藍菜", "蘆筍", "莧菜", "青花苔", "韭菜", "薯蕷", "菠菱菜", "洋蔥", "其他", "茭白筍", "青江白菜", "馬鈴薯", "韭菜(韭菜花)", "蕨菜", "球莖甘藍", "準人瓜", "油菜", "萊豆", "竹筍(麻竹筍)", "鹹菜", "茼蒿", "皇宮菜", "牛蒡", "落花生", "蓮藕", "九層塔", "大心菜", "桶筍", "韭菜(韭菜黃)", "毛豆", "甘薯葉", "芫荽", "紅鳳菜", "海菜", "黃秋葵", "豆薯", "洋菇", "金絲菇", "醃瓜", "薺菜", "竹筍(綠竹筍)", "木耳", "竹筍(烏殼綠)", "香菇", "菱角", "秀珍菇", "杏鮑菇", "蠔菇", "草菇", "萵苣莖", "荸薺", "茴香", "熟筍", "越瓜", "巴西利", "雪里紅", "蘿蔔乾", "其他菇類", "鴻禧菇", "竹筍(孟宗筍)", "石蓮花", "珊瑚菇", "金針花", "榨菜", "虎豆(福豆)", "金針筍", "筍茸", "柳松菇", "竹筍(去殼)", "筍片", "筍乾", "筍絲", "菾菜", "西洋菜", "半天筍", "花豆", "百合", "朴菜", "蕎頭", "竹筍(桂竹筍)", "松茸", "黑甜仔菜", "白菇", "竹筍(箭竹筍)", "其他花類", "猴頭菇", "洛神花", "草石蠶", "珍珠菜", "水蓮", "香椿", "半天花", "百果(進口)", "蠶豆", "豬母菜", "人參葉", "甘蔗筍", "塌棵塔", "樊花", "慈菇", "菊芋(雪蓮薯)", "瓊花", "竹筍(進口)", "其他"]; tbgdname = listsToObj(lsveggie, lsgdname); enname = ["Lettuce", "Corn", "Cabbage", "Garlic", "White Heart Bag", "Bitter", "Scallion", "Celery", "Chili", "Peas", "Min beans", "Sweet pepper", "Eggplant", "Flat Po", "Loofah", "Tomatoes", "Mustard", "Cabbage", "Ginger", "Radish", "Pumpkin", "Cauliflower", "Taro", "Sprouts class", "Kidney bean", "Cucumber", "Carrot", "Flowers cucumber", "Sweet", "Melon", "Ipomoea", "Kale", "Asparagus", "Amaranth", "Blue moss", "Chives", "Yam", "Bo Ling dish", "Onion", "Other", "Coba", "Bok cabbage", "Potato", "Leek ( chives )", "Bracken", "Kohlrabi", "Quasi- human melon", "Cole", "Lima bean", "Bamboo ( bamboo shoot )", "Pickle", "Chrysanthemum", "Palace dish", "Burdock", "Groundnut", "Lotus", "Basil", "Big cabbage", "Barrel shoots", "Leek ( leek yellow )", "Edamame", "Sweet potato leaves", "Coriander", "Gynura", "Seaweed", "Okra", "Yam bean", "Mushroom", "Watkins mushrooms", "Pickled melon", "Shepherd's purse", "Shoots ( green shoots )", "Fungus", "Bamboo shoots ( black shell Green )", "Mushrooms", "Water chestnut", "Oyster mushrooms", "Mushroom", "Oyster mushrooms", "Straw mushroom", "Stem lettuce", "Water chestnuts", "Fennel", "Cooked bamboo shoots", "Pickling melon", "Basili", "Potherb mustard", "Radish", "Other mushrooms", "Hongxi mushrooms", "Bamboo shoots ( Meng Zong shoots )", "Stone Lotus", "Coral mushroom", "Daylily", "Mustard", "Tiger beans ( beans Fu )", "Lily shoots", "Velvet shoots", "Liu pine mushrooms", "Bamboo shoots ( shelled )", "Sunpian", "Bamboo shoots", "Sunsi", "Chard", "Watercress", "Half-day shoot", "Bean flowers", "Lily", "Pak dish", "Shallots", "Bamboo ( bamboo shoots )", "Matsutake", "Aberdeen black sweet dish", "White mushrooms", "Bamboo ( bamboo shoots )", "Other flowers", "Hericium", "Roselle", "Chinese artichoke", "Lysimachia", "Shuilian", "Toon", "Spend half a day", "Mince ( import )", "Broad bean", "Sow vegetables", "Ginseng leaf", "Bamboo cane", "Narinosa tower", "Fan Flower", "Arrowhead", "Jerusalem artichoke ( lotus potato )", "Viburnum", "Bamboo shoots ( import )", "Other"]; lsenname = listsToObj(lsveggie, enname); datechage = function(date, inc){ var d; d = new Date(date); return new Date(d.setDate(d.getDate() + inc)); }; datebetween = function(start, end){ var result, itrdate; result = []; itrdate = new Date(start); while (end - itrdate > 0) { result.push(itrdate); itrdate = datechage(itrdate, 1); } result.push(itrdate); return result; }; d3.tsv("./typhon.tsv", function(err, typhonData){ var name, input; typhonData = typhonData.filter(function(it){ var tp, alert; for (tp in it) { if (typShNaN[tp] !== null && isNaN(it[tp]) !== typShNaN[tp]) { return false; } else if (!typShNaN[tp]) { it[tp] = +it[tp]; } } alert = it.alertDate.split("~"); it.start = new Date(it.year, alert[0].split("/")[0], alert[0].split("/")[1]); it.end = new Date(it.year, alert[1].split("/")[0], alert[1].split("/")[1]); it.during = datebetween(it.start, it.end); it.waybefore = datebetween(datechage(it.start, -10), datechage(it.start, -5)); it.before = datebetween(datechage(it.start, -5), it.start); it.after = datebetween(it.end, datechage(it.end, +5)); it.waybefore.map(function(it){ return lstyphon[it] = "-10"; }); it.before.map(function(it){ return lstyphon[it] = "-5"; }); it.after.map(function(it){ return lstyphon[it] = "+5"; }); it.during.map(function(it){ return lstyphon[it] = "T"; }); return true; }); name = "FQ毛豆"; if (window.location.hash) { input = window.location.hash.split("#")[1]; lsveggie.map(function(d, i){ if (d.indexOf(input) > -1) { return name = lsveggie[i]; } }); } return d3.tsv("./wo_out_data/" + name + ".tsv", function(err, tsvData){ var fltrData, weekDayTable, barPriYear, barPriMonth, barPriMkt, barPriSb, barPriTyp, barQuanYear, barQuanMonth, barQuanMkt, barQyanSb, barQuanTyp, ndx, all, sml, yearDim, monthDim, mktDim, sbDim, tyDim, dateDim, mdlpDim, averageAdd, averageRemove, averageInitial, averageQuanAdd, averageQuanRemove, averageQuanInitial, priceYear, priceMonth, priceMkt, priceSb, priceTy, quanYear, quanMonth, quanMkt, quanSb, quanTy, lsPChrt, lsQChrt, getMax, chrtPMax, chrtQMax, barWidth, barHeight, marginJson, colorBike, colorBike2, yearExt, renderAct, emptyC, removeZero, ownColor, barMkt_width, barSb_width, barTy_width, barMt_width, baYr_width, sum_barwidth, margin, margin_sm, w_sm, w, h, domainQ, domainP, scaleX, scaleQ, scaleY, line, canvasXAxis, canvasYAxis, svg, canvas, canvasWidth, canvasHeight, ctx, canvasData, canvas_sm, canvasWidth_sm, canvasHeight_sm, ctx_sm, canvasData_sm, buf8, buf8_sm, drawPixel, clear, updateCanvas, drawPixel_sm, clear_sm, updateCanvas_sm, bpy, bpm, bqy, bqm, fmt, fmt000, fmtpnq, addzero, objToTd, mktorder, updateGraph, setList, brushCell, brushstart, brushmove, brushend, brush, brushCell_sm, brushstart_sm, brushmove_sm, brushend_sm, brush_sm; tsvData = tsvData.filter(function(it){ var tp, typhon; for (tp in it) { if (isNaN(it[tp]) !== shNaN[tp]) { return false; } else if (!shNaN[tp]) { it[tp] = +it[tp]; } } if (it.mktname === "台北一") { it.mktname = "北一"; } else if (it.mktname === "台北二") { it.mktname = "北二"; } else { it.mktname = take(2, it.mktname); } if (lsmkt[it.mktname] === undefined) { lsmkt[it.mktname] = true; } if (lssbtype[it.sbtype] === undefined) { lssbtype[it.sbtype] = true; } it.date = parseDate(it.date); typhon = lstyphon[it.date + ""]; it.status = typhon !== undefined ? typhon : "na"; return true; }).sort(function(a, b){ return a.date - b.date; }); fltrData = tsvData; weekDayTable = ["Sun.", "Mon.", "Tue.", "Wed.", "Thu.", "Fri.", "Sat."]; barPriYear = dc.barChart('.pricePerYear'); barPriMonth = dc.barChart('.pricePerMonth'); barPriMkt = dc.barChart('.pricePerMkt'); barPriSb = dc.barChart('.pricePerSb'); barPriTyp = dc.barChart('.pricePerTyp'); barQuanYear = dc.barChart('.quanPerYear'); barQuanMonth = dc.barChart('.quanPerMonth'); barQuanMkt = dc.barChart('.quanPerMkt'); barQyanSb = dc.barChart('.quanPerSb'); barQuanTyp = dc.barChart('.quanPerTyp'); ndx = crossfilter(tsvData); all = ndx.groupAll(); sml = {}; yearDim = ndx.dimension(function(it){ return it.date.getFullYear(); }); monthDim = ndx.dimension(function(it){ return it.date.getMonth(); }); mktDim = ndx.dimension(function(it){ return it.mktname; }); sbDim = ndx.dimension(function(it){ return it.sbtype; }); tyDim = ndx.dimension(function(it){ return it.status; }); dateDim = ndx.dimension(function(it){ return new Date(it.date); }); mdlpDim = ndx.dimension(function(it){ return it.middleprice; }); averageAdd = function(p, v){ ++p.count; p.sum += v.middleprice; p.average = p.count ? Math.floor(p.sum / p.count) : 0; return p; }; averageRemove = function(p, v){ --p.count; p.sum -= v.middleprice; p.average = p.count ? Math.floor(p.sum / p.count) : 0; return p; }; averageInitial = function(){ return { count: 0, sum: 0, average: 0 }; }; averageQuanAdd = function(p, v){ ++p.count; p.sum += v.quantity; p.average = p.count ? Math.floor(p.sum / p.count) : 0; return p; }; averageQuanRemove = function(p, v){ --p.count; p.sum -= v.quantity; p.average = p.count ? Math.floor(p.sum / p.count) : 0; return p; }; averageQuanInitial = function(){ return { count: 0, sum: 0, average: 0 }; }; priceYear = yearDim.group().reduce(averageAdd, averageRemove, averageInitial); priceMonth = monthDim.group().reduce(averageAdd, averageRemove, averageInitial); priceMkt = mktDim.group().reduce(averageAdd, averageRemove, averageInitial); priceSb = sbDim.group().reduce(averageAdd, averageRemove, averageInitial); priceTy = tyDim.group().reduce(averageAdd, averageRemove, averageInitial); quanYear = yearDim.group().reduce(averageQuanAdd, averageQuanRemove, averageQuanInitial); quanMonth = monthDim.group().reduce(averageQuanAdd, averageQuanRemove, averageQuanInitial); quanMkt = mktDim.group().reduce(averageQuanAdd, averageQuanRemove, averageQuanInitial); quanSb = sbDim.group().reduce(averageQuanAdd, averageQuanRemove, averageQuanInitial); quanTy = tyDim.group().reduce(averageQuanAdd, averageQuanRemove, averageQuanInitial); lsPChrt = [priceYear, priceMonth, priceMkt, priceSb, priceTy]; lsQChrt = [quanYear, quanMonth, quanMkt, quanSb, quanTy]; getMax = function(ls){ var max; max = -Infinity; ls.map(function(it){ return it.top(Infinity).map(function(it){ if (it.value.average > max) { return max = it.value.average; } }); }); return max; }; chrtPMax = getMax(lsPChrt) * maxMlt; chrtQMax = getMax(lsQChrt) * maxMlt; barWidth = 150; barHeight = 160; marginJson = { "top": 10, "right": 0, "left": 38, "bottom": 50 }; colorBike = d3.rgb("#1f77b4").brighter(1.5); colorBike2 = d3.rgb("#ff7f0e").brighter(1.5); yearExt = d3.extent(tsvData.map(function(it){ return it.date.getFullYear(); })); renderAct = function(it){ return it.selectAll("g.x text").attr({ "dx": "10", "transform": "rotate(45)" }); }; emptyC = function(it, color){}; removeZero = function(it){ return it.selectAll(".axis.x .tick").style({ "opacity": function(d, i){ if (i === 0) { return 0; } else { return 1; } } }); }; ownColor = function(it){ return it.selectAll("rect.bar").each(function(d){ return d3.select(this).attr({ "style": function(){ if (this.classList.contains("deselected")) { return "fill:#ccc"; } else { return "fill:" + color(d.x); } } }); }); }; barMkt_width = keys(lsmkt).length * 25 + marginJson.left + marginJson.right; barSb_width = keys(lssbtype).length * 25 + marginJson.left + marginJson.right; barTy_width = barWidth; barMt_width = barWidth; baYr_width = barWidth; sum_barwidth = sum([barMkt_width, barSb_width, barTy_width, barMt_width, baYr_width]); margin = { top: 10, left: 15, right: 40, bottom: 30 }; margin_sm = { top: 10, left: 3, right: 0, bottom: 30 }; w_sm = 100 - margin_sm.left - margin_sm.right; w = sum_barwidth - margin.left - margin.right - (w_sm + margin_sm.left + margin_sm.right); h = 200 - margin.top - margin.bottom; domainQ = d3.extent(tsvData.map(function(it){ return it.quantity; })); domainP = d3.extent(tsvData.map(function(it){ return it.middleprice; })); scaleX = d3.time.scale().range([0, w]).domain(d3.extent(tsvData.map(function(it){ return it.date; }))); scaleQ = d3.scale.linear().domain(domainQ).range([0, w]); scaleY = d3.scale.linear().domain([0, domainP[1] * 1.1]).range([h, 0]); line = d3.svg.line().x(function(it){ return scaleX(it.date); }).y(function(it){ return scaleY(it.middleprice); }); d3.select("body").selectAll(".pvsq").append("canvas").attr({ "width": w + margin.left + margin.right, "height": h + margin.top + margin.bottom, "id": "yearvsvalue" }); d3.select("body").selectAll(".pvsq").append("canvas").attr({ "width": w_sm + margin_sm.left + margin_sm.right, "height": h + margin_sm.top + margin_sm.bottom, "id": "yearvsvalue_sm" }); canvasXAxis = d3.svg.axis().scale(scaleX).orient("bottom").ticks(10); canvasYAxis = d3.svg.axis().scale(scaleY).orient("right").ticks(3); svg = d3.select("body").selectAll(".pvsq").append("svg").attr({ "width": w + margin.left + margin.right, "height": h + margin.top + margin.bottom, "class": "oversvg" }).append("g").attr({ "transform": "translate(" + margin.left + ", " + margin.top + ")" }); svg.append("g").attr({ "class": "axis x", "transform": "translate(0," + h + ")" }).call(canvasXAxis); svg.append("g").attr({ "class": "axis y", "transform": "translate(" + w + ", 0)" }).call(canvasYAxis); d3.select("body").selectAll(".pvsq").append("svg").attr({ "width": w_sm + margin_sm.left + margin_sm.right, "height": h + margin_sm.top + margin_sm.bottom, "class": "oversvg_sm" }).append("g").attr({ "transform": "translate(" + margin_sm.left + ", " + margin_sm.top + ")" }); canvas = document.getElementById("yearvsvalue"); canvasWidth = canvas.width; canvasHeight = canvas.height; ctx = canvas.getContext("2d"); canvasData = ctx.getImageData(0, 0, canvasWidth, canvasHeight); canvas_sm = document.getElementById("yearvsvalue_sm"); canvasWidth_sm = canvas_sm.width; canvasHeight_sm = canvas_sm.height; ctx_sm = canvas_sm.getContext("2d"); canvasData_sm = ctx_sm.getImageData(0, 0, canvasWidth_sm, canvasHeight_sm); buf8 = new Uint8ClampedArray(new ArrayBuffer(canvasData.data.length)); buf8_sm = new Uint8ClampedArray(new ArrayBuffer(canvasData_sm.data.length)); drawPixel = function(x, y, r, g, b, a){ var index; index = ((x + margin.left) + (y + margin.top) * canvasWidth) * 4; canvasData.data[index + 0] = r; canvasData.data[index + 1] = g; canvasData.data[index + 2] = b; return canvasData.data[index + 3] = a; }; clear = function(){ return canvasData.data.set(buf8); }; updateCanvas = function(){ return ctx.putImageData(canvasData, 0, 0); }; drawPixel_sm = function(x, y, r, g, b, a){ var i$, idx, index, results$ = []; for (i$ = 0; i$ <= 4; ++i$) { idx = i$; index = ((idx + x + margin_sm.left + 2) + (y + margin_sm.top) * canvasWidth_sm) * 4; canvasData_sm.data[index + 0] = r; canvasData_sm.data[index + 1] = g; canvasData_sm.data[index + 2] = b; results$.push(canvasData_sm.data[index + 3] = a); } return results$; }; clear_sm = function(){ return canvasData_sm.data.set(buf8_sm); }; updateCanvas_sm = function(){ return ctx_sm.putImageData(canvasData_sm, 0, 0); }; bpy = barPriYear.width(baYr_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return emptyC(it, colorBike); }).dimension(yearDim).group(priceYear).valueAccessor(function(it){ return it.value.average; }).y(d3.scale.linear().domain([0, chrtPMax])).x(d3.scale.linear().domain(yearExt)).colors(function(){ return colorBike; }).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }); bpy.yAxis().ticks(3); bpy.xAxis().ticks(3); bpm = barPriMonth.width(barMt_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return emptyC(it, colorBike); }).dimension(monthDim).group(priceMonth).valueAccessor(function(it){ return it.value.average; }).y(d3.scale.linear().domain([0, chrtPMax])).x(d3.scale.linear().domain([-1, 12])).centerBar(true).colors(function(){ return colorBike; }).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }); bpm.xAxis().tickFormat(function(it){ if (it + 1 <= 12) { return it + 1; } else { return ""; } }).ticks(3); bpm.yAxis().ticks(3); barPriMkt.width(barMkt_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return ownColor(it); }).dimension(mktDim).group(priceMkt).valueAccessor(function(it){ return it.value.average; }).y(d3.scale.linear().domain([0, chrtPMax])).x(d3.scale.ordinal().domain(keys(lsmkt))).xUnits(dc.units.ordinal).gap(10).colors(colorBike).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }).yAxis().ticks(3); barPriSb.width(barSb_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return emptyC(it, colorBike); }).dimension(sbDim).group(priceSb).valueAccessor(function(it){ return it.value.average; }).y(d3.scale.linear().domain([0, chrtPMax])).x(d3.scale.ordinal().domain(keys(lssbtype))).xUnits(dc.units.ordinal).gap(15).colors(colorBike).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }).yAxis().ticks(3); barPriTyp.width(barTy_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return emptyC(it, colorBike); }).dimension(tyDim).group(priceTy).valueAccessor(function(it){ return it.value.average; }).y(d3.scale.linear().domain([0, chrtPMax])).x(d3.scale.ordinal().domain(["na", "-10", "-5", "T", "+5"])).xUnits(dc.units.ordinal).gap(10).colors(colorBike).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }).yAxis().ticks(3); bqy = barQuanYear.width(baYr_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return emptyC(it, colorBike); }).dimension(yearDim).group(quanYear).valueAccessor(function(it){ return it.value.average; }).y(d3.scale.linear().domain([0, chrtQMax])).x(d3.scale.linear().domain(yearExt)).colors(function(){ return colorBike2; }).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }); bqy.yAxis().tickFormat(function(it){ return fmt000(it); }).ticks(3); bqy.xAxis().ticks(3); bqm = barQuanMonth.width(barMt_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return emptyC(it, colorBike); }).dimension(monthDim).valueAccessor(function(it){ return it.value.average; }).group(quanMonth).y(d3.scale.linear().domain([0, chrtQMax])).x(d3.scale.linear().domain([-1, 12])).centerBar(true).colors(function(){ return colorBike2; }).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }); bqm.yAxis().tickFormat(function(it){ return fmt000(it); }).ticks(3); bqm.xAxis().tickFormat(function(it){ if (it + 1 <= 12) { return it + 1; } else { return ""; } }).ticks(3); barQuanMkt.width(barMkt_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return ownColor(it); }).dimension(mktDim).valueAccessor(function(it){ return it.value.average; }).group(quanMkt).y(d3.scale.linear().domain([0, chrtQMax])).x(d3.scale.ordinal().domain(keys(lsmkt))).xUnits(dc.units.ordinal).gap(10).colors(colorBike2).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }).yAxis().tickFormat(function(it){ return fmt000(it); }).ticks(3); barQyanSb.width(barSb_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return emptyC(it, colorBike); }).dimension(sbDim).valueAccessor(function(it){ return it.value.average; }).group(quanSb).y(d3.scale.linear().domain([0, chrtQMax])).x(d3.scale.ordinal().domain(keys(lssbtype))).xUnits(dc.units.ordinal).gap(15).colors(colorBike2).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }).yAxis().tickFormat(function(it){ return fmt000(it); }).ticks(3); barQuanTyp.width(barTy_width).height(barHeight).margins(marginJson).renderlet(function(it){ renderAct(it); return emptyC(it, colorBike); }).dimension(tyDim).group(quanTy).valueAccessor(function(it){ return it.value.average; }).y(d3.scale.linear().domain([0, chrtQMax])).x(d3.scale.ordinal().domain(["na", "-10", "-5", "T", "+5"])).xUnits(dc.units.ordinal).gap(10).colors(colorBike2).renderHorizontalGridLines(true).on("filtered", function(){ return updateGraph(); }).yAxis().tickFormat(function(it){ return fmt000(it); }).ticks(3); fmt = d3.format("02d"); fmt000 = d3.format(".2s"); fmtpnq = function(it){ var r; r = ~~it; if (r > 1000) { r = ~~(r / 1000) + " k "; } return r; }; addzero = function(n){ if (n < 10) { return "0" + n; } else { return n; } }; objToTd = function(it){ var n; n = it.date.getFullYear() % 100; return [ { "txt": "'" + addzero(n) + "/" + addzero(it.date.getMonth() + 1) + "/" + addzero(it.date.getDate()), "class": "dc-table-column _0" }, { "txt": it.mktname, "class": "dc-table-column _1" }, { "txt": fmtpnq(it.middleprice), "class": "dc-table-column _2" }, { "txt": fmtpnq(it.quantity), "class": "dc-table-column _3" }, { "txt": it.sbtype, "class": "dc-table-column _4" } ]; }; mktorder = {}; (function(){ var odr, mkt, results$ = []; odr = 0; for (mkt in lsmkt) { mktorder[mkt] = odr; results$.push(++odr); } return results$; })(); updateGraph = function(){ var all, setopa, trs, tds; clear(); clear_sm(); d3.selectAll(".count").text(yearDim.top(Infinity).length); chrtPMax = getMax(lsPChrt) * maxMlt; chrtQMax = getMax(lsQChrt) * maxMlt; all = yearDim.bottom(Infinity); all.map(function(it){ var c; if (lscolor[color(it.mktname)] === undefined) { lscolor[color(it.mktname)] = d3.rgb(color(it.mktname)); } c = lscolor[color(it.mktname)]; drawPixel(~~scaleX(it.date), ~~scaleY(it[view]), c.r, c.g, c.b, 255); return drawPixel_sm(mktorder[it.mktname] * 7, ~~scaleY(it[view]), c.r, c.g, c.b, 255); }); setopa = function(it, i){ if (i === 2) { return (+it.txt) / 100 + 0.1; } else if (i === 3) { return (+it.txt) / 1000 + 0.1; } else if (i === 1) { return 1; } else { return 0.5; } }; trs = d3.selectAll(".datatable").selectAll(".datatr").data(monthDim.top(50)); trs.enter().append("tr").attr({ "class": "datatr" }); trs.style({ "opacity": 0 }).transition().delay(function(d, i){ return i * 20; }).style({ "opacity": 1 }); tds = trs.selectAll("td").data(function(it){ return objToTd(it); }); tds.enter().append("td"); tds.html(function(it){ return it.txt; }).attr({ "class": function(it){ return it['class']; } }).style({ "color": function(it, i){ if (i === 1) { return lscolor[color(it.txt)]; } }, "opacity": function(it, i){ return setopa(it, i); } }); tds.exit().remove(); trs.exit().remove(); updateCanvas(); return updateCanvas_sm(); }; dc.renderAll(); updateGraph(); d3.selectAll(".title").text(drop(2, name) + lsenname[name]); function numberWithCommas(x){ return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); } setList = function(holderName, listData, onClick){ var uls, rw, lg, ncut, cut; uls = d3.selectAll(holderName).append("ul").attr("class", "dropdown-menu").attr("role", "menu"); rw = uls.append("div").attr({ "class": "row" }).style({ "width": "1400px" }); lg = listData.length; ncut = 12; cut = ~~(lg / ncut); return rw.selectAll("ul").data((function(){ var i$, to$, results$ = []; for (i$ = 0, to$ = ncut - 1; i$ <= to$; ++i$) { results$.push(i$); } return results$; }())).enter().append("ul").attr({ "class": "list-unstyled col-lg-" + ~~(12 / ncut) }).each(function(c){ return d3.select(this).selectAll("li").data(listData.filter(function(it, i){ return i > c * cut && i < (c + 1) * cut; })).enter().append("li").append("a").style("cursor", "pointer").attr("data-target", "#").attr("class", "dropdown-action").text(function(it){ return tbgdname[it]; }).on("click", function(it){ return onClick(it); }); }); }; setList(".index-holder", lsveggie, function(it){ return window.open('./crossfilter.html#' + it, '_blank'); }); brushCell = null; brushstart = function(p){ if (brushCell !== this) { d3.select(brushCell).call(brush.clear()); return brushCell = this; } }; brushmove = function(p){ var e; e = brush.extent(); dateDim.filter([e[0][0], e[1][0]]); mdlpDim.filter([e[0][1], e[1][1]]); return updateGraph(); }; brushend = function(){ if (brush.empty()) { dateDim.filter(null); mdlpDim.filter(null); } dc.renderAll(); return updateGraph(); }; brush = d3.svg.brush().x(scaleX).y(scaleY).on("brushstart", brushstart).on("brush", brushmove).on("brushend", brushend); brushCell_sm = null; brushstart_sm = function(p){ if (brushCell_sm !== this) { d3.select(brushCell_sm).call(brush_sm.clear()); return brushCell_sm = this; } }; brushmove_sm = function(p){ var e; e = brush_sm.extent(); mdlpDim.filter([e[0], e[1]]); return updateGraph(); }; brushend_sm = function(){ if (brush_sm.empty()) { dateDim.filter(null); mdlpDim.filter(null); } dc.renderAll(); return updateGraph(); }; brush_sm = d3.svg.brush().y(scaleY).on("brushstart", brushstart_sm).on("brush", brushmove_sm).on("brushend", brushend_sm); return $(document).ready(function(){ var cnvs, cnvs_sm; cnvs = document.getElementById("yearvsvalue").getBoundingClientRect(); d3.selectAll(".oversvg").style({ "position": "fixed", "top": cnvs.top, "left": cnvs.left }).select("g").call(brush); cnvs_sm = document.getElementById("yearvsvalue_sm").getBoundingClientRect(); return d3.selectAll(".oversvg_sm").style({ "position": "fixed", "top": cnvs_sm.top, "left": cnvs_sm.left }).select("g").call(brush_sm).selectAll("rect").attr({ "x": 0, "width": w_sm }); }); }); });