Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Gallery = {};
- Gallery.photos = {
- init: function(roles,userid) {
- var allow_file_drop = true;
- var photo_ids = [];
- var gallery_text = "";
- var gallery_selected_id = 0;
- // create gallery node or file manage node
- function add_tbar(tree, text, url, type){
- var icon_name = 'file_node';
- if ( type == 'gallery' ){
- icon_name = 'album_node';
- }
- var new_node = new Ext.tree.TreeNode({
- text: text,
- iconCls: icon_name,
- allowDrag: false
- });
- var node = tree.root.appendChild(new_node);
- var ge = new Ext.tree.TreeEditor(tree, {
- allowBlank:false,
- blankText:'A name is required'
- });
- ge.on("complete", function(){
- Ext.Ajax.request({
- url: url,
- method: 'POST',
- params: {
- node_name: node.text
- },
- success: function(response,request){
- node.id = Ext.decode(response.responseText).id;
- node.attributes.name = node.text;
- node.setText(node.text + '(0)');
- },
- failure: function(result,request){
- Ext.MessageBox.alert('Tip','failure!');
- }
- });
- });
- tree.getSelectionModel().select(node);
- setTimeout(function(){
- ge.editNode = node;
- ge.startEdit(node.ui.textNode);
- }, 10);
- }
- // implement gallery or file management operation like the right mouse button, include rename, delete, show.
- function menu_manipulate(Gallery, tree, node, e, delete_url, update_url){
- e.preventDefault();
- node.select();
- var treeRightMenu = new Ext.menu.Menu({
- id: Gallery+'menu',
- items:[{
- id:'rename_' + Gallery,
- text:'Rename ' + Gallery
- }]
- });
- if(roles == 'galleryC' || Gallery == 'Folder'){
- treeRightMenu.addMenuItem({
- id:'delete_' + Gallery,
- text:'Delete ' + Gallery
- });
- //delete gallery or file
- var delete_node = 'delete_' + Gallery;
- Ext.getCmp(delete_node).on('click',function(){
- var selectedNode = tree.getSelectionModel().getSelectedNode();
- if (selectedNode.attributes.recycle)
- {
- Ext.MessageBox.alert('Tip',"You can't delete Recycle bin!");
- return;
- }
- selectedNode.remove();
- Ext.Ajax.request({
- url: delete_url,
- method: 'DELETE',
- params: {
- select_node_id: selectedNode.id
- },
- success: function(response,request){
- view.store.baseParams = {};
- view.store.reload();
- images.setTitle("The latest uploded photos");
- },
- failure: function(result,request){
- Ext.MessageBox.alert('Tip','failure!');
- }
- });
- });
- // delete gallery end
- }
- // rename gallery
- var rename_node = 'rename_' + Gallery;
- Ext.getCmp(rename_node).on('click',function(){
- var treeEditor = new Ext.tree.TreeEditor(
- tree,
- {
- allowBlank: false
- }
- );
- var selectedNode = tree.getSelectionModel().getSelectedNode();
- if (selectedNode.attributes.recycle)
- {
- Ext.MessageBox.alert('Tip',"You can't Rename Recycle bin!");
- return;
- }
- treeEditor.editNode = selectedNode;
- treeEditor.startEdit(selectedNode.ui.textNode,selectedNode.attributes.name);
- treeEditor.on("complete", function(treeEditer){
- Ext.Ajax.request({
- url: update_url,
- method: 'PUT',
- params: {
- node_id: selectedNode.id ,
- node_name: selectedNode.text
- },
- success: function(response,request){
- selectedNode.setText(selectedNode.text + "("+ Ext.decode(response.responseText).photos_num + ")");
- },
- failure: function(result,request){
- Ext.MessageBox.alert('Tip','failure!');
- }
- });
- });
- });
- treeRightMenu.showAt(e.getXY());
- }
- // user space info.
- var infos = new Ext.Panel({
- id: 'info',
- title: 'Information',
- width: 200,
- heigth:400,
- bodyStyle: 'padding-bottom:15px;background:#eee;',
- contentEl:'infos'
- });
- // photos info
- var photo_info = new Ext.Panel({
- id: 'photo_info',
- title: 'Photo Information',
- width: 200,
- heigth:400,
- contentEl: 'photo_infos'
- });
- // define store of data view, provide photos data
- var view_store = new Ext.data.JsonStore({
- totalProperty: 'totalProperty',
- url: '/photos/index.json',
- root: 'root',
- id:'url',
- fields:[
- 'name', 'url','id',
- {
- name: 'shortName',
- mapping: 'name',
- convert: shortName
- }
- ]
- });
- // define data view, show photos
- var view = new Ext.DataView({
- itemSelector: 'div.image_show',
- style:'overflow:auto',
- id: 'view_photo',
- multiSelect: true,
- plugins: new Ext.DataView.DragSelector({
- dragSafe:true
- }),
- // store: view_store,
- tpl: new Ext.XTemplate(
- '<tpl for=".">',
- '<div class = "image_show" id="photo_{id}">',
- '<div class="thumb-wrap" id="{url}">',
- '<div class="thumb"><a href="/photos/show_photo?id={id}"><img src="/uploads/{url}" class="thumb-img"></a></div></div>',
- '<span><a href="/photos/show_photo?id={id}">{shortName}</a></span></div>',
- '</tpl>'
- ),
- listeners: {
- 'render': initdropzone
- }
- });
- function initdropzone(id)
- { var self = this;
- ImageDragZone = function(config){
- this.view = id;
- ImageDragZone.superclass.constructor.call(this, id.getEl(), config);
- };
- ImageDropZone = function(config){
- this.view = id;
- ImageDropZone.superclass.constructor.call(this, id.getEl(), config);
- };
- Ext.extend(ImageDropZone, Ext.dd.DropZone, {
- getTargetFromEvent: function(e) {
- return e.getTarget('.image_show');
- },
- onNodeEnter: function(nodeData,source,e,data){
- },
- onInvalidDrop: function(){
- //console.log('that was invalid'); //Need to send back to original location or maybe snap to closets possible valid location.
- //this.validDrop=0;
- },
- onNodeDrop : function(target, dd, e, data){
- console.log("endddddddddddddd")
- // var rowIndexTarget = id.getRecord(target).data.id;
- // var rowIndexSource = data.officeData.officeId;
- self.tar = target;
- self.da = data.sourceEl;
- alert("target: " + Ext.get(target).id);
- alert("v: " + id.getEl().id);
- //Ext.get(data.sourceEl).insertBefore(target);
- // alert("FROM: " + rowIndexSource + " : TO : " + rowIndexTarget);
- //var rowIndex = g.getView().findRowIndex(target);
- //var h = g.getStore().getAt(rowIndex);
- // Ext.Msg.alert('Drop gesture', 'Dropped patient ' + data.patientData.name +
- //' on hospital ' + h.data.name);
- return false;
- }
- })
- Ext.extend(ImageDragZone, Ext.dd.DragZone, {
- getDragData : function(e){
- var target = e.getTarget('.image_show');
- var sourceEl = e.getTarget(id.itemSelector, 10);
- if(target){
- var view = this.view;
- if(!view.isSelected(target)){
- // view.onClick(e);
- var vs=view.getSelectedNodes()
- // Ext.getCmp("photo_info").load({
- // url: '/photos/photo_info?id='+view.getRecord(vs[0]).data.id
- // });
- }
- var selNodes = view.getSelectedNodes();
- var dragData = {
- nodes: selNodes,
- sourceEl: sourceEl
- };
- 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;
- },
- getTreeNode : function(){
- var treeNodes = [];
- var photos = [];
- var nodeData = this.view.getRecords(this.dragData.nodes);
- for(var i = 0, len = nodeData.length; i < len; i++){
- var data = nodeData[i].data;
- photos.push(data.id);
- }
- photo_ids =photos;
- },
- startDrag: function(x, y){
- this.dragEl = Ext.get(this.getDragEl()); //Get the element being dragged.
- this.el = Ext.get(this.getEl()).stopFx().setOpacity(.5); //Set the item left behind to partially transparent.
- this.dragEl.update(this.el.dom.innerHTML);
- this.dragEl.setOpacity(.8);
- console.log("5555555555555555555");
- //this.dragEl.setWidth(100);
- //this.dragEl.setHeight(200);
- //this.dragEl.dom.firstChild.width=100;
- },
- // 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;
- },
- endDrag: function(){
- this.el.setOpacity(1);
- console.log(this.el.setOpacity(1))
- console.log(this.overEl)
- //this.el.remove(); //DON'T REMOVE THE ELEMENT. IT WILL DISAPEAR IN IE
- if(this.dropLocation=='before')
- { console.log("11111111111")
- Ext.get(self.da).insertBefore(self.tar);
- }
- else
- {console.log("444444444444")
- Ext.get(self.da).insertAfter(self.tar);
- }
- }
- ,
- onDragOver: function(e, ids){
- //console.log(e.xy[0]); //Mouse Pos
- this.overEl = Ext.get(ids);
- var cellXSize = this.overEl.dom.getClientRects()[0].right - this.overEl.dom.getClientRects()[0].left; //Width of the cell
- var cellXSize = cellXSize/2;
- var cellXCenter = this.overEl.dom.getClientRects()[0].right - cellXSize; //x cord of cell center
- //This is where I want to do something to the dom to indicate where the item will drop.
- if (e.xy[0] <+ cellXCenter)
- {
- this.dropLocation = 'before';
- console.log('put before');
- }
- else
- {
- this.dropLocation = 'after';
- console.log('put after');
- }
- },
- // 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;
- }
- });
- var dragZone = new ImageDragZone({
- containerScroll:true,
- ddGroup: 'organizerDD'
- });
- var dropZone = new ImageDropZone({
- ddGroup: 'organizerDD'
- });
- }
- function shortName(name){
- if(name.length > 15){
- return name.substr(0, 12) + '...';
- }
- return name;
- }
- // show photo panel
- var images = new Ext.Panel({ // center region show photos.
- id:'images',
- title:'The latest uploded photos ',
- margins: '5 5 5 0',
- border: false,
- items: view
- });
- var tree_bar = new Ext.Toolbar({
- items:[{
- text: 'New Gallery',
- iconCls: 'add_gallery_btn',
- handler: function(){
- add_tbar(tree,"My Gallery","/galleries/create", 'gallery');
- }
- }]
- });
- // loading gallery node
- var root_node = new Ext.tree.AsyncTreeNode({
- id: 'root_node',
- text: "Galleries",
- allowDrag: false,
- allowDrop: false
- })
- var tree = new Ext.tree.TreePanel({
- id: 'tree',
- animate:true,
- enableDD:true,
- ddGroup: 'organizerDD',
- rootVisible: false,
- width:320,
- collapsible:true,
- layout: 'fit',
- title:'Gallery',
- margins: '5 0 5 5',
- tbar: tree_bar,
- root: root_node,
- loader: new Ext.tree.TreeLoader({
- dataUrl:'/galleries/show_gallery.json',
- listeners: {
- 'load' : function(This,node,response){
- for(var i=0; i<node.childNodes.length; i++){
- node.childNodes[i].leaf = false; // if treenode is leaf, it need to set false. So,wo can move photos to gallery
- }
- }
- }
- }),
- listeners: {
- 'click':function(node,e){
- images. setTitle(node.text);
- center.initialConfig.bbar.items.items[0].hide();
- center.initialConfig.bbar.items.items[1].show();
- gallery_text = node.text;
- gallery_selected_id = node.id;
- view.store.baseParams = {};
- view.store.baseParams.gallery_id = node.id;
- view.store.reload();
- var nodes_length = Ext.getCmp("file_manages").root.childNodes.length;
- for(var i=0; i<nodes_length; i++){
- Ext.getCmp("file_manages").root.childNodes[i].allowChildren = false;
- }
- allow_file_drop = false;
- },
- 'beforenodedrop': function(o){
- if (o.source.el.id == 'view_photo'){
- var gallery_id = o.target.id;
- if (o.target.leaf == true)
- {
- gallery_id = o.target.parentNode.id;
- o.target.parentNode.childNodes.allowDrop=false;
- return false;
- }
- var photo_id = []
- if (o.target.childNodes.length == 0)
- {
- photo_id = photo_ids;
- }
- else{
- for(var i=0; i<photo_ids.length;i++) {
- for(var a=0;a<o.target.childNodes.length;a++)
- {
- if(photo_ids[i] == o.target.childNodes[a].id)
- {
- o.target.childNodes[a].remove();
- break;
- } else{
- if (a == o.target.childNodes.length-1)
- {
- photo_id.push(photo_ids[i])
- }
- }
- }
- }
- }
- if (photo_id.length > 0){
- Ext.Ajax.request({
- url: '/photos/drag_photos',
- method: 'POST',
- params: {
- 'photo_ids[]': photo_id, //array must use encode methos
- gallery: gallery_id
- },
- success: function(response,request){
- o.target.setText(o.target.attributes.name + "("+ Ext.decode(response.responseText).photos_num + ")");
- },
- failure: function(result,request){
- Ext.MessageBox.alert('Tip','failure!');
- }
- });
- }
- }
- },
- 'contextmenu': function(node,e){
- menu_manipulate('Gallery',tree,node,e,'/galleries/destroy','/galleries/update');
- }
- }
- });
- // define file management toolbar
- var file_bar = new Ext.Toolbar({
- items:[{
- text: 'New Folder',
- iconCls: 'new_folder_btn',
- handler: function(){
- add_tbar(file_manage,"new folder","/files/create_folder", 'file');
- }
- },{
- text: 'Upload Photos',
- iconCls: 'upload_btn',
- handler: function(){
- Application.uploadDialog.show(userid);
- }
- },{
- text: 'Clear Recycle Bin',
- iconCls: 'recycle_btn',
- handler: function(){
- Ext.MessageBox.confirm('Tip', 'Do you continue to do it ?', function(btn) {
- if(btn == 'yes'){
- Ext.Ajax.request({
- url: '/files/clear_recycle',
- method: 'DELETE',
- params: {
- file_id: Ext.getCmp("file_manages").root.childNodes[0].id
- },
- success: function(response,request){
- view.store.baseParams = {};
- view.store.reload();
- file_manage.root.reload();
- tree.root.reload();
- },
- failure: function(result,request){
- Ext.MessageBox.alert('Tip','failure!');
- }
- });
- }
- else{
- return false;
- }
- });
- }
- }]
- });
- // file_tree, manage uploading file, delete file, drog file.
- var file_manage = new Ext.tree.TreePanel({
- id: 'file_manages',
- animate:true,
- enableDD:true,
- ddGroup: 'organizerDD',
- rootVisible: false,
- width:320,
- collapsible:true,
- layout: 'fit',
- title:'File Management',
- margins: '5 0 5 5',
- tbar: file_bar,
- root: new Ext.tree.AsyncTreeNode({
- id: 'root_file',
- text: "File",
- allowDrag: false,
- allowDrop: false
- }),
- loader: new Ext.tree.TreeLoader({
- dataUrl:'/files/show_file.json',
- listeners: {
- 'load' : function(This,node,response){
- for(var i=0; i<node.childNodes.length; i++){
- node.childNodes[i].leaf = false; // if treenode is leaf, it need to set false. So,wo can move photos to gallery
- }
- }
- }
- }),
- listeners: {
- 'click':function(node,e){
- images. setTitle(node.text);
- center.initialConfig.bbar.items.items[0].show(); // show delete photo button
- center.initialConfig.bbar.items.items[1].hide(); // hide remove photo buttom
- center.items.items[0].show();
- view.store.baseParams = {};
- view.store.baseParams.file_id = node.id;
- view.store.load();
- if(allow_file_drop == false){
- var nodes_length = Ext.getCmp("file_manages").root.childNodes.length;
- for(var i=0; i<nodes_length; i++){
- Ext.getCmp("file_manages").root.childNodes[i].allowChildren = true;
- }
- }
- } ,
- 'beforenodedrop': function(o){
- if (o.source.el.id == 'view_photo'){
- var file_id = o.target.id;
- if (o.target.leaf == true)
- {
- file_id = o.target.parentNode.id;
- o.target.parentNode.childNodes.allowDrop=false;
- return false;
- }
- var photo_id = []
- if (o.target.childNodes.length == 0)
- {
- photo_id = photo_ids;
- }
- else{
- for(var i=0; i<photo_ids.length;i++) {
- for(var a=0;a<o.target.childNodes.length;a++)
- {
- if(photo_ids[i] == o.target.childNodes[a].id)
- {
- o.target.childNodes[a].remove();
- break;
- } else{
- if (a == o.target.childNodes.length-1)
- {
- photo_id.push(photo_ids[i])
- }
- }
- }
- }
- }
- if (photo_id.length > 0){
- Ext.Ajax.request({
- url: '/files/drag_file',
- method: 'POST',
- params: {
- 'photo_ids[]': photo_id, //array must use encode methos
- file_id: file_id
- },
- success: function(response,request){
- for(var i=0; i<photo_ids.length;i++) {
- Ext.get('photo_'+photo_id[i]).remove();
- }
- file_manage.root.reload();
- },
- failure: function(result,request){
- Ext.MessageBox.alert('Tip','failure!');
- }
- });
- }
- }
- },
- 'contextmenu': function(node,e){
- // file management menu
- menu_manipulate('Folder', file_manage, node, e, '/files/destroy_file', '/files/update_folder');
- }
- }
- })
- if(roles != 'galleryA'){
- var west = new Ext.Panel({
- id: 'west',
- region: 'west',
- collapsible: true,
- width: 320,
- title: "Operation Panel",
- items: [{
- items: [tree,file_manage]
- }]
- });
- }else{
- west = new Ext.Panel({
- id: 'west',
- region: 'west',
- collapsible: true,
- width: 320,
- title: "Operation Panel",
- items: [{
- items: [file_manage]
- }]
- });
- }
- if(roles == 'galleryB'){
- west.initialConfig.items[0].items[0].initialConfig.tbar.hide();
- }
- var east = new Ext.Panel({
- id: 'east',
- region: "east",
- width: 200,
- layout: 'fit',
- border: false,
- bodyBorder: false,
- items: [{
- items:[infos,photo_info]
- }]
- });
- var top_bar = new Ext.Panel({
- id:'top_bar',
- margins: '5 5 5 0',
- tbar: new Ext.Toolbar({
- items:[{
- text: 'Latest Uploaded Photos',
- iconCls: 'show_photos_btn',
- handler: function(){
- images.setTitle("The latest uploded photos");
- view.store.baseParams = {};
- view.store.reload();
- var nodes_length = Ext.getCmp("file_manages").root.childNodes.length;
- for(var i=0; i<nodes_length; i++){
- Ext.getCmp("file_manages").root.childNodes[i].allowChildren = true;
- }
- }
- }]
- }),
- items:images
- })
- var center = new Ext.Panel({
- id: 'center',
- region: 'center',
- layout: 'fit',
- contentEl:'photo',
- autoScroll: true,
- bbar: new Ext.Toolbar({
- items:[{ // Default showing this button.
- id: 'delete_photo', // When current state is File Manage,showing delete photo button.This will delete photo from server.
- text: 'Delete',
- iconCls: 'delete_photo_btn',
- handler: function(){
- var getSelected = view.getSelectedNodes();
- var photo_selected =[];
- if(view.getRecords(getSelected).length >0){
- for(var i=0; i<view.getRecords(getSelected).length; i++){
- photo_selected.push(view.getRecords(getSelected)[i].data.id);
- }
- Ext.Ajax.request({
- url: '/files/destroy_to_recycle',
- method: 'DELETE',
- params: {
- gallery_id: gallery_selected_id,
- 'photo_ids[]': photo_selected
- },
- success: function(response,request){
- for(var i=0; i<photo_selected.length;i++) {
- Ext.get('photo_'+photo_selected[i]).remove();
- }
- file_manage.root.reload();
- Ext.MessageBox.alert('Tip','Delete Success!');
- view.clearSelections(); // cleare last selected nodes
- },
- failure: function(result,request){
- Ext.MessageBox.alert('Tip','failure!');
- }
- });
- } else {
- Ext.MessageBox.alert('Tip','Please select photos!');
- }
- }
- },{
- id: 'remove_photo', // Current sate is Gallery, showing remove photo button. This will remove photo from gallery.
- hidden: true,
- text: 'Remove',
- iconCls: 'delete_photo_btn',
- handler: function(){
- if(allow_file_drop == false){
- var getSelected = view.getSelectedNodes();
- var photo_selected =[];
- if(view.getRecords(getSelected).length >0){
- for(var i=0; i<view.getRecords(getSelected).length; i++){
- photo_selected.push(view.getRecords(getSelected)[i].data.id);
- }
- Ext.Ajax.request({
- url: '/galleries/destroy_photos',
- method: 'DELETE',
- params: {
- gallery_id: gallery_selected_id,
- 'photo_ids[]': photo_selected
- },
- success: function(response,request){
- for(var i=0; i<photo_selected.length;i++) {
- Ext.get('photo_'+photo_selected[i]).remove();
- }
- tree.root.reload();
- Ext.MessageBox.alert('Tip','Remove Success!');
- view.clearSelections();
- },
- failure: function(result,request){
- Ext.MessageBox.alert('Tip','failure!');
- }
- });
- }else{
- Ext.MessageBox.alert('Tip','Please select photos!');
- }
- }
- }
- }]
- }),
- items: top_bar
- });
- view.store = view_store;
- view_store.load();
- }
- }
Add Comment
Please, Sign In to add comment