Skip to content

Commit

Permalink
Revert "Revert "Merge pull request cibotech#14 from mathieuleclaire/pm""
Browse files Browse the repository at this point in the history
This reverts commit 8da56dc.
  • Loading branch information
mathieuleclaire committed Nov 9, 2018
1 parent 7772cff commit 0739947
Show file tree
Hide file tree
Showing 10 changed files with 339 additions and 117 deletions.
53 changes: 35 additions & 18 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import ReleaseTransformations._
import execnpm.NpmDeps
import execnpm.NpmDeps.Dep


homepage := Some(url("https://github.com/cibotech/leaflet-facade"))
Expand Down Expand Up @@ -46,19 +48,9 @@ lazy val globalSettings = Seq(
bintrayOrganization := Some("cibotech"),
bintrayRepository := "public",
bintrayPackageLabels := Seq("scala", "scala.js", "leaflet"),
requiresDOM := true,
licenses += ("BSD Simplified", url("https://opensource.org/licenses/BSD-3-Clause"))
)

lazy val root = project.in(file("."))
.aggregate(`leaflet-facade`, `leaflet-draw`)
.settings(
crossScalaVersions := Seq("2.11.8", "2.12.4"),
releaseCrossBuild := true,
publishArtifact := false,
publish := {}
)

lazy val `leaflet-facade` = project.in(file("leaflet"))
.settings(globalSettings)
.settings(
Expand All @@ -68,18 +60,43 @@ lazy val `leaflet-facade` = project.in(file("leaflet"))
libraryDependencies ++= Seq(
"org.scala-js" %%% "scalajs-dom" % "0.9.4"
),
jsDependencies ++= Seq(
"org.webjars.npm" % "leaflet" % "1.3.1" / "1.3.1/dist/leaflet.js"
)
) enablePlugins (ScalaJSPlugin)
npmDeps in Compile += Dep("leaflet", "1.3.4", List("leaflet.js"))
) enablePlugins (ExecNpmPlugin)

lazy val `leaflet-draw` = project.in(file("leaflet-draw"))
.settings(globalSettings)
.settings(
crossScalaVersions := Seq("2.11.8", "2.12.4"),
releaseCrossBuild := true,
name := "leaflet-draw-facade",
jsDependencies ++= Seq(
"org.webjars.npm" % "leaflet-draw" % "1.0.2" / "leaflet.draw.js"
)
) dependsOn (`leaflet-facade`) enablePlugins (ScalaJSPlugin)
npmDeps in Compile += Dep("leaflet-draw", "1.0.4", List("leaflet.draw.js"))
) dependsOn (`leaflet-facade`) enablePlugins (ExecNpmPlugin)

lazy val `leaflet-pm` = project.in(file("leaflet-pm"))
.settings(globalSettings)
.settings(
crossScalaVersions := Seq("2.11.8", "2.12.4"),
releaseCrossBuild := true,
name := "leaflet-pm",
npmDeps in Compile += Dep("leaflet.pm", "0.25.0", List("leaflet.pm.min.js"), true)
) dependsOn (`leaflet-facade`) enablePlugins (ExecNpmPlugin)


lazy val buildExample = taskKey[Unit]("build")
lazy val example = project.in(file("example"))
.settings(
crossScalaVersions := Seq("2.11.8", "2.12.4"),
releaseCrossBuild := true,
publishArtifact := false,
name := "leaflet-example",
publish := {},
buildExample := {
val exampleTarget = (target in Compile).value
val exampleResource = (resourceDirectory in Compile).value
val buildJS = (fullOptJS in Compile).value

// Copy js and deps files and resource directory in exemple target
IO.copyFile(buildJS.data, exampleTarget / "js/leaflet-facade.js")
IO.copyFile(dependencyFile.value, exampleTarget / "js/leaflet-facade-deps.js")
IO.copyDirectory(exampleResource, exampleTarget)
}) enablePlugins (ExecNpmPlugin) dependsOn(`leaflet-pm`, `leaflet-draw`)
9 changes: 0 additions & 9 deletions example/leaflet-facade-jsdeps.js

This file was deleted.

82 changes: 0 additions & 82 deletions example/leaflet-facade-opt.js

This file was deleted.

122 changes: 122 additions & 0 deletions example/src/main/resources/css/leaflet.pm.css

Large diffs are not rendered by default.

File renamed without changes.
9 changes: 5 additions & 4 deletions example/index.html → example/src/main/resources/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,18 @@
<meta charset="UTF-8">
<title>Leaflet Facade Demo</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.0-rc.2/leaflet.css">
<link rel="stylesheet" type="text/css" href="./styles.css">
<link rel="stylesheet" type="text/css" href="css/styles.css">
<link rel="stylesheet" type="text/css" href="css/leaflet.pm.css">
</head>
<body>

<div id="demo-map"></div>

<script type="text/javascript" src="./leaflet-facade-jsdeps.js"></script>
<script type="text/javascript" src="./leaflet-facade-opt.js"></script>
<script type="text/javascript" src="js/leaflet-facade.js"></script>
<script type="text/javascript" src="js/leaflet-facade-deps.js"></script>

<script type="text/javascript">
demo.LeafletExample().main();
example();
</script>
</body>

Expand Down
13 changes: 10 additions & 3 deletions example/src/main/scala/demo/LeafletExample.scala
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
package demo


import com.cibo.leaflet.{LatLng, Leaflet}
import com.cibo.leaflet.pm._
import com.cibo.leaflet.pm.PM._
import com.cibo.leaflet._

import scala.scalajs.js
import scala.scalajs.js.annotation.JSExportTopLevel


object LeafletExample extends js.JSApp {
object LeafletExample {

import js.JSConverters._

def main(): Unit = {
@JSExportTopLevel("example")
def example(): Unit = {

val leafletMap = Leaflet.map("demo-map").setView(LatLng(51.505, -0.09), 13)

Expand All @@ -25,5 +29,8 @@ object LeafletExample extends js.JSApp {
).toJSArray

Leaflet.polygon(js.Array(coords)).addTo(leafletMap)

// PM
leafletMap.pm.addControls(ToolbarOptions.drawPolygon(false).drawMarker(true))
}
}
159 changes: 159 additions & 0 deletions leaflet-pm/src/main/scala/com/cibo/leaflet/Pm.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
package com.cibo.leaflet.pm

import scala.scalajs.js
import js.annotation._
import com.cibo.leaflet._

object PM {

// Monkey patching
@js.native
trait Mapify extends LeafletMap {
def pm: Map = js.native
}

// Monkey patching with implicit conversion
implicit def leafmap2Mapify(jq: LeafletMap): Mapify = jq.asInstanceOf[Mapify]
}

@JSGlobal
@js.native
class Map extends js.Object {
def addControls(options: js.UndefOr[ToolbarOptions]): Unit = js.native

def enableDraw(shape: String, options: js.UndefOr[DrawOptions]): Unit = js.native

def disableDraw(shape: String): Unit = js.native

def setPathOptions(options: PathOptions): Unit = js.native

def toggleRemoval(enabled: Boolean): Unit = js.native

def globalEditEnabled(): Boolean = js.native

def toggleGlobalEditMode(options: js.UndefOr[EditOptions]): Unit = js.native

// var Draw: Draw = js.native
}

@JSGlobal
@js.native
class ToolbarOptions extends js.Object

object ToolbarOptions extends ToolBarOptionsBuilder(noOpts)

class ToolBarOptionsBuilder(val dict: OptMap)
extends JSOptionBuilder[ToolbarOptions, ToolBarOptionsBuilder](
new ToolBarOptionsBuilder(_)) {

def position(v: String): ToolBarOptionsBuilder = jsOpt("position", v)

def drawMarker(v: Boolean): ToolBarOptionsBuilder = jsOpt("drawMarker", v)

def drawPolygon(v: Boolean): ToolBarOptionsBuilder = jsOpt("drawPolygon", v)

def drawPolyline(v: Boolean): ToolBarOptionsBuilder = jsOpt("drawPolyline", v)

def editPolygon(v: Boolean): ToolBarOptionsBuilder = jsOpt("editPolygon", v)

def deleteLayer(v: Boolean): ToolBarOptionsBuilder = jsOpt("deleteLayer", v)
}

@JSGlobal
@js.native
class DrawOptions extends js.Object

object DrawOptions extends DrawOptionsBuilder(noOpts)

class DrawOptionsBuilder(val dict: OptMap)
extends JSOptionBuilder[DrawOptions, DrawOptionsBuilder](
new DrawOptionsBuilder(_)) {
def templineStyle(v: PathOptions): DrawOptionsBuilder = jsOpt("templineStyle", v)

def hintlineStyle(v: PathOptions): DrawOptionsBuilder = jsOpt("hintlineStyle", v)

def pathOptions(v: PathOptions): DrawOptionsBuilder = jsOpt("pathOptions", v)
}

@JSGlobal
@js.native
class EditOptions extends js.Object

object EditOptions extends EditOptionsBuilder(noOpts)

class EditOptionsBuilder(val dict: OptMap)
extends JSOptionBuilder[EditOptions, EditOptionsBuilder](
new EditOptionsBuilder(_)) {
def draggable(v: PathOptions): EditOptionsBuilder = jsOpt("draggable", v)

def snappable(v: PathOptions): EditOptionsBuilder = jsOpt("snappable", v)

def snapDistance(v: PathOptions): EditOptionsBuilder = jsOpt("snapDistance", v)
}

package Edit {

@JSGlobal
@js.native
class Line extends js.Object{
def enabled: Boolean = js.native
}

object Line extends LineBuilder(noOpts)

class LineBuilder(val dict: OptMap)
extends JSOptionBuilder[Line, LineBuilder](
new LineBuilder(_)) {
def enable(v: js.UndefOr[EditOptions]): LineBuilder = jsOpt("enable", v)

def disable(v: js.UndefOr[Layer]): LineBuilder = jsOpt("disable", v)

def toggleEdit(v: js.UndefOr[EditOptions]): LineBuilder = jsOpt("toggleEdit", v)
}

@JSGlobal
@js.native
class Marker extends js.Object{
def enabled: Boolean = js.native
}

object Marker extends MarkerBuilder(noOpts)

class MarkerBuilder(val dict: OptMap)
extends JSOptionBuilder[Marker, MarkerBuilder](
new MarkerBuilder(_)) {

def enable(v: js.UndefOr[EditOptions]): MarkerBuilder = jsOpt("enable", v)

def disable(): MarkerBuilder = jsOpt("disable", js.undefined)

def toggleEdit(v: js.UndefOr[EditOptions]): MarkerBuilder = jsOpt("toggleEdit", v)
}

@JSGlobal
@js.native
class LayerGroup extends js.Object {

def findLayers(): js.Array[Layer] = js.native

def dragging(): Boolean = js.native

def getOptions(): EditOptions = js.native
}

object LayerGroup extends LayerGroupBuilder(noOpts)

class LayerGroupBuilder(val dict: OptMap)
extends JSOptionBuilder[LayerGroup, LayerGroupBuilder](
new LayerGroupBuilder(_)) {

def enable(v: js.UndefOr[EditOptions]): LayerGroupBuilder = jsOpt("enable", v)

def disable(): LayerGroupBuilder = jsOpt("disable", js.undefined)

def toggleEdit(v: js.UndefOr[EditOptions]): LayerGroupBuilder = jsOpt("toggleEdit", v)

def enabled(v: Boolean): LayerGroupBuilder = jsOpt("enabled", v)
}

}
4 changes: 4 additions & 0 deletions leaflet/src/main/scala/com/cibo/leaflet/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

package com.cibo

import scalajs.js

package object leaflet {

/**
Expand All @@ -19,4 +21,6 @@ package object leaflet {
type OptMap = scala.collection.Map[String, Any]

val noOpts = Map.empty[String, Any]

implicit def jsOptionBuilderToUndefOr[A <: js.Object ,B <: JSOptionBuilder[A, _]](builder: JSOptionBuilder[A, B]): js.UndefOr[A] = builder.build
}
5 changes: 4 additions & 1 deletion project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
resolvers += Resolver.sonatypeRepo("releases")

addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.25")
addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.0.0")
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.9")
addSbtPlugin("org.foundweekends" % "sbt-bintray" % "0.5.4")
addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")
addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")
addSbtPlugin("fr.iscpif" % "scalajs-execnpm" % "0.1")

0 comments on commit 0739947

Please sign in to comment.