Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Thu, Feb 6, 10:46 AM

in-portal

Index: branches/RC/core/admin_templates/js/drag.js
===================================================================
--- branches/RC/core/admin_templates/js/drag.js (nonexistent)
+++ branches/RC/core/admin_templates/js/drag.js (revision 9276)
@@ -0,0 +1,90 @@
+function DragManager() {}
+
+DragManager.DragObject = null;
+DragManager.LastDragObject = null;
+DragManager.MouseOffset = [0,0];
+DragManager.ResizeHappening = false;
+DragManager.ResizeTimer = null;
+DragManager.InitialPos = null;
+
+DragManager.mouseCoords = function(ev)
+{
+ if(ev.pageX || ev.pageY){
+ var res = {x:ev.pageX, y:ev.pageY};
+ }
+ else {
+ var res = {
+ x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
+ y:ev.clientY + document.body.scrollTop - document.body.clientTop
+ };
+ }
+ return res;
+}
+
+DragManager.MakeDragable = function(object_id, startCallback, moveCallback, endCallback)
+{
+ var Object = document.getElementById(object_id);
+ Object.onmousedown = function(ev){
+ ev = ev || window.event;
+ DragManager.InitialPos = findPos(Object);
+ var coords = DragManager.mouseCoords(ev);
+ var pos = findPos(this);
+ DragManager.MouseOffset = [coords.x - pos[0], coords.y - pos[1]];
+ DragManager.DragObject = this;
+ DragManager.LastDragObject = this;
+ DragManager.DragObject.style.position = 'absolute';
+ startCallback(Object);
+ }
+ document.onmousemove = function(ev){
+ ev = ev || window.event;
+ var coords = DragManager.mouseCoords(ev);
+// window.status = 'mouse at: '+coords.x+','+coords.y;
+ if(DragManager.DragObject){
+// DragManager.DragObject.style.top = (coords.y - DragManager.MouseOffset[1] ) + 'px' // ;
+ DragManager.DragObject.style.left = (coords.x - DragManager.MouseOffset[0] ) + 'px' // ;
+
+ moveCallback(Object, coords)
+ return false;
+ }
+ }
+ document.onmouseup = function(ev){
+ var tmp = DragManager.DragObject;
+ DragManager.DragObject = null;
+ if(tmp){
+ endCallback(tmp);
+ }
+ }
+}
+
+function init_resizer()
+{
+ DragManager.MakeDragable('resizer', resize_start,
+ function(drag_object, coords) {
+ if (DragManager.ResizeHappening && DragManager.ResizeTimer) {
+ window.clearTimeout(DragManager.ResizeTimer);
+ DragManager.ResizeTimer = false;
+ }
+ DragManager.ResizeHappening = true;
+ DragManager.ResizeTimer = window.setTimeout(function() {
+ var col = document.getElementById('col_a');
+ var dim = getDimensions(col);
+// print_pre(dim);
+ w = dim.innerWidth + (is.ie ? 0 : Math.round((dim.borders[1] + dim.borders[2])/2)) + (coords.x - DragManager.MouseOffset[0] - DragManager.InitialPos[0]);
+ col.style.width = w+'px';
+// alert(' started at '+DragManager.InitialPos[0]+' with offset '+DragManager.MouseOffset[0]+' now coord: '+coords.x+' after setting w to '+w+' is inner: '+col.clientWidth + ' offset: '+col.offsetWidth)
+ DragManager.ResizeHappening = false;
+ DragManager.InitialPos = [coords.x - DragManager.MouseOffset[0], coords.y - DragManager.MouseOffset[1]];
+ }, 100)
+
+ }, resize_end)
+}
+
+function resize_start(obj)
+{
+// alert('start at '+DragManager.InitialPos[0]);
+}
+
+function resize_end(obj)
+{
+// alert('end');
+}
\ No newline at end of file
Property changes on: branches/RC/core/admin_templates/js/drag.js
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property
Index: branches/RC/core/admin_templates/js/ajax_dropdown.js
===================================================================
--- branches/RC/core/admin_templates/js/ajax_dropdown.js (nonexistent)
+++ branches/RC/core/admin_templates/js/ajax_dropdown.js (revision 9276)
@@ -0,0 +1,269 @@
+/*
+(c) Intechnic Europe 2007 http://www.intechnic.lv
+Author: Konstantin Tjuterev
+
+The class adds a dynamic drop-down to the edit-box
+Usage:
+
+<input type="text" id="combo_input" style="width: 200px"><br/>
+<input type="text" id="combo_input1" style="width: 200px"><br/>
+<script type="text/javascript">
+ new AJAXDropDown('combo_input', function(cur_value) {return 'items.xml?'}, function(item) {
+ var val = item.getAttribute('a');
+ return val ? val : item.innerHTML;
+ });
+ new AJAXDropDown('combo_input1', function(cur_value) {return 'items1.xml?cur='+escape(cur_value)});
+</script>
+
+The AJAXDropDown constructor takes the following arguments:
+ input_id - id of textbox to attach to
+ suggest_url_callback - function which should return URL which returns XML of suggested values,
+ function takes one argument - it is current value of the text_box
+ [get_value_callback] - optional argument - function which returns the value to be set in the textbox,
+ based on currently selected item (out of suggested). If the argument is skipped - the node value of
+ <item> element will be used as the value
+ <item> element in the suggestions XML may have unlimited number of attribuets, all the attributes will be set
+ to the corresponding DIV element and this DIV element will be passed as argument to the get_value_callback,
+ so one may use the argument to alter the value set into textbox as in the example above
+
+Response XML structure:
+ The script will look for ALL elements with tagname = 'item', so basically the structure should look like this:
+
+ <suggestions>
+ <item>Suggestion 1</item>
+ <item>Suggestion 2</item>
+ <item>Suggestion 3</item>
+ </suggestions>
+
+Design & CSS
+ The script will automatically display a div which width will match the width of the text-box
+ You may control the div look by changing .suggest-box CSS selector
+ The items inside the box will have .suggest-item and .suggest-item-over
+
+ The default styles which may be used is:
+
+ <style type="text/css">
+ .suggest-box {
+ border: 1px solid #999;
+ background-color: #fff;
+ }
+
+ .suggest-item, .suggest-item-over {
+ padding: 1px 2px 0px 2px;
+ font-family: arial,verdana;
+ font-size: 12px;
+ }
+
+ .suggest-item-over {
+ background-color: #3366CC;
+ color: #fff;
+ }
+
+ </style>
+
+*/
+
+
+function AJAXDropDown(input_id, suggest_url_callback, get_value_callback)
+{
+ this.Input = document.getElementById(input_id);
+ this.KeyUpWaiting = false;
+ this.KeyUpTimer = false;
+ this.Box = '';
+ this.SuggestURLCallback = suggest_url_callback;
+ if (!get_value_callback) get_value_callback = this.GetValue;
+ this.GetValueCallback = get_value_callback;
+ this.BoxOpen = false;
+ this.SelectedItem = false;
+ var obj = this;
+ addLoadEvent(function() {obj.Init()});
+}
+
+AJAXDropDown.prototype.Init = function()
+{
+ // draw box
+ this.Box = document.createElement('DIV');
+ document.body.appendChild(this.Box);
+
+// this.Box = addElement(this.Input.parentNode, 'div');
+ this.Box.style.display = 'none';
+ this.Box.style.zIndex = 99;
+ this.Box.style.position = 'absolute';
+ this.Box.style.overflow = 'auto';
+ this.Box.className = 'suggest-box'
+
+ // add onkeyup
+ var obj = this;
+ addEvent(this.Input, 'keyup', function(ev) {obj.KeyUp(ev)})
+ addEvent(this.Input, 'blur', function(ev) {obj.Blur(ev)})
+ addEvent(this.Box, 'scroll', function(ev) {if (obj.BlurWaiting) {window.clearTimeout(obj.BlurTimer);}});
+ addEvent(this.Box, 'mouseup', function(ev) {obj.BlurWaiting = false});
+}
+
+AJAXDropDown.prototype.Blur = function(ev)
+{
+ if (this.BlurWaiting) return;
+ this.BlurWaiting = true;
+ var obj = this;
+ this.BlurTimer = window.setTimeout(function() {
+ obj.CloseBox();
+ this.BlurWaiting = false;
+ }, 300)
+}
+
+AJAXDropDown.prototype.KeyUp = function(ev)
+{
+ var e = !is.ie ? ev : window.event;
+ switch (e.keyCode) {
+ case 38: //arrow up
+ if (!this.BoxOpen) break;
+ this.SelectPrev();
+ break;
+ case 40: //arrow down
+ if (!this.BoxOpen) break;
+ this.SelectNext();
+ break;
+ case 27: //arrow down
+ this.Input.value = this.OriginalValue;
+ this.CloseBox();
+ break;
+ case 13: //arrow down
+ this.CloseBox();
+ break;
+ default:
+ if (this.Input.value == '') return;
+ var obj = this;
+ if (this.KeyUpWaiting && this.KeyUpTimer) {
+ window.clearTimeout(this.KeyUpTimer);
+ this.KeyUpTimer = false;
+ }
+ this.KeyUpWaiting = true;
+ this.KeyUpTimer = window.setTimeout(function() {
+ obj.RequestSuggestions();
+ }, 300)
+ }
+}
+
+AJAXDropDown.prototype.RequestSuggestions = function()
+{
+ Request.makeRequest(this.SuggestURLCallback(this.Input.value), false, '', this.successCallback, this.errorCallback, 'reload', this);
+}
+
+AJAXDropDown.prototype.successCallback = function (request, params, object) {
+ object.OriginalValue = object.Input.value;
+ object.OpenBox();
+ object.KeyUpWaiting = false;
+ var items = request.responseXML.getElementsByTagName('item');
+ object.ClearItems();
+ for (var i=0; i<items.length; i++)
+ {
+ object.AddItem(items[i].firstChild.nodeValue, items[i].attributes);
+ }
+}
+
+AJAXDropDown.prototype.errorCallback = function (request, params, object) {
+ this.KeyUpWaiting = false;
+}
+
+AJAXDropDown.prototype.ClearItems = function()
+{
+ this.Box.scrollTop = 0;
+ this.UnselectItem();
+ for (var i=this.Box.childNodes.length-1; i>=0; i--)
+ {
+ this.Box.removeChild(this.Box.childNodes[i]);
+ }
+}
+
+AJAXDropDown.prototype.OpenBox = function()
+{
+ var pos = findPos(this.Input);
+ var dim = getDimensions(this.Input);
+ this.Box.style.left = pos[0] + 'px';
+ this.Box.style.top = (pos[1] + dim.innerHeight + dim.borders[0] + dim.borders[2]) + 'px';
+ this.Box.style.width = (dim.innerWidth + dim.borders[1] + (is.ie ? dim.borders[3] : 0 ) ) + 'px';
+ this.Box.style.display = 'block';
+// alert('box opened at '+this.Box.style.left+','+this.Box.style.top+' pos x:'+pos[0])
+ this.BoxOpen = true;
+}
+
+AJAXDropDown.prototype.CloseBox = function()
+{
+ if (!this.BoxOpen) return;
+ this.Box.style.display = 'none';
+ this.BoxOpen = false;
+}
+
+AJAXDropDown.prototype.AddItem = function(value, attributes)
+{
+ var item = addElement(this.Box, 'div');
+ for (var i=0; i<attributes.length; i++) {
+ item.setAttribute(attributes[i].nodeName, attributes[i].nodeValue)
+ }
+ item.className = 'suggest-item';
+ item.innerHTML = value;
+ var obj = this;
+ addEvent(item, 'mousemove', function() {obj.SelectItem(item)});
+ addEvent(item, 'mousedown', function() {obj.ClickItem(item)});
+}
+
+AJAXDropDown.prototype.ClickItem = function(item)
+{
+ this.Input.value = item.innerHTML;
+ this.CloseBox();
+}
+
+AJAXDropDown.prototype.SelectNext = function()
+{
+ if (!this.SelectedItem) {
+ this.SelectItem(this.Box.firstChild, true);
+ return;
+ }
+ if (isset(this.SelectedItem.nextSibling)) {
+ this.SelectItem(this.SelectedItem.nextSibling, true)
+ }
+ else { // down from last
+ this.UnselectItem();
+ this.Input.value = this.OriginalValue;
+ }
+}
+
+AJAXDropDown.prototype.SelectPrev = function()
+{
+ if (!this.SelectedItem) {
+ this.SelectItem(this.Box.lastChild, true);
+ return;
+ }
+ if (isset(this.SelectedItem.previousSibling)) {
+ this.SelectItem(this.SelectedItem.previousSibling, true)
+ }
+ else { // up from first
+ this.UnselectItem();
+ this.Input.value = this.OriginalValue;
+ }
+}
+
+AJAXDropDown.prototype.UnselectItem = function(item)
+{
+ if (!item) item = this.SelectedItem;
+ if (!item) return;
+ item.className = 'suggest-item';
+ this.SelectedItem = false;
+}
+
+
+AJAXDropDown.prototype.SelectItem = function(item, setvalue)
+{
+ if (this.SelectedItem) {
+ this.UnselectItem(this.SelectedItem);
+ }
+ item.className = 'suggest-item-over';
+ this.SelectedItem = item;
+ item.scrollIntoView(false);
+ if (setvalue) this.Input.value = this.GetValueCallback(item);
+}
+
+AJAXDropDown.prototype.GetValue = function(item)
+{
+ return item.innerHTML;
+}
Property changes on: branches/RC/core/admin_templates/js/ajax_dropdown.js
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.1.2.1
\ No newline at end of property

Event Timeline