new static files.
Signed-off-by: rscnt <rascnt@gmail.com>
This commit is contained in:
		
					parent
					
						
							
								5da7cfab99
							
						
					
				
			
			
				commit
				
					
						bb68c32ba5
					
				
			
		
					 772 changed files with 71557 additions and 0 deletions
				
			
		
							
								
								
									
										
											BIN
										
									
								
								static/treebeard/expand-collapse.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/treebeard/expand-collapse.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1,020 B | 
							
								
								
									
										1816
									
								
								static/treebeard/jquery-ui-1.8.5.custom.min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1816
									
								
								static/treebeard/jquery-ui-1.8.5.custom.min.js
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										83
									
								
								static/treebeard/treebeard-admin.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								static/treebeard/treebeard-admin.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | |||
| /* Treebeard Admin */ | ||||
| 
 | ||||
| #roots { | ||||
|     margin: 0; | ||||
|     padding: 0; | ||||
| } | ||||
| 
 | ||||
| #roots li { | ||||
|     list-style: none; | ||||
|     padding: 5px !important; | ||||
|     line-height: 13px; | ||||
|     border-bottom: 1px solid #EEE; | ||||
| } | ||||
| 
 | ||||
| #roots li a { | ||||
|     font-weight: bold; | ||||
|     font-size: 12px; | ||||
| } | ||||
| 
 | ||||
| #roots li input { | ||||
|     margin: 0 5px; | ||||
| } | ||||
| 
 | ||||
| .oder-grabber { | ||||
|     width: 1.5em; | ||||
|     text-align: center; | ||||
| } | ||||
| 
 | ||||
| .drag-handler span { | ||||
|     width: 16px; | ||||
|     background: transparent url(expand-collapse.png) no-repeat left -48px; | ||||
|     height: 16px; | ||||
|     margin: 0 5px; | ||||
|     display: inline-block; | ||||
| } | ||||
| 
 | ||||
| .drag-handler span.active { | ||||
|     background: transparent url(expand-collapse.png) no-repeat left -32px; | ||||
|     cursor: move; | ||||
| } | ||||
| 
 | ||||
| .spacer { | ||||
|     width: 10px; | ||||
|     margin: 0 10px; | ||||
| } | ||||
| 
 | ||||
| .collapse { | ||||
|     width: 16px; | ||||
|     height: 16px; | ||||
|     display: inline-block; | ||||
|     text-indent: -999px; | ||||
| } | ||||
| 
 | ||||
| .collapsed { | ||||
|     background: transparent url(expand-collapse.png) no-repeat left -16px; | ||||
| } | ||||
| 
 | ||||
| .expanded { | ||||
|     background: transparent url(expand-collapse.png) no-repeat left 0; | ||||
| } | ||||
| 
 | ||||
| #drag_line { | ||||
|     border-top: 5px solid #A0A; | ||||
|     background: #A0A; | ||||
|     display: block; | ||||
|     position: absolute; | ||||
| } | ||||
| 
 | ||||
| #drag_line span { | ||||
|     position: relative; | ||||
|     display: block; | ||||
|     width: 100px; | ||||
|     background: #FFD; | ||||
|     color: #000; | ||||
|     left: 100px; | ||||
|     text-align: center; | ||||
|     border: 1px solid #000; | ||||
|     vertical-align: center; | ||||
| } | ||||
| 
 | ||||
| /*tr:target { I'm handling the highlight with js to have more control | ||||
| background-color: #FF0; | ||||
| }*/ | ||||
							
								
								
									
										314
									
								
								static/treebeard/treebeard-admin.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										314
									
								
								static/treebeard/treebeard-admin.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,314 @@ | |||
| (function ($) { | ||||
| // Ok, let's do eeet
 | ||||
| 
 | ||||
|     ACTIVE_NODE_BG_COLOR = '#B7D7E8'; | ||||
|     RECENTLY_MOVED_COLOR = '#FFFF00'; | ||||
|     RECENTLY_MOVED_FADEOUT = '#FFFFFF'; | ||||
|     ABORT_COLOR = '#EECCCC'; | ||||
|     DRAG_LINE_COLOR = '#AA00AA'; | ||||
| 
 | ||||
|     RECENTLY_FADE_DURATION = 2000; | ||||
| 
 | ||||
| // This is the basic Node class, which handles UI tree operations for each 'row'
 | ||||
|     var Node = function (elem) { | ||||
|         var $elem = $(elem); | ||||
|         var node_id = $elem.attr('node'); | ||||
|         var parent_id = $elem.attr('parent'); | ||||
|         var level = parseInt($elem.attr('level')); | ||||
|         var children_num = parseInt($elem.attr('children-num')); | ||||
|         return { | ||||
|             elem: elem, | ||||
|             $elem: $elem, | ||||
|             node_id: node_id, | ||||
|             parent_id: parent_id, | ||||
|             level: level, | ||||
|             has_children: function () { | ||||
|                 return children_num > 0; | ||||
|             }, | ||||
|             node_name: function () { | ||||
|                 // Returns the text of the node
 | ||||
|                 return $elem.find('th a:not(.collapse)').text(); | ||||
|             }, | ||||
|             is_collapsed: function () { | ||||
|                 return $elem.find('a.collapse').hasClass('collapsed'); | ||||
|             }, | ||||
|             children: function () { | ||||
|                 return $('tr[parent=' + node_id + ']'); | ||||
|             }, | ||||
|             collapse: function () { | ||||
|                 // For each children, hide it's childrens and so on...
 | ||||
|                 $.each(this.children(),function () { | ||||
|                     var node = new Node(this); | ||||
|                     node.collapse(); | ||||
|                 }).hide(); | ||||
|                 // Swicth class to set the proprt expand/collapse icon
 | ||||
|                 $elem.find('a.collapse').removeClass('expanded').addClass('collapsed'); | ||||
|             }, | ||||
|             parent_node: function () { | ||||
|                 // Returns a Node object of the parent
 | ||||
|                 return new Node($('tr[node=' + parent_id + ']', $elem.parent())[0]); | ||||
|             }, | ||||
|             expand: function () { | ||||
|                 // Display each kid (will display in collapsed state)
 | ||||
|                 this.children().show(); | ||||
|                 // Swicth class to set the proprt expand/collapse icon
 | ||||
|                 $elem.find('a.collapse').removeClass('collapsed').addClass('expanded'); | ||||
| 
 | ||||
|             }, | ||||
|             toggle: function () { | ||||
|                 if (this.is_collapsed()) { | ||||
|                     this.expand(); | ||||
|                 } else { | ||||
|                     this.collapse(); | ||||
|                 } | ||||
|             }, | ||||
|             clone: function () { | ||||
|                 return $elem.clone(); | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     $(document).ready(function () { | ||||
| 
 | ||||
|         // begin csrf token code
 | ||||
|         // Taken from http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
 | ||||
|         $(document).ajaxSend(function (event, xhr, settings) { | ||||
|             function getCookie(name) { | ||||
|                 var cookieValue = null; | ||||
|                 if (document.cookie && document.cookie != '') { | ||||
|                     var cookies = document.cookie.split(';'); | ||||
|                     for (var i = 0; i < cookies.length; i++) { | ||||
|                         var cookie = jQuery.trim(cookies[i]); | ||||
|                         // Does this cookie string begin with the name we want?
 | ||||
|                         if (cookie.substring(0, name.length + 1) == (name + '=')) { | ||||
|                             cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); | ||||
|                             break; | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 return cookieValue; | ||||
|             } | ||||
| 
 | ||||
|             if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { | ||||
|                 // Only send the token to relative URLs i.e. locally.
 | ||||
|                 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); | ||||
|             } | ||||
|         }); | ||||
|         // end csrf token code
 | ||||
| 
 | ||||
| 
 | ||||
|         // Don't activate drag or collapse if GET filters are set on the page
 | ||||
|         if ($('#has-filters').val() === "1") { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         $body = $('body'); | ||||
| 
 | ||||
|         // Activate all rows for drag & drop
 | ||||
|         // then bind mouse down event
 | ||||
|         $('td.drag-handler span').addClass('active').bind('mousedown', function (evt) { | ||||
|             $ghost = $('<div id="ghost"></div>'); | ||||
|             $drag_line = $('<div id="drag_line"><span></span></div>'); | ||||
|             $ghost.appendTo($body); | ||||
|             $drag_line.appendTo($body); | ||||
| 
 | ||||
|             var stop_drag = function () { | ||||
|                 $ghost.remove(); | ||||
|                 $drag_line.remove(); | ||||
|                 $body.enableSelection().unbind('mousemove').unbind('mouseup'); | ||||
|                 node.elem.removeAttribute('style'); | ||||
|             }; | ||||
| 
 | ||||
|             // Create a clone create the illusion that we're moving the node
 | ||||
|             var node = new Node($(this).closest('tr')[0]); | ||||
|             cloned_node = node.clone(); | ||||
|             node.$elem.css({ | ||||
|                 'background': ACTIVE_NODE_BG_COLOR | ||||
|             }); | ||||
| 
 | ||||
|             $targetRow = null; | ||||
|             as_child = false; | ||||
| 
 | ||||
|             // Now make the new clone move with the mouse
 | ||||
|             $body.disableSelection().bind('mousemove',function (evt2) { | ||||
|                 $ghost.html(cloned_node).css({  // from FeinCMS :P
 | ||||
|                     'opacity': .8, | ||||
|                     'position': 'absolute', | ||||
|                     'top': evt2.pageY, | ||||
|                     'left': evt2.pageX - 30, | ||||
|                     'width': 600 | ||||
|                 }); | ||||
|                 // Iterate through all rows and see where am I moving so I can place
 | ||||
|                 // the drag line accordingly
 | ||||
|                 rowHeight = node.$elem.height(); | ||||
|                 $('tr', node.$elem.parent()).each(function (index, element) { | ||||
|                     $row = $(element); | ||||
|                     rtop = $row.offset().top; | ||||
|                     // The tooltop will display whether I'm droping the element as
 | ||||
|                     // child or sibling
 | ||||
|                     $tooltip = $drag_line.find('span'); | ||||
|                     $tooltip.css({ | ||||
|                         'left': node.$elem.width() - $tooltip.width(), | ||||
|                         'height': rowHeight, | ||||
|                     }); | ||||
|                     node_top = node.$elem.offset().top; | ||||
|                     // Check if you are dragging over the same node
 | ||||
|                     if (evt2.pageY >= node_top && evt2.pageY <= node_top + rowHeight) { | ||||
|                         $targetRow = null; | ||||
|                         $tooltip.text(gettext('Abort')); | ||||
|                         $drag_line.css({ | ||||
|                             'top': node_top, | ||||
|                             'height': rowHeight, | ||||
|                             'borderWidth': 0, | ||||
|                             'opacity': 0.8, | ||||
|                             'backgroundColor': ABORT_COLOR | ||||
|                         }); | ||||
|                     } else | ||||
|                     // Check if mouse is over this row
 | ||||
|                     if (evt2.pageY >= rtop && evt2.pageY <= rtop + rowHeight / 2) { | ||||
|                         // The mouse is positioned on the top half of a $row
 | ||||
|                         $targetRow = $row; | ||||
|                         as_child = false; | ||||
|                         $drag_line.css({ | ||||
|                             'left': node.$elem.offset().left, | ||||
|                             'width': node.$elem.width(), | ||||
|                             'top': rtop, | ||||
|                             'borderWidth': '5px', | ||||
|                             'height': 0, | ||||
|                             'opacity': 1 | ||||
|                         }); | ||||
|                         $tooltip.text(gettext('As Sibling')); | ||||
|                     } else if (evt2.pageY >= rtop + rowHeight / 2 && evt2.pageY <= rtop + rowHeight) { | ||||
|                         // The mouse is positioned on the bottom half of a row
 | ||||
|                         $targetRow = $row; | ||||
|                         target_node = new Node($targetRow[0]); | ||||
|                         if (target_node.is_collapsed()) { | ||||
|                             target_node.expand(); | ||||
|                         } | ||||
|                         as_child = true; | ||||
|                         $drag_line.css({ | ||||
|                             'top': rtop, | ||||
|                             'left': node.$elem.offset().left, | ||||
|                             'height': rowHeight, | ||||
|                             'opacity': 0.4, | ||||
|                             'width': node.$elem.width(), | ||||
|                             'borderWidth': 0, | ||||
|                             'backgroundColor': DRAG_LINE_COLOR | ||||
|                         }); | ||||
|                         $tooltip.text(gettext('As child')); | ||||
|                     } | ||||
|                 }); | ||||
|             }).bind('mouseup',function () { | ||||
|                     if ($targetRow !== null) { | ||||
|                         target_node = new Node($targetRow[0]); | ||||
|                         if (target_node.node_id !== node.node_id) { | ||||
|                             /*alert('Insert node ' + node.node_name() + ' as child of: ' | ||||
|                              + target_node.parent_node().node_name() + '\n and sibling of: ' | ||||
|                              + target_node.node_name());*/ | ||||
|                             // Call $.ajax so we can handle the error
 | ||||
|                             // On Drop, make an XHR call to perform the node move
 | ||||
|                             $.ajax({ | ||||
|                                 url: window.MOVE_NODE_ENDPOINT, | ||||
|                                 type: 'POST', | ||||
|                                 data: { | ||||
|                                     node_id: node.node_id, | ||||
|                                     parent_id: target_node.parent_id, | ||||
|                                     sibling_id: target_node.node_id, | ||||
|                                     as_child: as_child ? 1 : 0 | ||||
|                                 }, | ||||
|                                 complete: function (req, status) { | ||||
|                                     // http://stackoverflow.com/questions/1439895/add-a-hash-with-javascript-to-url-without-scrolling-page/1439910#1439910
 | ||||
|                                     node.$elem.remove(); | ||||
|                                     window.location.hash = 'node-' + node.node_id; | ||||
|                                     window.location.reload(); | ||||
|                                 }, | ||||
|                                 error: function (req, status, error) { | ||||
|                                     // On error (!200) also reload to display
 | ||||
|                                     // the message
 | ||||
|                                     node.$elem.remove(); | ||||
|                                     window.location.hash = 'node-' + node.node_id; | ||||
|                                     window.location.reload(); | ||||
|                                 } | ||||
|                             }); | ||||
|                         } | ||||
|                     } | ||||
|                     stop_drag(); | ||||
|                 }).bind('keyup', function (kbevt) { | ||||
|                     // Cancel drag on escape
 | ||||
|                     if (kbevt.keyCode === 27) { | ||||
|                         stop_drag(); | ||||
|                     } | ||||
|                 }); | ||||
|         }); | ||||
| 
 | ||||
|         $('a.collapse').click(function () { | ||||
|             var node = new Node($(this).closest('tr')[0]); // send the DOM node, not jQ
 | ||||
|             node.toggle(); | ||||
|             return false; | ||||
|         }); | ||||
|         var hash = window.location.hash; | ||||
|         // This is a hack, the actual element's id ends in '-id' but the url's hash
 | ||||
|         // doesn't, I'm doing this to avoid scrolling the page... is that a good thing?
 | ||||
|         if (hash) { | ||||
|             $(hash + '-id').animate({ | ||||
|                 backgroundColor: RECENTLY_MOVED_COLOR | ||||
|             }, RECENTLY_FADE_DURATION, function () { | ||||
|                 $(this).animate({ | ||||
|                     backgroundColor: RECENTLY_MOVED_FADEOUT | ||||
|                 }, RECENTLY_FADE_DURATION, function () { | ||||
|                     this.removeAttribute('style'); | ||||
|                 }); | ||||
|             }); | ||||
|         } | ||||
|     }); | ||||
| })(django.jQuery); | ||||
| 
 | ||||
| // http://stackoverflow.com/questions/190560/jquery-animate-backgroundcolor/2302005#2302005
 | ||||
| (function (d) { | ||||
|     d.each(["backgroundColor", "borderBottomColor", "borderLeftColor", "borderRightColor", "borderTopColor", "color", "outlineColor"], function (f, e) { | ||||
|         d.fx.step[e] = function (g) { | ||||
|             if (!g.colorInit) { | ||||
|                 g.start = c(g.elem, e); | ||||
|                 g.end = b(g.end); | ||||
|                 g.colorInit = true | ||||
|             } | ||||
|             g.elem.style[e] = "rgb(" + [Math.max(Math.min(parseInt((g.pos * (g.end[0] - g.start[0])) + g.start[0]), 255), 0), Math.max(Math.min(parseInt((g.pos * (g.end[1] - g.start[1])) + g.start[1]), 255), 0), Math.max(Math.min(parseInt((g.pos * (g.end[2] - g.start[2])) + g.start[2]), 255), 0)].join(",") + ")" | ||||
|         } | ||||
|     }); | ||||
|     function b(f) { | ||||
|         var e; | ||||
|         if (f && f.constructor == Array && f.length == 3) { | ||||
|             return f | ||||
|         } | ||||
|         if (e = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(f)) { | ||||
|             return[parseInt(e[1]), parseInt(e[2]), parseInt(e[3])] | ||||
|         } | ||||
|         if (e = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(f)) { | ||||
|             return[parseFloat(e[1]) * 2.55, parseFloat(e[2]) * 2.55, parseFloat(e[3]) * 2.55] | ||||
|         } | ||||
|         if (e = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(f)) { | ||||
|             return[parseInt(e[1], 16), parseInt(e[2], 16), parseInt(e[3], 16)] | ||||
|         } | ||||
|         if (e = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(f)) { | ||||
|             return[parseInt(e[1] + e[1], 16), parseInt(e[2] + e[2], 16), parseInt(e[3] + e[3], 16)] | ||||
|         } | ||||
|         if (e = /rgba\(0, 0, 0, 0\)/.exec(f)) { | ||||
|             return a.transparent | ||||
|         } | ||||
|         return a[d.trim(f).toLowerCase()] | ||||
|     } | ||||
| 
 | ||||
|     function c(g, e) { | ||||
|         var f; | ||||
|         do { | ||||
|             f = d.css(g, e); | ||||
|             if (f != "" && f != "transparent" || d.nodeName(g, "body")) { | ||||
|                 break | ||||
|             } | ||||
|             e = "backgroundColor" | ||||
|         } while (g = g.parentNode); | ||||
|         return b(f) | ||||
|     } | ||||
| 
 | ||||
|     var a = {aqua: [0, 255, 255], azure: [240, 255, 255], beige: [245, 245, 220], black: [0, 0, 0], blue: [0, 0, 255], brown: [165, 42, 42], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgrey: [169, 169, 169], darkgreen: [0, 100, 0], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkviolet: [148, 0, 211], fuchsia: [255, 0, 255], gold: [255, 215, 0], green: [0, 128, 0], indigo: [75, 0, 130], khaki: [240, 230, 140], lightblue: [173, 216, 230], lightcyan: [224, 255, 255], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightyellow: [255, 255, 224], lime: [0, 255, 0], magenta: [255, 0, 255], maroon: [128, 0, 0], navy: [0, 0, 128], olive: [128, 128, 0], orange: [255, 165, 0], pink: [255, 192, 203], purple: [128, 0, 128], violet: [128, 0, 128], red: [255, 0, 0], silver: [192, 192, 192], white: [255, 255, 255], yellow: [255, 255, 0], transparent: [255, 255, 255]} | ||||
| })(django.jQuery); | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue