source: main/trunk/greenstone3/web/interfaces/default/js/debug_scripts.js@ 26462

Last change on this file since 26462 was 26462, checked in by sjm84, 11 years ago

Fixing some minor bugs

  • Property svn:executable set to *
File size: 5.2 KB
Line 
1function DebugWidget()
2{
3 //Private member variables
4 var _debugOn = false;
5 var _pauseSelector = false;
6 var _elements = new Array();
7 var _itemSelected = false; //Used to prevent multiple elements from being highlighted
8 var _mainDiv;
9 var _textDiv;
10 var _unpauseButton;
11
12 var createDebugDiv = function()
13 {
14 _mainDiv = $("<div>", {"id":"debugDiv", "class":"ui-corner-all"});
15 _mainDiv.css(
16 {
17 "position":"fixed",
18 "font-size":"0.7em",
19 "bottom":"0px",
20 "height":"25%",
21 "width":"100%",
22 "background":"white",
23 "border":"1px black solid",
24 "padding":"5px"
25 });
26
27 var toolBarDiv = $("<div>");
28 toolBarDiv.css({"height":"15%"});
29 _textDiv = $("<div>");
30 _textDiv.css({"overflow":"auto", "width":"100%", "height":"85%", "margin-top":"5px"});
31 var pickElementButton = $("<input type=\"button\" value=\"Enable debugging\">");
32 pickElementButton.click(function()
33 {
34 if(!_debugOn)
35 {
36 pickElementButton.attr("value", "Disable debugging");
37 $("a").click(function(e)
38 {
39 e.preventDefault();
40 });
41 _debugOn = true;
42 }
43 else
44 {
45 pickElementButton.attr("value", "Enable debugging");
46 $("a").off("click");
47 clearAll();
48 _unpauseButton.attr("disabled", "disabled");
49 _pauseSelector = false;
50 _debugOn = false;
51 }
52 });
53 _unpauseButton = $("<input type=\"button\" value=\"Select new element\" disabled=\"disabled\">");
54 _unpauseButton.click(function()
55 {
56 if(_pauseSelector)
57 {
58 _pauseSelector = false;
59 $(this).attr("disabled", "disabled");
60 }
61 });
62
63 toolBarDiv.append(pickElementButton);
64 toolBarDiv.append(_unpauseButton);
65 _mainDiv.append(toolBarDiv);
66 _mainDiv.append(_textDiv);
67 }
68
69 var clearAll = function()
70 {
71 _itemSelected = false;
72 $(_elements).each(function()
73 {
74 $(this).remove();
75 });
76 }
77
78 var highlightElement = function(e)
79 {
80 var topBorderDiv = $("<div>");
81 var bottomBorderDiv = $("<div>");
82 var leftBorderDiv = $("<div>");
83 var rightBorderDiv = $("<div>");
84
85 topBorderDiv.css({"position":"absolute", "top":e.offset().top + "px", "left":e.offset().left + "px", "height":"0px", "width":e.width() + "px", "border":"1px solid red"});
86 bottomBorderDiv.css({"position":"absolute", "top":(e.offset().top + e.height()) + "px", "left":e.offset().left + "px", "height":"0px", "width":e.width() + "px", "border":"1px solid red"});
87 leftBorderDiv.css({"position":"absolute", "top":e.offset().top + "px", "left":e.offset().left + "px", "height":e.height() + "px", "width":"0px", "border":"1px solid red"});
88 rightBorderDiv.css({"position":"absolute", "top":e.offset().top + "px", "left":(e.offset().left + e.width()) + "px", "height":e.height() + "px", "width":"0px", "border":"1px solid red"});
89
90 $("body").append(topBorderDiv, bottomBorderDiv, leftBorderDiv, rightBorderDiv);
91
92 _elements.push(topBorderDiv);
93 _elements.push(bottomBorderDiv);
94 _elements.push(leftBorderDiv);
95 _elements.push(rightBorderDiv);
96 }
97
98 var addMouseEventsToDebugElements = function(debugElems)
99 {
100 debugElems.click(function()
101 {
102 if(_debugOn)
103 {
104 _pauseSelector = true;
105 _unpauseButton.removeAttr("disabled");
106 }
107 });
108
109 debugElems.mouseover(function()
110 {
111 if(_debugOn && !_pauseSelector)
112 {
113 var surroundingDiv = $("<div>");
114 surroundingDiv.css("cursor","pointer");
115 var fromDIV = $("<div>");
116 var elementDIV = $("<div>");
117 elementDIV.css("margin-bottom", "0.6em");
118
119 surroundingDiv.append(fromDIV);
120 surroundingDiv.append(elementDIV);
121
122 _elements.push(surroundingDiv);
123
124 surroundingDiv.click(function()
125 {
126 var editArea = $("<textarea>");
127 $.ajax();
128 });
129
130 surroundingDiv.mouseover(function()
131 {
132 $(this).data("background", $(this).css("background"));
133 $(this).css("background", "yellow");
134 });
135
136 surroundingDiv.mouseout(function()
137 {
138 $(this).css("background", $(this).data("background"));
139 });
140
141 var nodeName = $(this).attr("nodename");
142 var filename = $(this).attr("filename");
143 var attrstr = "";
144 var illegalNames = ["nodename", "filename", "style", "debug", "id", "class"];
145
146 $(this.attributes).each(function()
147 {
148 for(var i = 0; i < illegalNames.length; i++)
149 {
150 if(this.name == illegalNames[i]){return;}
151 }
152 attrstr += this.name + "=\"" + this.value + "\" ";
153 });
154
155 fromDIV.text("From " + filename + ":");
156 elementDIV.text("<" + nodeName + " " + attrstr + ">");
157
158 _textDiv.prepend(surroundingDiv);
159
160 if(!_itemSelected)
161 {
162 _itemSelected = true;
163 highlightElement($(this));
164 }
165 }
166 });
167
168 debugElems.mouseout(function()
169 {
170 if(_debugOn && !_pauseSelector)
171 {
172 clearAll();
173 }
174 });
175 }
176
177 this.init = function()
178 {
179 //We only want this on if we have debug elements in the page
180 var debugElems = $('debug, [debug="true"]');
181 if(!debugElems.length)
182 {
183 console.log("No debug tags present, debugging disabled.");
184 return;
185 }
186
187 createDebugDiv();
188 $("body").append(_mainDiv);
189
190 addMouseEventsToDebugElements(debugElems);
191 }
192
193}
194
195$(window).load(function()
196{
197 var debugWidget = new DebugWidget();
198 debugWidget.init();
199});
Note: See TracBrowser for help on using the repository browser.