/// <summary> /// This is a javascript application. /// </summary> /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param> public Application(IApp page) { // 1e40:01:01 RewriteToAssembly error: System.MissingMethodException: Method not found: 'Void ScriptCoreLib.JavaScript.DOM.IWindow.add_onframe(System.Action`1<Int32>)'. #if chrome_works_again #region AtFormCreated FormStyler.AtFormCreated = s => { s.Context.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; var x = new ChromeTCPServerWithFrameNone.HTML.Pages.AppWindowDrag().AttachTo(s.Context.GetHTMLTarget()); }; #endregion // chrome 31 wont load view-source // chrome 33 shows black window. nice. #region ChromeTCPServer dynamic self = Native.self; dynamic self_chrome = self.chrome; object self_chrome_socket = self_chrome.socket; if (self_chrome_socket != null) { chrome.Notification.DefaultTitle = "Droplet"; //chrome.Notification.DefaultIconUrl = new HTML.Images.FromAssets.Preview().src; ChromeTCPServer.TheServerWithStyledForm.Invoke( AppSource.Text, AtFormCreated: FormStyler.AtFormCreated ); return; } #endregion #endif #region clouds new WebGLClouds.HTML.Pages.Default().With( layout => { layout.body.AttachTo(page.clouds); new WebGLClouds.Application(layout); } ); #endregion page.header.style.backgroundColor = ""; page.header.css.style.transition = "background-color 200ms linear"; page.header.css.style.backgroundColor = "rgba(255, 255, 0, 0)"; //page.header.css.style.backgroundColor = "rgba(255, 255, 0, 0.2)"; page.header.css.hover.style.backgroundColor = "rgba(255, 255, 0, 1.0)"; Native.window.onframe += delegate { if (Native.document.body.scrollTop == 0) { page.header.css.style.backgroundColor = "rgba(255, 255, 0, 0)"; } else { page.header.css.style.backgroundColor = "rgba(0, 0, 0, 0.3)"; } }; var oo = new List <THREE.Object3D>(); var window = Native.window; var camera = new THREE.PerspectiveCamera( 45, page.header.clientWidth / (double)page.header.clientHeight, 1, 2000 ); camera.position.z = 400; // scene var scene = new THREE.Scene(); var ambient = new THREE.AmbientLight(0x101030); scene.add(ambient); var directionalLight = new THREE.DirectionalLight(0xffeedd); directionalLight.position.set(0, 0, 1); scene.add(directionalLight); var renderer = new THREE.WebGLRenderer(); //renderer.domElement.AttachToDocument(); renderer.domElement.AttachTo(page.header); renderer.setSize(page.header.clientWidth, page.header.clientHeight); //renderer.setSize(window.Width, window.Height); //renderer.domElement.style.SetLocation(0, 0); var mouseX = 0; var mouseY = 0; var st = new Stopwatch(); st.Start(); Native.window.onframe += delegate { oo.WithEach( x => x.rotation.y = st.ElapsedMilliseconds * 0.001 ); camera.position.x += (mouseX - camera.position.x) * .05; camera.position.y += (-mouseY - camera.position.y) * .05; camera.lookAt(scene.position); renderer.render(scene, camera); }; Native.window.onresize += delegate { camera.aspect = page.header.clientWidth / (double)page.header.clientHeight; camera.updateProjectionMatrix(); //renderer.setSize(window.Width, window.Height); renderer.setSize(page.header.clientWidth, page.header.clientHeight); }; var data = Book1.GetDataSet(); #region bind Func <string, IHTMLElement, DataGridView> bind = (DataMember, c) => { var g = new DataGridView { BackgroundColor = Color.Transparent, // does this work? DefaultCellStyle = new DataGridViewCellStyle { SelectionBackColor = Color.Black, SelectionForeColor = Color.Yellow, //BackColor = Color.Transparent //BackColor = Color.FromArgb(0x05, 0, 0, 0) BackColor = Color.FromArgb(0x3f, 255, 255, 255) }, ColumnHeadersDefaultCellStyle = new DataGridViewCellStyle { BackColor = Color.FromArgb(0x8f, 255, 255, 255) }, SelectionMode = DataGridViewSelectionMode.FullRowSelect, AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill, // do we have a test for this? AllowUserToAddRows = false, //AllowUserToDeleteRows = false, RowHeadersVisible = false, // cannot hide column headers yet // script: error JSC1000: No implementation found for this native method, please implement [System.Windows.Forms.DataGridView.set_ColumnHeadersVisible(System.Boolean)] //ColumnHeadersVisible = false, DataSource = data, DataMember = DataMember, }; // this should be the one that maximizes itself onto the parent which is supposed to be absolute in size //g.GetHTMLTarget().With( // div => // { // //div.style.reset(); // // no scrollbars, thanks // div.style.overflow = IStyle.OverflowEnum.hidden; // (div.style as dynamic).zIndex = ""; // div.style.position = IStyle.PositionEnum.relative; // div.style.left = ""; // div.style.top = ""; // div.style.right = ""; // } //); c.style.position = IStyle.PositionEnum.relative; c.style.height = "20em"; c.Clear(); g.AttachControlTo(c); return(g); }; #endregion bind("Assets", page.assets); bind("Transactions", page.transactions).ReadOnly = true; // script: error JSC1000: No implementation found for this native method, please implement [System.Data.DataTableCollection.get_Item(System.String)] var data_Assets = data.Tables["Assets"]; var data_Transactions = data.Tables["Transactions"]; #region data_Assets_NewRow Action <DataRow> data_Assets_NewRow = SourceRow => { var r = new Random(); new sack_of_gold2().Source.Task.ContinueWithResult( o => { o.position.y = -80; scene.add(o); oo.Add(o); o.position.x = r.Next(-250, 250); o.position.z = r.Next(-400, 200); (o as dynamic).scale = new THREE.Vector3(0.5, 0.5, 0.5); data_Assets.RowDeleting += (sender, e) => { if (SourceRow != e.Row) { return; } scene.remove(o); oo.Remove(o); data_Transactions.Rows.Add( "now", "item removed -" + SourceRow["Net worth"] ); }; } ); }; #endregion data_Assets.Rows.AsEnumerable().WithEach(data_Assets_NewRow); // "X:\jsc.svn\examples\javascript\DropFileIntoSQLite\DropFileIntoSQLite.sln" // X:\jsc.svn\examples\javascript\DragDataTableIntoCSVFile\DragDataTableIntoCSVFile\Application.cs #region ondragstart page.header.ondragstart += e => { data_Assets.Rows.AsEnumerable().FirstOrDefault().With( SourceRow => { // x:\jsc.svn\examples\javascript\dropfileintosqlite\dropfileintosqlite\application.cs data_Assets.Rows.Remove(SourceRow); //data_Assets.Rows.RemoveAt(0); var clipboard = new DataTable(); clipboard.Columns.AddRange( Enumerable.ToArray( from x in data_Assets.Columns.AsEnumerable() select new DataColumn { ColumnName = x.ColumnName } ) ); clipboard.Rows.Add( Enumerable.ToArray( from x in data_Assets.Columns.AsEnumerable() select SourceRow[x] ) ); e.dataTransfer.effectAllowed = "copy"; var clipboard_string = StringConversionsForDataTable.ConvertToString(clipboard); e.dataTransfer.setData(typeof(DataTable).Name, clipboard_string); } ); }; #endregion // X:\jsc.svn\market\javascript\Abstractatech.JavaScript.FileStorage\Abstractatech.JavaScript.FileStorage\Application.cs var dz = new DropZone(); var TimerHide = new ScriptCoreLib.JavaScript.Runtime.Timer( delegate { dz.body.Orphanize(); } ); #region ondragover Action <DragEvent> ondragover = evt => { evt.stopPropagation(); evt.preventDefault(); if (evt.dataTransfer.types.Contains(typeof(DataTable).Name.ToLower())) { evt.dataTransfer.dropEffect = "copy"; // Explicitly show this is a copy. dz.body.AttachTo(Native.document.documentElement); dz.bglayer.style.transition = "background-color 500ms linear"; dz.bglayer.style.backgroundColor = "rgba(0,0,0, 0.7)"; TimerHide.Stop(); } }; Native.Document.body.ondragover += ondragover; dz.Container.ondragover += ondragover; #endregion dz.Container.ondragleave += evt => { //Console.WriteLine("ondragleave"); //Console.WriteLine(" dz.Container.ondragleave"); TimerHide.StartTimeout(90); evt.stopPropagation(); evt.preventDefault(); }; Native.window.onblur += delegate { data_Transactions.Rows.Add( //"now", "item added +" + SourceRow["Net worth"] "now", "blur" ); }; Native.window.onfocus += delegate { data_Transactions.Rows.Add( //"now", "item added +" + SourceRow["Net worth"] "now", "focus" ); }; data_Assets_NewRow += SourceRow => { data_Transactions.Rows.Add( //"now", "item added +" + SourceRow["Net worth"] "now", "item added" ); }; data_Assets.TableNewRow += (sender, e) => { data_Assets_NewRow(e.Row); }; #region ondrop dz.Container.ondrop += evt => { //Console.WriteLine("ondrop"); TimerHide.StartTimeout(90); evt.stopPropagation(); evt.preventDefault(); if (evt.dataTransfer.items != null) { // X:\jsc.svn\examples\javascript\DragDataTableIntoCSVFile\DragDataTableIntoCSVFile\Application.cs evt.dataTransfer.items.AsEnumerable().Where( x => x.type.ToLower() == // let jsc type system sort it out? // how much reflection does jsc give us nowadays? typeof(DataTable).Name.ToLower() ).WithEach( async xx => { // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#dfnReturnLink-0 var DataTable_xml = await xx.getAsString(); var DataTable = StringConversionsForDataTable.ConvertFromString(DataTable_xml); DataTable.Rows.AsEnumerable().WithEach( SourceRow => { data_Assets.Rows.Add( Enumerable.ToArray( from x in data_Assets.Columns.AsEnumerable() select SourceRow[x] ) ); } ); } ); } }; #endregion }
/// <summary> /// This is a javascript application. /// </summary> /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param> public Application(IApp page = null) { // 20140704 no balls shown? // broken? // view-source:http://www.mrdoob.com/lab/javascript/beachballs/ //Action Toggle = DiagnosticsConsole.ApplicationContent.BindKeyboardToDiagnosticsConsole(); var origin = new THREE.Vector3(0, 15, 0); var isMouseDown = false; var renderer = new THREE.WebGLRenderer( new { antialias = true, alpha = false }); renderer.setClearColor(new THREE.Color(0x101010)); renderer.domElement.AttachToDocument(); // scene var camera = new THREE.PerspectiveCamera( 40, Native.window.aspect, 1, 1000 ); camera.position.x = -30; camera.position.y = 10; camera.position.z = 30; camera.lookAt(new THREE.Vector3(0, 10, 0)); #region AtResize Action AtResize = delegate { camera.aspect = (double)Native.window.aspect; camera.updateProjectionMatrix(); renderer.setSize(Native.window.Width, Native.window.Height); }; Native.window.onresize += delegate { AtResize(); }; AtResize(); #endregion var scene = new THREE.Scene(); var light = new THREE.HemisphereLight(0xffffff, 0x606060, 1.2); light.position.set(-10, 10, 10); scene.add(light); { var geometry = new THREE.CubeGeometry(20, 20, 20); var material = new THREE.MeshBasicMaterial( new { wireframe = true, opacity = 0.1, transparent = true }); var mesh = new THREE.Mesh(geometry, material); mesh.position.y = 10; scene.add(mesh); } var intersectionPlane = new THREE.Mesh(new THREE.PlaneGeometry(20, 20, 8, 8)); intersectionPlane.position.y = 10; intersectionPlane.visible = false; scene.add(intersectionPlane); // geometry var ballGeometry = new THREE.Geometry(); var ballMaterial = new THREE.MeshPhongMaterial( new __MeshPhongMaterialDictionary { vertexColors = THREE.FaceColors, specular = 0x808080, shininess = 2000 } ); // var colors = new[] { new THREE.Color( 0xe52b30 ), new THREE.Color( 0xe52b30 ), new THREE.Color( 0x2e1b6a ), new THREE.Color( 0xdac461 ), new THREE.Color( 0xf07017 ), new THREE.Color( 0x38b394 ), new THREE.Color( 0xeaf1f7 ) }; var amount = colors.Length; var geometryTop = new THREE.SphereGeometry(1, 5 * amount, 2, 0, Math.PI * 2.0, 0, 0.30); for (var j = 0; j < geometryTop.faces.Length; j++) { geometryTop.faces[j].color = colors[0]; } THREE.GeometryUtils.merge(ballGeometry, geometryTop); var geometryBottom = new THREE.SphereGeometry(1, 5 * amount, 2, 0, Math.PI * 2, Math.PI - 0.30, 0.30); for (var j = 0; j < geometryBottom.faces.Length; j++) { geometryBottom.faces[j].color = colors[0]; } THREE.GeometryUtils.merge(ballGeometry, geometryBottom); { var sides = amount - 1; var size = (Math.PI * 2) / sides; for (var i = 0; i < sides; i++) { var patch = new THREE.SphereGeometry(1, 5, 10, i * size, size, 0.30, Math.PI - 0.60); for (var j = 0; j < patch.faces.Length; j++) { patch.faces[j].color = colors[i + 1]; } THREE.GeometryUtils.merge(ballGeometry, patch); } } // physics var world = new CANNON.World(); world.broadphase = new CANNON.NaiveBroadphase(); world.gravity.set(0, -15, 0); world.solver.iterations = 7; world.solver.tolerance = 0.1; var groundShape = new CANNON.Plane(); var groundMaterial = new CANNON.Material(); var groundBody = new CANNON.RigidBody(0, groundShape, groundMaterial); groundBody.quaternion.setFromAxisAngle(new CANNON.Vec3(1, 0, 0), -Math.PI / 2.0); world.add(groundBody); var planeShapeXmin = new CANNON.Plane(); var planeXmin = new CANNON.RigidBody(0, planeShapeXmin, groundMaterial); planeXmin.quaternion.setFromAxisAngle(new CANNON.Vec3(0, 1, 0), Math.PI / 2.0); planeXmin.position.set(-10, 0, 0); world.add(planeXmin); var planeShapeXmax = new CANNON.Plane(); var planeXmax = new CANNON.RigidBody(0, planeShapeXmax, groundMaterial); planeXmax.quaternion.setFromAxisAngle(new CANNON.Vec3(0, 1, 0), -Math.PI / 2.0); planeXmax.position.set(10, 0, 0); world.add(planeXmax); var planeShapeYmin = new CANNON.Plane(); var planeZmin = new CANNON.RigidBody(0, planeShapeYmin, groundMaterial); planeZmin.position.set(0, 0, -10); world.add(planeZmin); var planeShapeYmax = new CANNON.Plane(); var planeZmax = new CANNON.RigidBody(0, planeShapeYmax, groundMaterial); planeZmax.quaternion.setFromAxisAngle(new CANNON.Vec3(0, 1, 0), Math.PI); planeZmax.position.set(0, 0, 10); world.add(planeZmax); var ballBodyMaterial = new CANNON.Material(); world.addContactMaterial(new CANNON.ContactMaterial(groundMaterial, ballBodyMaterial, 0.2, 0.5)); world.addContactMaterial(new CANNON.ContactMaterial(ballBodyMaterial, ballBodyMaterial, 0.2, 0.8)); var spheres = new Queue<THREE.Mesh>(); var bodies = new Queue<CANNON.RigidBody>(); Func<double> random = new Random().NextDouble; #region addBall Action<double, double, double> addBall = (x, y, z) => { x = Math.Max(-10, Math.Min(10, x)); y = Math.Max(5, y); z = Math.Max(-10, Math.Min(10, z)); var size = 1.25; var sphere = new THREE.Mesh(ballGeometry, ballMaterial); sphere.scale.multiplyScalar(size); //sphere.useQuaternion = true; scene.add(sphere); spheres.Enqueue(sphere); var sphereShape = new CANNON.Sphere(size); var sphereBody = new CANNON.RigidBody(0.1, sphereShape, ballBodyMaterial); sphereBody.position.set(x, y, z); var q = new { a = random() * 3.0, b = random() * 3.0, c = random() * 3.0, d = random() * 3.0 }; Console.WriteLine("addBall " + new { x, y, z, q }); //sphereBody.quaternion.set(q.a, q.b, q.c, q.d); world.add(sphereBody); bodies.Enqueue(sphereBody); }; #endregion for (var i = 0; i < 100; i++) { addBall( random() * 10 - 5, random() * 20, random() * 10 - 5 ); } // var projector = new THREE.Projector(); var ray = new THREE.Raycaster(); var mouse3D = new THREE.Vector3(); Native.Document.body.ontouchstart += e => { e.preventDefault(); isMouseDown = true; }; Native.Document.body.ontouchmove += e => { e.preventDefault(); }; Native.Document.body.ontouchend += e => { e.preventDefault(); isMouseDown = false; }; #region onmousemove Native.document.body.onmousedown += e => { e.preventDefault(); isMouseDown = true; }; Native.document.body.onmouseup += e => { e.preventDefault(); isMouseDown = false; if (e.MouseButton == IEvent.MouseButtonEnum.Middle) { if (Native.Document.pointerLockElement == Native.Document.body) { // cant requestFullscreen while pointerLockElement Console.WriteLine("exitPointerLock"); Native.Document.exitPointerLock(); Native.Document.exitFullscreen(); return; } Console.WriteLine("requestFullscreen"); Native.Document.body.requestFullscreen(); Native.Document.body.requestPointerLock(); return; } }; Native.document.body.onmousemove += e => { mouse3D.set( ((double)e.CursorX / (double)Native.window.Width) * 2 - 1, -((double)e.CursorY / (double)Native.window.Height) * 2 + 1, 0.5 ); projector.unprojectVector(mouse3D, camera); ray.set(camera.position, mouse3D.sub(camera.position).normalize()); var intersects = ray.intersectObject(intersectionPlane); if (intersects.Length > 0) { origin.copy(intersects[0].point); } }; #endregion #region removeBall Action removeBall = delegate { scene.remove(spheres.Dequeue()); world.remove(bodies.Dequeue()); }; #endregion var sw0 = Stopwatch.StartNew(); var sw = Stopwatch.StartNew(); //var time = Native.window.performance.now(); //var lastTime = Native.window.performance.now(); #region animate Action render = delegate { var delta = sw.ElapsedMilliseconds; sw.Restart(); //time = Native.window.performance.now(); camera.position.x = -Math.Cos(sw.ElapsedMilliseconds * 0.0001) * 40; camera.position.z = Math.Sin(sw.ElapsedMilliseconds * 0.0001) * 40; camera.lookAt(new THREE.Vector3(0, 10, 0)); intersectionPlane.lookAt(camera.position); world.step(delta * 0.001); //lastTime = time; for (var i = 0; i < spheres.Count; i++) { var sphere = spheres.ElementAt(i); var body = bodies.ElementAt(i); sphere.position.copy(body.position); sphere.quaternion.copy(body.quaternion); } renderer.render(scene, camera); }; Native.window.onframe += delegate { if (isMouseDown) { if (spheres.Count > 200) { removeBall(); } addBall( origin.x + (random() * 4.0 - 2), origin.y + (random() * 4.0 - 2), origin.z + (random() * 4.0 - 2) ); } render(); }; #endregion }
/// <summary> /// This is a javascript application. /// </summary> /// <param name="page">HTML document rendered by the web server which can now be enhanced.</param> public Application(IApp page) { // 1e40:01:01 RewriteToAssembly error: System.MissingMethodException: Method not found: 'Void ScriptCoreLib.JavaScript.DOM.IWindow.add_onframe(System.Action`1<Int32>)'. #if chrome_works_again #region AtFormCreated FormStyler.AtFormCreated = s => { s.Context.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; var x = new ChromeTCPServerWithFrameNone.HTML.Pages.AppWindowDrag().AttachTo(s.Context.GetHTMLTarget()); }; #endregion // chrome 31 wont load view-source // chrome 33 shows black window. nice. #region ChromeTCPServer dynamic self = Native.self; dynamic self_chrome = self.chrome; object self_chrome_socket = self_chrome.socket; if (self_chrome_socket != null) { chrome.Notification.DefaultTitle = "Droplet"; //chrome.Notification.DefaultIconUrl = new HTML.Images.FromAssets.Preview().src; ChromeTCPServer.TheServerWithStyledForm.Invoke( AppSource.Text, AtFormCreated: FormStyler.AtFormCreated ); return; } #endregion #endif #region clouds new WebGLClouds.HTML.Pages.Default().With( layout => { layout.body.AttachTo(page.clouds); new WebGLClouds.Application(layout); } ); #endregion page.header.style.backgroundColor = ""; page.header.css.style.transition = "background-color 200ms linear"; page.header.css.style.backgroundColor = "rgba(255, 255, 0, 0)"; //page.header.css.style.backgroundColor = "rgba(255, 255, 0, 0.2)"; page.header.css.hover.style.backgroundColor = "rgba(255, 255, 0, 1.0)"; Native.window.onframe += delegate { if (Native.document.body.scrollTop == 0) page.header.css.style.backgroundColor = "rgba(255, 255, 0, 0)"; else page.header.css.style.backgroundColor = "rgba(0, 0, 0, 0.3)"; }; var oo = new List<THREE.Object3D>(); var window = Native.window; var camera = new THREE.PerspectiveCamera( 45, page.header.clientWidth / (double)page.header.clientHeight, 1, 2000 ); camera.position.z = 400; // scene var scene = new THREE.Scene(); var ambient = new THREE.AmbientLight(0x101030); scene.add(ambient); var directionalLight = new THREE.DirectionalLight(0xffeedd); directionalLight.position.set(0, 0, 1); scene.add(directionalLight); var renderer = new THREE.WebGLRenderer(); //renderer.domElement.AttachToDocument(); renderer.domElement.AttachTo(page.header); renderer.setSize(page.header.clientWidth, page.header.clientHeight); //renderer.setSize(window.Width, window.Height); //renderer.domElement.style.SetLocation(0, 0); var mouseX = 0; var mouseY = 0; var st = new Stopwatch(); st.Start(); Native.window.onframe += delegate { oo.WithEach( x => x.rotation.y = st.ElapsedMilliseconds * 0.001 ); camera.position.x += (mouseX - camera.position.x) * .05; camera.position.y += (-mouseY - camera.position.y) * .05; camera.lookAt(scene.position); renderer.render(scene, camera); }; Native.window.onresize += delegate { camera.aspect = page.header.clientWidth / (double)page.header.clientHeight; camera.updateProjectionMatrix(); //renderer.setSize(window.Width, window.Height); renderer.setSize(page.header.clientWidth, page.header.clientHeight); }; var data = Book1.GetDataSet(); #region bind Func<string, IHTMLElement, DataGridView> bind = (DataMember, c) => { var g = new DataGridView { BackgroundColor = Color.Transparent, // does this work? DefaultCellStyle = new DataGridViewCellStyle { SelectionBackColor = Color.Black, SelectionForeColor = Color.Yellow, //BackColor = Color.Transparent //BackColor = Color.FromArgb(0x05, 0, 0, 0) BackColor = Color.FromArgb(0x3f, 255, 255, 255) }, ColumnHeadersDefaultCellStyle = new DataGridViewCellStyle { BackColor = Color.FromArgb(0x8f, 255, 255, 255) }, SelectionMode = DataGridViewSelectionMode.FullRowSelect, AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill, // do we have a test for this? AllowUserToAddRows = false, //AllowUserToDeleteRows = false, RowHeadersVisible = false, // cannot hide column headers yet // script: error JSC1000: No implementation found for this native method, please implement [System.Windows.Forms.DataGridView.set_ColumnHeadersVisible(System.Boolean)] //ColumnHeadersVisible = false, DataSource = data, DataMember = DataMember, }; // this should be the one that maximizes itself onto the parent which is supposed to be absolute in size //g.GetHTMLTarget().With( // div => // { // //div.style.reset(); // // no scrollbars, thanks // div.style.overflow = IStyle.OverflowEnum.hidden; // (div.style as dynamic).zIndex = ""; // div.style.position = IStyle.PositionEnum.relative; // div.style.left = ""; // div.style.top = ""; // div.style.right = ""; // } //); c.style.position = IStyle.PositionEnum.relative; c.style.height = "20em"; c.Clear(); g.AttachControlTo(c); return g; }; #endregion bind("Assets", page.assets); bind("Transactions", page.transactions).ReadOnly = true; // script: error JSC1000: No implementation found for this native method, please implement [System.Data.DataTableCollection.get_Item(System.String)] var data_Assets = data.Tables["Assets"]; var data_Transactions = data.Tables["Transactions"]; #region data_Assets_NewRow Action<DataRow> data_Assets_NewRow = SourceRow => { var r = new Random(); new sack_of_gold2().Source.Task.ContinueWithResult( o => { o.position.y = -80; scene.add(o); oo.Add(o); o.position.x = r.Next(-250, 250); o.position.z = r.Next(-400, 200); (o as dynamic).scale = new THREE.Vector3(0.5, 0.5, 0.5); data_Assets.RowDeleting += (sender, e) => { if (SourceRow != e.Row) return; scene.remove(o); oo.Remove(o); data_Transactions.Rows.Add( "now", "item removed -" + SourceRow["Net worth"] ); }; } ); }; #endregion data_Assets.Rows.AsEnumerable().WithEach(data_Assets_NewRow); // "X:\jsc.svn\examples\javascript\DropFileIntoSQLite\DropFileIntoSQLite.sln" // X:\jsc.svn\examples\javascript\DragDataTableIntoCSVFile\DragDataTableIntoCSVFile\Application.cs #region ondragstart page.header.ondragstart += e => { data_Assets.Rows.AsEnumerable().FirstOrDefault().With( SourceRow => { // x:\jsc.svn\examples\javascript\dropfileintosqlite\dropfileintosqlite\application.cs data_Assets.Rows.Remove(SourceRow); //data_Assets.Rows.RemoveAt(0); var clipboard = new DataTable(); clipboard.Columns.AddRange( Enumerable.ToArray( from x in data_Assets.Columns.AsEnumerable() select new DataColumn { ColumnName = x.ColumnName } ) ); clipboard.Rows.Add( Enumerable.ToArray( from x in data_Assets.Columns.AsEnumerable() select SourceRow[x] ) ); e.dataTransfer.effectAllowed = "copy"; var clipboard_string = StringConversionsForDataTable.ConvertToString(clipboard); e.dataTransfer.setData(typeof(DataTable).Name, clipboard_string); } ); }; #endregion // X:\jsc.svn\market\javascript\Abstractatech.JavaScript.FileStorage\Abstractatech.JavaScript.FileStorage\Application.cs var dz = new DropZone(); var TimerHide = new ScriptCoreLib.JavaScript.Runtime.Timer( delegate { dz.body.Orphanize(); } ); #region ondragover Action<DragEvent> ondragover = evt => { evt.stopPropagation(); evt.preventDefault(); if (evt.dataTransfer.types.Contains(typeof(DataTable).Name.ToLower())) { evt.dataTransfer.dropEffect = "copy"; // Explicitly show this is a copy. dz.body.AttachTo(Native.document.documentElement); dz.bglayer.style.transition = "background-color 500ms linear"; dz.bglayer.style.backgroundColor = "rgba(0,0,0, 0.7)"; TimerHide.Stop(); } }; Native.Document.body.ondragover += ondragover; dz.Container.ondragover += ondragover; #endregion dz.Container.ondragleave += evt => { //Console.WriteLine("ondragleave"); //Console.WriteLine(" dz.Container.ondragleave"); TimerHide.StartTimeout(90); evt.stopPropagation(); evt.preventDefault(); }; Native.window.onblur += delegate { data_Transactions.Rows.Add( //"now", "item added +" + SourceRow["Net worth"] "now", "blur" ); }; Native.window.onfocus += delegate { data_Transactions.Rows.Add( //"now", "item added +" + SourceRow["Net worth"] "now", "focus" ); }; data_Assets_NewRow += SourceRow => { data_Transactions.Rows.Add( //"now", "item added +" + SourceRow["Net worth"] "now", "item added" ); }; data_Assets.TableNewRow += (sender, e) => { data_Assets_NewRow(e.Row); }; #region ondrop dz.Container.ondrop += evt => { //Console.WriteLine("ondrop"); TimerHide.StartTimeout(90); evt.stopPropagation(); evt.preventDefault(); if (evt.dataTransfer.items != null) { // X:\jsc.svn\examples\javascript\DragDataTableIntoCSVFile\DragDataTableIntoCSVFile\Application.cs evt.dataTransfer.items.AsEnumerable().Where( x => x.type.ToLower() == // let jsc type system sort it out? // how much reflection does jsc give us nowadays? typeof(DataTable).Name.ToLower() ).WithEach( async xx => { // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#dfnReturnLink-0 var DataTable_xml = await xx.getAsString(); var DataTable = StringConversionsForDataTable.ConvertFromString(DataTable_xml); DataTable.Rows.AsEnumerable().WithEach( SourceRow => { data_Assets.Rows.Add( Enumerable.ToArray( from x in data_Assets.Columns.AsEnumerable() select SourceRow[x] ) ); } ); } ); } }; #endregion }