PHP Classes

File: web/bundles/bootstrap/vu/js/vuTree.js

Recommend this page to a friend!
  Classes of william amed   Raptor 2   web/bundles/bootstrap/vu/js/vuTree.js   Download  
File: web/bundles/bootstrap/vu/js/vuTree.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Raptor 2
Framework that takes routes from annotations
Author: By
Last change:
Date: 8 years ago
Size: 20,227 bytes
 

Contents

Class file image Download
/* ============================================================= * bootstrap-tree.js v0.3 * http://twitter.github.com/cutterbl/Bootstrap-Tree * * Inspired by Twitter Bootstrap, with credit to bits of code * from all over. * ============================================================= * Copyright 2012 Cutters Crossing. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================ */ !function ($) { "use strict"; // jshint ;_; var loading = "<img src='../tree/src/skin-vista/loading.gif' class='indicator' /> Loading ..."; /* NODE CLASS DEFINITION * ========================= */ //Este es el constructor de la clase VU.namespace('VU.Components'); VU.Components.Node = function (parent,options,element) { if(element) this.element = $(element); this.parent=parent; this.options =options; this.init(); } //Funciones de la clase, añadidas via prototype VU.Components.Node.prototype={ init:function(){ if(!this.element){ this.element=$('<li></li>'); //this.element.mouseup($.proxy(this.onDrop,this)) //this.move(this.element,this.element); this.container=$('<span></span>'); this.expander=$('<span></span>'); this.checkbox=$('<span></span>'); this.text=$('<span></span>'); this.icon=$('<span></span>'); this.container.attr('role','container'); this.expander.attr('role','connec'); this.checkbox.attr('role','check'); this.text.attr('role','text'); this.icon.attr('role','icon'); this.container.addClass('tree-row'); if(this.options.checkable){ this.checkbox.addClass('tree-checkbox'); if(this.options.check) this.checkbox.addClass('tree-checkbox-check'); }else this.checkbox.addClass('tree-blanc'); this.icon.addClass('icon'); this.text.addClass('text'); this.text.html(this.options.text); this.element.append(this.container); this.container.append(this.expander); this.container.append(this.checkbox); this.container.append(this.icon); this.container.append(this.text); if(!this.options.leaf){ if(this.options.children){ this.hasChildren=true; this.expander.addClass('expander'); this.expander.attr('role','expand'); this.createChildren(); }else{ if(this.options.url){ this.url=this.options.url; this.hasChildren=true; this.loadUrl=true; this.expander.addClass('expander'); this.expander.attr('role','expand'); }else{ this.expander.addClass('tree-connec'); } } }else{ this.icon.addClass('tree-leaf'); this.expander.addClass('tree-connec'); } if(this.options.icon){ //this.icon.css({'background-size':'100% 100%','background-image':'url('+this.options.icon+')'}); this.icon.addClass(this.options.icon).removeClass('tree-leaf icon'); } var that=this; this.expander.click(function(){that.onExpand.call(that)}); this.element.data('tree-node',this); this.element.click(function(e){that.onSelect.call(that,e)}) } if(!this.checkbox.hasClass('tree-blanc')){ this.checkbox.click(function(){that.onCheck.call(that)}) } }, onSelect:function(e){ this.parent.element.find('span').removeClass('node-tree-select'); this.container.addClass('node-tree-select'); e.stopPropagation(); }, showParent:function(){ var parent=this.element.parent().parent().data('tree-node'); this.element.show(); if(parent){ $(parent.element).data('hasFiltering',true) parent.showParent(); } }, onCheck:function(){ this.checkbox.toggleClass('tree-checkbox-check'); if(this.checkbox.hasClass('tree-checkbox-check')){ this.check=true; }else{ this.check=false; } }, onExpand:function(){ var $this=this; if(this.hasChildren){ if(this.loadUrl){ if(this.expander.hasClass('expander')){ this.expander.addClass('tree-loading'); $.ajax({ type:'POST', data:this.options, url: this.options.url, async: false, success: function(data){$this.onLoadData.call($this,data)}, error: function(){$this.onLoadFail.call($this)} }); }else{ this.expander.removeClass('expander-open') this.expander.addClass('expander') this.treeChilds.slideUp(); } }else{ if(this.expander.hasClass('expander')){ this.treeChilds.slideDown(); this.expander.removeClass('expander') this.expander.addClass('expander-open') }else{ this.expander.removeClass('expander-open') this.expander.addClass('expander') this.treeChilds.slideUp(); } } } }, onLoadData:function(data){ this.response=$.parseJSON(data); this.expander.removeClass('tree-loading'); if(this.response&&this.response.length){ this.createChildrenLoaded(this.response); this.treeChilds.slideToggle(); this.expander.removeClass('expander') this.expander.addClass('expander-open') if(this.parent.isFiltering) this.parent.filterBy(this.parent.filter.val()); }else{ this.expander.removeClass('expander') this.expander.addClass('tree-blanc') this.hasChildren=false; } }, onLoadFail:function(){ this.expander.css('background-position','0px -112px') }, addChild:function(element){ if(this.treeChilds){ this.treeChilds.append(element); this.hasChildren=true; if(this.expander.hasClass('expander')){ this.expander.removeClass('expander-open'); }else{ this.expander.removeClass('expander'); } console.log('new 2') }else{ this.treeChilds=$('<ul></ul>'); console.log('new ') this.hasChildren=true; this.element.append(this.treeChilds); this.treeChilds.append(element); this.expander.addClass('expander'); this.expander.removeClass('tree-connec tree-connecLast'); this.expander.attr('role','expand'); //this.expander.click($.proxy(this.onExpand,this)); this.treeChilds.hide(); //this.treeChilds.find('li:last').find('.tree-connec').addClass('tree-connecLast'); //this.treeChilds.find('li:last').children('span').addClass('tree-rowlast'); } }, createChildren:function(){ var list=this.options.children; if(!this.treeChilds){ this.treeChilds=$('<ul></ul>'); this.element.append(this.treeChilds); } if(this.parent.options.order) this.orderBy(list,true); this.treeChilds.hide(); for(var i=0,cant=list.length;i<cant;i++){ var node=new VU.Components.Node(this.parent,list[i]); this.treeChilds.append(node.element.get(0)); } //this.treeChilds.find('li:last-child').find('.tree-connec').addClass('tree-connecLast'); //this.treeChilds.find('li:last-child').children('span').addClass('tree-rowlast'); }, get:function(attr){ return this.options[attr]; }, createChildrenLoaded:function(result){ var list=result; if(this.parent.options.order) this.orderBy(list,true); if(!this.treeChilds){ this.treeChilds=$('<ul></ul>'); this.element.append(this.treeChilds); } this.treeChilds.hide(); for(var i=0,cant=list.length;i<cant;i++){ var node=new VU.Components.Node(this.parent,list[i]); this.treeChilds.append(node.element.get(0)); } //this.treeChilds.find('li:last-child').find('.tree-connec').addClass('tree-connecLast'); //this.treeChilds.find('li:last-child').children('span').addClass('tree-rowlast'); this.loadUrl=false; $(this.element).trigger('update'); if(this.parent.options.dragDrop){ this.parent.addDrops($(this.element).find('li').children('span')) this.parent.addDrags($(this.element).find('li').children('span')) } }, orderBy:function(elementos, orden){ var $this=this; elementos.sort(function(a, b) { var compA = $this.omitirAcentos(a.text.toUpperCase()); var compB = $this.omitirAcentos(b.text.toUpperCase()); return (compA < compB) ? -1 : (compA > compB) ? 1 : 0; }) }, omitirAcentos:function(text) { var acentos = "ÃÀÁÄÂÈÉËÊÌÍÏÎÒÓÖÔÙÚÜÛãàáäâèéëêìíïîòóöôùúüûÑñÇç"; var original = "AAAAAEEEEIIIIOOOOUUUUaaaaaeeeeiiiioooouuuunncc"; for (var i=0; i<acentos.length; i++) { text = text.replace(acentos.charAt(i), original.charAt(i)); } return text; } } /* TREE CLASS DEFINITION * ========================= */ VU.Components.Tree=function(options,el){ this.element=el; this.options=options; this.init(); } VU.Components.Tree.prototype={ init:function(){ $(this.element).addClass('tree'); var root=$('<div></div>'); root.height('10px'); root.addClass('tree-root') root.attr('role','root') $(this.element).prepend(root); this.textPlaceHolder='Filtrar...'; if(this.options.filterText) this.textPlaceHolder=this.options.filterText; if(this.options.data) this.createEstructure(); if(this.options.filter){ this.filter=$('<input type="text" class="input-block-level" placeholder="'+this.textPlaceHolder+'" />'); root.before(this.filter); this.filter.change($.proxy(this.onSelect,this)) } if(this.options.dragDrop){ if(this.options.dragable){ this.addDrags($(this.element).find('li').children('span')) this.addDrags($(this.options.dragable)) window.DragDrop.targets($(this.element).find('li').children('span')) $(this.element).find('li').children('span').on('drop',$.proxy(this.onDropFunction,this)); $(this.element).find('li').children('span').on('drop',$.proxy(this.updateLines,this)); }else{ this.addDrags($(this.element).find('li').children('span')) window.DragDrop.targets($(this.element).find('li').children('span')) $(this.element).find('li').on('drop',$.proxy(this.onDropFunction,this)); } this.addDrops(root); //this.addDrops($(this.element).find('.tree-node-sep')); if(this.options.dropable){ window.DragDrop.targets($(this.options.dropable)) $(this.options.dropable).on('drop',$.proxy(this.onDropFunction,this)); } if(this.options.onDrop) this.onDrop=this.options.onDrop; } }, addDrops:function(selector){ window.DragDrop.targets(selector) selector.on('drop',$.proxy(this.onDropFunction,this)); selector.on('drop',$.proxy(this.updateLines,this)); }, onDragItem:function(el){ if(el.parent().data('tree-node')) return el.find('span[role="text"]').html(); else{ if(this.options.onDrag) return this.options.onDrag(el); else return "No onDrag function defined"; } }, addDrags:function(selector){ var me=this; window.DragDrop.move(selector); window.DragDrop.on('drag',this.onDragItem,this); //$(that).find('span[role="text"]').html() }, onSelect:function(){ if(this.filter.val()){ this.filterBy(this.filter.val()) this.isFiltering=true; }else{ $(this.element).find('li').show(); this.isFiltering=false; } }, filterBy:function(text){ $(this.element).find('li').data('hasFiltering',false); $(this.element).find('li').each(function(){ var node=$(this).data('tree-node'); if(node.get('text').toUpperCase().indexOf(text.toUpperCase()) == -1&&$(this).data('hasFiltering')==false){ $(this).hide(); }else{ $(this).show(); node.showParent(); } }) }, createEstructure:function(){ var list=this.options.data; if(this.options.order) this.orderBy(list,true); for(var i=0,cant=list.length;i<cant;i++){ if(!list[i].url) if(this.options.url) list[i].url=this.options.url; var node=new VU.Components.Node(this,list[i]); $(this.element).append(node.element); $(node.element).on('update',$.proxy(this.updateLines,this)) } this.updateLines(); }, onDropFunction:function(e){ if(e.target.attr('role')==='separator') var separ=true; else var separ=false; if(e.target.attr('role')==='root') var root=true; else var root=false; this.onDrop.call(this,e.source,e.target,e,separ,root); if(separ){ e.target.remove(); } }, onDrop:function(source,target,e,sep,root){ /* * Insertar dentro de un nodo, si los dos son nodos validos */ if(source.parent().data('tree-node')&&target.parent().data('tree-node')){ var listaUl=target.next(); if($(listaUl).is('ul')){ var node=target.parent().data('tree-node'); node.addChild(source.parent()); }else{ var node=target.parent().data('tree-node'); node.addChild(source.parent()); } } /* * Insertar despues de un nodo * Verifica si el drop se hizo en un separador, indicando que es despues y no dentro del nodo */ if(sep&&source.parent().data('tree-node')){ var node=source.parent(); var nodeT=target.prev(); nodeT.after(node); } if(root&&source.parent().data('tree-node')){ var node=source.parent(); var nodeT=target.next(); nodeT.before(node); } if(!source.parent().data('tree-node')&&root){ this.createNode({text:source.html(),checkable:true},'after',target) } if(!source.parent().data('tree-node')&&sep){ this.createNode({text:source.html(),checkable:true},'before',target) } if(!source.parent().data('tree-node')&&target.parent().data('tree-node')){ var node=target.parent().data('tree-node'); node.addChild(this.createNode({text:source.html(),checkable:true},'append',source.parent())); } }, createNode:function(options,place,append){ var node=new Node(this,options); if(place=='after'){ $(append).after(node.element); } if(place=='before'){ $(append).before(node.element); } if(place=='append'){ $(append).append(node.element); } if(place=='prepend'){ $(append).prepend(node.element); } $(node.element).on('update',$.proxy(this.updateLines,this)) if(this.options.dragDrop){ this.addDrags(node.element.children('span')); this.addDrops(node.element.children('span')); } return node.element; }, updateLines:function(){ this.element.find('span[role="connec"]').removeClass('tree-connecLast'); this.element.find('span[role="container"]').removeClass('tree-rowlast'); $(this.element).find('div[class="tree-node-sep"]').remove(); this.element.find('li').removeClass('last-li'); this.element.find('ul').each(function(){ if($(this).children().length==0){ var node=$(this).parent().data('tree-node'); node.hasChildren=false; node.expander.attr('role','connec'); node.expander.removeClass('expander expander-open') node.expander.addClass('tree-connec') } }) //this.element.find('li:last-child').('span[role="connec"]').addClass('tree-connecLast'); this.element.find('li:last-child').each(function(){ //console.info(this) $(this).removeClass('last-li'); $(this).addClass('last-li'); }) this.element.find('li:last-child').children('span[role="container"]').addClass('tree-rowlast').children('span[role="connec"]').addClass('tree-connecLast'); $(this.element).find('li').after('<div class="tree-node-sep" role="separator"></div>'); this.addDrops($(this.element).find('div[class="tree-node-sep"]')); //this.element.find('li:last-child').addClass('last-li'); console.log('updateLines') }, getChecked:function(){ var checked=new Array(); $(this.element).find('li').each(function(){ if($(this).data('tree-node')){ var node=$(this).data('tree-node'); if(node.check) checked.push(node); } }) return checked; }, getSelected:function(){ var selected; $(this.element).find('li:has(.node-tree-select)').each(function(){ if($(this).data('tree-node')){ var node=$(this).data('tree-node'); selected=node; } }) return selected; }, orderBy:function(elementos, orden){ var $this=this; elementos.sort(function(a, b) { var compA = $this.omitirAcentos(a.text.toUpperCase()); var compB = $this.omitirAcentos(b.text.toUpperCase()); return (compA < compB) ? -1 : (compA > compB) ? 1 : 0; }) }, omitirAcentos:function(text) { var acentos = "ÃÀÁÄÂÈÉËÊÌÍÏÎÒÓÖÔÙÚÜÛãàáäâèéëêìíïîòóöôùúüûÑñÇç"; var original = "AAAAAEEEEIIIIOOOOUUUUaaaaaeeeeiiiioooouuuunncc"; for (var i=0; i<acentos.length; i++) { text = text.replace(acentos.charAt(i), original.charAt(i)); } return text; } } $.fn.vuTree=function(options){ var publicFunctions=['getSelected','getChecked'] if(typeof options=='object'){ var t=new VU.Components.Tree(options,this); $(this).data('vuTree',t); } if(typeof options=='string'){ var tree=$(this).data('vuTree'); if(publicFunctions.indexOf(options)>=0){ return tree[options](); }else throw options+" no es una funcion publica valida"; } } var DragDrop=function(){ this.init(); } DragDrop.prototype={ init:function(){ this.moving=false; this.dropElement=undefined; this.dragElement=undefined; var $this=this; $('body').mouseup(function(e){ $this.moving=false; if($this.item){ $this.item.css({ opacity:1}); $this.item.remove(); $this.item.empty(); if($this.dropElement){ $($this.dropElement).trigger({ type:'drop', source:$this.dragElement, target:$this.dropElement }); $($this.dropElement).removeClass('drop-el') $this.dropElement=undefined; $this.dragElement=undefined; $this.item=undefined; } } }) $('body').mousemove(function(e){ if($this.moving){ if($this.item){ $this.item.css({ "position" : "absolute","left":e.pageX+30,"top":e.pageY-30}) //console.debug(e.target) } } }) }, prepareEls:function(source,target){ }, targets:function(target){ var $this=this; this.target=target; target.hover(function(e){ if($this.moving){ if($this.item&&$this.dragElement.get(0)!=this){ $this.item.addClass('item-drop-green'); $this.item.removeClass('item-drop-red'); $this.item.css({'background':'green'}); $this.dropElement=$(this); var data=$(this).data('tree-node'); //if(data) // $this.item.html(data.options.text) $(this).addClass('drop-el') } } },function(){ if($this.moving){ if($this.item){ $this.item.addClass('item-drop-red'); $this.item.removeClass('item-drop-green'); $this.item.css({'background':'red'}); $this.dropElement=undefined; //$this.item.html('') $(this).removeClass('drop-el') } } }) }, move:function(element){ this.moving=false; var from={}; var $this=this; element.mousedown(function(e){ $this.moving=true; var that=this; setTimeout(function(){ if($this.moving){ if($this.item) $this.item.remove(); $this.item=$('<div></div>'); $this.item.addClass('item-drop-red'); $this.item.css({'background':'red',height:20,position:'absolute'}); from.x=e.pageX; from.y=e.pageY; $this.item.appendTo('body'); var offset = $this.item.offset(); from.sobX=from.x-offset.left; from.sobY=from.y-offset.top; $this.item.css({left:e.pageX+30,top:e.pageY-30}); //$this.item.append($(that).clone()) $this.dragElement=$(that); $this.item.html($this.onDrag($this.dragElement)) //$this.item.html($(that).find('span[role="text"]').html()) //console.info(that) //e.stopPropagation(); } },1000) e.stopPropagation(); }) }, on:function(e,fun,scope){ if(e==='drag'){ this.onDrag=function(el){ return fun.call(scope,el); } } } } window.DragDrop=new DragDrop(); //$('.branch').slideUp(); }(window.jQuery);