UNPKG

twreporter-react

Version:

React-Redux site for The Reporter Foundation in Taiwan

447 lines (346 loc) 14.5 kB
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ ;(function(){ window.addEventListener("load", onLoad, false) var Interfaces = {} var Indent = "<span class='indent'> </span>" var Indent2 = "<span class='indent'> </span>" var e_interfaceList var e_interfaceName var e_interfaceBody var e_showIdl var e_showJavaScript var e_showJava var NativeTypes = "int any number boolean string void".split(" ") var IDLTools = require("weinre/common/IDLTools") if (!window.localStorage) { window.localStorage = { getItem: function() {}, setItem: function() {} } } //----------------------------------------------------------------------------- function onLoad() { e_interfaceList = document.getElementById("interface-list") e_interfaceName = document.getElementById("interface-name") e_interfaceBody = document.getElementById("interface-body") e_showIdl = document.getElementById("show-Idl") e_showJavaScript = document.getElementById("show-JavaScript") e_showJava = document.getElementById("show-Java") setUpShowCheckBoxes() populateInterfacesList(IDLTools.getIDLsMatching(/.*/)) } //----------------------------------------------------------------------------- function setUpShowCheckBoxes() { setUpShowCheckBox(e_showIdl, "show-Idl") setUpShowCheckBox(e_showJavaScript, "show-JavaScript") setUpShowCheckBox(e_showJava, "show-Java") } //----------------------------------------------------------------------------- function setUpShowCheckBox(element, key) { var value = localStorage.getItem(key) if (null == value) value = true else value = (value == "true") element.checked = value element.storageKey = key element.addEventListener("click", el_showCheckBoxClicked, false) } //----------------------------------------------------------------------------- function el_showCheckBoxClicked(event) { var element = event.target localStorage.setItem(element.storageKey, element.checked) reapplyDisplayStyle("." + element.storageKey, element.checked) } //----------------------------------------------------------------------------- function reapplyDisplayStyles() { reapplyDisplayStyle(".show-Idl", e_showIdl.checked) reapplyDisplayStyle(".show-JavaScript", e_showJavaScript.checked) reapplyDisplayStyle(".show-Java", e_showJava.checked) } //----------------------------------------------------------------------------- function reapplyDisplayStyle(className, value) { value = value ? "block" : "none" ;[].slice.call(document.querySelectorAll(className)).forEach(function(element) { element.style.display = value }) } //----------------------------------------------------------------------------- function populateInterfacesList(intfs) { e_interfaceList.innerHTML = "" fixedIntfs = [] intfs.forEach(function(intf){ fixedIntfs.push(intf.name) Interfaces[intf.name] = intf if (!intf.methods) intf.methods = [] if (!intf.attributes) intf.attributes = [] }) intfs = fixedIntfs intfs.sort() intfs.forEach(function(intf){ var a = document.createElement("a") a.href = "#" a.innerHTML = intf a.interfaceName = intf a.addEventListener("click", el_interfaceClicked, false) var li = document.createElement("li") li.appendChild(a) e_interfaceList.appendChild(li) }) } //----------------------------------------------------------------------------- function el_interfaceClicked(event) { event.preventDefault() showInterface(event.target.interfaceName) } //----------------------------------------------------------------------------- function showInterface(interfaceName) { var intf = Interfaces[interfaceName] e_interfaceName.innerHTML = interfaceName var html = [] showInterfaceIdl(intf, html) showInterfaceJavaScript(intf, html) showInterfaceJava(intf, html) e_interfaceBody.innerHTML = html.join("\n") reapplyDisplayStyles() } window.showInterface = showInterface //----------------------------------------------------------------------------- function showInterfaceIdl(intf, html) { html.push("<div class='show-Idl'><h3>IDL</h3><pre>") html.push("interface {") intf.methods.forEach(function(method){ showInterfaceIdlMethod(method, html) }) if (intf.attributes.length > 0) html.push("<table>") intf.attributes.forEach(function(attribute){ showInterfaceIdlAttribute(attribute, html) }) if (intf.attributes.length > 0) html.push("</table>") html.push("};") html.push("</pre></div>") } //----------------------------------------------------------------------------- function showInterfaceIdlMethod(method, html) { var line = "\n " var allParameters = method.parameters.concat(method.callbackParameters) line += getIdlType(method.returns) line += " <span class='methodName'>" + method.name + "</span> (" + getIdlParameterList(allParameters) + ");" html.push(line) } //----------------------------------------------------------------------------- function getIdlParameterList(parameters) { var result = [] if (parameters.length == 0) return ""; result.push("<table>") parameters.forEach(function(parameter, index, list){ var comma = (index == list.length-1) ? "" : "," result.push("<tr>") result.push("<td>" + Indent2 + (parameter.out ? "out" : "in")) result.push("<td>" + getIdlType(parameter.type)) result.push("<td>" + "<span class='parameterName tdIndent'>" + parameter.name + comma + "</span>") }) result.push("</table>") return result.join("\n") + Indent } //----------------------------------------------------------------------------- function getIdlType(type) { var result if (-1 == NativeTypes.indexOf(type.name)) { result = "<a href='javascript:showInterface(\"" + type.name + "\"); void(0);'>" + type.name + "</a>" } else { result = type.name } for (var i=0; i<type.rank; i++) { result += "[]" } return "<span class='type'>" + result + "</span>" } //----------------------------------------------------------------------------- IDL2Java = { string: "String", any: "Object", int: "Long", boolean: "Boolean", "": "?" } //----------------------------------------------------------------------------- function getJavaType(type) { var result if (-1 == NativeTypes.indexOf(type.name)) { result = "<a href='javascript:showInterface(\"" + type.name + "\"); void(0);'>" + type.name + "</a>" } else { result = IDL2Java[type.name] if (!result) { result = "?" + type.name + "?" console.log("Unable to translate IDL type to Java: " + type.name) } } for (var i=0; i<type.rank; i++) { result += "[]" } return "<span class='type'>" + result + "</span>" } //----------------------------------------------------------------------------- function showInterfaceIdlAttribute(attribute, html) { var line = "<tr><td>" + Indent + "attribute " line += getIdlType(attribute.type) line += "<td><span class='attributeName tdIndent'>" + attribute.name + "</span>;" html.push(line) } //----------------------------------------------------------------------------- function showInterfaceJavaScript(intf, html) { html.push("<div class='show-JavaScript'><h3>JavaScript</h3><pre>") var line = "" line += "\n//-----------------------------------------------------------------------------" line += "\n<span class='interfaceName'>class " + intf.name + "</span>" html.push(line) intf.methods.forEach(function(method){ showInterfaceJavaScriptMethod(intf, method, html) }) html.push("</pre></div>") } //----------------------------------------------------------------------------- function showInterfaceJavaScriptMethod(intf, method, html) { var line = "" line += "\n//-----------------------------------------------------------------------------" line += "\n<span class='methodName'>method " + method.name + "</span>(" + getJavaScriptParameterListSimple(method.parameters, method.returns) + ")" line += "\n // callback: function(" + getJavaScriptCallbackParameterListSimple(method.callbackParameters) + ")" line += "\n Weinre.notImplemented(arguments.callee.signature)" line += "\n" html.push(line) } //----------------------------------------------------------------------------- function getJavaScriptParameterList(parameters, returnType) { var result = [] result.push("<table>") parameters.forEach(function(parameter){ result.push("<tr>") result.push("<td>" + Indent2 + "<span class='parameterName'>" + parameter.name + ",</span>") result.push("<td><span class='tdIndent'>// " + getIdlType(parameter.type) + "</span>") }) result.push("<tr>") result.push("<td>" + Indent2 + "<span class='parameterName'>callback</span>") result.push("<td><span class='tdIndent'>// function(error, " + getIdlType(returnType) + ")</span>") result.push("</table>") return result.join("\n") + Indent } //----------------------------------------------------------------------------- function getJavaScriptParameterListSimple(parameters, returnType) { var result = [] parameters.forEach(function(parameter){ if (parameter.out) return result.push("<span class='type'>/*" + getIdlType(parameter.type) + "*/ </span><span class='parameterName'>" + parameter.name + "</span>") }) result.push("<span class='parameterName'>callback</span>") return result.join(", ") } //----------------------------------------------------------------------------- function getJavaScriptCallbackParameterListSimple(parameters) { var result = [] parameters.forEach(function(parameter){ if (!parameter.out) return result.push("/*" + getIdlType(parameter.type) + "*/ "+ parameter.name) }) return result.join(", ") } //----------------------------------------------------------------------------- function showInterfaceJava(intf, html) { html.push("<div class='show-Java'><h3>Java</h3><pre>") intf.methods.forEach(function(method){ showInterfaceJavaMethod(intf, method, html) }) html.push("</pre></div>") } //----------------------------------------------------------------------------- function showInterfaceJavaMethod(intf, method, html) { var line = "" line += "\n /**" line += "\n * " line += "\n */" line += "\n <span class='methodName'>public void " + method.name + "</span>(" + getJavaParameterListSimple(method.parameters, method.returns) + ") throws IOException {" line += "\n Main.warn(getClass().getName() + \"." + method.name + "() not implemented\");" line += "\n" line += "\n channel.sendCallback(\"" + intf.name + "\", callbackId" + getJavaCallbackParameterListSimple(method.callbackParameters) + ");" line += "\n }" line += "\n" html.push(line) } //----------------------------------------------------------------------------- function getJavaParameterList(parameters, returnType) { var result = [] result.push("<table>") parameters.forEach(function(parameter){ result.push("<tr>") result.push("<td>" + Indent2 + "<span class='parameterName'>" + parameter.name + ",</span>") result.push("<td><span class='tdIndent'>// " + getIdlType(parameter.type) + "</span>") }) result.push("<tr>") result.push("<td>" + Indent2 + "<span class='parameterName'>callback</span>") result.push("<td><span class='tdIndent'>// function(error, " + getIdlType(returnType) + ")</span>") result.push("</table>") return result.join("\n") + Indent } //----------------------------------------------------------------------------- function getJavaParameterListSimple(parameters, returnType) { var result = [] result.push("<span class='type'>Channel</span> <span class='parameterName'>channel</span>") parameters.forEach(function(parameter){ if (parameter.out) return result.push("<span class='type'>" + getJavaType(parameter.type) + " </span><span class='parameterName'>" + parameter.name + "</span>") }) result.push("<span class='type'>String</span> <span class='parameterName'>callbackId</span>") return result.join(", ") } //----------------------------------------------------------------------------- function getJavaCallbackParameterListSimple(parameters) { var result = [] parameters.forEach(function(parameter){ if (!parameter.out) return result.push("/*" + getJavaType(parameter.type) + " " + parameter.name + "*/ (Object) null") }) result = result.join(", ") if (result != "") result = ", " + result return result } //----------------------------------------------------------------------------- function toArray(arrayLike) { return [].slice.call(arrayLike) } //----------------------------------------------------------------------------- ExBreak = new Error("breaks out of loops") //----------------------------------------------------------------------------- function exBreak() { throw ExBreak } //----------------------------------------------------------------------------- function allowExBreak(func) { try { func.call() } catch(e) { if (e == ExBreak) return throw e } } //----------------------------------------------------------------------------- })();