UNPKG

accessibility-developer-tools

Version:

This is a library of accessibility-related testing and utility code.

265 lines (231 loc) 6.52 kB
<!DOCTYPE html> <html> <!-- Copyright 2010 The Closure Library Authors. All Rights Reserved. Use of this source code is governed by the Apache License, Version 2.0. See the COPYING file for details. --> <head> <title>goog.fx.DragDrop</title> <meta charset="utf-8"> <script src="../base.js"></script> <script> goog.require('goog.fx.DragDrop'); goog.require('goog.fx.DragDropGroup'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); </script> <link rel="stylesheet" href="css/demo.css"> <style> body { margin: 10px; } ul { padding: 0px; } li { list-style: none; } li, div { font: menu; width: 20ex; border: 1px solid gray; margin: 1px; padding: 0px 2px 0px 2px; background: silver; } .source { cursor: move; -moz-user-select: none; } .drag { cursor: move; background: green; } .target { } #list2 { margin: 0px 30px 30px 30px; padding-left: 30px; } .foo { position: absolute; background: pink; padding: 5px; } </style> </head> <body> <h1>goog.fx.DragDrop</h1> List 1 (combined source/target, can be dropped on list 1, list 2, button 1 or button 2). <ul id="list1"> <li>Item 1.1</li> <li>Item 1.2</li> <li>Item 1.3</li> <li>Item 1.4</li> <li>Item 1.5</li> <li>Item 1.6</li> <li>Item 1.7</li> <li>Item 1.8</li> <li>Item 1.9</li> <li>Item 1.10</li> <li>Item 1.11</li> <li>Item 1.12</li> <li>Item 1.13</li> <li>Item 1.14</li> <li>Item 1.15</li> </ul> List 2 (source only, can be dropped on list 1 or button 2) <ul id="list2"> <li>Item 2.1</li> <li>Item 2.2</li> <li>Item 2.3</li> <li>Item 2.4</li> <li>Item 2.5</li> <li>Item 2.6</li> <li>Item 2.7</li> <li>Item 2.8</li> <li>Item 2.9</li> <li>Item 2.10</li> <li>Item 2.11</li> <li>Item 2.12</li> <li>Item 2.13</li> <li>Item 2.14</li> <li>Item 2.15</li> </ul> <div id="button1"> Button 1 (combined source/target, can be dropped on list 1) </div> <div id="button2"> Button 2 (target only) </div> <script> // Custom implementation demo. Overrides createDragElement and // positionDragElement. function FooDrag(element, opt_data) { goog.fx.DragDrop.call(this, element, opt_data); } goog.inherits(FooDrag, goog.fx.DragDrop); FooDrag.prototype.createDragElement = function(sourceEl) { return goog.dom.createDom(goog.dom.TagName.DIV, 'foo', 'Custom drag element'); }; FooDrag.prototype.getDragElementPosition = function(sourceEl, el, event) { return new goog.math.Coordinate(event.clientX, event.clientY); }; var button1, button2, list1, list2, i, len, nodes, el; // Create drop targets (either by id or element reference) button1 = new FooDrag( document.getElementById('button1'), 'button 1' ); button2 = new goog.fx.DragDrop('button2', 'button 2'); // Create drag clusters (multiple elements shares the same // drag properties) list1 = new goog.fx.DragDropGroup(); list2 = new goog.fx.DragDropGroup(); nodes = document.getElementById('list1').childNodes; len = nodes.length; for (i = 0; i < len; i++) { el = nodes[i]; if ((el.nodeType == 1) && (el.nodeName == 'LI')) { list1.addItem(el, el.firstChild.nodeValue); } } nodes = document.getElementById('list2').childNodes; len = nodes.length; for (i = 0; i < len; i++) { el = nodes[i]; if ((el.nodeType == 1) && (el.nodeName == 'LI')) { list2.addItem(el, el.firstChild.nodeValue); } } // Set valid targets for list1 list1.addTarget(button1); list1.addTarget(button2); list1.addTarget(list1); // Set valid targets for list2 list2.addTarget(button2); list2.addTarget(list1); // Set valid target for button1 (allow button1 to be dragged onto list1) button1.addTarget(list1); // Set additional classes used to indicate dragging button1.setSourceClass('source'); button1.setTargetClass('target'); button1.setDragClass('drag'); button2.setSourceClass('source'); button2.setTargetClass('target'); list1.setSourceClass('source'); list1.setTargetClass('target'); list2.setSourceClass('source'); // Init drag objects button1.init(); button2.init(); list1.init(); list2.init(); // Set up event handlers goog.events.listen(list1, 'dragover', dragOver); goog.events.listen(list1, 'dragout', dragOut); goog.events.listen(list1, 'drop', dropList1); goog.events.listen(list1, 'drag', dragList1); goog.events.listen(list1, 'dragstart', dragStart); goog.events.listen(list1, 'dragend', dragEnd); goog.events.listen(list2, 'dragover', dragOver); goog.events.listen(list2, 'dragout', dragOut); goog.events.listen(list2, 'drop', drop); goog.events.listen(list2, 'dragstart', dragStart); goog.events.listen(list2, 'dragend', dragEnd); goog.events.listen(button1, 'dragover', dragOver); goog.events.listen(button1, 'dragout', dragOut); goog.events.listen(button1, 'drop', drop); goog.events.listen(button1, 'dragstart', dragStart); goog.events.listen(button1, 'dragend', dragEnd); goog.events.listen(button2, 'dragover', dragOver); goog.events.listen(button2, 'dragout', dragOut); goog.events.listen(button2, 'drop', drop); goog.events.listen(document.getElementById('button1'), 'click', function(e) { alert('click'); }); function dragOver(event) { event.dropTargetItem.element.style.background = 'red'; } function dragOut(event) { event.dropTargetItem.element.style.background = 'silver'; } function drop(event) { event.dropTargetItem.element.style.background = 'silver'; var str = [ event.dragSourceItem.data, ' dropped onto ', event.dropTargetItem.data, ' at ', event.viewportX, 'x', event.viewportY ]; alert(str.join('')); } function dropList1(event) { event.dropTargetItem.element.style.background = 'silver'; var str = [ event.dragSourceItem.data, ' dropped onto ', event.dropTargetItem.data, ' in list 1.' ]; alert(str.join('')); } function dragList1(event) { var str = [ event.dragSourceItem.data, ' dragged from list 1' ]; alert(str.join('')); } function dragStart(event) { goog.style.setOpacity(event.dragSourceItem.element, 0.5); } function dragEnd(event) { goog.style.setOpacity(event.dragSourceItem.element, 1.0); } </script> </body> </html>