├── .gitignore ├── .travis.yml ├── README.md ├── build.sbt ├── d3.scala.diff ├── index-fastopt.html ├── index.html ├── miserables.json ├── population.csv ├── project ├── build.properties └── build.sbt ├── src ├── main │ └── scala │ │ ├── D3 │ │ └── d3.scala │ │ └── example │ │ ├── Graph2.scala │ │ └── ScalaJSExample.scala └── test │ └── scala │ └── example │ └── ScalaJSExampleTest.scala ├── testsuite-fastopt.html └── testsuite.html /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | .cache 3 | .classpath 4 | .project 5 | .settings/ 6 | .idea/ 7 | .idea_modules/ 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: scala 2 | script: 3 | - sbt ++$TRAVIS_SCALA_VERSION test packageJS fullOptJS 4 | scala: 5 | - 2.11.1 6 | jdk: 7 | - oraclejdk7 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Example of Scala.js to D3.js binding 2 | 3 | [![Build Status](https://travis-ci.org/nebuta/ScalaJS-D3-Example.svg?branch=master)](https://travis-ci.org/nebuta/ScalaJS-D3-Example) 4 | 5 | 6 | This repo is a demonstration of Scala.js 7 | [Scala.js](https://www.scala-js.org/) binding to D3.js (http://d3js.org/). 8 | -------------------------------------------------------------------------------- /build.sbt: -------------------------------------------------------------------------------- 1 | // Turn this project into a Scala.js project by importing these settings 2 | scalaJSSettings 3 | 4 | name := "Example" 5 | 6 | version := "0.1-SNAPSHOT" 7 | 8 | scalaVersion := "2.11.1" 9 | 10 | ScalaJSKeys.persistLauncher := true 11 | 12 | ScalaJSKeys.persistLauncher in Test := false 13 | 14 | libraryDependencies ++= Seq( 15 | "org.scala-lang.modules.scalajs" %%% "scalajs-dom" % "0.6", 16 | "org.scala-lang.modules.scalajs" %% "scalajs-jasmine-test-framework" % scalaJSVersion % "test", 17 | "com.scalatags" %%% "scalatags" % "0.3.8", 18 | "com.scalarx" %%% "scalarx" % "0.2.5" 19 | ) 20 | -------------------------------------------------------------------------------- /d3.scala.diff: -------------------------------------------------------------------------------- 1 | --- src/main/scala/D3/d3.scala 2014-07-03 13:59:52.000000000 -0700 2 | +++ ../scala-js-ts-importer/d3.original.scala 2014-07-03 14:34:04.000000000 -0700 3 | @@ -1,11 +1,10 @@ 4 | 5 | - 6 | -package D3 { 7 | - 8 | import scala.scalajs.js 9 | import js.annotation._ 10 | -import org.scalajs.dom._ 11 | -import js._ 12 | + 13 | +package importedjs { 14 | + 15 | +package D3 { 16 | 17 | trait Selectors extends js.Object { 18 | def select(selector: js.String): Selection = ??? 19 | @@ -29,8 +28,7 @@ 20 | var `type`: js.String = ??? 21 | } 22 | 23 | -@JSName("d3") 24 | -object Base extends Selectors { 25 | +trait Base extends Selectors { 26 | var behavior: Behavior.Behavior = ??? 27 | var event: Event = ??? 28 | def ascending[T](a: T, b: T): js.Number = ??? 29 | @@ -61,15 +59,15 @@ 30 | def values(map: js.Array[js.Any]): js.Array[js.Any] = ??? 31 | def entries(map: js.Any): js.Array[js.Any] = ??? 32 | def merge(map: js.Any*): js.Array[js.Any] = ??? 33 | - def range(stop: js.Number, step: js.Number): js.Array[js.Number] = ??? 34 | + def range(stop: js.Number, step: js.Number = ???): js.Array[js.Number] = ??? 35 | def range(start: js.Number, stop: js.Number = ???, step: js.Number = ???): js.Array[js.Number] = ??? 36 | def nest(): Nest = ??? 37 | - def xhr(url: js.String, callback: js.Function1[XMLHttpRequest, Unit]): Xhr = ??? 38 | + def xhr(url: js.String, callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 39 | def xhr(url: js.String, mime: js.String, callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 40 | - def text(url: js.String, callback: js.Function1[js.String, Unit]): Xhr = ??? 41 | + def text(url: js.String, callback: js.Function1[js.String, Unit] = ???): Xhr = ??? 42 | def text(url: js.String, mime: js.String, callback: js.Function1[js.String, Unit] = ???): Xhr = ??? 43 | - def json(url: js.String, callback: js.Function2[js.Any, js.Any, Unit]): Xhr = ??? 44 | - def xml(url: js.String, callback: js.Function1[Document, Unit]): Xhr = ??? 45 | + var json: js.Function2[js.String, js.Function2[js.Any, js.Any, Unit], Xhr] = ??? 46 | + def xml(url: js.String, callback: js.Function1[Document, Unit] = ???): Xhr = ??? 47 | def xml(url: js.String, mime: js.String, callback: js.Function1[Document, Unit] = ???): Xhr = ??? 48 | var html: js.Function2[js.String, js.Function1[DocumentFragment, Unit], Xhr] = ??? 49 | var csv: Dsv = ??? 50 | @@ -97,8 +95,6 @@ 51 | def selection(): Selection = ??? 52 | var ns: js.Any = ??? 53 | var ease: js.Function = ??? 54 | - 55 | - 56 | def rgb(r: js.Number, g: js.Number, b: js.Number): D3.Color.RGBColor = ??? 57 | def rgb(color: js.String): D3.Color.RGBColor = ??? 58 | def hcl(h: js.Number, c: js.Number, l: js.Number): Color.HCLColor = ??? 59 | @@ -145,72 +141,65 @@ 60 | def response(): js.Function1[XMLHttpRequest, Any] = ??? 61 | def response(value: js.Function1[XMLHttpRequest, Any]): Xhr = ??? 62 | def get(callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 63 | - def post(callback: js.Function1[XMLHttpRequest, Unit]): Xhr = ??? 64 | + def post(callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 65 | def post(data: js.Any, callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 66 | - def send(method: js.String, callback: js.Function1[XMLHttpRequest, Unit]): Xhr = ??? 67 | + def send(method: js.String, callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 68 | def send(method: js.String, data: js.Any, callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 69 | def abort(): Xhr = ??? 70 | var on: js.Function2[js.String, js.Function2[js.Any, js.Number, Any], Xhr] = ??? 71 | } 72 | 73 | trait Dsv extends js.Object { 74 | - def apply[A <: js.Object](url: js.String, callback: js.Function2[js.Any, js.Array[A], Unit] = ???): Xhr = ??? 75 | + def apply(url: js.String, callback: js.Function2[js.Any, js.Array[js.Any], Unit] = ???): Xhr = ??? 76 | def parse(string: js.String): js.Array[js.Any] = ??? 77 | def parseRows(string: js.String, accessor: js.Function2[js.Array[js.Any], js.Number, Any]): js.Dynamic = ??? 78 | def format(rows: js.Array[js.Any]): js.String = ??? 79 | } 80 | 81 | -//trait Selection extends Selectors with js.Array[js.Any] { 82 | -trait Selection extends js.Array[js.Any] with Selectors { 83 | +trait Selection extends Selectors with js.Array[js.Any] { 84 | def attr(name: js.String): js.String = ??? 85 | def attr(name: js.String, value: js.Any): Selection = ??? 86 | - def attr[A <: Any](name: js.String, valueFunction: js.Function2[A, js.Number, Any]): Selection = ??? 87 | + def attr(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 88 | def attr(attrValueMap: Object): Selection = ??? 89 | def classed(name: js.String): js.String = ??? 90 | def classed(name: js.String, value: js.Any): Selection = ??? 91 | def classed(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 92 | def style(name: js.String): js.String = ??? 93 | - def style(name: js.String, value: js.Any, priority: js.String): Selection = ??? 94 | - def style[A <: js.Object](name: js.String, valueFunction: Function2[A, js.Number, js.Dynamic], priority: js.String = ???): Selection = ??? 95 | + def style(name: js.String, value: js.Any, priority: js.String = ???): Selection = ??? 96 | + def style(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any], priority: js.String = ???): Selection = ??? 97 | def style(styleValueMap: Object): Selection = ??? 98 | def property(name: js.String): Unit = ??? 99 | def property(name: js.String, value: js.Any): Selection = ??? 100 | def property(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 101 | def property(propertyValueMap: Object): Selection = ??? 102 | def text(): js.String = ??? 103 | - def text(value: js.String): Selection = ??? 104 | - def text[A <: js.Any](valueFunction: js.Function2[A, js.Number, js.String]): Selection = ??? 105 | + def text(value: js.Any): Selection = ??? 106 | + def text(valueFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 107 | def html(): js.String = ??? 108 | def html(value: js.Any): Selection = ??? 109 | def html(valueFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 110 | - def append(el: String): Selection = ??? 111 | - 112 | - def insert(el: String, s: String): Selection = ??? 113 | + var append: js.Function1[js.String, Selection] = ??? 114 | + var insert: js.Function2[js.String, js.String, Selection] = ??? 115 | var remove: js.Function0[Selection] = ??? 116 | var empty: js.Function0[js.Boolean] = ??? 117 | - def data[A](values: js.Array[A]): UpdateSelection = ??? 118 | -// def data(values: js.Function2[Int, Int, js.Dynamic]): UpdateSelection = ??? 119 | - def data[A](values: js.Function2[js.Number, Int, js.Array[Int]]): UpdateSelection = ??? 120 | -// def data[A <: js.Object, B <: js.Object](values: js.Function2[A, Int, js.Array[B]], key: js.Function2[js.Any, js.Number, Any] = ???): UpdateSelection = ??? 121 | + def data(values: js.Function2[js.Any, js.Number, js.Array[js.Any]], key: js.Function2[js.Any, js.Number, Any] = ???): UpdateSelection = ??? 122 | def data(): js.Array[js.Any] = ??? 123 | def datum(values: js.Function2[js.Any, js.Number, Any]): UpdateSelection = ??? 124 | def datum(): js.Dynamic = ??? 125 | def filter(filter: js.Function2[js.Any, js.Number, js.Boolean], thisArg: js.Any = ???): UpdateSelection = ??? 126 | def call(callback: js.Function, args: js.Any*): Selection = ??? 127 | - def call(f: Layout.Layout): Selection = ??? 128 | - def call(f: Svg.Axis): Selection = ??? 129 | def each(eachFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 130 | def on(`type`: js.String): js.Function2[js.Any, js.Number, Any] = ??? 131 | def on(`type`: js.String, listener: js.Function2[js.Any, js.Number, Any], capture: js.Boolean = ???): Selection = ??? 132 | def size(): js.Number = ??? 133 | def transition(): Transition.Transition = ??? 134 | - def sort[T](comparator: js.Function2[T, T, js.Number]): Selection = ??? 135 | + def sort[T](comparator: js.Function2[T, T, js.Number] = ???): Selection = ??? 136 | var order: js.Function0[Selection] = ??? 137 | var node: js.Function0[Element] = ??? 138 | } 139 | 140 | trait EnterSelection extends js.Object { 141 | - def append(sel: String): Selection = ??? 142 | + var append: js.Function1[js.String, Selection] = ??? 143 | var insert: js.Function2[js.String, js.String, Selection] = ??? 144 | var select: js.Function1[js.String, Selection] = ??? 145 | var empty: js.Function0[js.Boolean] = ??? 146 | @@ -220,7 +209,7 @@ 147 | } 148 | 149 | trait UpdateSelection extends Selection { 150 | - def enter(): EnterSelection = ??? 151 | + var enter: js.Function0[EnterSelection] = ??? 152 | var update: js.Function0[Selection] = ??? 153 | var exit: js.Function0[Selection] = ??? 154 | } 155 | @@ -231,14 +220,11 @@ 156 | } 157 | 158 | trait Nest extends js.Object { 159 | - def key[A <: js.Any](keyFunction: js.Function1[A, js.String]): Nest = ??? 160 | - def key[A <: js.Any](keyFunction: js.Function2[A, js.Number, js.String]): Nest = ??? 161 | + def key(keyFunction: js.Function2[js.Any, js.Number, js.String]): Nest = ??? 162 | def sortKeys(comparator: js.Function2[js.Any, js.Any, js.Number]): Nest = ??? 163 | def sortValues(comparator: js.Function2[js.Any, js.Any, js.Number]): Nest = ??? 164 | - def rollup[A <: Nest](rollupFunction: js.Function1[A, Any]): Nest = ??? 165 | - def rollup[A <: Nest](rollupFunction: js.Function2[A, js.Number, Any]): Nest = ??? 166 | - def map[A <: Any](values: js.Array[A]): js.Dynamic = ??? 167 | - def map[A <: js.Any](values: js.Function1[A,js.Number]): js.Dynamic = ??? 168 | + def rollup(rollupFunction: js.Function2[js.Any, js.Number, Any]): Nest = ??? 169 | + def map(values: js.Array[js.Any]): js.Dynamic = ??? 170 | def entries(values: js.Array[js.Any]): js.Array[NestKeyValue] = ??? 171 | } 172 | 173 | @@ -277,7 +263,7 @@ 174 | def attr(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any]): Transition = ??? 175 | def attr(attrValueMap: js.Any): Transition = ??? 176 | def style(name: js.String): js.String = ??? 177 | - def style(name: js.String, value: js.Any, priority: js.String): Transition = ??? 178 | + def style(name: js.String, value: js.Any, priority: js.String = ???): Transition = ??? 179 | def style(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any], priority: js.String = ???): Transition = ??? 180 | def call(callback: js.Function1[Selection, Unit]): Transition = ??? 181 | def select(selector: js.String): Transition = ??? 182 | @@ -393,7 +379,7 @@ 183 | def sort(comparator: js.Function2[js.Any, js.Any, js.Number]): TreeLayout = ??? 184 | def children(): js.Function1[js.Any, Any] = ??? 185 | def children(children: js.Function1[js.Any, Any]): TreeLayout = ??? 186 | - def nodes[A <: D3.Layout.GraphNode](root: A): TreeLayout = ??? 187 | + def nodes(root: GraphNode): TreeLayout = ??? 188 | def links(nodes: js.Array[GraphNode]): js.Array[GraphLink] = ??? 189 | def seperation(): js.Function2[GraphNode, GraphNode, js.Number] = ??? 190 | def seperation(seperation: js.Function2[GraphNode, GraphNode, js.Number]): TreeLayout = ??? 191 | @@ -447,7 +433,7 @@ 192 | var target: GraphNode = ??? 193 | } 194 | 195 | -trait ForceLayout extends js.Function { 196 | +trait ForceLayout extends js.Object { 197 | def apply(): ForceLayout = ??? 198 | def size(): js.Number = ??? 199 | def size(mysize: js.Array[js.Number]): ForceLayout = ??? 200 | @@ -474,9 +460,9 @@ 201 | def gravity(number: js.Number): ForceLayout = ??? 202 | def gravity(accessor: js.Function2[js.Any, js.Number, js.Number]): ForceLayout = ??? 203 | def links(): js.Array[GraphLink] = ??? 204 | - def links[A <: D3.Layout.GraphLink](arLinks: js.Array[A]): ForceLayout = ??? 205 | - def nodes[A](): js.Array[A] = ??? 206 | - def nodes[A <: D3.Layout.GraphNode](arNodes: js.Array[A]): ForceLayout = ??? 207 | + def links(arLinks: js.Array[GraphLink]): ForceLayout = ??? 208 | + def nodes(): js.Array[GraphNode] = ??? 209 | + def nodes(arNodes: js.Array[GraphNode]): ForceLayout = ??? 210 | def start(): ForceLayout = ??? 211 | def resume(): ForceLayout = ??? 212 | def stop(): ForceLayout = ??? 213 | @@ -605,7 +591,7 @@ 214 | trait Color extends js.Object { 215 | def brighter(k: js.Number): Color = ??? 216 | def darker(k: js.Number = ???): Color = ??? 217 | - override def toString(): js.String = ??? 218 | + def toString(): js.String = ??? 219 | } 220 | 221 | trait RGBColor extends Color { 222 | @@ -685,7 +671,7 @@ 223 | def tickValues(values: js.Array[js.Any]): Axis = ??? 224 | def tickSubdivide(count: js.Number): Axis = ??? 225 | def tickSize(major: js.Number = ???, minor: js.Number = ???, end: js.Number = ???): Axis = ??? 226 | - def tickFormat[A <: js.Any](formatter: js.Function1[A, js.String]): Axis = ??? 227 | + def tickFormat(formatter: js.Function1[js.Any, js.String]): Axis = ??? 228 | } 229 | 230 | trait Arc extends js.Object { 231 | @@ -851,9 +837,7 @@ 232 | 233 | trait Scale extends js.Object { 234 | def apply(value: js.Any): js.Dynamic = ??? 235 | -// def domain(values: js.Array[Double]): Scale = ??? 236 | -// def domain(values: js.Array[Int]): Scale = ??? 237 | - def domain[A <: js.Number](values: js.Array[A]): Scale = ??? 238 | + def domain(values: js.Array[js.Any]): Scale = ??? 239 | def domain(): js.Array[js.Any] = ??? 240 | def range(values: js.Array[js.Any]): Scale = ??? 241 | def range(): js.Array[js.Any] = ??? 242 | @@ -864,10 +848,10 @@ 243 | trait QuantitiveScale extends Scale { 244 | def apply(value: js.Number): js.Number = ??? 245 | def invert(value: js.Number): js.Number = ??? 246 | - def domain(values: js.Array[js.Number]): QuantitiveScale = ??? 247 | - // override def domain(): js.Array[js.Number] = ??? 248 | - def range[A <: js.Number](values: js.Array[A]): QuantitiveScale = ??? 249 | - // override def range(): js.Array[js.Number] = ??? 250 | + def domain(values: js.Array[js.Any]): QuantitiveScale = ??? 251 | + def domain(): js.Array[js.Any] = ??? 252 | + def range(values: js.Array[js.Any]): QuantitiveScale = ??? 253 | + def range(): js.Array[js.Any] = ??? 254 | var rangeRound: js.Function1[js.Array[js.Any], QuantitiveScale] = ??? 255 | def interpolate(): D3.Transition.Interpolate = ??? 256 | def interpolate(factory: D3.Transition.Interpolate): QuantitiveScale = ??? 257 | @@ -875,11 +859,11 @@ 258 | def nice(count: js.Number = ???): QuantitiveScale = ??? 259 | def ticks(count: js.Number): js.Array[js.Any] = ??? 260 | def tickFormat(count: js.Number): js.Function1[js.Number, js.String] = ??? 261 | - override def copy(): QuantitiveScale = ??? 262 | + def copy(): QuantitiveScale = ??? 263 | } 264 | 265 | trait LinearScale extends QuantitiveScale { 266 | - override def apply(value: js.Number): js.Number = ??? 267 | + def apply(value: js.Number): js.Number = ??? 268 | } 269 | 270 | trait IdentityScale extends Scale { 271 | @@ -890,66 +874,66 @@ 272 | } 273 | 274 | trait SqrtScale extends QuantitiveScale { 275 | - override def apply(value: js.Number): js.Number = ??? 276 | + def apply(value: js.Number): js.Number = ??? 277 | } 278 | 279 | trait PowScale extends QuantitiveScale { 280 | - override def apply(value: js.Number): js.Number = ??? 281 | + def apply(value: js.Number): js.Number = ??? 282 | } 283 | 284 | trait LogScale extends QuantitiveScale { 285 | - override def apply(value: js.Number): js.Number = ??? 286 | + def apply(value: js.Number): js.Number = ??? 287 | } 288 | 289 | trait OrdinalScale extends Scale { 290 | - override def apply(value: js.Any): js.Dynamic = ??? 291 | + def apply(value: js.Any): js.Dynamic = ??? 292 | def domain(values: js.Array[js.Any]): OrdinalScale = ??? 293 | - override def domain(): js.Array[js.Any] = ??? 294 | - override def range(values: js.Array[js.Any]): OrdinalScale = ??? 295 | - override def range(): js.Array[js.Any] = ??? 296 | + def domain(): js.Array[js.Any] = ??? 297 | + def range(values: js.Array[js.Any]): OrdinalScale = ??? 298 | + def range(): js.Array[js.Any] = ??? 299 | def rangePoints(interval: js.Array[js.Any], padding: js.Number = ???): OrdinalScale = ??? 300 | def rangeBands(interval: js.Array[js.Any], padding: js.Number = ???, outerPadding: js.Number = ???): OrdinalScale = ??? 301 | def rangeRoundBands(interval: js.Array[js.Any], padding: js.Number = ???, outerPadding: js.Number = ???): OrdinalScale = ??? 302 | def rangeBand(): js.Number = ??? 303 | def rangeExtent(): js.Array[js.Any] = ??? 304 | - override def copy(): OrdinalScale = ??? 305 | + def copy(): OrdinalScale = ??? 306 | } 307 | 308 | trait QuantizeScale extends Scale { 309 | - override def apply(value: js.Any): js.Dynamic = ??? 310 | + def apply(value: js.Any): js.Dynamic = ??? 311 | def domain(values: js.Array[js.Number]): QuantizeScale = ??? 312 | - override def domain(): js.Array[js.Any] = ??? 313 | - override def range(values: js.Array[js.Any]): QuantizeScale = ??? 314 | - override def range(): js.Array[js.Any] = ??? 315 | - override def copy(): QuantizeScale = ??? 316 | + def domain(): js.Array[js.Any] = ??? 317 | + def range(values: js.Array[js.Any]): QuantizeScale = ??? 318 | + def range(): js.Array[js.Any] = ??? 319 | + def copy(): QuantizeScale = ??? 320 | } 321 | 322 | trait ThresholdScale extends Scale { 323 | - override def apply(value: js.Any): js.Dynamic = ??? 324 | + def apply(value: js.Any): js.Dynamic = ??? 325 | def domain(values: js.Array[js.Number]): ThresholdScale = ??? 326 | - override def domain(): js.Array[js.Any] = ??? 327 | - override def range(values: js.Array[js.Any]): ThresholdScale = ??? 328 | - override def range(): js.Array[js.Any] = ??? 329 | - override def copy(): ThresholdScale = ??? 330 | + def domain(): js.Array[js.Any] = ??? 331 | + def range(values: js.Array[js.Any]): ThresholdScale = ??? 332 | + def range(): js.Array[js.Any] = ??? 333 | + def copy(): ThresholdScale = ??? 334 | } 335 | 336 | trait QuantileScale extends Scale { 337 | - override def apply(value: js.Any): js.Dynamic = ??? 338 | + def apply(value: js.Any): js.Dynamic = ??? 339 | def domain(values: js.Array[js.Number]): QuantileScale = ??? 340 | - override def domain(): js.Array[js.Any] = ??? 341 | - override def range(values: js.Array[js.Any]): QuantileScale = ??? 342 | - override def range(): js.Array[js.Any] = ??? 343 | + def domain(): js.Array[js.Any] = ??? 344 | + def range(values: js.Array[js.Any]): QuantileScale = ??? 345 | + def range(): js.Array[js.Any] = ??? 346 | def quantiles(): js.Array[js.Any] = ??? 347 | - override def copy(): QuantileScale = ??? 348 | + def copy(): QuantileScale = ??? 349 | } 350 | 351 | trait TimeScale extends Scale { 352 | def apply(value: Date): js.Number = ??? 353 | def invert(value: js.Number): Date = ??? 354 | def domain(values: js.Array[js.Any]): TimeScale = ??? 355 | - override def domain(): js.Array[js.Any] = ??? 356 | - override def range(values: js.Array[js.Any]): TimeScale = ??? 357 | - override def range(): js.Array[js.Any] = ??? 358 | + def domain(): js.Array[js.Any] = ??? 359 | + def range(values: js.Array[js.Any]): TimeScale = ??? 360 | + def range(): js.Array[js.Any] = ??? 361 | var rangeRound: js.Function1[js.Array[js.Any], TimeScale] = ??? 362 | def interpolate(): D3.Transition.Interpolate = ??? 363 | def interpolate(factory: D3.Transition.InterpolateFactory): TimeScale = ??? 364 | @@ -957,7 +941,7 @@ 365 | def ticks(count: js.Number): js.Array[js.Any] = ??? 366 | def ticks(range: D3.Time.Range, count: js.Number): js.Array[js.Any] = ??? 367 | def tickFormat(count: js.Number): js.Function1[js.Number, js.String] = ??? 368 | - override def copy(): TimeScale = ??? 369 | + def copy(): TimeScale = ??? 370 | } 371 | 372 | } 373 | @@ -1213,12 +1197,10 @@ 374 | 375 | } 376 | 377 | - 378 | -package object D3Obj { 379 | - val d3 = D3.Base 380 | } 381 | 382 | - 383 | } 384 | 385 | - 386 | +package object importedjs extends js.GlobalScope { 387 | + var d3: D3.Base = ??? 388 | +} 389 | -------------------------------------------------------------------------------- /index-fastopt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Demo of Scala.js to D3.js binding test 5 | 6 | 62 | 63 | 64 | 65 | 66 |

Force directed graph

67 |

Adapted from http://bl.ocks.org/mbostock/4062045

68 |

and http://bl.ocks.org/mbostock/4062085

69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Example Scala.js application 5 | 6 | 7 | 8 | 9 |

Example Scala.js application - full-optimized version

10 | 11 |

After having compiled and full-optimized properly the code for the application 12 | (using `sbt fullOptJS`), you should see "It works" herebelow. 13 | See README.md for detailed explanations.

14 | 15 |
16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /miserables.json: -------------------------------------------------------------------------------- 1 | { 2 | "nodes":[ 3 | {"name":"Myriel","group":1}, 4 | {"name":"Napoleon","group":1}, 5 | {"name":"Mlle.Baptistine","group":1}, 6 | {"name":"Mme.Magloire","group":1}, 7 | {"name":"CountessdeLo","group":1}, 8 | {"name":"Geborand","group":1}, 9 | {"name":"Champtercier","group":1}, 10 | {"name":"Cravatte","group":1}, 11 | {"name":"Count","group":1}, 12 | {"name":"OldMan","group":1}, 13 | {"name":"Labarre","group":2}, 14 | {"name":"Valjean","group":2}, 15 | {"name":"Marguerite","group":3}, 16 | {"name":"Mme.deR","group":2}, 17 | {"name":"Isabeau","group":2}, 18 | {"name":"Gervais","group":2}, 19 | {"name":"Tholomyes","group":3}, 20 | {"name":"Listolier","group":3}, 21 | {"name":"Fameuil","group":3}, 22 | {"name":"Blacheville","group":3}, 23 | {"name":"Favourite","group":3}, 24 | {"name":"Dahlia","group":3}, 25 | {"name":"Zephine","group":3}, 26 | {"name":"Fantine","group":3}, 27 | {"name":"Mme.Thenardier","group":4}, 28 | {"name":"Thenardier","group":4}, 29 | {"name":"Cosette","group":5}, 30 | {"name":"Javert","group":4}, 31 | {"name":"Fauchelevent","group":0}, 32 | {"name":"Bamatabois","group":2}, 33 | {"name":"Perpetue","group":3}, 34 | {"name":"Simplice","group":2}, 35 | {"name":"Scaufflaire","group":2}, 36 | {"name":"Woman1","group":2}, 37 | {"name":"Judge","group":2}, 38 | {"name":"Champmathieu","group":2}, 39 | {"name":"Brevet","group":2}, 40 | {"name":"Chenildieu","group":2}, 41 | {"name":"Cochepaille","group":2}, 42 | {"name":"Pontmercy","group":4}, 43 | {"name":"Boulatruelle","group":6}, 44 | {"name":"Eponine","group":4}, 45 | {"name":"Anzelma","group":4}, 46 | {"name":"Woman2","group":5}, 47 | {"name":"MotherInnocent","group":0}, 48 | {"name":"Gribier","group":0}, 49 | {"name":"Jondrette","group":7}, 50 | {"name":"Mme.Burgon","group":7}, 51 | {"name":"Gavroche","group":8}, 52 | {"name":"Gillenormand","group":5}, 53 | {"name":"Magnon","group":5}, 54 | {"name":"Mlle.Gillenormand","group":5}, 55 | {"name":"Mme.Pontmercy","group":5}, 56 | {"name":"Mlle.Vaubois","group":5}, 57 | {"name":"Lt.Gillenormand","group":5}, 58 | {"name":"Marius","group":8}, 59 | {"name":"BaronessT","group":5}, 60 | {"name":"Mabeuf","group":8}, 61 | {"name":"Enjolras","group":8}, 62 | {"name":"Combeferre","group":8}, 63 | {"name":"Prouvaire","group":8}, 64 | {"name":"Feuilly","group":8}, 65 | {"name":"Courfeyrac","group":8}, 66 | {"name":"Bahorel","group":8}, 67 | {"name":"Bossuet","group":8}, 68 | {"name":"Joly","group":8}, 69 | {"name":"Grantaire","group":8}, 70 | {"name":"MotherPlutarch","group":9}, 71 | {"name":"Gueulemer","group":4}, 72 | {"name":"Babet","group":4}, 73 | {"name":"Claquesous","group":4}, 74 | {"name":"Montparnasse","group":4}, 75 | {"name":"Toussaint","group":5}, 76 | {"name":"Child1","group":10}, 77 | {"name":"Child2","group":10}, 78 | {"name":"Brujon","group":4}, 79 | {"name":"Mme.Hucheloup","group":8} 80 | ], 81 | "links":[ 82 | {"source":1,"target":0,"value":1}, 83 | {"source":2,"target":0,"value":8}, 84 | {"source":3,"target":0,"value":10}, 85 | {"source":3,"target":2,"value":6}, 86 | {"source":4,"target":0,"value":1}, 87 | {"source":5,"target":0,"value":1}, 88 | {"source":6,"target":0,"value":1}, 89 | {"source":7,"target":0,"value":1}, 90 | {"source":8,"target":0,"value":2}, 91 | {"source":9,"target":0,"value":1}, 92 | {"source":11,"target":10,"value":1}, 93 | {"source":11,"target":3,"value":3}, 94 | {"source":11,"target":2,"value":3}, 95 | {"source":11,"target":0,"value":5}, 96 | {"source":12,"target":11,"value":1}, 97 | {"source":13,"target":11,"value":1}, 98 | {"source":14,"target":11,"value":1}, 99 | {"source":15,"target":11,"value":1}, 100 | {"source":17,"target":16,"value":4}, 101 | {"source":18,"target":16,"value":4}, 102 | {"source":18,"target":17,"value":4}, 103 | {"source":19,"target":16,"value":4}, 104 | {"source":19,"target":17,"value":4}, 105 | {"source":19,"target":18,"value":4}, 106 | {"source":20,"target":16,"value":3}, 107 | {"source":20,"target":17,"value":3}, 108 | {"source":20,"target":18,"value":3}, 109 | {"source":20,"target":19,"value":4}, 110 | {"source":21,"target":16,"value":3}, 111 | {"source":21,"target":17,"value":3}, 112 | {"source":21,"target":18,"value":3}, 113 | {"source":21,"target":19,"value":3}, 114 | {"source":21,"target":20,"value":5}, 115 | {"source":22,"target":16,"value":3}, 116 | {"source":22,"target":17,"value":3}, 117 | {"source":22,"target":18,"value":3}, 118 | {"source":22,"target":19,"value":3}, 119 | {"source":22,"target":20,"value":4}, 120 | {"source":22,"target":21,"value":4}, 121 | {"source":23,"target":16,"value":3}, 122 | {"source":23,"target":17,"value":3}, 123 | {"source":23,"target":18,"value":3}, 124 | {"source":23,"target":19,"value":3}, 125 | {"source":23,"target":20,"value":4}, 126 | {"source":23,"target":21,"value":4}, 127 | {"source":23,"target":22,"value":4}, 128 | {"source":23,"target":12,"value":2}, 129 | {"source":23,"target":11,"value":9}, 130 | {"source":24,"target":23,"value":2}, 131 | {"source":24,"target":11,"value":7}, 132 | {"source":25,"target":24,"value":13}, 133 | {"source":25,"target":23,"value":1}, 134 | {"source":25,"target":11,"value":12}, 135 | {"source":26,"target":24,"value":4}, 136 | {"source":26,"target":11,"value":31}, 137 | {"source":26,"target":16,"value":1}, 138 | {"source":26,"target":25,"value":1}, 139 | {"source":27,"target":11,"value":17}, 140 | {"source":27,"target":23,"value":5}, 141 | {"source":27,"target":25,"value":5}, 142 | {"source":27,"target":24,"value":1}, 143 | {"source":27,"target":26,"value":1}, 144 | {"source":28,"target":11,"value":8}, 145 | {"source":28,"target":27,"value":1}, 146 | {"source":29,"target":23,"value":1}, 147 | {"source":29,"target":27,"value":1}, 148 | {"source":29,"target":11,"value":2}, 149 | {"source":30,"target":23,"value":1}, 150 | {"source":31,"target":30,"value":2}, 151 | {"source":31,"target":11,"value":3}, 152 | {"source":31,"target":23,"value":2}, 153 | {"source":31,"target":27,"value":1}, 154 | {"source":32,"target":11,"value":1}, 155 | {"source":33,"target":11,"value":2}, 156 | {"source":33,"target":27,"value":1}, 157 | {"source":34,"target":11,"value":3}, 158 | {"source":34,"target":29,"value":2}, 159 | {"source":35,"target":11,"value":3}, 160 | {"source":35,"target":34,"value":3}, 161 | {"source":35,"target":29,"value":2}, 162 | {"source":36,"target":34,"value":2}, 163 | {"source":36,"target":35,"value":2}, 164 | {"source":36,"target":11,"value":2}, 165 | {"source":36,"target":29,"value":1}, 166 | {"source":37,"target":34,"value":2}, 167 | {"source":37,"target":35,"value":2}, 168 | {"source":37,"target":36,"value":2}, 169 | {"source":37,"target":11,"value":2}, 170 | {"source":37,"target":29,"value":1}, 171 | {"source":38,"target":34,"value":2}, 172 | {"source":38,"target":35,"value":2}, 173 | {"source":38,"target":36,"value":2}, 174 | {"source":38,"target":37,"value":2}, 175 | {"source":38,"target":11,"value":2}, 176 | {"source":38,"target":29,"value":1}, 177 | {"source":39,"target":25,"value":1}, 178 | {"source":40,"target":25,"value":1}, 179 | {"source":41,"target":24,"value":2}, 180 | {"source":41,"target":25,"value":3}, 181 | {"source":42,"target":41,"value":2}, 182 | {"source":42,"target":25,"value":2}, 183 | {"source":42,"target":24,"value":1}, 184 | {"source":43,"target":11,"value":3}, 185 | {"source":43,"target":26,"value":1}, 186 | {"source":43,"target":27,"value":1}, 187 | {"source":44,"target":28,"value":3}, 188 | {"source":44,"target":11,"value":1}, 189 | {"source":45,"target":28,"value":2}, 190 | {"source":47,"target":46,"value":1}, 191 | {"source":48,"target":47,"value":2}, 192 | {"source":48,"target":25,"value":1}, 193 | {"source":48,"target":27,"value":1}, 194 | {"source":48,"target":11,"value":1}, 195 | {"source":49,"target":26,"value":3}, 196 | {"source":49,"target":11,"value":2}, 197 | {"source":50,"target":49,"value":1}, 198 | {"source":50,"target":24,"value":1}, 199 | {"source":51,"target":49,"value":9}, 200 | {"source":51,"target":26,"value":2}, 201 | {"source":51,"target":11,"value":2}, 202 | {"source":52,"target":51,"value":1}, 203 | {"source":52,"target":39,"value":1}, 204 | {"source":53,"target":51,"value":1}, 205 | {"source":54,"target":51,"value":2}, 206 | {"source":54,"target":49,"value":1}, 207 | {"source":54,"target":26,"value":1}, 208 | {"source":55,"target":51,"value":6}, 209 | {"source":55,"target":49,"value":12}, 210 | {"source":55,"target":39,"value":1}, 211 | {"source":55,"target":54,"value":1}, 212 | {"source":55,"target":26,"value":21}, 213 | {"source":55,"target":11,"value":19}, 214 | {"source":55,"target":16,"value":1}, 215 | {"source":55,"target":25,"value":2}, 216 | {"source":55,"target":41,"value":5}, 217 | {"source":55,"target":48,"value":4}, 218 | {"source":56,"target":49,"value":1}, 219 | {"source":56,"target":55,"value":1}, 220 | {"source":57,"target":55,"value":1}, 221 | {"source":57,"target":41,"value":1}, 222 | {"source":57,"target":48,"value":1}, 223 | {"source":58,"target":55,"value":7}, 224 | {"source":58,"target":48,"value":7}, 225 | {"source":58,"target":27,"value":6}, 226 | {"source":58,"target":57,"value":1}, 227 | {"source":58,"target":11,"value":4}, 228 | {"source":59,"target":58,"value":15}, 229 | {"source":59,"target":55,"value":5}, 230 | {"source":59,"target":48,"value":6}, 231 | {"source":59,"target":57,"value":2}, 232 | {"source":60,"target":48,"value":1}, 233 | {"source":60,"target":58,"value":4}, 234 | {"source":60,"target":59,"value":2}, 235 | {"source":61,"target":48,"value":2}, 236 | {"source":61,"target":58,"value":6}, 237 | {"source":61,"target":60,"value":2}, 238 | {"source":61,"target":59,"value":5}, 239 | {"source":61,"target":57,"value":1}, 240 | {"source":61,"target":55,"value":1}, 241 | {"source":62,"target":55,"value":9}, 242 | {"source":62,"target":58,"value":17}, 243 | {"source":62,"target":59,"value":13}, 244 | {"source":62,"target":48,"value":7}, 245 | {"source":62,"target":57,"value":2}, 246 | {"source":62,"target":41,"value":1}, 247 | {"source":62,"target":61,"value":6}, 248 | {"source":62,"target":60,"value":3}, 249 | {"source":63,"target":59,"value":5}, 250 | {"source":63,"target":48,"value":5}, 251 | {"source":63,"target":62,"value":6}, 252 | {"source":63,"target":57,"value":2}, 253 | {"source":63,"target":58,"value":4}, 254 | {"source":63,"target":61,"value":3}, 255 | {"source":63,"target":60,"value":2}, 256 | {"source":63,"target":55,"value":1}, 257 | {"source":64,"target":55,"value":5}, 258 | {"source":64,"target":62,"value":12}, 259 | {"source":64,"target":48,"value":5}, 260 | {"source":64,"target":63,"value":4}, 261 | {"source":64,"target":58,"value":10}, 262 | {"source":64,"target":61,"value":6}, 263 | {"source":64,"target":60,"value":2}, 264 | {"source":64,"target":59,"value":9}, 265 | {"source":64,"target":57,"value":1}, 266 | {"source":64,"target":11,"value":1}, 267 | {"source":65,"target":63,"value":5}, 268 | {"source":65,"target":64,"value":7}, 269 | {"source":65,"target":48,"value":3}, 270 | {"source":65,"target":62,"value":5}, 271 | {"source":65,"target":58,"value":5}, 272 | {"source":65,"target":61,"value":5}, 273 | {"source":65,"target":60,"value":2}, 274 | {"source":65,"target":59,"value":5}, 275 | {"source":65,"target":57,"value":1}, 276 | {"source":65,"target":55,"value":2}, 277 | {"source":66,"target":64,"value":3}, 278 | {"source":66,"target":58,"value":3}, 279 | {"source":66,"target":59,"value":1}, 280 | {"source":66,"target":62,"value":2}, 281 | {"source":66,"target":65,"value":2}, 282 | {"source":66,"target":48,"value":1}, 283 | {"source":66,"target":63,"value":1}, 284 | {"source":66,"target":61,"value":1}, 285 | {"source":66,"target":60,"value":1}, 286 | {"source":67,"target":57,"value":3}, 287 | {"source":68,"target":25,"value":5}, 288 | {"source":68,"target":11,"value":1}, 289 | {"source":68,"target":24,"value":1}, 290 | {"source":68,"target":27,"value":1}, 291 | {"source":68,"target":48,"value":1}, 292 | {"source":68,"target":41,"value":1}, 293 | {"source":69,"target":25,"value":6}, 294 | {"source":69,"target":68,"value":6}, 295 | {"source":69,"target":11,"value":1}, 296 | {"source":69,"target":24,"value":1}, 297 | {"source":69,"target":27,"value":2}, 298 | {"source":69,"target":48,"value":1}, 299 | {"source":69,"target":41,"value":1}, 300 | {"source":70,"target":25,"value":4}, 301 | {"source":70,"target":69,"value":4}, 302 | {"source":70,"target":68,"value":4}, 303 | {"source":70,"target":11,"value":1}, 304 | {"source":70,"target":24,"value":1}, 305 | {"source":70,"target":27,"value":1}, 306 | {"source":70,"target":41,"value":1}, 307 | {"source":70,"target":58,"value":1}, 308 | {"source":71,"target":27,"value":1}, 309 | {"source":71,"target":69,"value":2}, 310 | {"source":71,"target":68,"value":2}, 311 | {"source":71,"target":70,"value":2}, 312 | {"source":71,"target":11,"value":1}, 313 | {"source":71,"target":48,"value":1}, 314 | {"source":71,"target":41,"value":1}, 315 | {"source":71,"target":25,"value":1}, 316 | {"source":72,"target":26,"value":2}, 317 | {"source":72,"target":27,"value":1}, 318 | {"source":72,"target":11,"value":1}, 319 | {"source":73,"target":48,"value":2}, 320 | {"source":74,"target":48,"value":2}, 321 | {"source":74,"target":73,"value":3}, 322 | {"source":75,"target":69,"value":3}, 323 | {"source":75,"target":68,"value":3}, 324 | {"source":75,"target":25,"value":3}, 325 | {"source":75,"target":48,"value":1}, 326 | {"source":75,"target":41,"value":1}, 327 | {"source":75,"target":70,"value":1}, 328 | {"source":75,"target":71,"value":1}, 329 | {"source":76,"target":64,"value":1}, 330 | {"source":76,"target":65,"value":1}, 331 | {"source":76,"target":66,"value":1}, 332 | {"source":76,"target":63,"value":1}, 333 | {"source":76,"target":62,"value":1}, 334 | {"source":76,"target":48,"value":1}, 335 | {"source":76,"target":58,"value":1} 336 | ] 337 | } 338 | -------------------------------------------------------------------------------- /population.csv: -------------------------------------------------------------------------------- 1 | year,age,sex,people 2 | 1850,0,1,1483789 3 | 1850,0,2,1450376 4 | 1850,5,1,1411067 5 | 1850,5,2,1359668 6 | 1850,10,1,1260099 7 | 1850,10,2,1216114 8 | 1850,15,1,1077133 9 | 1850,15,2,1110619 10 | 1850,20,1,1017281 11 | 1850,20,2,1003841 12 | 1850,25,1,862547 13 | 1850,25,2,799482 14 | 1850,30,1,730638 15 | 1850,30,2,639636 16 | 1850,35,1,588487 17 | 1850,35,2,505012 18 | 1850,40,1,475911 19 | 1850,40,2,428185 20 | 1850,45,1,384211 21 | 1850,45,2,341254 22 | 1850,50,1,321343 23 | 1850,50,2,286580 24 | 1850,55,1,194080 25 | 1850,55,2,187208 26 | 1850,60,1,174976 27 | 1850,60,2,162236 28 | 1850,65,1,106827 29 | 1850,65,2,105534 30 | 1850,70,1,73677 31 | 1850,70,2,71762 32 | 1850,75,1,40834 33 | 1850,75,2,40229 34 | 1850,80,1,23449 35 | 1850,80,2,22949 36 | 1850,85,1,8186 37 | 1850,85,2,10511 38 | 1850,90,1,5259 39 | 1850,90,2,6569 40 | 1860,0,1,2120846 41 | 1860,0,2,2092162 42 | 1860,5,1,1804467 43 | 1860,5,2,1778772 44 | 1860,10,1,1612640 45 | 1860,10,2,1540350 46 | 1860,15,1,1438094 47 | 1860,15,2,1495999 48 | 1860,20,1,1351121 49 | 1860,20,2,1370462 50 | 1860,25,1,1217615 51 | 1860,25,2,1116373 52 | 1860,30,1,1043174 53 | 1860,30,2,936055 54 | 1860,35,1,866910 55 | 1860,35,2,737136 56 | 1860,40,1,699434 57 | 1860,40,2,616826 58 | 1860,45,1,552404 59 | 1860,45,2,461739 60 | 1860,50,1,456176 61 | 1860,50,2,407305 62 | 1860,55,1,292417 63 | 1860,55,2,267224 64 | 1860,60,1,260887 65 | 1860,60,2,249735 66 | 1860,65,1,149331 67 | 1860,65,2,141405 68 | 1860,70,1,98465 69 | 1860,70,2,101778 70 | 1860,75,1,56699 71 | 1860,75,2,57597 72 | 1860,80,1,29007 73 | 1860,80,2,29506 74 | 1860,85,1,10434 75 | 1860,85,2,14053 76 | 1860,90,1,7232 77 | 1860,90,2,6622 78 | 1870,0,1,2800083 79 | 1870,0,2,2717102 80 | 1870,5,1,2428469 81 | 1870,5,2,2393680 82 | 1870,10,1,2427341 83 | 1870,10,2,2342670 84 | 1870,15,1,1958390 85 | 1870,15,2,2077248 86 | 1870,20,1,1805303 87 | 1870,20,2,1909382 88 | 1870,25,1,1509059 89 | 1870,25,2,1574285 90 | 1870,30,1,1251534 91 | 1870,30,2,1275629 92 | 1870,35,1,1185336 93 | 1870,35,2,1137490 94 | 1870,40,1,968861 95 | 1870,40,2,944401 96 | 1870,45,1,852672 97 | 1870,45,2,747916 98 | 1870,50,1,736387 99 | 1870,50,2,637801 100 | 1870,55,1,486036 101 | 1870,55,2,407819 102 | 1870,60,1,399264 103 | 1870,60,2,374801 104 | 1870,65,1,260829 105 | 1870,65,2,239080 106 | 1870,70,1,173364 107 | 1870,70,2,165501 108 | 1870,75,1,86929 109 | 1870,75,2,89540 110 | 1870,80,1,47427 111 | 1870,80,2,54190 112 | 1870,85,1,15891 113 | 1870,85,2,19302 114 | 1870,90,1,8649 115 | 1870,90,2,13068 116 | 1880,0,1,3533662 117 | 1880,0,2,3421597 118 | 1880,5,1,3297503 119 | 1880,5,2,3179142 120 | 1880,10,1,2911924 121 | 1880,10,2,2813550 122 | 1880,15,1,2457734 123 | 1880,15,2,2527818 124 | 1880,20,1,2547780 125 | 1880,20,2,2512803 126 | 1880,25,1,2119393 127 | 1880,25,2,1974241 128 | 1880,30,1,1749107 129 | 1880,30,2,1596772 130 | 1880,35,1,1540772 131 | 1880,35,2,1483717 132 | 1880,40,1,1237347 133 | 1880,40,2,1239435 134 | 1880,45,1,1065973 135 | 1880,45,2,1003711 136 | 1880,50,1,964484 137 | 1880,50,2,863012 138 | 1880,55,1,679147 139 | 1880,55,2,594843 140 | 1880,60,1,580298 141 | 1880,60,2,526956 142 | 1880,65,1,369398 143 | 1880,65,2,346303 144 | 1880,70,1,255422 145 | 1880,70,2,251860 146 | 1880,75,1,141628 147 | 1880,75,2,143513 148 | 1880,80,1,67526 149 | 1880,80,2,77290 150 | 1880,85,1,22437 151 | 1880,85,2,31227 152 | 1880,90,1,10272 153 | 1880,90,2,15451 154 | 1900,0,1,4619544 155 | 1900,0,2,4589196 156 | 1900,5,1,4465783 157 | 1900,5,2,4390483 158 | 1900,10,1,4057669 159 | 1900,10,2,4001749 160 | 1900,15,1,3774846 161 | 1900,15,2,3801743 162 | 1900,20,1,3694038 163 | 1900,20,2,3751061 164 | 1900,25,1,3389280 165 | 1900,25,2,3236056 166 | 1900,30,1,2918964 167 | 1900,30,2,2665174 168 | 1900,35,1,2633883 169 | 1900,35,2,2347737 170 | 1900,40,1,2261070 171 | 1900,40,2,2004987 172 | 1900,45,1,1868413 173 | 1900,45,2,1648025 174 | 1900,50,1,1571038 175 | 1900,50,2,1411981 176 | 1900,55,1,1161908 177 | 1900,55,2,1064632 178 | 1900,60,1,916571 179 | 1900,60,2,887508 180 | 1900,65,1,672663 181 | 1900,65,2,640212 182 | 1900,70,1,454747 183 | 1900,70,2,440007 184 | 1900,75,1,268211 185 | 1900,75,2,265879 186 | 1900,80,1,127435 187 | 1900,80,2,132449 188 | 1900,85,1,44008 189 | 1900,85,2,48614 190 | 1900,90,1,15164 191 | 1900,90,2,20093 192 | 1910,0,1,5296823 193 | 1910,0,2,5287477 194 | 1910,5,1,4991803 195 | 1910,5,2,4866139 196 | 1910,10,1,4650747 197 | 1910,10,2,4471887 198 | 1910,15,1,4566154 199 | 1910,15,2,4592269 200 | 1910,20,1,4637632 201 | 1910,20,2,4447683 202 | 1910,25,1,4257755 203 | 1910,25,2,3946153 204 | 1910,30,1,3658125 205 | 1910,30,2,3295220 206 | 1910,35,1,3427518 207 | 1910,35,2,3088990 208 | 1910,40,1,2860229 209 | 1910,40,2,2471267 210 | 1910,45,1,2363801 211 | 1910,45,2,2114930 212 | 1910,50,1,2126516 213 | 1910,50,2,1773592 214 | 1910,55,1,1508358 215 | 1910,55,2,1317651 216 | 1910,60,1,1189421 217 | 1910,60,2,1090697 218 | 1910,65,1,850159 219 | 1910,65,2,813868 220 | 1910,70,1,557936 221 | 1910,70,2,547623 222 | 1910,75,1,322679 223 | 1910,75,2,350900 224 | 1910,80,1,161715 225 | 1910,80,2,174315 226 | 1910,85,1,59699 227 | 1910,85,2,62725 228 | 1910,90,1,23929 229 | 1910,90,2,28965 230 | 1920,0,1,5934792 231 | 1920,0,2,5694244 232 | 1920,5,1,5789008 233 | 1920,5,2,5693960 234 | 1920,10,1,5401156 235 | 1920,10,2,5293057 236 | 1920,15,1,4724365 237 | 1920,15,2,4779936 238 | 1920,20,1,4549411 239 | 1920,20,2,4742632 240 | 1920,25,1,4565066 241 | 1920,25,2,4529382 242 | 1920,30,1,4110771 243 | 1920,30,2,3982426 244 | 1920,35,1,4081543 245 | 1920,35,2,3713810 246 | 1920,40,1,3321923 247 | 1920,40,2,3059757 248 | 1920,45,1,3143891 249 | 1920,45,2,2669089 250 | 1920,50,1,2546035 251 | 1920,50,2,2200491 252 | 1920,55,1,1880975 253 | 1920,55,2,1674672 254 | 1920,60,1,1587549 255 | 1920,60,2,1382877 256 | 1920,65,1,1095956 257 | 1920,65,2,989901 258 | 1920,70,1,714618 259 | 1920,70,2,690097 260 | 1920,75,1,417292 261 | 1920,75,2,439465 262 | 1920,80,1,187000 263 | 1920,80,2,211110 264 | 1920,85,1,75991 265 | 1920,85,2,92829 266 | 1920,90,1,22398 267 | 1920,90,2,32085 268 | 1930,0,1,5875250 269 | 1930,0,2,5662530 270 | 1930,5,1,6542592 271 | 1930,5,2,6129561 272 | 1930,10,1,6064820 273 | 1930,10,2,5986529 274 | 1930,15,1,5709452 275 | 1930,15,2,5769587 276 | 1930,20,1,5305992 277 | 1930,20,2,5565382 278 | 1930,25,1,4929853 279 | 1930,25,2,5050229 280 | 1930,30,1,4424408 281 | 1930,30,2,4455213 282 | 1930,35,1,4576531 283 | 1930,35,2,4593776 284 | 1930,40,1,4075139 285 | 1930,40,2,3754022 286 | 1930,45,1,3633152 287 | 1930,45,2,3396558 288 | 1930,50,1,3128108 289 | 1930,50,2,2809191 290 | 1930,55,1,2434077 291 | 1930,55,2,2298614 292 | 1930,60,1,1927564 293 | 1930,60,2,1783515 294 | 1930,65,1,1397275 295 | 1930,65,2,1307312 296 | 1930,70,1,919045 297 | 1930,70,2,918509 298 | 1930,75,1,536375 299 | 1930,75,2,522716 300 | 1930,80,1,246708 301 | 1930,80,2,283579 302 | 1930,85,1,88978 303 | 1930,85,2,109210 304 | 1930,90,1,30338 305 | 1930,90,2,43483 306 | 1940,0,1,5294628 307 | 1940,0,2,5124653 308 | 1940,5,1,5468378 309 | 1940,5,2,5359099 310 | 1940,10,1,5960416 311 | 1940,10,2,5868532 312 | 1940,15,1,6165109 313 | 1940,15,2,6193701 314 | 1940,20,1,5682414 315 | 1940,20,2,5896002 316 | 1940,25,1,5438166 317 | 1940,25,2,5664244 318 | 1940,30,1,5040048 319 | 1940,30,2,5171522 320 | 1940,35,1,4724804 321 | 1940,35,2,4791809 322 | 1940,40,1,4437392 323 | 1940,40,2,4394061 324 | 1940,45,1,4190187 325 | 1940,45,2,4050290 326 | 1940,50,1,3785735 327 | 1940,50,2,3488396 328 | 1940,55,1,2972069 329 | 1940,55,2,2810000 330 | 1940,60,1,2370232 331 | 1940,60,2,2317790 332 | 1940,65,1,1897678 333 | 1940,65,2,1911117 334 | 1940,70,1,1280023 335 | 1940,70,2,1287711 336 | 1940,75,1,713875 337 | 1940,75,2,764915 338 | 1940,80,1,359418 339 | 1940,80,2,414761 340 | 1940,85,1,127303 341 | 1940,85,2,152131 342 | 1940,90,1,42263 343 | 1940,90,2,58119 344 | 1950,0,1,8211806 345 | 1950,0,2,7862267 346 | 1950,5,1,6706601 347 | 1950,5,2,6450863 348 | 1950,10,1,5629744 349 | 1950,10,2,5430835 350 | 1950,15,1,5264129 351 | 1950,15,2,5288742 352 | 1950,20,1,5573308 353 | 1950,20,2,5854227 354 | 1950,25,1,6007254 355 | 1950,25,2,6317332 356 | 1950,30,1,5676022 357 | 1950,30,2,5895178 358 | 1950,35,1,5511364 359 | 1950,35,2,5696261 360 | 1950,40,1,5076985 361 | 1950,40,2,5199224 362 | 1950,45,1,4533177 363 | 1950,45,2,4595842 364 | 1950,50,1,4199164 365 | 1950,50,2,4147295 366 | 1950,55,1,3667351 367 | 1950,55,2,3595158 368 | 1950,60,1,3035038 369 | 1950,60,2,3009768 370 | 1950,65,1,2421234 371 | 1950,65,2,2548250 372 | 1950,70,1,1627920 373 | 1950,70,2,1786831 374 | 1950,75,1,1006530 375 | 1950,75,2,1148469 376 | 1950,80,1,511727 377 | 1950,80,2,637717 378 | 1950,85,1,182821 379 | 1950,85,2,242798 380 | 1950,90,1,54836 381 | 1950,90,2,90766 382 | 1960,0,1,10374975 383 | 1960,0,2,10146999 384 | 1960,5,1,9495503 385 | 1960,5,2,9250741 386 | 1960,10,1,8563700 387 | 1960,10,2,8310764 388 | 1960,15,1,6620902 389 | 1960,15,2,6617493 390 | 1960,20,1,5268384 391 | 1960,20,2,5513495 392 | 1960,25,1,5311805 393 | 1960,25,2,5548259 394 | 1960,30,1,5801342 395 | 1960,30,2,6090862 396 | 1960,35,1,6063063 397 | 1960,35,2,6431337 398 | 1960,40,1,5657943 399 | 1960,40,2,5940520 400 | 1960,45,1,5345658 401 | 1960,45,2,5516028 402 | 1960,50,1,4763364 403 | 1960,50,2,4928844 404 | 1960,55,1,4170581 405 | 1960,55,2,4402878 406 | 1960,60,1,3405293 407 | 1960,60,2,3723839 408 | 1960,65,1,2859371 409 | 1960,65,2,3268699 410 | 1960,70,1,2115763 411 | 1960,70,2,2516479 412 | 1960,75,1,1308913 413 | 1960,75,2,1641371 414 | 1960,80,1,619923 415 | 1960,80,2,856952 416 | 1960,85,1,253245 417 | 1960,85,2,384572 418 | 1960,90,1,75908 419 | 1960,90,2,135774 420 | 1970,0,1,8685121 421 | 1970,0,2,8326887 422 | 1970,5,1,10411131 423 | 1970,5,2,10003293 424 | 1970,10,1,10756403 425 | 1970,10,2,10343538 426 | 1970,15,1,9605399 427 | 1970,15,2,9414284 428 | 1970,20,1,7729202 429 | 1970,20,2,8341830 430 | 1970,25,1,6539301 431 | 1970,25,2,6903041 432 | 1970,30,1,5519879 433 | 1970,30,2,5851441 434 | 1970,35,1,5396732 435 | 1970,35,2,5708021 436 | 1970,40,1,5718538 437 | 1970,40,2,6129319 438 | 1970,45,1,5794120 439 | 1970,45,2,6198742 440 | 1970,50,1,5298312 441 | 1970,50,2,5783817 442 | 1970,55,1,4762911 443 | 1970,55,2,5222164 444 | 1970,60,1,4037643 445 | 1970,60,2,4577251 446 | 1970,65,1,3142606 447 | 1970,65,2,3894827 448 | 1970,70,1,2340826 449 | 1970,70,2,3138009 450 | 1970,75,1,1599269 451 | 1970,75,2,2293376 452 | 1970,80,1,886155 453 | 1970,80,2,1417553 454 | 1970,85,1,371123 455 | 1970,85,2,658511 456 | 1970,90,1,186502 457 | 1970,90,2,314929 458 | 1980,0,1,8439366 459 | 1980,0,2,8081854 460 | 1980,5,1,8680730 461 | 1980,5,2,8275881 462 | 1980,10,1,9452338 463 | 1980,10,2,9048483 464 | 1980,15,1,10698856 465 | 1980,15,2,10410271 466 | 1980,20,1,10486776 467 | 1980,20,2,10614947 468 | 1980,25,1,9624053 469 | 1980,25,2,9827903 470 | 1980,30,1,8705835 471 | 1980,30,2,8955225 472 | 1980,35,1,6852069 473 | 1980,35,2,7134239 474 | 1980,40,1,5692148 475 | 1980,40,2,5953910 476 | 1980,45,1,5342469 477 | 1980,45,2,5697543 478 | 1980,50,1,5603709 479 | 1980,50,2,6110117 480 | 1980,55,1,5485098 481 | 1980,55,2,6160229 482 | 1980,60,1,4696140 483 | 1980,60,2,5456885 484 | 1980,65,1,3893510 485 | 1980,65,2,4896947 486 | 1980,70,1,2857774 487 | 1980,70,2,3963441 488 | 1980,75,1,1840438 489 | 1980,75,2,2951759 490 | 1980,80,1,1012886 491 | 1980,80,2,1919292 492 | 1980,85,1,472338 493 | 1980,85,2,1023115 494 | 1980,90,1,204148 495 | 1980,90,2,499046 496 | 1990,0,1,9307465 497 | 1990,0,2,8894007 498 | 1990,5,1,9274732 499 | 1990,5,2,8799955 500 | 1990,10,1,8782542 501 | 1990,10,2,8337284 502 | 1990,15,1,9020572 503 | 1990,15,2,8590991 504 | 1990,20,1,9436188 505 | 1990,20,2,9152644 506 | 1990,25,1,10658027 507 | 1990,25,2,10587292 508 | 1990,30,1,11028712 509 | 1990,30,2,11105750 510 | 1990,35,1,9853933 511 | 1990,35,2,10038644 512 | 1990,40,1,8712632 513 | 1990,40,2,8928252 514 | 1990,45,1,6848082 515 | 1990,45,2,7115129 516 | 1990,50,1,5553992 517 | 1990,50,2,5899925 518 | 1990,55,1,4981670 519 | 1990,55,2,5460506 520 | 1990,60,1,4953822 521 | 1990,60,2,5663205 522 | 1990,65,1,4538398 523 | 1990,65,2,5594108 524 | 1990,70,1,3429420 525 | 1990,70,2,4610222 526 | 1990,75,1,2344932 527 | 1990,75,2,3723980 528 | 1990,80,1,1342996 529 | 1990,80,2,2545730 530 | 1990,85,1,588790 531 | 1990,85,2,1419494 532 | 1990,90,1,238459 533 | 1990,90,2,745146 534 | 2000,0,1,9735380 535 | 2000,0,2,9310714 536 | 2000,5,1,10552146 537 | 2000,5,2,10069564 538 | 2000,10,1,10563233 539 | 2000,10,2,10022524 540 | 2000,15,1,10237419 541 | 2000,15,2,9692669 542 | 2000,20,1,9731315 543 | 2000,20,2,9324244 544 | 2000,25,1,9659493 545 | 2000,25,2,9518507 546 | 2000,30,1,10205879 547 | 2000,30,2,10119296 548 | 2000,35,1,11475182 549 | 2000,35,2,11635647 550 | 2000,40,1,11320252 551 | 2000,40,2,11488578 552 | 2000,45,1,9925006 553 | 2000,45,2,10261253 554 | 2000,50,1,8507934 555 | 2000,50,2,8911133 556 | 2000,55,1,6459082 557 | 2000,55,2,6921268 558 | 2000,60,1,5123399 559 | 2000,60,2,5668961 560 | 2000,65,1,4453623 561 | 2000,65,2,4804784 562 | 2000,70,1,3792145 563 | 2000,70,2,5184855 564 | 2000,75,1,2912655 565 | 2000,75,2,4355644 566 | 2000,80,1,1902638 567 | 2000,80,2,3221898 568 | 2000,85,1,970357 569 | 2000,85,2,1981156 570 | 2000,90,1,336303 571 | 2000,90,2,1064581 -------------------------------------------------------------------------------- /project/build.properties: -------------------------------------------------------------------------------- 1 | sbt.version=0.13.0 2 | -------------------------------------------------------------------------------- /project/build.sbt: -------------------------------------------------------------------------------- 1 | addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0.5.1") 2 | -------------------------------------------------------------------------------- /src/main/scala/D3/d3.scala: -------------------------------------------------------------------------------- 1 | 2 | 3 | package D3 { 4 | 5 | import scala.scalajs.js 6 | import js.annotation._ 7 | import org.scalajs.dom._ 8 | import js._ 9 | 10 | trait Selectors extends js.Object { 11 | def select(selector: js.String): Selection = ??? 12 | def select(element: EventTarget): Selection = ??? 13 | def selectAll(selector: js.String): Selection = ??? 14 | def selectAll(elements: js.Array[EventTarget]): Selection = ??? 15 | } 16 | 17 | trait Event extends js.Object { 18 | var dx: js.Number = ??? 19 | var dy: js.Number = ??? 20 | var clientX: js.Number = ??? 21 | var clientY: js.Number = ??? 22 | var translate: js.Array[js.Number] = ??? 23 | var scale: js.Number = ??? 24 | var sourceEvent: Event = ??? 25 | var x: js.Number = ??? 26 | var y: js.Number = ??? 27 | var keyCode: js.Number = ??? 28 | var altKey: js.Any = ??? 29 | var `type`: js.String = ??? 30 | } 31 | 32 | @JSName("d3") 33 | object Base extends Selectors { 34 | var behavior: Behavior.Behavior = ??? 35 | var event: Event = ??? 36 | def ascending[T](a: T, b: T): js.Number = ??? 37 | def descending[T](a: T, b: T): js.Number = ??? 38 | def min[T, U](arr: js.Array[T], map: js.Function1[T, U]): U = ??? 39 | def min[T](arr: js.Array[T]): T = ??? 40 | def max[T, U](arr: js.Array[T], map: js.Function1[T, U]): U = ??? 41 | def max[T](arr: js.Array[T]): T = ??? 42 | def extent[T, U](arr: js.Array[T], map: js.Function1[T, U]): js.Array[U] = ??? 43 | def extent[T](arr: js.Array[T]): js.Array[T] = ??? 44 | def sum[T](arr: js.Array[T], map: js.Function1[T, js.Number]): js.Number = ??? 45 | def sum(arr: js.Array[js.Number]): js.Number = ??? 46 | def mean[T](arr: js.Array[T], map: js.Function1[T, js.Number]): js.Number = ??? 47 | def mean(arr: js.Array[js.Number]): js.Number = ??? 48 | def median[T](arr: js.Array[T], map: js.Function1[T, js.Number]): js.Number = ??? 49 | def median(arr: js.Array[js.Number]): js.Number = ??? 50 | var quantile: js.Function2[js.Array[js.Number], js.Number, js.Number] = ??? 51 | def bisect[T](arr: js.Array[T], x: T, low: js.Number = ???, high: js.Number = ???): js.Number = ??? 52 | def bisectLeft[T](arr: js.Array[T], x: T, low: js.Number = ???, high: js.Number = ???): js.Number = ??? 53 | def bisectRight[T](arr: js.Array[T], x: T, low: js.Number = ???, high: js.Number = ???): js.Number = ??? 54 | def bisector(accessor: js.Function2[js.Any, js.Number, Any]): js.Dynamic = ??? 55 | def shuffle[T](arr: js.Array[T]): js.Array[T] = ??? 56 | def permute(arr: js.Array[js.Any], indexes: js.Array[js.Any]): js.Array[js.Any] = ??? 57 | def zip(arrs: js.Any*): js.Array[js.Any] = ??? 58 | def transform(definition: js.String): js.Dynamic = ??? 59 | def transpose(matrix: js.Array[js.Any]): js.Array[js.Any] = ??? 60 | def keys(map: js.Any): js.Array[js.String] = ??? 61 | def values(map: js.Array[js.Any]): js.Array[js.Any] = ??? 62 | def entries(map: js.Any): js.Array[js.Any] = ??? 63 | def merge(map: js.Any*): js.Array[js.Any] = ??? 64 | def range(stop: js.Number, step: js.Number): js.Array[js.Number] = ??? 65 | def range(start: js.Number, stop: js.Number = ???, step: js.Number = ???): js.Array[js.Number] = ??? 66 | def nest(): Nest = ??? 67 | def xhr(url: js.String, callback: js.Function1[XMLHttpRequest, Unit]): Xhr = ??? 68 | def xhr(url: js.String, mime: js.String, callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 69 | def text(url: js.String, callback: js.Function1[js.String, Unit]): Xhr = ??? 70 | def text(url: js.String, mime: js.String, callback: js.Function1[js.String, Unit] = ???): Xhr = ??? 71 | def json(url: js.String, callback: js.Function2[js.Any, js.Any, Unit]): Xhr = ??? 72 | def xml(url: js.String, callback: js.Function1[Document, Unit]): Xhr = ??? 73 | def xml(url: js.String, mime: js.String, callback: js.Function1[Document, Unit] = ???): Xhr = ??? 74 | var html: js.Function2[js.String, js.Function1[DocumentFragment, Unit], Xhr] = ??? 75 | var csv: Dsv = ??? 76 | var tsv: Dsv = ??? 77 | var time: Time.Time = ??? 78 | var scale: Scale.ScaleBase = ??? 79 | var interpolate: Transition.BaseInterpolate = ??? 80 | var interpolateNumber: Transition.BaseInterpolate = ??? 81 | var interpolateRound: Transition.BaseInterpolate = ??? 82 | var interpolateString: Transition.BaseInterpolate = ??? 83 | var interpolateRgb: Transition.BaseInterpolate = ??? 84 | var interpolateHsl: Transition.BaseInterpolate = ??? 85 | var interpolateHcl: Transition.BaseInterpolate = ??? 86 | var interpolateLab: Transition.BaseInterpolate = ??? 87 | var interpolateArray: Transition.BaseInterpolate = ??? 88 | var interpolateObject: Transition.BaseInterpolate = ??? 89 | var interpolateTransform: Transition.BaseInterpolate = ??? 90 | var interpolators: js.Array[Transition.InterpolateFactory] = ??? 91 | var layout: Layout.Layout = ??? 92 | var svg: Svg.Svg = ??? 93 | var random: Random = ??? 94 | def format(specifier: js.String): js.Function1[js.Number, js.String] = ??? 95 | def formatPrefix(value: js.Number, precision: js.Number = ???): MetricPrefix = ??? 96 | var version: js.String = ??? 97 | def selection(): Selection = ??? 98 | var ns: js.Any = ??? 99 | var ease: js.Function = ??? 100 | 101 | 102 | def rgb(r: js.Number, g: js.Number, b: js.Number): D3.Color.RGBColor = ??? 103 | def rgb(color: js.String): D3.Color.RGBColor = ??? 104 | def hcl(h: js.Number, c: js.Number, l: js.Number): Color.HCLColor = ??? 105 | def hcl(color: js.String): Color.HCLColor = ??? 106 | def hsl(h: js.Number, s: js.Number, l: js.Number): Color.HSLColor = ??? 107 | def hsl(color: js.String): Color.HSLColor = ??? 108 | def lab(l: js.Number, a: js.Number, b: js.Number): Color.LABColor = ??? 109 | def lab(color: js.String): Color.LABColor = ??? 110 | var geo: Geo.Geo = ??? 111 | var geom: Geom.Geom = ??? 112 | def mouse(container: js.Any): js.Array[js.Number] = ??? 113 | def touches(container: js.Any): js.Array[js.Array[js.Number]] = ??? 114 | def functor[R, T](value: js.Function1[R, T]): js.Function1[R, T] = ??? 115 | def functor[T](value: T): js.Function1[js.Any, T] = ??? 116 | def map(`object`: js.Any = ???): Map = ??? 117 | def set(array: js.Array[js.Any] = ???): Set = ??? 118 | def dispatch(types: js.String*): Dispatch = ??? 119 | def rebind(target: js.Any, source: js.Any, names: js.Any*): js.Dynamic = ??? 120 | def requote(str: js.String): js.String = ??? 121 | var timer: js.Any = ??? 122 | def transition(): Transition.Transition = ??? 123 | def round(x: js.Number, n: js.Number): js.Number = ??? 124 | } 125 | 126 | trait Dispatch extends js.Object { 127 | @JSBracketAccess 128 | def apply(event: js.String): js.Any = ??? 129 | @JSBracketAccess 130 | def update(event: js.String, v: js.Any): Unit = ??? 131 | def on(`type`: js.String): js.Dynamic = ??? 132 | def on(`type`: js.String, listener: js.Any): js.Dynamic = ??? 133 | } 134 | 135 | trait MetricPrefix extends js.Object { 136 | var scale: js.Function1[js.Number, js.Number] = ??? 137 | var symbol: js.String = ??? 138 | } 139 | 140 | trait Xhr extends js.Object { 141 | def header(name: js.String): js.String = ??? 142 | def header(name: js.String, value: js.String): Xhr = ??? 143 | def mimeType(): js.String = ??? 144 | def mimeType(`type`: js.String): Xhr = ??? 145 | def response(): js.Function1[XMLHttpRequest, Any] = ??? 146 | def response(value: js.Function1[XMLHttpRequest, Any]): Xhr = ??? 147 | def get(callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 148 | def post(callback: js.Function1[XMLHttpRequest, Unit]): Xhr = ??? 149 | def post(data: js.Any, callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 150 | def send(method: js.String, callback: js.Function1[XMLHttpRequest, Unit]): Xhr = ??? 151 | def send(method: js.String, data: js.Any, callback: js.Function1[XMLHttpRequest, Unit] = ???): Xhr = ??? 152 | def abort(): Xhr = ??? 153 | var on: js.Function2[js.String, js.Function2[js.Any, js.Number, Any], Xhr] = ??? 154 | } 155 | 156 | trait Dsv extends js.Object { 157 | def apply[A <: js.Object](url: js.String, callback: js.Function2[js.Any, js.Array[A], Unit] = ???): Xhr = ??? 158 | def parse(string: js.String): js.Array[js.Any] = ??? 159 | def parseRows(string: js.String, accessor: js.Function2[js.Array[js.Any], js.Number, Any]): js.Dynamic = ??? 160 | def format(rows: js.Array[js.Any]): js.String = ??? 161 | } 162 | 163 | //trait Selection extends Selectors with js.Array[js.Any] { 164 | trait Selection extends js.Array[js.Any] with Selectors { 165 | def attr(name: js.String): js.String = ??? 166 | def attr(name: js.String, value: js.Any): Selection = ??? 167 | def attr[A <: Any](name: js.String, valueFunction: js.Function2[A, js.Number, Any]): Selection = ??? 168 | def attr(attrValueMap: Object): Selection = ??? 169 | def classed(name: js.String): js.String = ??? 170 | def classed(name: js.String, value: js.Any): Selection = ??? 171 | def classed(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 172 | def style(name: js.String): js.String = ??? 173 | def style(name: js.String, value: js.Any, priority: js.String): Selection = ??? 174 | def style[A <: js.Object](name: js.String, valueFunction: Function2[A, js.Number, js.Dynamic], priority: js.String = ???): Selection = ??? 175 | def style(styleValueMap: Object): Selection = ??? 176 | def property(name: js.String): Unit = ??? 177 | def property(name: js.String, value: js.Any): Selection = ??? 178 | def property(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 179 | def property(propertyValueMap: Object): Selection = ??? 180 | def text(): js.String = ??? 181 | def text(value: js.String): Selection = ??? 182 | def text[A <: js.Any](valueFunction: js.Function2[A, js.Number, js.String]): Selection = ??? 183 | def html(): js.String = ??? 184 | def html(value: js.Any): Selection = ??? 185 | def html(valueFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 186 | def append(el: String): Selection = ??? 187 | 188 | def insert(el: String, s: String): Selection = ??? 189 | var remove: js.Function0[Selection] = ??? 190 | var empty: js.Function0[js.Boolean] = ??? 191 | def data[A](values: js.Array[A]): UpdateSelection = ??? 192 | // def data(values: js.Function2[Int, Int, js.Dynamic]): UpdateSelection = ??? 193 | def data[A](values: js.Function2[js.Number, Int, js.Array[Int]]): UpdateSelection = ??? 194 | // def data[A <: js.Object, B <: js.Object](values: js.Function2[A, Int, js.Array[B]], key: js.Function2[js.Any, js.Number, Any] = ???): UpdateSelection = ??? 195 | def data(): js.Array[js.Any] = ??? 196 | def datum(values: js.Function2[js.Any, js.Number, Any]): UpdateSelection = ??? 197 | def datum(): js.Dynamic = ??? 198 | def filter(filter: js.Function2[js.Any, js.Number, js.Boolean], thisArg: js.Any = ???): UpdateSelection = ??? 199 | def call(callback: js.Function, args: js.Any*): Selection = ??? 200 | def call(f: Layout.Layout): Selection = ??? 201 | def call(f: Svg.Axis): Selection = ??? 202 | def each(eachFunction: js.Function2[js.Any, js.Number, Any]): Selection = ??? 203 | def on(`type`: js.String): js.Function2[js.Any, js.Number, Any] = ??? 204 | def on(`type`: js.String, listener: js.Function2[js.Any, js.Number, Any], capture: js.Boolean = ???): Selection = ??? 205 | def size(): js.Number = ??? 206 | def transition(): Transition.Transition = ??? 207 | def sort[T](comparator: js.Function2[T, T, js.Number]): Selection = ??? 208 | var order: js.Function0[Selection] = ??? 209 | var node: js.Function0[Element] = ??? 210 | } 211 | 212 | trait EnterSelection extends js.Object { 213 | def append(sel: String): Selection = ??? 214 | var insert: js.Function2[js.String, js.String, Selection] = ??? 215 | var select: js.Function1[js.String, Selection] = ??? 216 | var empty: js.Function0[js.Boolean] = ??? 217 | var node: js.Function0[Element] = ??? 218 | var call: js.Function1[js.Function1[EnterSelection, Unit], EnterSelection] = ??? 219 | var size: js.Function0[js.Number] = ??? 220 | } 221 | 222 | trait UpdateSelection extends Selection { 223 | def enter(): EnterSelection = ??? 224 | var update: js.Function0[Selection] = ??? 225 | var exit: js.Function0[Selection] = ??? 226 | } 227 | 228 | trait NestKeyValue extends js.Object { 229 | var key: js.String = ??? 230 | var values: js.Any = ??? 231 | } 232 | 233 | trait Nest extends js.Object { 234 | def key[A <: js.Any](keyFunction: js.Function1[A, js.String]): Nest = ??? 235 | def key[A <: js.Any](keyFunction: js.Function2[A, js.Number, js.String]): Nest = ??? 236 | def sortKeys(comparator: js.Function2[js.Any, js.Any, js.Number]): Nest = ??? 237 | def sortValues(comparator: js.Function2[js.Any, js.Any, js.Number]): Nest = ??? 238 | def rollup[A <: Nest](rollupFunction: js.Function1[A, Any]): Nest = ??? 239 | def rollup[A <: Nest](rollupFunction: js.Function2[A, js.Number, Any]): Nest = ??? 240 | def map[A <: Any](values: js.Array[A]): js.Dynamic = ??? 241 | def map[A <: js.Any](values: js.Function1[A,js.Number]): js.Dynamic = ??? 242 | def entries(values: js.Array[js.Any]): js.Array[NestKeyValue] = ??? 243 | } 244 | 245 | trait Map extends js.Object { 246 | def has(key: js.String): js.Boolean = ??? 247 | def get(key: js.String): js.Dynamic = ??? 248 | def set[T](key: js.String, value: T): T = ??? 249 | def remove(key: js.String): js.Boolean = ??? 250 | def keys(): js.Array[js.String] = ??? 251 | def values(): js.Array[js.Any] = ??? 252 | def entries(): js.Array[js.Any] = ??? 253 | def forEach(func: js.Function2[js.String, js.Any, Unit]): Unit = ??? 254 | } 255 | 256 | trait Set extends js.Object { 257 | def has(value: js.Any): js.Boolean = ??? 258 | def add(value: js.Any): js.Dynamic = ??? 259 | def remove(value: js.Any): js.Boolean = ??? 260 | def values(): js.Array[js.Any] = ??? 261 | def forEach(func: js.Function1[js.Any, Unit]): Unit = ??? 262 | } 263 | 264 | trait Random extends js.Object { 265 | def normal(mean: js.Number = ???, deviation: js.Number = ???): js.Function0[js.Number] = ??? 266 | def logNormal(mean: js.Number = ???, deviation: js.Number = ???): js.Function0[js.Number] = ??? 267 | def irwinHall(count: js.Number): js.Function0[js.Number] = ??? 268 | def bates(mean: Double): js.Function0[js.Number] = ??? 269 | } 270 | 271 | package Transition { 272 | 273 | trait Transition extends js.Object { 274 | def duration(duration: js.Number): Transition = ??? 275 | def delay(delay: js.Number): Transition = ??? 276 | def attr(name: js.String): js.String = ??? 277 | def attr(name: js.String, value: js.Any): Transition = ??? 278 | def attr(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any]): Transition = ??? 279 | def attr(attrValueMap: js.Any): Transition = ??? 280 | def style(name: js.String): js.String = ??? 281 | def style(name: js.String, value: js.Any, priority: js.String): Transition = ??? 282 | def style(name: js.String, valueFunction: js.Function2[js.Any, js.Number, Any], priority: js.String = ???): Transition = ??? 283 | def call(callback: js.Function1[Selection, Unit]): Transition = ??? 284 | def select(selector: js.String): Transition = ??? 285 | def select(element: EventTarget): Transition = ??? 286 | def selectAll(selector: js.String): Transition = ??? 287 | def selectAll(elements: js.Array[EventTarget]): Transition = ??? 288 | var each: js.Function2[js.String, js.Function2[js.Any, js.Number, Any], Transition] = ??? 289 | var transition: js.Function0[Transition] = ??? 290 | var ease: js.Function = ??? 291 | def attrTween(name: js.String, tween: js.Function3[js.Any, js.Number, js.Any, BaseInterpolate]): Transition = ??? 292 | def styleTween(name: js.String, tween: js.Function3[js.Any, js.Number, js.Any, BaseInterpolate], priority: js.String = ???): Transition = ??? 293 | def text(text: js.String): Transition = ??? 294 | def tween(name: js.String, factory: InterpolateFactory): Transition = ??? 295 | def filter(selector: js.String): Transition = ??? 296 | def remove(): Transition = ??? 297 | } 298 | 299 | trait InterpolateFactory extends js.Object { 300 | def apply(a: js.Any = ???, b: js.Any = ???): BaseInterpolate = ??? 301 | } 302 | 303 | trait BaseInterpolate extends js.Object { 304 | def apply(a: js.Any, b: js.Any = ???): js.Dynamic = ??? 305 | } 306 | 307 | trait Interpolate extends js.Object { 308 | def apply(t: js.Any): js.Dynamic = ??? 309 | } 310 | 311 | } 312 | 313 | package Time { 314 | 315 | trait Time extends js.Object { 316 | var second: Interval = ??? 317 | var minute: Interval = ??? 318 | var hour: Interval = ??? 319 | var day: Interval = ??? 320 | var week: Interval = ??? 321 | var sunday: Interval = ??? 322 | var monday: Interval = ??? 323 | var tuesday: Interval = ??? 324 | var wednesday: Interval = ??? 325 | var thursday: Interval = ??? 326 | var friday: Interval = ??? 327 | var saturday: Interval = ??? 328 | var month: Interval = ??? 329 | var year: Interval = ??? 330 | var seconds: Range = ??? 331 | var minutes: Range = ??? 332 | var hours: Range = ??? 333 | var days: Range = ??? 334 | var weeks: Range = ??? 335 | var months: Range = ??? 336 | var years: Range = ??? 337 | var sundays: Range = ??? 338 | var mondays: Range = ??? 339 | var tuesdays: Range = ??? 340 | var wednesdays: Range = ??? 341 | var thursdays: Range = ??? 342 | var fridays: Range = ??? 343 | var saturdays: Range = ??? 344 | var format: js.Any = ??? 345 | var scale: js.Any = ??? 346 | } 347 | 348 | trait Range extends js.Object { 349 | def apply(start: Date, end: Date, step: js.Number = ???): js.Array[Date] = ??? 350 | } 351 | 352 | trait Interval extends js.Object { 353 | def apply(date: Date): Date = ??? 354 | var floor: js.Function1[Date, Date] = ??? 355 | var round: js.Function1[Date, Date] = ??? 356 | var ceil: js.Function1[Date, Date] = ??? 357 | var range: Range = ??? 358 | var offset: js.Function2[Date, js.Number, Date] = ??? 359 | var utc: Interval = ??? 360 | } 361 | 362 | trait TimeFormat extends js.Object { 363 | def apply(date: Date): js.String = ??? 364 | var parse: js.Function1[js.String, Date] = ??? 365 | } 366 | 367 | } 368 | 369 | package Layout { 370 | 371 | trait Layout extends js.Object { 372 | def stack(): StackLayout = ??? 373 | def pie(): PieLayout = ??? 374 | def force(): ForceLayout = ??? 375 | def tree(): TreeLayout = ??? 376 | def bundle(): BundleLayout = ??? 377 | def chord(): ChordLayout = ??? 378 | def cluster(): ClusterLayout = ??? 379 | def hierarchy(): HierarchyLayout = ??? 380 | def histogram(): HistogramLayout = ??? 381 | def pack(): PackLayout = ??? 382 | def partition(): PartitionLayout = ??? 383 | def treemap(): TreeMapLayout = ??? 384 | } 385 | 386 | trait StackLayout extends js.Object { 387 | def apply[T](layers: js.Array[T], index: js.Number = ???): js.Array[T] = ??? 388 | def values(accessor: js.Function1[js.Any, Any] = ???): StackLayout = ??? 389 | def offset(offset: js.String): StackLayout = ??? 390 | } 391 | 392 | trait TreeLayout extends js.Object { 393 | def sort(): js.Function2[js.Any, js.Any, js.Number] = ??? 394 | def sort(comparator: js.Function2[js.Any, js.Any, js.Number]): TreeLayout = ??? 395 | def children(): js.Function1[js.Any, Any] = ??? 396 | def children(children: js.Function1[js.Any, Any]): TreeLayout = ??? 397 | def nodes[A <: D3.Layout.GraphNode](root: A): TreeLayout = ??? 398 | def links(nodes: js.Array[GraphNode]): js.Array[GraphLink] = ??? 399 | def seperation(): js.Function2[GraphNode, GraphNode, js.Number] = ??? 400 | def seperation(seperation: js.Function2[GraphNode, GraphNode, js.Number]): TreeLayout = ??? 401 | def size(): js.Array[js.Number] = ??? 402 | def size(size: js.Array[js.Number]): TreeLayout = ??? 403 | } 404 | 405 | trait PieLayout extends js.Object { 406 | def apply(values: js.Array[js.Any], index: js.Number = ???): js.Array[ArcDescriptor] = ??? 407 | def value(): js.Function2[js.Any, js.Number, js.Number] = ??? 408 | def value(accessor: js.Function2[js.Any, js.Number, js.Number]): PieLayout = ??? 409 | def sort(): js.Function2[js.Any, js.Any, js.Number] = ??? 410 | def sort(comparator: js.Function2[js.Any, js.Any, js.Number]): PieLayout = ??? 411 | def startAngle(): js.Number = ??? 412 | def startAngle(angle: js.Number): PieLayout = ??? 413 | def endAngle(): js.Number = ??? 414 | def endAngle(angle: js.Number): PieLayout = ??? 415 | } 416 | 417 | trait ArcDescriptor extends js.Object { 418 | var value: js.Any = ??? 419 | var data: js.Any = ??? 420 | var startAngle: js.Number = ??? 421 | var endAngle: js.Number = ??? 422 | var index: js.Number = ??? 423 | } 424 | 425 | trait GraphNode extends js.Object { 426 | var id: js.Number = ??? 427 | var index: js.Number = ??? 428 | var name: js.String = ??? 429 | var px: js.Number = ??? 430 | var py: js.Number = ??? 431 | var size: js.Number = ??? 432 | var weight: js.Number = ??? 433 | var x: js.Number = ??? 434 | var y: js.Number = ??? 435 | var subindex: js.Number = ??? 436 | var startAngle: js.Number = ??? 437 | var endAngle: js.Number = ??? 438 | var value: js.Number = ??? 439 | var fixed: js.Boolean = ??? 440 | var children: js.Array[GraphNode] = ??? 441 | var _children: js.Array[GraphNode] = ??? 442 | var parent: GraphNode = ??? 443 | var depth: js.Number = ??? 444 | } 445 | 446 | trait GraphLink extends js.Object { 447 | var source: GraphNode = ??? 448 | var target: GraphNode = ??? 449 | } 450 | 451 | trait ForceLayout extends js.Function { 452 | def apply(): ForceLayout = ??? 453 | def size(): js.Number = ??? 454 | def size(mysize: js.Array[js.Number]): ForceLayout = ??? 455 | def size(accessor: js.Function2[js.Any, js.Number, js.Any]): ForceLayout = ??? 456 | def linkDistance(): js.Number = ??? 457 | def linkDistance(number: js.Number): ForceLayout = ??? 458 | def linkDistance(accessor: js.Function2[js.Any, js.Number, js.Number]): ForceLayout = ??? 459 | def linkStrength(): js.Number = ??? 460 | def linkStrength(number: js.Number): ForceLayout = ??? 461 | def linkStrength(accessor: js.Function2[js.Any, js.Number, js.Number]): ForceLayout = ??? 462 | def friction(): js.Number = ??? 463 | def friction(number: js.Number): ForceLayout = ??? 464 | def friction(accessor: js.Function2[js.Any, js.Number, js.Number]): ForceLayout = ??? 465 | def alpha(): js.Number = ??? 466 | def alpha(number: js.Number): ForceLayout = ??? 467 | def alpha(accessor: js.Function2[js.Any, js.Number, js.Number]): ForceLayout = ??? 468 | def charge(): js.Number = ??? 469 | def charge(number: js.Number): ForceLayout = ??? 470 | def charge(accessor: js.Function2[js.Any, js.Number, js.Number]): ForceLayout = ??? 471 | def theta(): js.Number = ??? 472 | def theta(number: js.Number): ForceLayout = ??? 473 | def theta(accessor: js.Function2[js.Any, js.Number, js.Number]): ForceLayout = ??? 474 | def gravity(): js.Number = ??? 475 | def gravity(number: js.Number): ForceLayout = ??? 476 | def gravity(accessor: js.Function2[js.Any, js.Number, js.Number]): ForceLayout = ??? 477 | def links(): js.Array[GraphLink] = ??? 478 | def links[A <: D3.Layout.GraphLink](arLinks: js.Array[A]): ForceLayout = ??? 479 | def nodes[A](): js.Array[A] = ??? 480 | def nodes[A <: D3.Layout.GraphNode](arNodes: js.Array[A]): ForceLayout = ??? 481 | def start(): ForceLayout = ??? 482 | def resume(): ForceLayout = ??? 483 | def stop(): ForceLayout = ??? 484 | def tick(): ForceLayout = ??? 485 | def on(`type`: js.String, listener: js.Function0[Unit]): ForceLayout = ??? 486 | def drag(): ForceLayout = ??? 487 | } 488 | 489 | trait BundleLayout extends js.Object { 490 | def apply(links: js.Array[GraphLink]): js.Array[js.Array[GraphNode]] = ??? 491 | } 492 | 493 | trait ChordLayout extends js.Object { 494 | def matrix(): js.Array[js.Array[js.Number]] = ??? 495 | def matrix(matrix: js.Array[js.Array[js.Number]]): ChordLayout = ??? 496 | def padding(): js.Number = ??? 497 | def padding(padding: js.Number): ChordLayout = ??? 498 | def sortGroups(): js.Function2[js.Number, js.Number, js.Number] = ??? 499 | def sortGroups(comparator: js.Function2[js.Number, js.Number, js.Number]): ChordLayout = ??? 500 | def sortSubgroups(): js.Function2[js.Number, js.Number, js.Number] = ??? 501 | def sortSubgroups(comparator: js.Function2[js.Number, js.Number, js.Number]): ChordLayout = ??? 502 | def sortChords(): js.Function2[js.Number, js.Number, js.Number] = ??? 503 | def sortChords(comparator: js.Function2[js.Number, js.Number, js.Number]): ChordLayout = ??? 504 | def chords(): js.Array[GraphLink] = ??? 505 | def groups(): js.Array[ArcDescriptor] = ??? 506 | } 507 | 508 | trait ClusterLayout extends js.Object { 509 | def sort(): js.Function2[GraphNode, GraphNode, js.Number] = ??? 510 | def sort(comparator: js.Function2[GraphNode, GraphNode, js.Number]): ClusterLayout = ??? 511 | def children(): js.Function2[js.Any, js.Number, js.Array[GraphNode]] = ??? 512 | def children(children: js.Function2[js.Any, js.Number, js.Array[GraphNode]]): ClusterLayout = ??? 513 | def nodes(root: GraphNode): js.Array[GraphNode] = ??? 514 | def links(nodes: js.Array[GraphNode]): js.Array[GraphLink] = ??? 515 | def seperation(): js.Function2[GraphNode, GraphNode, js.Number] = ??? 516 | def seperation(seperation: js.Function2[GraphNode, GraphNode, js.Number]): ClusterLayout = ??? 517 | def size(): js.Array[js.Number] = ??? 518 | def size(size: js.Array[js.Number]): ClusterLayout = ??? 519 | def value(): js.Function1[GraphNode, js.Number] = ??? 520 | def value(value: js.Function1[GraphNode, js.Number]): ClusterLayout = ??? 521 | } 522 | 523 | trait HierarchyLayout extends js.Object { 524 | def sort(): js.Function2[GraphNode, GraphNode, js.Number] = ??? 525 | def sort(comparator: js.Function2[GraphNode, GraphNode, js.Number]): HierarchyLayout = ??? 526 | def children(): js.Function2[js.Any, js.Number, js.Array[GraphNode]] = ??? 527 | def children(children: js.Function2[js.Any, js.Number, js.Array[GraphNode]]): HierarchyLayout = ??? 528 | def nodes(root: GraphNode): js.Array[GraphNode] = ??? 529 | def links(nodes: js.Array[GraphNode]): js.Array[GraphLink] = ??? 530 | def value(): js.Function1[GraphNode, js.Number] = ??? 531 | def value(value: js.Function1[GraphNode, js.Number]): HierarchyLayout = ??? 532 | def reValue(root: GraphNode): HierarchyLayout = ??? 533 | } 534 | 535 | trait Bin extends js.Array[js.Any] { 536 | var x: js.Number = ??? 537 | var dx: js.Number = ??? 538 | var y: js.Number = ??? 539 | } 540 | 541 | trait HistogramLayout extends js.Object { 542 | def apply(values: js.Array[js.Number], index: js.Number = ???): js.Array[Bin] = ??? 543 | def value(): js.Function1[js.Any, Any] = ??? 544 | def value(accessor: js.Function1[js.Any, Any]): HistogramLayout = ??? 545 | def range(): js.Function2[js.Any, js.Number, js.Array[js.Number]] = ??? 546 | def range(range: js.Function2[js.Any, js.Number, js.Array[js.Number]]): HistogramLayout = ??? 547 | def bins(): js.Function2[js.Array[js.Any], js.Number, js.Array[js.Number]] = ??? 548 | def bins(bins: js.Function2[js.Array[js.Any], js.Number, js.Array[js.Number]]): HistogramLayout = ??? 549 | def bins(threshold: js.Array[Double]): HistogramLayout = ??? 550 | def frequency(): js.Boolean = ??? 551 | def frequency(frequency: js.Boolean): HistogramLayout = ??? 552 | } 553 | 554 | trait PackLayout extends js.Object { 555 | def sort(): js.Function2[GraphNode, GraphNode, js.Number] = ??? 556 | def sort(comparator: js.Function2[GraphNode, GraphNode, js.Number]): PackLayout = ??? 557 | def children(): js.Function2[js.Any, js.Number, js.Array[GraphNode]] = ??? 558 | def children(children: js.Function2[js.Any, js.Number, js.Array[GraphNode]]): PackLayout = ??? 559 | def nodes(root: GraphNode): js.Array[GraphNode] = ??? 560 | def links(nodes: js.Array[GraphNode]): js.Array[GraphLink] = ??? 561 | def value(): js.Function1[GraphNode, js.Number] = ??? 562 | def value(value: js.Function1[GraphNode, js.Number]): PackLayout = ??? 563 | def size(): js.Array[js.Number] = ??? 564 | def size(size: js.Array[js.Number]): PackLayout = ??? 565 | def padding(): js.Number = ??? 566 | def padding(padding: js.Number): PackLayout = ??? 567 | } 568 | 569 | trait PartitionLayout extends js.Object { 570 | def sort(): js.Function2[GraphNode, GraphNode, js.Number] = ??? 571 | def sort(comparator: js.Function2[GraphNode, GraphNode, js.Number]): PackLayout = ??? 572 | def children(): js.Function2[js.Any, js.Number, js.Array[GraphNode]] = ??? 573 | def children(children: js.Function2[js.Any, js.Number, js.Array[GraphNode]]): PackLayout = ??? 574 | def nodes(root: GraphNode): js.Array[GraphNode] = ??? 575 | def links(nodes: js.Array[GraphNode]): js.Array[GraphLink] = ??? 576 | def value(): js.Function1[GraphNode, js.Number] = ??? 577 | def value(value: js.Function1[GraphNode, js.Number]): PackLayout = ??? 578 | def size(): js.Array[js.Number] = ??? 579 | def size(size: js.Array[js.Number]): PackLayout = ??? 580 | } 581 | 582 | trait TreeMapLayout extends js.Object { 583 | def sort(): js.Function2[GraphNode, GraphNode, js.Number] = ??? 584 | def sort(comparator: js.Function2[GraphNode, GraphNode, js.Number]): TreeMapLayout = ??? 585 | def children(): js.Function2[js.Any, js.Number, js.Array[GraphNode]] = ??? 586 | def children(children: js.Function2[js.Any, js.Number, js.Array[GraphNode]]): TreeMapLayout = ??? 587 | def nodes(root: GraphNode): js.Array[GraphNode] = ??? 588 | def links(nodes: js.Array[GraphNode]): js.Array[GraphLink] = ??? 589 | def value(): js.Function1[GraphNode, js.Number] = ??? 590 | def value(value: js.Function1[GraphNode, js.Number]): TreeMapLayout = ??? 591 | def size(): js.Array[js.Number] = ??? 592 | def size(size: js.Array[js.Number]): TreeMapLayout = ??? 593 | def padding(): js.Number = ??? 594 | def padding(padding: js.Number): TreeMapLayout = ??? 595 | def round(): js.Boolean = ??? 596 | def round(round: js.Boolean): TreeMapLayout = ??? 597 | def sticky(): js.Boolean = ??? 598 | def sticky(sticky: js.Boolean): TreeMapLayout = ??? 599 | def mode(): js.String = ??? 600 | def mode(mode: js.String): TreeMapLayout = ??? 601 | } 602 | 603 | } 604 | 605 | package Color { 606 | 607 | trait Color extends js.Object { 608 | def brighter(k: js.Number): Color = ??? 609 | def darker(k: js.Number = ???): Color = ??? 610 | override def toString(): js.String = ??? 611 | } 612 | 613 | trait RGBColor extends Color { 614 | var r: js.Number = ??? 615 | var g: js.Number = ??? 616 | var b: js.Number = ??? 617 | def hsl(): HSLColor = ??? 618 | } 619 | 620 | trait HSLColor extends Color { 621 | var h: js.Number = ??? 622 | var s: js.Number = ??? 623 | var l: js.Number = ??? 624 | def rgb(): RGBColor = ??? 625 | } 626 | 627 | trait LABColor extends Color { 628 | var l: js.Number = ??? 629 | var a: js.Number = ??? 630 | var b: js.Number = ??? 631 | def rgb(): RGBColor = ??? 632 | } 633 | 634 | trait HCLColor extends Color { 635 | var h: js.Number = ??? 636 | var c: js.Number = ??? 637 | var l: js.Number = ??? 638 | def rgb(): RGBColor = ??? 639 | } 640 | 641 | } 642 | 643 | package Svg { 644 | 645 | trait Svg extends js.Object { 646 | def symbol(): Symbol = ??? 647 | def axis(): Axis = ??? 648 | def arc(): Arc = ??? 649 | var line: js.Any = ??? 650 | def area(): AreaFunc = ??? 651 | def brush(): Brush = ??? 652 | def chord(): Chord = ??? 653 | var diagonal: js.Any = ??? 654 | var symbolTypes: js.Array[js.String] = ??? 655 | } 656 | 657 | trait AreaObject extends js.Object { 658 | var x: Double = ??? 659 | var y0: Double = ??? 660 | var y: Double = ??? 661 | var y1: Double = ??? 662 | } 663 | 664 | trait AreaFunc extends js.Object { 665 | def apply(dat: js.Any): String = ??? 666 | def x(a: AreaObject => Double): AreaFunc = ??? 667 | def y0(a: AreaObject => Double): AreaFunc = ??? 668 | def y1(a: AreaObject => Double): AreaFunc = ??? 669 | } 670 | 671 | trait Symbol extends js.Object { 672 | var `type`: js.Function1[js.String, Symbol] = ??? 673 | var size: js.Function1[js.Number, Symbol] = ??? 674 | } 675 | 676 | trait Brush extends js.Object { 677 | def apply(selection: Selection): Unit = ??? 678 | def x(): D3.Scale.Scale = ??? 679 | def x(scale: D3.Scale.Scale): Brush = ??? 680 | def y(): D3.Scale.Scale = ??? 681 | def y(scale: D3.Scale.Scale): Brush = ??? 682 | def extent(): js.Array[js.Any] = ??? 683 | def extent(values: js.Array[js.Any]): Brush = ??? 684 | def clear(): Brush = ??? 685 | def empty(): js.Boolean = ??? 686 | def on(`type`: js.String): js.Function2[js.Any, js.Number, Any] = ??? 687 | def on(`type`: js.String, listener: js.Function2[js.Any, js.Number, Any], capture: js.Boolean = ???): Brush = ??? 688 | } 689 | 690 | trait Axis extends js.Object { 691 | def apply(selection: Selection): Unit = ??? 692 | def scale(): js.Dynamic = ??? 693 | def scale(scale: js.Any): Axis = ??? 694 | def orient(): js.String = ??? 695 | def orient(orientation: js.String): Axis = ??? 696 | def ticks(): js.Array[js.Any] = ??? 697 | def ticks(arguments: js.Any*): Axis = ??? 698 | def tickPadding(): js.Number = ??? 699 | def tickPadding(padding: js.Number): Axis = ??? 700 | def tickValues(): js.Array[js.Any] = ??? 701 | def tickValues(values: js.Array[js.Any]): Axis = ??? 702 | def tickSubdivide(count: js.Number): Axis = ??? 703 | def tickSize(major: js.Number = ???, minor: js.Number = ???, end: js.Number = ???): Axis = ??? 704 | def tickFormat[A <: js.Any](formatter: js.Function1[A, js.String]): Axis = ??? 705 | } 706 | 707 | trait Arc extends js.Object { 708 | def apply(data: js.Any, index: js.Number = ???): js.String = ??? 709 | def innerRadius(): js.Function2[js.Any, js.Number, js.Number] = ??? 710 | def innerRadius(radius: js.Number): Arc = ??? 711 | def outerRadius(): js.Function2[js.Any, js.Number, js.Number] = ??? 712 | def outerRadius(radius: js.Number): Arc = ??? 713 | def startAngle(): js.Function2[js.Any, js.Number, js.Number] = ??? 714 | def startAngle(angle: js.Number): Arc = ??? 715 | def endAngle(): js.Function2[js.Any, js.Number, js.Number] = ??? 716 | def endAngle(angle: js.Number): Arc = ??? 717 | def centroid(data: js.Any, index: js.Number = ???): js.Array[js.Number] = ??? 718 | } 719 | 720 | trait Line extends js.Object { 721 | def apply(data: js.Array[js.Any], index: js.Number = ???): js.String = ??? 722 | def x(): js.Function2[js.Any, js.Number, js.Number] = ??? 723 | def x(accessor: js.Function1[js.Any, js.Number]): Line = ??? 724 | def x(cnst: js.Number): Line = ??? 725 | def y(): js.Function2[js.Any, js.Number, js.Number] = ??? 726 | def y(accessor: js.Function1[js.Any, js.Number]): Line = ??? 727 | def y(cnst: js.Number): Line = ??? 728 | def interpolate(): js.String = ??? 729 | def interpolate(interpolate: js.String): Line = ??? 730 | def tension(): js.Number = ??? 731 | def tension(tension: js.Number): Line = ??? 732 | def defined(): js.Function2[js.Any, js.Number, js.Boolean] = ??? 733 | def defined(defined: js.Function1[js.Any, js.Boolean]): Line = ??? 734 | } 735 | 736 | trait LineRadial extends js.Object { 737 | def apply(data: js.Array[js.Any], index: js.Number = ???): js.String = ??? 738 | def x(): js.Function2[js.Any, js.Number, js.Number] = ??? 739 | def x(accessor: js.Function1[js.Any, js.Number]): LineRadial = ??? 740 | def x(cnst: js.Number): LineRadial = ??? 741 | def y(): js.Function2[js.Any, js.Number, js.Number] = ??? 742 | def y(accessor: js.Function1[js.Any, js.Number]): LineRadial = ??? 743 | def y(cnst: js.Number): LineRadial = ??? 744 | def interpolate(): js.String = ??? 745 | def interpolate(interpolate: js.String): LineRadial = ??? 746 | def tension(): js.Number = ??? 747 | def tension(tension: js.Number): LineRadial = ??? 748 | def defined(): js.Function1[js.Any, Any] = ??? 749 | def defined(defined: js.Function1[js.Any, Any]): LineRadial = ??? 750 | def radius(): js.Function2[js.Any, js.Number, js.Number] = ??? 751 | def radius(radius: js.Number): LineRadial = ??? 752 | def angle(): js.Function2[js.Any, js.Any, js.Number] = ??? 753 | def angle(angle: js.Number): LineRadial = ??? 754 | } 755 | 756 | trait Area extends js.Object { 757 | def apply(data: js.Array[js.Any], index: js.Number = ???): js.String = ??? 758 | def x(): js.Function2[js.Any, js.Number, js.Number] = ??? 759 | def x(accessor: js.Function1[js.Any, js.Number]): Area = ??? 760 | def x(cnst: js.Number): Area = ??? 761 | def x0(): js.Function2[js.Any, js.Number, js.Number] = ??? 762 | def x0(accessor: js.Function1[js.Any, js.Number]): Area = ??? 763 | def x0(cnst: js.Number): Area = ??? 764 | def x1(): js.Function2[js.Any, js.Number, js.Number] = ??? 765 | def x1(accessor: js.Function1[js.Any, js.Number]): Area = ??? 766 | def x1(cnst: js.Number): Area = ??? 767 | def y(): js.Function2[js.Any, js.Number, js.Number] = ??? 768 | def y(accessor: js.Function1[js.Any, js.Number]): Area = ??? 769 | def y(cnst: js.Number): Area = ??? 770 | def y0(): js.Function2[js.Any, js.Number, js.Number] = ??? 771 | def y0(accessor: js.Function1[js.Any, js.Number]): Area = ??? 772 | def y0(cnst: js.Number): Area = ??? 773 | def y1(): js.Function2[js.Any, js.Number, js.Number] = ??? 774 | def y1(accessor: js.Function1[js.Any, js.Number]): Area = ??? 775 | def y1(cnst: js.Number): Area = ??? 776 | def interpolate(): js.String = ??? 777 | def interpolate(interpolate: js.String): Area = ??? 778 | def tension(): js.Number = ??? 779 | def tension(tension: js.Number): Area = ??? 780 | def defined(): js.Function1[js.Any, Any] = ??? 781 | def defined(defined: js.Function1[js.Any, Any]): Area = ??? 782 | } 783 | 784 | trait AreaRadial extends js.Object { 785 | def apply(data: js.Array[js.Any], index: js.Number = ???): js.String = ??? 786 | def x(): js.Function2[js.Any, js.Number, js.Number] = ??? 787 | def x(accessor: js.Function1[js.Any, js.Number]): AreaRadial = ??? 788 | def x(cnst: js.Number): AreaRadial = ??? 789 | def x0(): js.Function2[js.Any, js.Number, js.Number] = ??? 790 | def x0(accessor: js.Function1[js.Any, js.Number]): AreaRadial = ??? 791 | def x0(cnst: js.Number): AreaRadial = ??? 792 | def x1(): js.Function2[js.Any, js.Number, js.Number] = ??? 793 | def x1(accessor: js.Function1[js.Any, js.Number]): AreaRadial = ??? 794 | def x1(cnst: js.Number): AreaRadial = ??? 795 | def y(): js.Function2[js.Any, js.Number, js.Number] = ??? 796 | def y(accessor: js.Function1[js.Any, js.Number]): AreaRadial = ??? 797 | def y(cnst: js.Number): AreaRadial = ??? 798 | def y0(): js.Function2[js.Any, js.Number, js.Number] = ??? 799 | def y0(accessor: js.Function1[js.Any, js.Number]): AreaRadial = ??? 800 | def y0(cnst: js.Number): AreaRadial = ??? 801 | def y1(): js.Function2[js.Any, js.Number, js.Number] = ??? 802 | def y1(accessor: js.Function1[js.Any, js.Number]): AreaRadial = ??? 803 | def y1(cnst: js.Number): AreaRadial = ??? 804 | def interpolate(): js.String = ??? 805 | def interpolate(interpolate: js.String): AreaRadial = ??? 806 | def tension(): js.Number = ??? 807 | def tension(tension: js.Number): AreaRadial = ??? 808 | def defined(): js.Function1[js.Any, Any] = ??? 809 | def defined(defined: js.Function1[js.Any, Any]): AreaRadial = ??? 810 | def radius(): js.Number = ??? 811 | def radius(radius: js.Number): AreaRadial = ??? 812 | def innerRadius(): js.Number = ??? 813 | def innerRadius(radius: js.Number): AreaRadial = ??? 814 | def outerRadius(): js.Number = ??? 815 | def outerRadius(radius: js.Number): AreaRadial = ??? 816 | def angle(): js.Number = ??? 817 | def angle(angle: js.Number): AreaRadial = ??? 818 | def startAngle(): js.Number = ??? 819 | def startAngle(angle: js.Number): AreaRadial = ??? 820 | def endAngle(): js.Number = ??? 821 | def endAngle(angle: js.Number): AreaRadial = ??? 822 | } 823 | 824 | trait Chord extends js.Object { 825 | def apply(datum: js.Any, index: js.Number = ???): js.String = ??? 826 | def radius(): js.Number = ??? 827 | def radius(radius: js.Number): Chord = ??? 828 | def startAngle(): js.Number = ??? 829 | def startAngle(angle: js.Number): Chord = ??? 830 | def endAngle(): js.Number = ??? 831 | def endAngle(angle: js.Number): Chord = ??? 832 | def source(): js.Dynamic = ??? 833 | def source(angle: js.Any): Chord = ??? 834 | def target(): js.Dynamic = ??? 835 | def target(angle: js.Any): Chord = ??? 836 | } 837 | 838 | trait Diagonal extends js.Object { 839 | def apply(datum: js.Any, index: js.Number = ???): js.String = ??? 840 | def projection(): js.Function2[js.Any, js.Number, js.Array[js.Number]] = ??? 841 | def projection(proj: js.Function1[js.Any, js.Array[js.Number]]): Diagonal = ??? 842 | def source(): js.Function2[js.Any, js.Number, Any] = ??? 843 | def source(src: js.Function1[js.Any, Any]): Diagonal = ??? 844 | def target(): js.Function2[js.Any, js.Number, Any] = ??? 845 | def target(target: js.Function1[js.Any, Any]): Diagonal = ??? 846 | } 847 | 848 | } 849 | 850 | package Scale { 851 | 852 | trait ScaleBase extends js.Object { 853 | def linear(): LinearScale = ??? 854 | def ordinal(): OrdinalScale = ??? 855 | def quantize(): QuantizeScale = ??? 856 | def category10(): OrdinalScale = ??? 857 | def category20(): OrdinalScale = ??? 858 | def category20b(): OrdinalScale = ??? 859 | def category20c(): OrdinalScale = ??? 860 | def identity(): IdentityScale = ??? 861 | def log(): LogScale = ??? 862 | def pow(): PowScale = ??? 863 | def quantile(): QuantileScale = ??? 864 | def sqrt(): SqrtScale = ??? 865 | def threshold(): ThresholdScale = ??? 866 | } 867 | 868 | trait Scale extends js.Object { 869 | def apply(value: js.Any): js.Dynamic = ??? 870 | // def domain(values: js.Array[Double]): Scale = ??? 871 | // def domain(values: js.Array[Int]): Scale = ??? 872 | def domain[A <: js.Number](values: js.Array[A]): Scale = ??? 873 | def domain(): js.Array[js.Any] = ??? 874 | def range(values: js.Array[js.Any]): Scale = ??? 875 | def range(): js.Array[js.Any] = ??? 876 | def invertExtent(y: js.Any): js.Array[js.Any] = ??? 877 | def copy(): Scale = ??? 878 | } 879 | 880 | trait QuantitiveScale extends Scale { 881 | def apply(value: js.Number): js.Number = ??? 882 | def invert(value: js.Number): js.Number = ??? 883 | def domain(values: js.Array[js.Number]): QuantitiveScale = ??? 884 | // override def domain(): js.Array[js.Number] = ??? 885 | def range[A <: js.Number](values: js.Array[A]): QuantitiveScale = ??? 886 | // override def range(): js.Array[js.Number] = ??? 887 | var rangeRound: js.Function1[js.Array[js.Any], QuantitiveScale] = ??? 888 | def interpolate(): D3.Transition.Interpolate = ??? 889 | def interpolate(factory: D3.Transition.Interpolate): QuantitiveScale = ??? 890 | def clamp(clamp: js.Boolean): QuantitiveScale = ??? 891 | def nice(count: js.Number = ???): QuantitiveScale = ??? 892 | def ticks(count: js.Number): js.Array[Double] = ??? 893 | def tickFormat(count: js.Number): js.Function1[js.Number, js.String] = ??? 894 | override def copy(): QuantitiveScale = ??? 895 | } 896 | 897 | trait LinearScale extends QuantitiveScale { 898 | override def apply(value: js.Number): js.Number = ??? 899 | } 900 | 901 | trait IdentityScale extends Scale { 902 | def apply(value: js.Number): js.Number = ??? 903 | def invert(value: js.Number): js.Number = ??? 904 | def ticks(count: js.Number): js.Array[js.Any] = ??? 905 | def tickFormat(count: js.Number): js.Function1[js.Number, js.String] = ??? 906 | } 907 | 908 | trait SqrtScale extends QuantitiveScale { 909 | override def apply(value: js.Number): js.Number = ??? 910 | } 911 | 912 | trait PowScale extends QuantitiveScale { 913 | override def apply(value: js.Number): js.Number = ??? 914 | } 915 | 916 | trait LogScale extends QuantitiveScale { 917 | override def apply(value: js.Number): js.Number = ??? 918 | } 919 | 920 | trait OrdinalScale extends Scale { 921 | override def apply(value: js.Any): js.Dynamic = ??? 922 | def domain(values: js.Array[js.Any]): OrdinalScale = ??? 923 | override def domain(): js.Array[js.Any] = ??? 924 | def range[A <: js.Any](values: js.Array[A]): OrdinalScale = ??? 925 | override def range(): js.Array[js.Any] = ??? 926 | def rangePoints(interval: js.Array[js.Any], padding: js.Number = ???): OrdinalScale = ??? 927 | def rangeBands(interval: js.Array[js.Any], padding: js.Number = ???, outerPadding: js.Number = ???): OrdinalScale = ??? 928 | def rangeRoundBands(interval: js.Array[js.Any], padding: js.Number = ???, outerPadding: js.Number = ???): OrdinalScale = ??? 929 | def rangeBand(): js.Number = ??? 930 | def rangeExtent(): js.Array[js.Any] = ??? 931 | override def copy(): OrdinalScale = ??? 932 | } 933 | 934 | trait QuantizeScale extends Scale { 935 | override def apply(value: js.Any): js.Dynamic = ??? 936 | def domain(values: js.Array[js.Number]): QuantizeScale = ??? 937 | override def domain(): js.Array[js.Any] = ??? 938 | def range[A <: js.Any](values: js.Array[A]): QuantizeScale = ??? 939 | override def range(): js.Array[js.Any] = ??? 940 | override def copy(): QuantizeScale = ??? 941 | } 942 | 943 | trait ThresholdScale extends Scale { 944 | override def apply(value: js.Any): js.Dynamic = ??? 945 | def domain(values: js.Array[js.Number]): ThresholdScale = ??? 946 | override def domain(): js.Array[js.Any] = ??? 947 | def range[A <: js.Any](values: js.Array[A]): ThresholdScale = ??? 948 | override def range(): js.Array[js.Any] = ??? 949 | override def copy(): ThresholdScale = ??? 950 | } 951 | 952 | trait QuantileScale extends Scale { 953 | override def apply(value: js.Any): js.Dynamic = ??? 954 | def domain(values: js.Array[js.Number]): QuantileScale = ??? 955 | override def domain(): js.Array[js.Any] = ??? 956 | def range[A <: js.Any](values: js.Array[A]): QuantileScale = ??? 957 | override def range(): js.Array[js.Any] = ??? 958 | def quantiles(): js.Array[js.Any] = ??? 959 | override def copy(): QuantileScale = ??? 960 | } 961 | 962 | trait TimeScale extends Scale { 963 | def apply(value: Date): js.Number = ??? 964 | def invert(value: js.Number): Date = ??? 965 | def domain(values: js.Array[js.Any]): TimeScale = ??? 966 | override def domain(): js.Array[js.Any] = ??? 967 | def range[A <: js.Any](values: js.Array[A]): QuantileScale = ??? 968 | override def range(): js.Array[js.Any] = ??? 969 | var rangeRound: js.Function1[js.Array[js.Any], TimeScale] = ??? 970 | def interpolate(): D3.Transition.Interpolate = ??? 971 | def interpolate(factory: D3.Transition.InterpolateFactory): TimeScale = ??? 972 | def clamp(clamp: js.Boolean): TimeScale = ??? 973 | def ticks(count: js.Number): js.Array[js.Any] = ??? 974 | def ticks(range: D3.Time.Range, count: js.Number): js.Array[js.Any] = ??? 975 | def tickFormat(count: js.Number): js.Function1[js.Number, js.String] = ??? 976 | override def copy(): TimeScale = ??? 977 | } 978 | 979 | } 980 | 981 | package Behavior { 982 | 983 | trait Behavior extends js.Object { 984 | def drag(): Drag = ??? 985 | def zoom(): Zoom = ??? 986 | } 987 | 988 | trait Zoom extends js.Object { 989 | def apply(selection: Selection): Unit = ??? 990 | var on: js.Function2[js.String, js.Function2[js.Any, js.Number, Any], Zoom] = ??? 991 | def scale(): js.Number = ??? 992 | def scale(scale: js.Number): Zoom = ??? 993 | def translate(): js.Array[js.Number] = ??? 994 | def translate(translate: js.Array[js.Number]): Zoom = ??? 995 | def scaleExtent(): js.Array[js.Number] = ??? 996 | def scaleExtent(extent: js.Array[js.Number]): Zoom = ??? 997 | def x(): D3.Scale.Scale = ??? 998 | def x(x: D3.Scale.Scale): Zoom = ??? 999 | def y(): D3.Scale.Scale = ??? 1000 | def y(y: D3.Scale.Scale): Zoom = ??? 1001 | } 1002 | 1003 | trait Drag extends js.Object { 1004 | def apply(): js.Dynamic = ??? 1005 | var on: js.Function2[js.String, js.Function2[js.Any, js.Number, Any], Drag] = ??? 1006 | def origin(): js.Dynamic = ??? 1007 | def origin(origin: js.Any = ???): Drag = ??? 1008 | } 1009 | 1010 | } 1011 | 1012 | package Geo { 1013 | 1014 | trait Geo extends js.Object { 1015 | def path(): Path = ??? 1016 | def circle(): Circle = ??? 1017 | def area(feature: js.Any): js.Number = ??? 1018 | def bounds(feature: js.Any): js.Array[js.Array[js.Number]] = ??? 1019 | def centroid(feature: js.Any): js.Array[js.Number] = ??? 1020 | def distance(a: js.Array[js.Number], b: js.Array[js.Number]): js.Number = ??? 1021 | def interpolate(a: js.Array[js.Number], b: js.Array[js.Number]): js.Function1[js.Number, js.Array[js.Number]] = ??? 1022 | def length(feature: js.Any): js.Number = ??? 1023 | def projection(raw: RawProjection): Projection = ??? 1024 | def projectionMutator(rawFactory: RawProjection): ProjectionMutator = ??? 1025 | def albers(): Projection = ??? 1026 | def albersUsa(): Projection = ??? 1027 | var azimuthalEqualArea: js.Any = ??? 1028 | var azimuthalEquidistant: js.Any = ??? 1029 | var conicConformal: js.Any = ??? 1030 | var conicEquidistant: js.Any = ??? 1031 | var conicEqualArea: js.Any = ??? 1032 | var equirectangular: js.Any = ??? 1033 | var gnomonic: js.Any = ??? 1034 | var mercator: js.Any = ??? 1035 | var orthographic: js.Any = ??? 1036 | var stereographic: js.Any = ??? 1037 | var transverseMercator: js.Any = ??? 1038 | def stream(`object`: GeoJSON, listener: Stream): Unit = ??? 1039 | def graticule(): Graticule = ??? 1040 | def greatArc(): GreatArc = ??? 1041 | def rotation(rotation: js.Array[js.Number]): Rotation = ??? 1042 | } 1043 | 1044 | trait Path extends js.Object { 1045 | def apply(feature: js.Any, index: js.Any = ???): js.String = ??? 1046 | def projection(): Projection = ??? 1047 | def projection(projection: Projection): Path = ??? 1048 | def context(): js.String = ??? 1049 | def context(context: Context): Path = ??? 1050 | def area(feature: js.Any): js.Dynamic = ??? 1051 | def centroid(feature: js.Any): js.Dynamic = ??? 1052 | def bounds(feature: js.Any): js.Dynamic = ??? 1053 | def pointRadius(): js.Number = ??? 1054 | def pointRadius(radius: js.Number): Path = ??? 1055 | } 1056 | 1057 | trait Context extends js.Object { 1058 | def beginPath(): js.Dynamic = ??? 1059 | def moveTo(x: js.Number, y: js.Number): js.Dynamic = ??? 1060 | def lineTo(x: js.Number, y: js.Number): js.Dynamic = ??? 1061 | def arc(x: js.Number, y: js.Number, radius: js.Number, startAngle: js.Number, endAngle: js.Number): js.Dynamic = ??? 1062 | def closePath(): js.Dynamic = ??? 1063 | } 1064 | 1065 | trait Circle extends js.Object { 1066 | def apply(args: js.Any*): GeoJSON = ??? 1067 | def origin(): js.Array[js.Number] = ??? 1068 | def origin(origin: js.Array[js.Number]): Circle = ??? 1069 | def angle(): js.Number = ??? 1070 | def angle(angle: js.Number): Circle = ??? 1071 | def precision(): js.Number = ??? 1072 | def precision(precision: js.Number): Circle = ??? 1073 | } 1074 | 1075 | trait Graticule extends js.Object { 1076 | def apply(): GeoJSON = ??? 1077 | def lines(): js.Array[GeoJSON] = ??? 1078 | def outline(): GeoJSON = ??? 1079 | def extent(): js.Array[js.Array[js.Number]] = ??? 1080 | def extent(extent: js.Array[js.Array[js.Number]]): Graticule = ??? 1081 | def minorExtent(): js.Array[js.Array[js.Number]] = ??? 1082 | def minorExtent(extent: js.Array[js.Array[js.Number]]): Graticule = ??? 1083 | def majorExtent(): js.Array[js.Array[js.Number]] = ??? 1084 | def majorExtent(extent: js.Array[js.Array[js.Number]]): Graticule = ??? 1085 | def step(): js.Array[js.Array[js.Number]] = ??? 1086 | def step(extent: js.Array[js.Array[js.Number]]): Graticule = ??? 1087 | def minorStep(): js.Array[js.Array[js.Number]] = ??? 1088 | def minorStep(extent: js.Array[js.Array[js.Number]]): Graticule = ??? 1089 | def majorStep(): js.Array[js.Array[js.Number]] = ??? 1090 | def majorStep(extent: js.Array[js.Array[js.Number]]): Graticule = ??? 1091 | def precision(): js.Number = ??? 1092 | def precision(precision: js.Number): Graticule = ??? 1093 | } 1094 | 1095 | trait GreatArc extends js.Object { 1096 | def apply(): GeoJSON = ??? 1097 | def distance(): js.Number = ??? 1098 | def source(): js.Dynamic = ??? 1099 | def source(source: js.Any): GreatArc = ??? 1100 | def target(): js.Dynamic = ??? 1101 | def target(target: js.Any): GreatArc = ??? 1102 | def precision(): js.Number = ??? 1103 | def precision(precision: js.Number): GreatArc = ??? 1104 | } 1105 | 1106 | trait GeoJSON extends js.Object { 1107 | var coordinates: js.Array[js.Array[js.Number]] = ??? 1108 | var `type`: js.String = ??? 1109 | } 1110 | 1111 | trait RawProjection extends js.Object { 1112 | def apply(lambda: js.Number, phi: js.Number): js.Array[js.Number] = ??? 1113 | def invert(x: js.Number, y: js.Number): js.Array[js.Number] = ??? 1114 | } 1115 | 1116 | trait Projection extends js.Object { 1117 | def apply(coordinates: js.Array[js.Number]): js.Array[js.Number] = ??? 1118 | def invert(point: js.Array[js.Number]): js.Array[js.Number] = ??? 1119 | def rotate(): js.Array[js.Number] = ??? 1120 | def rotate(rotation: js.Array[js.Number]): Projection = ??? 1121 | def center(): js.Array[js.Number] = ??? 1122 | def center(location: js.Array[js.Number]): Projection = ??? 1123 | def parallels(): js.Array[js.Number] = ??? 1124 | def parallels(location: js.Array[js.Number]): Projection = ??? 1125 | def translate(): js.Array[js.Number] = ??? 1126 | def translate(point: js.Array[js.Number]): Projection = ??? 1127 | def scale(): js.Number = ??? 1128 | def scale(scale: js.Number): Projection = ??? 1129 | def clipAngle(): js.Number = ??? 1130 | def clipAngle(angle: js.Number): Projection = ??? 1131 | def clipExtent(): js.Array[js.Array[js.Number]] = ??? 1132 | def clipExtent(extent: js.Array[js.Array[js.Number]]): Projection = ??? 1133 | def precision(): js.Number = ??? 1134 | def precision(precision: js.Number): Projection = ??? 1135 | def stream(listener: Stream = ???): Stream = ??? 1136 | } 1137 | 1138 | trait Stream extends js.Object { 1139 | def point(x: js.Number, y: js.Number, z: js.Number = ???): Unit = ??? 1140 | def lineStart(): Unit = ??? 1141 | def lineEnd(): Unit = ??? 1142 | def polygonStart(): Unit = ??? 1143 | def polygonEnd(): Unit = ??? 1144 | def sphere(): Unit = ??? 1145 | } 1146 | 1147 | trait Rotation extends js.Array[js.Any] { 1148 | def apply(location: js.Array[js.Number]): Rotation = ??? 1149 | def invert(location: js.Array[js.Number]): Rotation = ??? 1150 | } 1151 | 1152 | trait ProjectionMutator extends js.Object { 1153 | def apply(lambda: js.Number, phi: js.Number): Projection = ??? 1154 | } 1155 | 1156 | } 1157 | 1158 | package Geom { 1159 | 1160 | trait Geom extends js.Object { 1161 | def voronoi[T](): Voronoi[T] = ??? 1162 | def voronoi(vertices: js.Array[Vertice]): js.Array[Polygon] = ??? 1163 | def delaunay(vertices: js.Array[Vertice] = ???): js.Array[Polygon] = ??? 1164 | def quadtree(): QuadtreeFactory = ??? 1165 | def quadtree(points: js.Array[Point], x1: js.Number, y1: js.Number, x2: js.Number, y2: js.Number): Quadtree = ??? 1166 | def quadtree(points: js.Array[Point], width: js.Number, height: js.Number): Quadtree = ??? 1167 | def polygon(vertices: js.Array[Vertice]): Polygon = ??? 1168 | def hull(): Hull = ??? 1169 | def hull(vertices: js.Array[Vertice]): js.Array[Vertice] = ??? 1170 | } 1171 | 1172 | trait Vertice extends js.Array[js.Number] { 1173 | var angle: js.Number = ??? 1174 | } 1175 | 1176 | trait Polygon extends js.Array[Vertice] { 1177 | def area(): js.Number = ??? 1178 | def centroid(): js.Array[js.Number] = ??? 1179 | def clip(subject: Polygon): Polygon = ??? 1180 | } 1181 | 1182 | trait QuadtreeFactory extends js.Object { 1183 | def apply(): Quadtree = ??? 1184 | def apply(points: js.Array[Point], x1: js.Number, y1: js.Number, x2: js.Number, y2: js.Number): Quadtree = ??? 1185 | def apply(points: js.Array[Point], width: js.Number, height: js.Number): Quadtree = ??? 1186 | def x(): js.Function1[js.Any, Any] = ??? 1187 | def x(accesor: js.Function1[js.Any, Any]): QuadtreeFactory = ??? 1188 | def y(): js.Function1[js.Any, Any] = ??? 1189 | def y(accesor: js.Function1[js.Any, Any]): QuadtreeFactory = ??? 1190 | def size(): js.Array[js.Number] = ??? 1191 | def size(size: js.Array[js.Number]): QuadtreeFactory = ??? 1192 | def extent(): js.Array[js.Array[js.Number]] = ??? 1193 | def extent(points: js.Array[js.Array[js.Number]]): QuadtreeFactory = ??? 1194 | } 1195 | 1196 | trait Quadtree extends js.Object { 1197 | def add(point: Point): Unit = ??? 1198 | def visit(callback: js.Any): Unit = ??? 1199 | } 1200 | 1201 | trait Point extends js.Object { 1202 | var x: js.Number = ??? 1203 | var y: js.Number = ??? 1204 | } 1205 | 1206 | trait Voronoi[T] extends js.Object { 1207 | def apply(data: js.Array[T]): js.Array[Polygon] = ??? 1208 | def links(data: js.Array[T]): js.Array[Layout.GraphLink] = ??? 1209 | def triangles(data: js.Array[T]): js.Array[js.Array[js.Number]] = ??? 1210 | def x(): js.Function2[T, js.Number, js.Number] = ??? 1211 | def x(accessor: js.Function2[T, js.Number, js.Number]): Voronoi[T] = ??? 1212 | def x(constant: js.Number): Voronoi[T] = ??? 1213 | def y(): js.Function2[T, js.Number, js.Number] = ??? 1214 | def y(accessor: js.Function2[T, js.Number, js.Number]): Voronoi[T] = ??? 1215 | def y(constant: js.Number): Voronoi[T] = ??? 1216 | def clipExtent(): js.Array[js.Array[js.Number]] = ??? 1217 | def clipExtent(extent: js.Array[js.Array[js.Number]]): Voronoi[T] = ??? 1218 | def size(): js.Array[js.Number] = ??? 1219 | def size(size: js.Array[js.Number]): Voronoi[T] = ??? 1220 | } 1221 | 1222 | trait Hull extends js.Object { 1223 | def apply(vertices: js.Array[Vertice]): js.Array[Vertice] = ??? 1224 | def x(): js.Function1[js.Any, Any] = ??? 1225 | def x(accesor: js.Function1[js.Any, Any]): js.Dynamic = ??? 1226 | def y(): js.Function1[js.Any, Any] = ??? 1227 | def y(accesor: js.Function1[js.Any, Any]): js.Dynamic = ??? 1228 | } 1229 | 1230 | } 1231 | 1232 | 1233 | package object D3Obj { 1234 | val d3 = D3.Base 1235 | } 1236 | 1237 | 1238 | } 1239 | 1240 | 1241 | -------------------------------------------------------------------------------- /src/main/scala/example/Graph2.scala: -------------------------------------------------------------------------------- 1 | package example 2 | 3 | import scala.scalajs.js 4 | import scala.scalajs.js.annotation.JSExport 5 | import D3.{D3Obj, Nest} 6 | import org.scalajs.dom 7 | import D3.Svg.AreaObject 8 | 9 | import scala.collection.mutable 10 | 11 | // Ported from http://bl.ocks.org/mbostock/4062085 12 | 13 | @JSExport 14 | object Graph2 { 15 | 16 | def draw() { 17 | val d3 = D3Obj.d3 18 | 19 | case class Margin(top: Double, right: Double, bottom: Double, left: Double) 20 | 21 | val margin = Margin(20,40,30,20) 22 | val width = 960 - margin.left - margin.right 23 | val height = 500 - margin.top - margin.bottom 24 | val barWidth = Math.floor(width / 19) - 1 25 | 26 | val x = d3.scale.linear() 27 | .range(Array(barWidth / 2, width - barWidth / 2)) 28 | 29 | val y = d3.scale.linear() 30 | .range(Array(height, 0)) 31 | 32 | val yAxis = d3.svg.axis() 33 | .scale(y) 34 | .orient("right") 35 | .tickSize(-width) 36 | .tickFormat((d: Double) => { Math.round(d / 1e6).toString + "M" }) 37 | 38 | // An SVG element with a bottom-right origin. 39 | val svg: D3.Selection = d3.select("body").append("svg") 40 | .attr("width", width + margin.left + margin.right) 41 | .attr("height", height + margin.top + margin.bottom) 42 | .append("g") 43 | .attr("transform", "translate(" + margin.left + "," + margin.top + ")") 44 | 45 | // A sliding container to hold the bars by birthyear. 46 | var birthyears = svg.append("g") 47 | .attr("class", "birthyears") 48 | 49 | // A label for the current year. 50 | var title: D3.Selection = svg.append("text") 51 | .attr("class", "title") 52 | .attr("dy", ".71em") 53 | .text(2000.toString) 54 | 55 | class Population extends js.Object { 56 | var people: String = ??? 57 | var year: String = ??? 58 | var age: String = ??? 59 | var sex: String = ??? 60 | } 61 | 62 | case class Population2(val people: Int, val year: Int, val age: Int, val sex: Int) 63 | 64 | d3.csv("population.csv", (error: js.Any, dataOriginal: js.Array[Population]) => { 65 | 66 | // Convert strings to numbers. 67 | val data: Array[Population2] = for(d: Population <- dataOriginal) yield { 68 | val people = d.people.toInt 69 | val year = d.year.toInt 70 | val age = d.age.toInt 71 | val sex = d.sex.toInt 72 | Population2(people,year,age,sex) 73 | } 74 | 75 | //To print out scala object, you need to use println(), not dom.console.log() 76 | // println(data.mkString(", ")) 77 | 78 | // Compute the extent of the data set in age and years. 79 | val age1 = data.map(_.age).max 80 | val year0 = data.map(_.year).min 81 | val year1 = data.map(_.year).max 82 | var year = year1 83 | 84 | // Update the scale domains. 85 | x.domain(Array(year1 - age1, year1).map(_.toDouble)) 86 | y.domain(Array(0, d3.max(data, (d: Population2) => d.people)).map(_.toDouble)) 87 | 88 | 89 | // Produce a map from year and birthyear to [male, female]. 90 | import scala.collection.mutable 91 | val data2: Map[Int,Map[Int,Array[Population2]]] = { 92 | val a: Map[Int,Array[Population2]] = data.groupBy(_.year) 93 | val aa: Map[Int,Map[Int,Array[Population2]]] = (for((k,v)<- a) yield { 94 | (k,v.groupBy(p => p.year - p.age)) 95 | }).toMap 96 | aa 97 | } 98 | 99 | val data3 = data2.mapValues(d => { 100 | d.mapValues(_.map(_.people).mkString(",")) 101 | }) 102 | 103 | // println(data3) 104 | 105 | // Add an axis to show the population values. 106 | svg.append("g") 107 | .attr("class", "y axis") 108 | .attr("transform", "translate(" + width + ",0)") 109 | .call(yAxis) 110 | .selectAll("g") 111 | .filter((value: Any, i: js.Number) => value != null) 112 | .classed("zero", true) 113 | 114 | // Add labeled rects for each birthyear (so that no enter or exit is required). 115 | val birthyear = birthyears.selectAll(".birthyear") 116 | .data(d3.range(year0 - age1, year1 + 1, 5)) 117 | .enter().append("g") 118 | .attr("class", "birthyear") 119 | .attr("transform", (birthyear: Double) => "translate(" + x(birthyear) + ",0)") 120 | 121 | birthyear.selectAll("rect") 122 | .data((birthyear: js.Number, i: Int) => { 123 | val a: Array[Int] = data2.get(year).flatMap(_.get(birthyear.toInt)).map(_.map(_.people)) 124 | .getOrElse(Array(0,0)) 125 | 126 | //.asInstanceOf[js.Dynamic] 127 | // dom.console.log(js.Array(a)) 128 | js.Array(a(0),a(1)) 129 | }) 130 | .enter().append("rect") 131 | .attr("x", -barWidth / 2) 132 | .attr("width", barWidth) 133 | .attr("y", y) 134 | .attr("height", (value: Double) => { 135 | height - y(value) 136 | }) 137 | 138 | // Add labels to show birthyear. 139 | birthyear.append("text") 140 | .attr("y", height - 4) 141 | .text((birthyear: Double,i: Double) => birthyear.toString) 142 | 143 | // Add labels to show age (separate; not animated). 144 | svg.selectAll(".age") 145 | .data(d3.range(0, age1 + 1, 5)) 146 | .enter().append("text") 147 | .attr("class", "age") 148 | .attr("x", (age: Int) => x(year - age)) 149 | .attr("y", height + 4) 150 | .attr("dy", ".71em") 151 | .text((age: Int, _: js.Number) => { age.toString }) 152 | 153 | // Allow the arrow keys to change the displayed year. 154 | dom.window.focus() 155 | d3.select(dom.window).on("keydown", (_: js.Any, _: js.Number) => { 156 | year = d3.event.keyCode match { 157 | case 37 => Math.max(year0, year - 10) 158 | case 39 => Math.min(year1, year + 10) 159 | case _ => year 160 | } 161 | update() 162 | 1.asInstanceOf[js.Any] 163 | }) 164 | 165 | def update() { 166 | if (data(year) == null) return 167 | title.text(year.toString) 168 | 169 | birthyears.transition() 170 | .duration(750) 171 | .attr("transform", "translate(" + (x(year1) - x(year)) + ",0)") 172 | 173 | birthyear.selectAll("rect") 174 | .data((birthyear: Double, i: Int) => { 175 | val a: Array[Int] = data2.get(year).flatMap(_.get(birthyear.toInt)).map(_.map(_.people)) 176 | .getOrElse(Array(0,0)) 177 | 178 | //.asInstanceOf[js.Dynamic] 179 | dom.console.log(js.Array(a)) 180 | js.Array(a(0),a(1)) 181 | }) 182 | .transition() 183 | .duration(750) 184 | .attr("y", y) 185 | .attr("height", (value: Double) => height - y(value)) 186 | } 187 | () 188 | }) 189 | 190 | 191 | 192 | } 193 | } 194 | 195 | // http://bl.ocks.org/mbostock/4060954 196 | 197 | @JSExport 198 | object Graph3 { 199 | import scala.collection.mutable.ArrayBuffer 200 | val d3 = D3.Base 201 | 202 | def bumpLayer(n: Int): js.Array[js.Object] = { 203 | 204 | def bump(a: ArrayBuffer[Double]) = { 205 | val x = 1 / (.1 + Math.random()) 206 | val y = 2 * Math.random() - .5 207 | val z = 10 / (.1 + Math.random()) 208 | for(i <- 0 until n) { 209 | val w = (i / n - y) * z 210 | a(i) += x * Math.exp(-w * w) 211 | } 212 | } 213 | import scala.collection.mutable 214 | 215 | val a: ArrayBuffer[Double] = ArrayBuffer.fill(n)(0) 216 | for (i <- 0 until 5) bump(a) 217 | val b: mutable.Seq[js.Object] = mutable.Seq(a.zipWithIndex.map((v: (Double, Int)) => js.Dynamic.literal("x" -> v._2, "y" -> Math.max(0, v._1)) ).toSeq :_*) 218 | val r = js.Array(b :_*) 219 | // dom.console.log(r) 220 | r 221 | } 222 | 223 | def draw() { 224 | val n = 20 // number of layers 225 | val m = 200 // number of samples per layer 226 | val stack = d3.layout.stack().offset("wiggle") 227 | val layers0: js.Array[js.Object] = js.Array(stack(Array.range(0,n).map(_ => bumpLayer(m))) :_*) 228 | val layers1: js.Array[js.Object] = js.Array(stack(Array.range(0,n).map(_ => bumpLayer(m))) :_*) 229 | 230 | dom.console.log("Graph3.draw()") 231 | dom.console.log(layers0,layers1) 232 | 233 | val width = 960.0 234 | val height = 500.0 235 | 236 | val x = d3.scale.linear() 237 | .domain(Array(0, m - 1).map(_.toDouble)) 238 | .range(Array(0.0, width)) 239 | 240 | // val mx: Double = Array((layers0++layers1) :_*).map((layer: AreaObject) => { 241 | // d.y0 + d.y 242 | // }).max 243 | 244 | val mx = 100 245 | val y = d3.scale.linear() 246 | .domain(Array(0.0, mx)) 247 | .range(Array(height, 0)) 248 | 249 | val color = d3.scale.linear() 250 | .range(Array("#aad", "#556").asInstanceOf[js.Array[js.Any]]) 251 | 252 | val area = d3.svg.area() 253 | .x(d => x(d.x)) 254 | .y0(d => y(d.y0)) 255 | .y1(d => y(d.y0+d.y)) 256 | 257 | val svg = d3.select("body").append("svg") 258 | .attr("width", width) 259 | .attr("height", height) 260 | 261 | dom.console.log(area,area(layers0)) 262 | 263 | svg.selectAll("path") 264 | .data(layers0) 265 | .enter().append("path") 266 | .attr("d", area) 267 | .style("fill", (obj: js.Object, a: Double) => color(Math.random())) 268 | 269 | // def transition() { 270 | // d3.selectAll("path") 271 | // .data(() => { 272 | // var d = layers1 273 | // layers1 = layers0 274 | // return layers0 = d 275 | // }) 276 | // .transition() 277 | // .duration(2500) 278 | // .attr("d", area) 279 | // } 280 | 281 | } 282 | } 283 | 284 | @JSExport 285 | object Graph4 { 286 | val d3 = D3.Base 287 | trait MySelection extends D3.Selection { 288 | def size(x: Int, y: Int): MySelection = { 289 | this.attr("x", x).attr("y", y).asInstanceOf[MySelection] 290 | } 291 | } 292 | 293 | def size2(sel: D3.Selection, x: Int, y: Int) = { 294 | sel.attr("width",x).attr("height",y) 295 | } 296 | def draw(){ 297 | val values: js.Array[js.Number] = js.Array((0 until 1000).map(_ => d3.random.bates(10)()) :_*) 298 | 299 | // A formatter for counts. 300 | val formatCount = d3.format(",.0f") 301 | 302 | case class Margin(top: Double, right: Double, bottom: Double, left: Double) 303 | val margin = Margin(10,30,30,30) 304 | 305 | val width = 960 - margin.left - margin.right 306 | val height = 500 - margin.top - margin.bottom 307 | 308 | val x: D3.Scale.QuantitiveScale = d3.scale.linear() 309 | .domain(Array(0d, 1)) 310 | .range(Array(0d, width)) 311 | 312 | // Generate a histogram using twenty uniformly-spaced bins. 313 | val data: mutable.Seq[D3.Layout.Bin] = d3.layout.histogram() 314 | .bins(x.ticks(20))(values) 315 | 316 | var y = d3.scale.linear() 317 | .domain(Array(0d, data.map(_.y).max)) 318 | .range(Array(height, 0)) 319 | 320 | var xAxis = d3.svg.axis() 321 | .scale(x) 322 | .orient("bottom") 323 | 324 | val svg = d3.select("body").append("svg") 325 | .attr("width", width + margin.left + margin.right) 326 | .attr("height", height + margin.top + margin.bottom) 327 | .append("g") 328 | .attr("transform", "translate(" + margin.left + "," + margin.top + ")") 329 | 330 | trait XYObject extends js.Object { 331 | var x: Double = ??? 332 | var y: Double = ??? 333 | } 334 | 335 | val bar = svg.selectAll(".bar") 336 | .data(js.Array(data :_*)) 337 | .enter().append("g") 338 | .attr("class", "bar") 339 | .attr("transform", (d: D3.Layout.Bin) => "translate(" + x(d.x) + "," + y(d.y) + ")") 340 | 341 | bar.append("rect") 342 | .attr("x", 1) 343 | .attr("width", x(data(0).dx) - 1) 344 | .attr("height", (d: D3.Layout.Bin) => height - y(d.y)) 345 | 346 | bar.append("text") 347 | .attr("dy", ".75em") 348 | .attr("y", 6) 349 | .attr("x", x(data(0).dx / 2)) 350 | .attr("text-anchor", "middle") 351 | .text((d: D3.Layout.Bin, i: Double) => formatCount(d.y)) 352 | 353 | svg.append("g") 354 | .attr("class", "x axis") 355 | .attr("transform", "translate(0," + height + ")") 356 | .call(xAxis) 357 | 358 | } 359 | } -------------------------------------------------------------------------------- /src/main/scala/example/ScalaJSExample.scala: -------------------------------------------------------------------------------- 1 | package example 2 | 3 | import D3._ 4 | import scala.scalajs.js 5 | import scala.scalajs.js.annotation.{JSName, JSExport} 6 | import org.scalajs.dom 7 | import D3.Layout.{GraphNode, GraphLink} 8 | 9 | // It's important to specify a type for object when defining a JS object. 10 | // Otherwise this causes exception like the following. 11 | // "Uncaught java.lang.ClassCastException: 1 is not an instance of scala.runtime.Nothing$" 12 | trait LinkData extends GraphLink { 13 | var value: Double = ??? 14 | } 15 | 16 | trait NodeData extends GraphNode { 17 | var group: Int = ??? 18 | } 19 | 20 | trait GraphData extends js.Object { 21 | var nodes: js.Array[NodeData] = ??? 22 | var links: js.Array[LinkData] = ??? 23 | } 24 | 25 | //Nesting @JSExport annotation may cause EmptyScope.enter error. 26 | @JSExport 27 | object D3DrawingExamples extends js.JSApp { 28 | 29 | def main(): Unit = { 30 | graph1() 31 | Graph2.draw() 32 | // Graph3.draw() 33 | Graph4.draw() 34 | } 35 | 36 | 37 | // Adapted from http://bl.ocks.org/mbostock/4062045 38 | def graph1() { 39 | val d3 = D3Obj.d3 40 | val color: D3.Scale.OrdinalScale = d3.scale.category20() 41 | 42 | val width: js.Number = 960 43 | val height: js.Number = 500 44 | 45 | 46 | val force = d3.layout.force() 47 | .charge(-120) 48 | .linkDistance(30) 49 | .size(Array(width, height)) 50 | 51 | val svg = d3.select("body").append("svg") 52 | .attr("width", width) 53 | .attr("height", height) 54 | 55 | d3.json("miserables.json", (error: Any, g: js.Any) => { 56 | dom.console.log("Loaded!!",g) 57 | val graph = g.asInstanceOf[GraphData] 58 | force 59 | .nodes(graph.nodes) 60 | .links(graph.links) 61 | .start() 62 | 63 | dom.console.log("Force made") 64 | 65 | val link: Selection = svg.selectAll(".link") 66 | .data(graph.links) 67 | .enter().append("line") 68 | .attr("class", "link") 69 | .style("stroke-width",(d: LinkData, i: js.Number) => { 70 | val w = scala.math.sqrt(d.value) 71 | w.asInstanceOf[js.Dynamic] 72 | }) 73 | 74 | dom.console.log("Link made") 75 | 76 | 77 | val node: D3.Selection = svg.selectAll(".node") 78 | .data(graph.nodes) 79 | .enter().append("circle") 80 | .attr("class", "node") 81 | .attr("r", 5) 82 | .style("fill", (d: NodeData, i: js.Number) => { 83 | color(d.group) 84 | }) 85 | .call(force.drag()) 86 | 87 | dom.console.log("Node made") 88 | 89 | node.append("title") 90 | .text((a: NodeData, _: js.Number) => a.name) 91 | 92 | dom.console.log("Title made") 93 | 94 | def tickFunc = () => { 95 | link.attr("x1", (d: LinkData) => d.source.x) 96 | .attr("y1", (d: LinkData) => d.source.y) 97 | .attr("x2", (d: LinkData) => d.target.x) 98 | .attr("y2", (d: LinkData) => d.target.y) 99 | 100 | node.attr("cx", (d: GraphNode) => d.x) 101 | .attr("cy", (d: GraphNode) => d.y) 102 | () 103 | } 104 | 105 | force.on("tick", tickFunc) 106 | () 107 | }) 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/test/scala/example/ScalaJSExampleTest.scala: -------------------------------------------------------------------------------- 1 | package example 2 | 3 | import scala.scalajs.js 4 | import js.Dynamic.{ global => g } 5 | import scala.scalajs.test.JasmineTest 6 | 7 | object ScalaJSExampleTest extends JasmineTest { 8 | 9 | describe("ScalaJSExample") { 10 | 11 | it("should draw svg") { 12 | import example._ 13 | // D3DrawingExamples.graph1() 14 | // Graph2.draw() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /testsuite-fastopt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Test suite - Jasmine HTML reporter example 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /testsuite.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Test suite - Jasmine HTML reporter example 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 29 | 30 | 31 | 32 | --------------------------------------------------------------------------------