{"__browser":{"country":"US","device":"unknown_device","mobile":false,"name":"unknown browser","platform":"unknown_platform","version":"0"},"__constants":{},"__CPDATA":{"domain_iframe":"https://cdpn.io","environment":"production","host":"codepen.io","iframe_allow":"accelerometer; ambient-light-sensor; camera; display-capture; encrypted-media; geolocation; gyroscope; microphone; midi; payment; vr; web-share","iframe_sandbox":"allow-forms allow-modals allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-top-navigation-by-user-activation allow-downloads allow-presentation"},"__graphql":{"data":{"data":{"sessionUser":{"id":"VoDkNZ","name":"Captain Anonymous","title":"Captain Anonymous","avatar":"https://assets.codepen.io/t-1/user-default-avatar.jpg?format=auto&version=0","currentContext":{"id":"VoDkNZ","title":"Captain Anonymous","name":"Captain Anonymous","avatar":"https://assets.codepen.io/t-1/user-default-avatar.jpg?format=auto&version=0","username":"anon","__typename":"User"},"currentTeamId":null,"username":"anon","admin":false,"anon":true,"pro":false,"verified":false,"teams":[],"__typename":"User"}}},"url":"https://codepen.io/graphql","api":"cprails"},"__user":{"anon":true,"base_url":"/anon/","cohorts":[],"current_team_hashid":null,"current_team_id":0,"hashid":"VoDkNZ","id":1,"itemType":"user","name":"Captain Anonymous","paid":false,"tier":0,"username":"anon","created_at":null,"email_verified":null,"collections_count":0,"collections_private_count":0,"followers_count":0,"followings_count":0,"pens_count":0,"pens_private_count":0,"projects_count":0,"projects_private_count":0},"__firebase":{"config":{"apiKey":"AIzaSyBgLAe7N_MdFpuVofMkcQLGwwhUu5tuxls","authDomain":"codepen-store-production.firebaseapp.com","databaseURL":"https://codepen-store-production.firebaseio.com","disabled":false,"projectId":"codepen-store-production"},"token":"eyJhbGciOiJSUzI1NiJ9.eyJhdWQiOiJodHRwczovL2lkZW50aXR5dG9vbGtpdC5nb29nbGVhcGlzLmNvbS9nb29nbGUuaWRlbnRpdHkuaWRlbnRpdHl0b29sa2l0LnYxLklkZW50aXR5VG9vbGtpdCIsImNsYWltcyI6eyJvd25lcklkIjoiVm9Ea05aIiwiYWRtaW4iOmZhbHNlfSwiZXhwIjoxNjk1NTY1NTQ0LCJpYXQiOjE2OTU1NjE5NDQsImlzcyI6ImZpcmViYXNlLWFkbWluc2RrLThva3lsQGNvZGVwZW4tc3RvcmUtcHJvZHVjdGlvbi5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsInN1YiI6ImZpcmViYXNlLWFkbWluc2RrLThva3lsQGNvZGVwZW4tc3RvcmUtcHJvZHVjdGlvbi5pYW0uZ3NlcnZpY2VhY2NvdW50LmNvbSIsInVpZCI6IlZvRGtOWiJ9.zh5Yrg3gMjRK_mmtlZzxNjDHogYGCpMXUwwzPfl4zTr3F9FU417WnzA2mmQWA_hncRoRzYDLpc0DUisA48okcKJxZsuqyMUcrh3RJREurwMWa7W_761lbSxdP2QhVpsqWfRhz8lyxYc2AbuEZZOD3T1nspI5bHsvIPh60BdGnfw0i63ZF8kzoXalO2fXDpeNp8IpanHf303t0IBtUHQ7IEpFjGKvuvStFJwWnBxb3D15Y5c06Dagbn-fRj0_Jc9i76ACIQYgJW4TqHnUFQkD3HIVp16DjgVGJAsmev-hahEq2gLHuc7DXy73DWdC-Fm73uBhZd9grPD-N-2RW0eFMw"},"__pay_stripe_public_key":"pk_live_2GndomDfiklqpSNQn8FrGuwZSMIMzha7DkLJqlYe7IR0ihKAlKdiHg68JJc5eVPt68rzAjzAAVXcUwjySHRCsgjQQ00gtRBUFNH","__pay_braintree_env":"production","__item":"{\"id\":43475504,\"user_id\":265602,\"html\":\" <div id=\\\"container\\\"><\\/div>\\n\",\"css\":\"body {\\n\\tmargin: 0;\\n\\tpadding: 0;\\n\\toverflow: hidden;\\n\\tbackground-color: #f0f0f0;\\n}\\n\",\"js\":\"var width = window.innerWidth;\\nvar height = window.innerHeight;\\n\\nvar stage = new Konva.Stage({\\n\\tcontainer: \\\"container\\\",\\n\\twidth: width,\\n\\theight: height\\n});\\n\\nvar layer = new Konva.Layer();\\n\\nstage.add(layer);\\n\\nvar tempLayer = new Konva.Layer();\\nstage.add(tempLayer);\\n\\nvar text = new Konva.Text({\\n\\tfill: \\\"black\\\"\\n});\\nlayer.add(text);\\n\\nvar star;\\nfor (var i = 0; i < 10; i++) {\\n\\tstar = new Konva.Star({\\n\\t\\tx: stage.width() * Math.random(),\\n\\t\\ty: stage.height() * Math.random(),\\n\\t\\tfill: \\\"blue\\\",\\n\\t\\tnumPoints: 10,\\n\\t\\tinnerRadius: 20,\\n\\t\\touterRadius: 25,\\n\\t\\tdraggable: true,\\n\\t\\tname: \\\"star \\\" + i,\\n\\t\\tshadowOffsetX: 5,\\n\\t\\tshadowOffsetY: 5\\n\\t});\\n\\tlayer.add(star);\\n}\\n\\nlayer.draw();\\n\\nstage.on(\\\"dragstart\\\", function(e) {\\n\\te.target.moveTo(tempLayer);\\n\\ttext.text(\\\"Moving \\\" + e.target.name());\\n\\tlayer.draw();\\n});\\n\\nvar previousShape;\\nstage.on(\\\"dragmove\\\", function(evt) {\\n\\tvar pos = stage.getPointerPosition();\\n\\tvar shape = layer.getIntersection(pos);\\n\\tif (previousShape && shape) {\\n\\t\\tif (previousShape !== shape) {\\n\\t\\t\\t\\/\\/ leave from old targer\\n\\t\\t\\tpreviousShape.fire(\\n\\t\\t\\t\\t\\\"dragleave\\\",\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ttype: \\\"dragleave\\\",\\n\\t\\t\\t\\t\\ttarget: previousShape,\\n\\t\\t\\t\\t\\tevt: evt.evt\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\ttrue\\n\\t\\t\\t);\\n\\n\\t\\t\\t\\/\\/ enter new targer\\n\\t\\t\\tshape.fire(\\n\\t\\t\\t\\t\\\"dragenter\\\",\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ttype: \\\"dragenter\\\",\\n\\t\\t\\t\\t\\ttarget: shape,\\n\\t\\t\\t\\t\\tevt: evt.evt\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\ttrue\\n\\t\\t\\t);\\n\\t\\t\\tpreviousShape = shape;\\n\\t\\t} else {\\n\\t\\t\\tpreviousShape.fire(\\n\\t\\t\\t\\t\\\"dragover\\\",\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\ttype: \\\"dragover\\\",\\n\\t\\t\\t\\t\\ttarget: previousShape,\\n\\t\\t\\t\\t\\tevt: evt.evt\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\ttrue\\n\\t\\t\\t);\\n\\t\\t}\\n\\t} else if (!previousShape && shape) {\\n\\t\\tpreviousShape = shape;\\n\\t\\tshape.fire(\\n\\t\\t\\t\\\"dragenter\\\",\\n\\t\\t\\t{\\n\\t\\t\\t\\ttype: \\\"dragenter\\\",\\n\\t\\t\\t\\ttarget: shape,\\n\\t\\t\\t\\tevt: evt.evt\\n\\t\\t\\t},\\n\\t\\t\\ttrue\\n\\t\\t);\\n\\t} else if (previousShape && !shape) {\\n\\t\\tpreviousShape.fire(\\n\\t\\t\\t\\\"dragleave\\\",\\n\\t\\t\\t{\\n\\t\\t\\t\\ttype: \\\"dragleave\\\",\\n\\t\\t\\t\\ttarget: previousShape,\\n\\t\\t\\t\\tevt: evt.evt\\n\\t\\t\\t},\\n\\t\\t\\ttrue\\n\\t\\t);\\n\\t\\tpreviousShape = undefined;\\n\\t}\\n});\\nstage.on(\\\"dragend\\\", function(e) {\\n\\tvar pos = stage.getPointerPosition();\\n\\tvar shape = layer.getIntersection(pos);\\n\\tif (shape) {\\n\\t\\tpreviousShape.fire(\\n\\t\\t\\t\\\"drop\\\",\\n\\t\\t\\t{\\n\\t\\t\\t\\ttype: \\\"drop\\\",\\n\\t\\t\\t\\ttarget: previousShape,\\n\\t\\t\\t\\tevt: e.evt\\n\\t\\t\\t},\\n\\t\\t\\ttrue\\n\\t\\t);\\n\\t}\\n\\tpreviousShape = undefined;\\n\\te.target.moveTo(layer);\\n\\tlayer.draw();\\n\\ttempLayer.draw();\\n});\\n\\nstage.on(\\\"dragenter\\\", function(e) {\\n\\te.target.fill(\\\"green\\\");\\n\\ttext.text(\\\"dragenter \\\" + e.target.name());\\n\\tlayer.draw();\\n});\\n\\nstage.on(\\\"dragleave\\\", function(e) {\\n\\te.target.fill(\\\"blue\\\");\\n\\ttext.text(\\\"dragleave \\\" + e.target.name());\\n\\tlayer.draw();\\n});\\n\\nstage.on(\\\"dragover\\\", function(e) {\\n\\ttext.text(\\\"dragover \\\" + e.target.name());\\n\\tlayer.draw();\\n});\\n\\nstage.on(\\\"drop\\\", function(e) {\\n\\te.target.fill(\\\"red\\\");\\n\\ttext.text(\\\"drop \\\" + e.target.name());\\n\\tlayer.draw();\\n});\\n\",\"html_pre_processor\":\"none\",\"css_pre_processor\":\"none\",\"js_pre_processor\":\"none\",\"html_classes\":\"\",\"css_starter\":\"neither\",\"js_library\":null,\"created_at\":\"2020-03-18T20:27:59.000Z\",\"updated_at\":\"2020-03-18T20:36:09.000Z\",\"title\":\"Drag n drop (drop events)\",\"description\":\"\",\"slug_hash\":\"XWbYygV\",\"head\":\"\",\"private\":false,\"slug_hash_private\":\"d2631b5d7efeee333d83aa9e59c36ebd\",\"has_animation\":false,\"team_id\":0,\"css_prefix\":\"neither\",\"template\":false,\"parent_id\":0,\"comments_count\":0,\"custom_screenshot_filename\":null,\"loves_count\":0,\"pick\":false,\"popularity_score\":0,\"views_count\":0,\"pick_visible_at\":null,\"cpid\":\"0170ef54-d498-7c39-bcf2-fa9d182e996a\",\"is_new_editor_pen\":false,\"pen_hash\":null,\"hashid\":\"XWbYygV\"}"}