223 lines
No EOL
7.1 KiB
JavaScript
223 lines
No EOL
7.1 KiB
JavaScript
/*
|
|
This file is part of Ext JS 3.4
|
|
|
|
Copyright (c) 2011-2013 Sencha Inc
|
|
|
|
Contact: http://www.sencha.com/contact
|
|
|
|
GNU General Public License Usage
|
|
This file may be used under the terms of the GNU General Public License version 3.0 as
|
|
published by the Free Software Foundation and appearing in the file LICENSE included in the
|
|
packaging of this file.
|
|
|
|
Please review the following information to ensure the GNU General Public License version 3.0
|
|
requirements will be met: http://www.gnu.org/copyleft/gpl.html.
|
|
|
|
If you are unsure which license is appropriate for your use, please contact the sales department
|
|
at http://www.sencha.com/contact.
|
|
|
|
Build date: 2013-04-03 15:07:25
|
|
*/
|
|
Imgorg.ImageThumbPanel = Ext.extend(Ext.Panel, {
|
|
minWidth: 80,
|
|
title: 'All Photos',
|
|
|
|
initComponent: function() {
|
|
this.tfId = 'tag-filter-'+Ext.id();
|
|
|
|
var sliderValue = 0;
|
|
var p = Ext.state.Manager.getProvider();
|
|
if (p) {
|
|
sliderValue = Ext.num(p.get('sliderValue'), 0);
|
|
}
|
|
|
|
Ext.apply(this,{
|
|
layout:'fit',
|
|
cls: 'images-view',
|
|
items:Ext.apply({
|
|
xtype: 'img-dv',
|
|
itemId: 'imgorg-dv'
|
|
},this.dvConfig||{}),
|
|
bbar:['Tags:',{
|
|
xtype: 'img-tagmulticombo',
|
|
id: this.tfId,
|
|
listeners: {
|
|
select: function(combo, record, idx) {
|
|
var vals = combo.getValue();
|
|
this.tagFilter(vals);
|
|
return true;
|
|
},
|
|
clearall: function(combo) {
|
|
this.clearFilter();
|
|
},
|
|
scope: this
|
|
}
|
|
},'->',{
|
|
xtype: 'slider',
|
|
itemId: 'size-slider',
|
|
width: 200,
|
|
style: 'margin-right:20px;',
|
|
value: sliderValue,
|
|
plugins: new Ext.slider.Tip({
|
|
getText: function(slider){
|
|
return String.format('<b>{0}%</b>', 100+slider.getValue()*3);
|
|
}
|
|
}),
|
|
listeners: {
|
|
change: this.onChange,
|
|
scope: this
|
|
}
|
|
}]
|
|
});
|
|
Imgorg.ImageThumbPanel.superclass.initComponent.call(this);
|
|
this.on('activate', this.onActivate, this);
|
|
},
|
|
|
|
afterRender: function() {
|
|
Imgorg.ImageThumbPanel.superclass.afterRender.call(this);
|
|
this.view = this.getComponent('imgorg-dv');
|
|
(function() {
|
|
this.dragZone = new ImageDragZone(this.view, {
|
|
containerScroll:true,
|
|
ddGroup: 'organizerDD'
|
|
});
|
|
}).defer(100, this);
|
|
},
|
|
|
|
onActivate: function() {
|
|
this.reload();
|
|
var p = Ext.state.Manager.getProvider();
|
|
if (p) {
|
|
sliderValue = Ext.num(p.get('sliderValue'), 0);
|
|
var slider = this.getBottomToolbar().getComponent('size-slider');
|
|
slider.setValue(sliderValue);
|
|
this.onChange(slider);
|
|
}
|
|
},
|
|
|
|
onChange: function(slider, e) {
|
|
var p = Ext.state.Manager.getProvider();
|
|
if (p) {
|
|
p.set('sliderValue', slider.getValue());
|
|
}
|
|
Ext.util.CSS.updateRule('.images-view .thumb img','height',this.minWidth+slider.getValue()*3);
|
|
},
|
|
|
|
tagFilter: function(vals) {
|
|
if (this.view.store.lastOptions.params) {
|
|
var album = this.view.store.lastOptions.params.album;
|
|
}
|
|
|
|
this.view.store.load({
|
|
params: {
|
|
tags: vals,
|
|
album: album
|
|
}
|
|
});
|
|
},
|
|
|
|
clearFilter: function() {
|
|
var album = this.view.store.lastOptions.params.album;
|
|
this.view.store.load({
|
|
params: {
|
|
album: album
|
|
}
|
|
});
|
|
Ext.getCmp(this.tfId).reset();
|
|
},
|
|
|
|
albumFilter: function(album) {
|
|
this.getComponent('imgorg-dv').store.load({
|
|
params: {
|
|
album: album.id
|
|
}
|
|
});
|
|
},
|
|
|
|
reload: function() {
|
|
this.view.store.reload();
|
|
}
|
|
});
|
|
Ext.reg('img-thumbpanel', Imgorg.ImageThumbPanel);
|
|
|
|
|
|
ImageDragZone = function(view, config){
|
|
this.view = view;
|
|
ImageDragZone.superclass.constructor.call(this, view.getEl(), config);
|
|
};
|
|
Ext.extend(ImageDragZone, Ext.dd.DragZone, {
|
|
// We don't want to register our image elements, so let's
|
|
// override the default registry lookup to fetch the image
|
|
// from the event instead
|
|
getDragData : function(e){
|
|
var target = e.getTarget('.thumb-wrap');
|
|
if(target){
|
|
var view = this.view;
|
|
if(!view.isSelected(target)){
|
|
view.onClick(e);
|
|
}
|
|
var selNodes = view.getSelectedNodes();
|
|
var dragData = {
|
|
nodes: selNodes
|
|
};
|
|
if(selNodes.length == 1){
|
|
dragData.ddel = target;
|
|
dragData.single = true;
|
|
}else{
|
|
var div = document.createElement('div'); // create the multi element drag "ghost"
|
|
div.className = 'multi-proxy';
|
|
for(var i = 0, len = selNodes.length; i < len; i++){
|
|
div.appendChild(selNodes[i].firstChild.firstChild.cloneNode(true)); // image nodes only
|
|
if((i+1) % 3 == 0){
|
|
div.appendChild(document.createElement('br'));
|
|
}
|
|
}
|
|
var count = document.createElement('div'); // selected image count
|
|
count.innerHTML = i + ' images selected';
|
|
div.appendChild(count);
|
|
|
|
dragData.ddel = div;
|
|
dragData.multi = true;
|
|
}
|
|
return dragData;
|
|
}
|
|
return false;
|
|
},
|
|
|
|
// this method is called by the TreeDropZone after a node drop
|
|
// to get the new tree node (there are also other way, but this is easiest)
|
|
getTreeNode : function(){
|
|
var treeNodes = [];
|
|
var nodeData = this.view.getRecords(this.dragData.nodes);
|
|
for(var i = 0, len = nodeData.length; i < len; i++){
|
|
var data = nodeData[i].data;
|
|
treeNodes.push(new Ext.tree.TreeNode({
|
|
text: data.name,
|
|
icon: '../view/'+data.url,
|
|
data: data,
|
|
leaf:true,
|
|
cls: 'image-node'
|
|
}));
|
|
}
|
|
return treeNodes;
|
|
},
|
|
|
|
// the default action is to "highlight" after a bad drop
|
|
// but since an image can't be highlighted, let's frame it
|
|
afterRepair:function(){
|
|
for(var i = 0, len = this.dragData.nodes.length; i < len; i++){
|
|
Ext.fly(this.dragData.nodes[i]).frame('#8db2e3', 1);
|
|
}
|
|
this.dragging = false;
|
|
},
|
|
|
|
// override the default repairXY with one offset for the margins and padding
|
|
getRepairXY : function(e){
|
|
if(!this.dragData.multi){
|
|
var xy = Ext.Element.fly(this.dragData.ddel).getXY();
|
|
xy[0]+=3;xy[1]+=3;
|
|
return xy;
|
|
}
|
|
return false;
|
|
}
|
|
}); |