Coverage Summary for Class: JQueryOnReceiver (kweb.plugins.jqueryCore)

Class Method, % Branch, % Line, % Instruction, %
JQueryOnReceiver 0% (0/16) 0% (0/24) 0% (0/214)
JQueryOnReceiver$event$1 0% (0/1) 0% (0/1) 0% (0/5)
JQueryOnReceiver$event$2 0% (0/1) 0% (0/2) 0% (0/12)
Total 0% (0/18) 0% (0/27) 0% (0/231)


 package kweb.plugins.jqueryCore
 
 import kotlinx.serialization.json.Json
 import kotlinx.serialization.json.JsonElement
 import kotlinx.serialization.json.JsonPrimitive
 import kotlinx.serialization.serializer
 import kweb.html.events.MouseEvent
 import kweb.util.random
 import java.util.*
 import kotlin.reflect.full.memberProperties
 
 /**
  * Created by ian on 2/22/17.
  */
 
 open class JQueryOnReceiver(val parent: JQueryReceiver) {
     fun event(event: String, returnEventFields: Set<String> = Collections.emptySet(), callback: (JsonElement) -> Unit): JQueryReceiver {
         val callbackId = Math.abs(random.nextInt())
         val eventObject = "{" + returnEventFields.map { "\"$it\" : event.$it" }.joinToString(separator = ", ") + "}"
         val js = "${parent.selectorExpression}.on(${JsonPrimitive(event)}, function(event) {callbackWs({}, $eventObject);})"
         parent.webBrowser.callJsFunctionWithCallback(js, callbackId, callback = { payload ->
             callback.invoke(payload)
         }, JsonPrimitive(callbackId))
         return parent
     }
 
     inline fun <reified T : Any> event(eventName: String, crossinline callback: (T) -> Unit): JQueryReceiver {
         // TODO: Should probably cache this rather than do the reflection every time
         val eventPropertyNames = T::class.memberProperties.map { it.name }.toSet()
 
         val deserializer = serializer<T>()
         event(eventName, eventPropertyNames) { propertiesAsElement ->
             val props: T = Json.decodeFromJsonElement(deserializer, propertiesAsElement)
             callback(props)
         }
         return parent
     }
 
     // From http://www.w3schools.com/jquery/jquery_ref_events.asp, incomplete
     fun blur(callback: (MouseEvent) -> Unit) = event("blur", callback = callback)
     fun click(callback: (MouseEvent) -> Unit) = event("click", callback = callback)
     fun dblclick(callback: (MouseEvent) -> Unit) = event("dblclick", callback = callback)
     fun focus(callback: (MouseEvent) -> Unit) = event("focus", callback = callback)
     fun focusin(callback: (MouseEvent) -> Unit) = event("focusin", callback = callback)
     fun focusout(callback: (MouseEvent) -> Unit) = event("focusout", callback = callback)
     fun hover(callback: (MouseEvent) -> Unit) = event("hover", callback = callback)
     fun mouseup(callback: (MouseEvent) -> Unit) = event("mouseup", callback = callback)
     fun mousedown(callback: (MouseEvent) -> Unit) = event("mousedown", callback = callback)
     fun mouseenter(callback: (MouseEvent) -> Unit) = event("mouseenter", callback = callback)
     fun mouseleave(callback: (MouseEvent) -> Unit) = event("mouseleave", callback = callback)
     fun mousemove(callback: (MouseEvent) -> Unit) = event("mousemove", callback = callback)
 }