2 * Ext JS Library 2.2.1
\r
3 * Copyright(c) 2006-2009, Ext JS, LLC.
\r
4 * licensing@extjs.com
\r
6 * http://extjs.com/license
\r
9 Ext.onReady(function(){
\r
11 Ext.QuickTips.init();
\r
14 var tb = new Ext.Toolbar({
\r
17 iconCls: 'album-btn',
\r
18 handler: function(){
\r
19 var node = root.appendChild(new Ext.tree.TreeNode({
\r
20 text:'Album ' + (++newIndex),
\r
24 tree.getSelectionModel().select(node);
\r
25 setTimeout(function(){
\r
27 ge.startEdit(node.ui.textNode);
\r
33 // set up the Album tree
\r
34 var tree = new Ext.tree.TreePanel({
\r
38 containerScroll: true,
\r
39 ddGroup: 'organizerDD',
\r
52 var root = new Ext.tree.TreeNode({
\r
57 tree.setRootNode(root);
\r
60 new Ext.tree.TreeNode({text:'Album 1', cls:'album-node', allowDrag:false}),
\r
61 new Ext.tree.TreeNode({text:'Album 2', cls:'album-node', allowDrag:false}),
\r
62 new Ext.tree.TreeNode({text:'Album 3', cls:'album-node', allowDrag:false})
\r
65 // add an inline editor for the nodes
\r
66 var ge = new Ext.tree.TreeEditor(tree, {
\r
68 blankText:'A name is required',
\r
72 // Set up images view
\r
74 var view = new Ext.DataView({
\r
75 itemSelector: 'div.thumb-wrap',
\r
76 style:'overflow:auto',
\r
78 plugins: new Ext.DataView.DragSelector({dragSafe:true}),
\r
79 store: new Ext.data.JsonStore({
\r
80 url: '../view/get-images.php',
\r
86 {name: 'shortName', mapping: 'name', convert: shortName}
\r
89 tpl: new Ext.XTemplate(
\r
91 '<div class="thumb-wrap" id="{name}">',
\r
92 '<div class="thumb"><img src="../view/{url}" class="thumb-img"></div>',
\r
93 '<span>{shortName}</span></div>',
\r
98 var images = new Ext.Panel({
\r
102 margins: '5 5 5 0',
\r
108 var layout = new Ext.Panel({
\r
112 items: [tree, images]
\r
115 layout.render('layout');
\r
117 var dragZone = new ImageDragZone(view, {containerScroll:true,
\r
118 ddGroup: 'organizerDD'});
\r
124 * Create a DragZone instance for our JsonView
\r
126 ImageDragZone = function(view, config){
\r
128 ImageDragZone.superclass.constructor.call(this, view.getEl(), config);
\r
130 Ext.extend(ImageDragZone, Ext.dd.DragZone, {
\r
131 // We don't want to register our image elements, so let's
\r
132 // override the default registry lookup to fetch the image
\r
133 // from the event instead
\r
134 getDragData : function(e){
\r
135 var target = e.getTarget('.thumb-wrap');
\r
137 var view = this.view;
\r
138 if(!view.isSelected(target)){
\r
141 var selNodes = view.getSelectedNodes();
\r
145 if(selNodes.length == 1){
\r
146 dragData.ddel = target;
\r
147 dragData.single = true;
\r
149 var div = document.createElement('div'); // create the multi element drag "ghost"
\r
150 div.className = 'multi-proxy';
\r
151 for(var i = 0, len = selNodes.length; i < len; i++){
\r
152 div.appendChild(selNodes[i].firstChild.firstChild.cloneNode(true)); // image nodes only
\r
153 if((i+1) % 3 == 0){
\r
154 div.appendChild(document.createElement('br'));
\r
157 var count = document.createElement('div'); // selected image count
\r
158 count.innerHTML = i + ' images selected';
\r
159 div.appendChild(count);
\r
161 dragData.ddel = div;
\r
162 dragData.multi = true;
\r
169 // this method is called by the TreeDropZone after a node drop
\r
170 // to get the new tree node (there are also other way, but this is easiest)
\r
171 getTreeNode : function(){
\r
172 var treeNodes = [];
\r
173 var nodeData = this.view.getRecords(this.dragData.nodes);
\r
174 for(var i = 0, len = nodeData.length; i < len; i++){
\r
175 var data = nodeData[i].data;
\r
176 treeNodes.push(new Ext.tree.TreeNode({
\r
178 icon: '../view/'+data.url,
\r
187 // the default action is to "highlight" after a bad drop
\r
188 // but since an image can't be highlighted, let's frame it
\r
189 afterRepair:function(){
\r
190 for(var i = 0, len = this.dragData.nodes.length; i < len; i++){
\r
191 Ext.fly(this.dragData.nodes[i]).frame('#8db2e3', 1);
\r
193 this.dragging = false;
\r
196 // override the default repairXY with one offset for the margins and padding
\r
197 getRepairXY : function(e){
\r
198 if(!this.dragData.multi){
\r
199 var xy = Ext.Element.fly(this.dragData.ddel).getXY();
\r
207 // Utility functions
\r
209 function shortName(name){
\r
210 if(name.length > 15){
\r
211 return name.substr(0, 12) + '...';
\r