");
54 | }
55 |
56 | function SummaryTest() {
57 | var container = document.createElement("div");
58 | container.setAttribute("style", "margin-top: 1.5em;");
59 | {
60 | var div = document.createElement("div");
61 | div.appendChild(document.createTextNode("=================================================="));
62 | div.setAttribute("style", "color: gray;");
63 | container.appendChild(div);
64 | }
65 | {
66 | var div = document.createElement("div");
67 | div.appendChild(document.createTextNode("Passed: " + __passedCases));
68 | div.setAttribute("style", "color: green; float: left");
69 | container.appendChild(div);
70 | }
71 | {
72 | var div = document.createElement("div");
73 | div.appendChild(document.createTextNode("\u00A0"));
74 | div.setAttribute("style", "min-width: 4em; float: left");
75 | container.appendChild(div);
76 | }
77 | {
78 | var div = document.createElement("div");
79 | div.appendChild(document.createTextNode("Failed: " + __failedCases));
80 | div.setAttribute("style", "color: red; float: left");
81 | container.appendChild(div);
82 | }
83 | {
84 | var div = document.createElement("div");
85 | div.appendChild(document.createTextNode("\u00A0"));
86 | div.setAttribute("style", "min-width: 4em; float: left");
87 | container.appendChild(div);
88 | }
89 | {
90 | var div = document.createElement("div");
91 | div.appendChild(document.createTextNode("Empty: " + __emptyCases));
92 | div.setAttribute("style", "color: purple; float: left");
93 | container.appendChild(div);
94 | }
95 | {
96 | var div = document.createElement("div");
97 | div.setAttribute("style", "clear: both");
98 | container.appendChild(div);
99 | }
100 | document.body.appendChild(container);
101 | }
102 |
103 | return {
104 | Assert: Assert,
105 | TestCase: TestCase,
106 | EmptyCase: EmptyCase,
107 | SummaryTest: SummaryTest,
108 | };
109 | });
--------------------------------------------------------------------------------
/Test/MVC/Home.razor.html:
--------------------------------------------------------------------------------
1 |
2 | Eam meliore maiestatis id, ne animal commodo definitiones per. Epicurei facilisis vix ne, in vidit vidisse alienum vix. Mei admodum feugait et, vel atqui aeterno hendrerit ei, prima electram abhorreant vel ne. Suas summo repudiare no eam. Modo rebum abhorreant pri ex. Et fabellas maiestatis scriptorem est.
3 |
4 | Ne ullum simul iisque mei, cu eos harum perpetua. At agam legimus sea. Eros posse mediocrem et has, at mucius quodsi recteque has. Diam copiosae placerat mel et, per id perpetua principes. Ad eum euismod tincidunt omittantur. An velit lucilius euripidis est, doctus epicuri reprehendunt ne vis.
5 |
6 | At veritus apeirian repudiare mei. Nam te atqui sonet hendrerit, maiorum suscipiantur in sit. In eos aliquam maiorum epicuri, lucilius molestiae ei vel, cum sale percipit ut. Sea ex debitis pertinax percipitur, malis paulo consequat in vix, meis omnis explicari quo et. Voluptua disputando vim ea. Homero fabellas detraxit est et, cu vix tempor tractatos salutandi.
7 |
--------------------------------------------------------------------------------
/Test/MVC/Loading.razor.html:
--------------------------------------------------------------------------------
1 | Loading @model.Url ...
--------------------------------------------------------------------------------
/Test/MVC/Post_1.razor.html:
--------------------------------------------------------------------------------
1 | Per consul alienum an
2 |
3 | Per consul alienum an, te vel falli possim scaevola. Quo adhuc abhorreant omittantur ea. Nam no malis ullum, ad dolore offendit constituto qui. Eu sit mazim aperiam officiis. Putent molestiae nam no. Id eum alia partiendo, eum erat efficiendi in, et eruditi equidem fierent vis.
4 |
5 | In similique disputationi ius. Odio interpretaris mei id, ea civibus intellegat usu, pri decore aliquam te. Ad nam nibh option, eam modo errem saperet id. Ne eius etiam periculis mel, ad eam dicit eripuit, te cum vitae labores docendi.
6 |
7 | Te tempor dolores duo, stet magna equidem an sea. Eu ignota diceret nec. Vix ex tollit bonorum. Nec ei utinam ancillae oportere, sea veri ceteros maluisset at. Eum ne vocibus appetere, cibo mutat ei sed.
8 |
9 | Malis ullum consequuntur et sea, sea sint eligendi te, an sed libris concludaturque. Animal platonem qui ut, ei duo iusto omnesque adipiscing. Nullam quaerendum mea ne, duo ne ipsum fugit. Ad vel dicat laoreet probatus, cu nisl labore mea.
10 |
11 | Nam ullum utroque perfecto eu. Mel no sint denique invidunt, vivendo volutpat mea an, nam copiosae reformidans et. His graece mnesarchum in, ex movet nobis nonumes mea. Per probatus voluptatum te, error placerat pri an. Graeco invidunt inimicus his no, virtute assueverit an est, mazim perpetua delicatissimi vel no.
12 |
13 | Ex mel amet ceteros, persius detraxit erroribus ad eum, nec ludus partiendo adipiscing at. Aliquip corpora ancillae sed te, ex eos iriure propriae mediocrem. Nonumes veritus voluptatibus duo ea, no qui inermis accusata tractatos, sit eu esse quando verterem. Eum id homero repudiandae consequuntur, solum populo luptatum sit et, voluptua lucilius cum te. Graeco assueverit ex vim. Pro aperiri phaedrum pericula te.
14 |
15 | Usu ut paulo ludus lucilius, eu populo possit eum, at homero libris officiis eum. Te sumo delectus qualisque mei. Congue alterum et est, fabulas ceteros mei an. An sea sumo nullam patrioque, falli mazim at vim.
16 |
17 | His ea vitae prompta salutatus, vim natum audire ancillae id. No nulla docendi vis, cu partiendo repudiare quo. Populo adipisci splendide mea eu, verear offendit sit cu, vel in dolor civibus sententiae. Utinam mollis saperet ex eum.
18 |
19 | Ei est constituto efficiantur. Ad autem docendi pericula vix. Albucius mediocritatem at sit. Nam omnis comprehensam ea.
20 |
21 | Dignissim argumentum referrentur te nec, id qui diceret pericula iracundia. At mel unum eripuit reprehendunt, in eam ignota audire intellegam. Cu vel nemore rationibus, mei case inani putent ea, ex nemore mollis mel. Id duo nulla tractatos, mei ullum tantas expetenda id, te sint accusamus vix. Et pri doctus vulputate, vel in omnis scripserit. Ea suas probatus platonem vel, brute alienum eam ut.
22 |
--------------------------------------------------------------------------------
/Test/MVC/Post_2.razor.html:
--------------------------------------------------------------------------------
1 | Vim id semper qualisque
2 |
3 | Vim id semper qualisque, detraxit rationibus quaerendum vim ut. Eu semper molestiae sententiae quo, at eam vitae consetetur, usu commodo verterem no. Quo mazim integre habemus no. Ad est tantas iriure voluptaria, volumus apeirian posidonium has in. Mea lucilius qualisque id, populo mnesarchum no vim. Id vix falli hendrerit efficiendi, ut ornatus reprehendunt sed. Legimus perpetua eu pro.
4 |
5 | Vim nemore definitionem te. Delenit evertitur te vix, et alia dicam philosophia has. Ius agam explicari ei, vim cetero reformidans ad. Eam eu ponderum invenire indoctum, instructior theophrastus cum eu, est nullam essent scriptorem ad. Per id cotidieque repudiandae, te sea legimus voluptaria mnesarchum, vidisse indoctum consequat te eum. Sed labore feugiat ei, ut usu summo tamquam.
6 |
7 | Eu vel clita causae patrioque, ad amet singulis forensibus eos. Id duo viris quando dissentiunt, odio novum quidam qui ne, quidam dolorum salutatus an eam. At per prompta facilisis scribentur, in modo quas ius. Ei vim tantas alterum molestie, eu tamquam facilis eam. Et justo facilisis scripserit his, fugit similique cum in.
8 |
9 | In mea audiam splendide constituam, mei at clita delectus, usu at sale regione. Sit in numquam feugiat. Vix graeci argumentum id, quo dicit aperiri at. Quodsi adolescens ei qui. Duo ipsum latine te, eam et hinc ocurreret.
10 |
11 | An pri wisi lucilius volutpat. Eu ius meis novum molestiae, adversarium philosophia ei vis. Quidam essent indoctum eu sit, nulla dolores sit id. No case primis pro.
12 |
13 | Omnes petentium patrioque no sit, sit id ipsum quaerendum. Eros dissentias in per. Qui ut eruditi scripserit, primis dolorem evertitur ut vix. Eligendi appareat intellegebat ut has. Quot solet appetere in quo, quot liber id eos. Pri id quaeque cotidieque, congue dolores adipisci mea ex. Placerat disputando ne pri, per vidisse delectus reprimique ea.
14 |
15 | Mei corpora incorrupte te. His prompta menandri persequeris id. Vim ex oratio perpetua, tation discere inimicus duo id. Dicit admodum albucius nec an, et summo verear maiestatis vis, vitae instructior conclusionemque an nam. Cu erant percipit sit, cu sed eirmod sapientem.
16 |
17 | Pro elitr aeterno petentium at. Ad saepe urbanitas mel, ei cum habeo intellegat, at est verear aperiri ancillae. Cu eius vulputate consectetuer sed, usu petentium voluptatibus ut, vim ad etiam admodum definiebas. Eos nulla aeterno menandri id, partiendo intellegat reformidans qui cu, mei ei ubique tamquam dolorum.
18 |
19 | Nostrum liberavisse cu sea, vis ei nonumes alienum eleifend, in dicant admodum qui. Per putant diceret disputando et, sanctus quaestio platonem at mei, quot utamur platonem id sea. Eu ponderum similique usu. Nostrud corpora sed ei, pri tollit timeam et. His sale repudiandae in, an verterem ullamcorper sit. Erat abhorreant ne pro.
20 |
21 | Cu vix erat omittantur. His errem dictas efficiendi at, novum nullam disputando te eam, vel eu cetero molestie imperdiet. Vel ut hinc mandamus, ei malorum maiestatis vix, ei elitr eruditi salutandi sea. Cetero equidem vim ea, verear fabulas similique ei eam. Cum an duis dolore, vix ne salutatus concludaturque.
22 |
--------------------------------------------------------------------------------
/Test/MVC/Post_3.razor.html:
--------------------------------------------------------------------------------
1 | Pro ei aliquid offendit concludaturque
2 |
3 | Pro ei aliquid offendit concludaturque, solum bonorum fuisset ea pro. His epicuri adipisci cu, est facer populo ea. Quo at stet docendi urbanitas. Splendide intellegam contentiones ea pri, ad mandamus petentium sea.
4 |
5 | Meis interesset eos ex, pro deleniti lobortis conclusionemque no. Vix an exerci epicuri, ne iusto facilisi usu, sit ut summo nonumes conceptam. Epicurei vulputate an vix. Cu mea dicta nostrum urbanitas. Erant sonet nec ei, ad sit prima consequuntur, ea vim molestiae delicatissimi. Et iuvaret utroque pro, eleifend recteque mnesarchum in vix, veri discere intellegat te pri.
6 |
7 | Putent numquam bonorum mei id, id tollit accusata petentium nam. Cum no ponderum partiendo, nisl noluisse antiopam te eos, sumo tota officiis ei quo. Probo eripuit est ea. Porro postulant suavitate nec et, et aeterno constituto concludaturque vim, vel diam audiam partiendo cu.
8 |
9 | Cu vis hinc exerci, interesset referrentur cum no. Vel porro gubergren deterruisset et, est an illum reprehendunt. Et eius meis minim est, ea mea ullum legere bonorum, solum aliquip persequeris te usu. Deleniti menandri splendide et est.
10 |
11 | Te sit amet graece pertinax. Accumsan liberavisse intellegebat et mei, eum verear convenire no. Mea epicuri hendrerit philosophia ea, ei quis tractatos quo, utinam possit mel ne. Ex vero vulputate mea.
12 |
13 | Graece legendos voluptaria te usu, pro harum possit no. Ius an ullum offendit appellantur, imperdiet democritum elaboraret no vim. Esse eros honestatis vel ne, an nam copiosae consectetuer. Nec modus putent nostro in, quo quis erant deserunt an. Sit euripidis reformidans et, munere splendide elaboraret in eum.
14 |
15 | Vel partem corrumpit ex, quo stet alienum ad. Vim movet integre incorrupte ad, vel ullum recteque qualisque ad. Vim ea vivendo euripidis, nostro insolens temporibus pro ea. Eum ne admodum fabellas, convenire persecuti repudiandae at vix. Cum summo tincidunt adipiscing et, ferri nostrud assueverit duo ut, ei possit nominati eos.
16 |
17 | Vim dolore constituto an, vocent insolens eos ad. Probo expetendis eloquentiam te qui, ius falli scriptorem ut. Ut duo perpetua elaboraret, sonet audiam philosophia in eum. Ea vide placerat indoctum vim, putent verear theophrastus eos ea. Esse habeo perfecto eu eos, te rebum soluta per.
18 |
19 | Et eam copiosae lobortis sententiae, summo patrioque eum an. Eu vix ridens repudiandae. Eos populo iriure detraxit cu. Id ridens aperiri copiosae pro, ea vix graece fastidii. Vide justo iudico vel eu. At mollis singulis per, ut vix soleat dictas vidisse.
20 |
21 | Sed movet mundi ea, putant nonumes officiis est ex, referrentur dissentiunt mea ea. Laoreet laboramus id eam, ei qui modo offendit interpretaris, pro wisi porro in. Ea vis autem omnesque, tacimates vulputate in ius. Laoreet noluisse cu sea. Et probo causae eum, pro audiam persecuti definitionem in. Cu duo dico aperiri. Denique eleifend ut vel.
22 |
--------------------------------------------------------------------------------
/Test/MVC/Posts.razor.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Test/MVC/Root.razor.html:
--------------------------------------------------------------------------------
1 |
2 | Hi, I am @model.Name. Please click the following hyper-links to test this MVC-razor page.
3 | Home
4 | Posts
5 | @RenderPage()
--------------------------------------------------------------------------------
/Test/a.json:
--------------------------------------------------------------------------------
1 | {"title":"Running GacUI in Browsers!"}
--------------------------------------------------------------------------------
/Test/a.txt:
--------------------------------------------------------------------------------
1 | Running GacUI in Browsers!
--------------------------------------------------------------------------------
/Test/a.xml:
--------------------------------------------------------------------------------
1 | Running GacUI in Browsers!
--------------------------------------------------------------------------------
/TestPage.css:
--------------------------------------------------------------------------------
1 |
2 | body {
3 | font-family: 'Segoe UI';
4 | font-size: 14px;
5 | }
6 |
7 | .LineDiv:after {
8 | content: " ";
9 | display: block;
10 | clear: both;
11 | }
12 |
13 | .DraggableHandle {
14 | display: block;
15 | width: 10px;
16 | height: 10px;
17 | position: absolute;
18 | cursor: nwse-resize;
19 | border-radius: 5px;
20 | }
21 |
22 | .TabPage table {
23 | margin: 10px;
24 | border-left: 1px solid gray;
25 | border-top: 1px solid gray;
26 | border-spacing: 0px;
27 | border-collapse: separate;
28 | }
29 |
30 | .TabPage th {
31 | text-align: left;
32 | padding: 10px;
33 | border-right: 1px solid gray;
34 | border-bottom: 1px solid gray;
35 | }
36 |
37 | .TabPage td {
38 | text-align: left;
39 | border-right: 1px solid gray;
40 | border-bottom: 1px solid gray;
41 | }
42 |
43 | .TabPage td:after {
44 | content: " ";
45 | display: block;
46 | clear: both;
47 | }
48 |
49 | .TabButtonContainer:after {
50 | content: " ";
51 | display: block;
52 | clear: both;
53 | }
54 |
55 |
56 | .TabButton {
57 | box-shadow: inset 0px 1px 0px 0px #54A3F7;
58 | background: linear-gradient(to bottom, #007DC1 5%, #0061A7 100%);
59 | background-color: #007DC1;
60 | border-radius: 3px;
61 | border: 1px solid #124D77;
62 | display: inline-block;
63 | cursor: pointer;
64 | color: #FFFFFF;
65 | padding: 6px 24px;
66 | text-align: center;
67 | text-decoration: none;
68 | text-shadow: 0px 1px 0px #154682;
69 | margin: 4px;
70 | width: 6em;
71 | display: block;
72 | float: left;
73 | cursor: pointer;
74 | }
75 |
76 | .TabButton:active {
77 | background: linear-gradient(to bottom, #0061A7 5%, #007DC1 100%);
78 | background-color: #0061A7;
79 | }
80 |
81 | .Selected.TabButton {
82 | font-weight: 700;
83 | }
84 |
85 | .Selected.TabButton:before {
86 | content: "<";
87 | }
88 |
89 | .Selected.TabButton:after {
90 | content: ">";
91 | }
92 |
93 | .TabPageContainer {
94 | display: block;
95 | position: relative;
96 | }
97 |
98 | .TabPage {
99 | display: block;
100 | position: absolute;
101 | left: 0;
102 | top: 0;
103 | right: 0;
104 | visibility: hidden;
105 | }
106 |
107 | .Selected.TabPage {
108 | visibility: visible;
109 | border: 1px solid red;
110 | }
111 |
--------------------------------------------------------------------------------
/TestPage.js:
--------------------------------------------------------------------------------
1 | eval(
2 | Packages.Inject([
3 | "Test",
4 | "Class",
5 | "Html.ResizeEvent",
6 | "Html.Navigation",
7 | "Html.Razor",
8 | "Html.MVC",
9 | "IO.Delay",
10 | "IO.Resource",
11 | "IO.Wildcard",
12 | "GacUI.Types",
13 | "GacUI.Elements.Interface",
14 | "GacUI.Elements.Basic",
15 | "GacUI.Elements.ColorizedText",
16 | "GacUI.Elements.Document",
17 | "GacUI.Layout.Basic",
18 | "GacUI.Layout.Stack",
19 | "GacUI.Layout.Table",
20 | "GacUI.Layout.Misc"],
21 | true)
22 | );
23 |
24 | /********************************************************************************
25 | TabControl
26 | ********************************************************************************/
27 |
28 | function BuildTabController(name) {
29 | var Controller = Class("::" + name, INavigationController, {
30 | Id: Public(null),
31 | Url: Public(null),
32 |
33 | OnInstalled: Public.Override(function () {
34 | var tabControl = window[this.Id];
35 | for (var i = 0; i < tabControl.TabButtons.length; i++) {
36 | var tabButton = tabControl.TabButtons[i];
37 | if (tabButton.getAttribute("data-url") === this.Url) {
38 | ShowTabPage(tabControl, tabButton.TabPage);
39 | break;
40 | }
41 | }
42 | }),
43 |
44 | OnUninstalled: Public.Override(function () {
45 | var tabControl = window[this.Id];
46 | ShowTabPage(tabControl, null);
47 | }),
48 | });
49 | return Controller;
50 | }
51 |
52 | var TabRootController = BuildTabController("Root");
53 |
54 | function ShowTabPage(tabControl, tabPage) {
55 | if (tabControl.CurrentTabPage !== null) {
56 | tabControl.CurrentTabPage.classList.remove("Selected");
57 | tabControl.CurrentTabPage.TabButton.classList.remove("Selected");
58 | }
59 | tabControl.CurrentTabPage = tabPage;
60 | if (tabControl.CurrentTabPage !== null) {
61 | tabControl.CurrentTabPage.classList.add("Selected");
62 | tabControl.CurrentTabPage.TabButton.classList.add("Selected");
63 | }
64 | }
65 |
66 | function CombineTabPage(tabControl, tabPage, tabButton) {
67 | tabPage.TabControl = tabControl;
68 | tabPage.TabButton = tabButton;
69 |
70 | tabButton.TabPage = tabPage;
71 | if (tabControl.TabControllerType) {
72 | parentControllerType = undefined;
73 | var current = tabButton;
74 | while (current) {
75 | if (current.TabControllerType && current !== tabControl) {
76 | parentControllerType = current.TabControllerType;
77 | break;
78 | }
79 | current = current.parentElement;
80 | }
81 |
82 | var url = tabButton.getAttribute("data-url");
83 | RegisterNavigationPath(
84 | url,
85 | tabControl.TabControllerType,
86 | { Id: tabControl.id, Url: url },
87 | parentControllerType
88 | );
89 |
90 | tabButton.addEventListener("click", function (event) {
91 | var context = GetNavigationContextBefore(tabControl.TabControllerType);
92 | context.push({ type: tabControl.TabControllerType, values: { Id: tabControl.id, Url: url } });
93 | var path = BuildNavigationPath(context);
94 | NavigateTo(path);
95 | });
96 | }
97 | else {
98 | tabButton.addEventListener("click", function (event) {
99 | ShowTabPage(tabControl, event.currentTarget.TabPage);
100 | });
101 | }
102 | }
103 |
104 | function SetupTabControl(tabControl) {
105 | function DirectChild(parent, className) {
106 | var result = [];
107 | var childNodes = parent.childNodes;
108 | for (var i = 0; i < childNodes.length; i++) {
109 | var childNode = childNodes[i];
110 | if (childNode.className === className) {
111 | result.push(childNode);
112 | }
113 | }
114 | return result;
115 | }
116 |
117 | tabControl.CurrentTabPage = null;
118 | if (tabControl.getAttribute("data-navigation") === "true") {
119 | tabControl.TabControllerType = BuildTabController(tabControl.id);
120 | }
121 | else {
122 | tabControl.TabControllerType = null;
123 | }
124 |
125 | tabControl.TabButtons = DirectChild(DirectChild(tabControl, "TabButtonContainer")[0], "TabButton");
126 | tabControl.TabPages = DirectChild(DirectChild(tabControl, "TabPageContainer")[0], "TabPage");
127 | for (var i = 0; i < tabControl.TabButtons.length; i++) {
128 | CombineTabPage(tabControl, tabControl.TabPages[i], tabControl.TabButtons[i]);
129 | }
130 |
131 | if (!tabControl.TabControllerType) {
132 | ShowTabPage(tabControl, tabControl.TabPages[0]);
133 | }
134 | }
135 |
136 | /********************************************************************************
137 | Draggable Handler
138 | ********************************************************************************/
139 |
140 | function GetPx(px) {
141 | return +px.substr(0, px.length - 2);
142 | }
143 |
144 | var bodyOnMouseMove = null;
145 | var bodyOnMouseUp = null;
146 |
147 | function TrackMouse(node) {
148 | bodyOnMouseMove = node.data_onMouseMove;
149 | bodyOnMouseUp = node.data_onMouseUp;
150 | DetachMouseEvents(node, false);
151 | }
152 |
153 | function UnTrackMouse(node) {
154 | AttachMouseEvents(node);
155 | bodyOnMouseMove = null;
156 | bodyOnMouseUp = null;
157 | }
158 |
159 | function AttachMouseEvents(node, onMouseDown, onMouseMove, onMouseUp) {
160 | if (onMouseDown) node.data_onMouseDown = onMouseDown;
161 | if (onMouseMove) node.data_onMouseMove = onMouseMove;
162 | if (onMouseUp) node.data_onMouseUp = onMouseUp;
163 |
164 | node.addEventListener("mousedown", node.data_onMouseDown, false);
165 | node.addEventListener("mousemove", node.data_onMouseMove, false);
166 | node.addEventListener("mouseup", node.data_onMouseUp, false);
167 | }
168 |
169 | function DetachMouseEvents(node, removeHandler) {
170 | node.removeEventListener("mousedown", node.data_onMouseDown, false);
171 | node.removeEventListener("mousemove", node.data_onMouseMove, false);
172 | node.removeEventListener("mouseup", node.data_onMouseUp, false);
173 |
174 | if (removeHandler) {
175 | node.data_onMouseDown = undefined;
176 | node.data_onMouseMove = undefined;
177 | node.data_onMouseUp = undefined;
178 | }
179 | }
180 |
181 | function InstallResizer(node, resizeCallback) {
182 | var draggableHandle = document.createElement("div");
183 | draggableHandle.setAttribute("class", "DraggableHandle");
184 | draggableHandle.style.right = "1px";
185 | draggableHandle.style.bottom = "1px";
186 | draggableHandle.style.backgroundColor = "red";
187 | node.appendChild(draggableHandle);
188 |
189 | var dragging = false;
190 | var x = 0.0;
191 | var y = 0.0;
192 |
193 | AttachMouseEvents(
194 | draggableHandle,
195 | function (event) {
196 | if (draggableHandle.style.right !== "") {
197 | draggableHandle.style.right = "";
198 | draggableHandle.style.bottom = "";
199 | draggableHandle.style.left = (node.offsetWidth - draggableHandle.offsetWidth - 3) + "px";
200 | draggableHandle.style.top = (node.offsetHeight - draggableHandle.offsetHeight - 3) + "px";
201 | }
202 |
203 | dragging = true;
204 | x = event.pageX;
205 | y = event.pageY;
206 | TrackMouse(draggableHandle);
207 | },
208 | function (event) {
209 | if (dragging) {
210 | var dx = event.pageX - x;
211 | var dy = event.pageY - y;
212 | var left = GetPx(draggableHandle.style.left);
213 | var top = GetPx(draggableHandle.style.top);
214 | var width = left + draggableHandle.offsetWidth + 1 + dx;
215 | var height = top + draggableHandle.offsetHeight + 1 + dy;
216 | if (width < 0 || height < 0) {
217 | return;
218 | }
219 |
220 | node.style.minWidth = width + "px";
221 | node.style.minHeight = height + "px";
222 | draggableHandle.style.left = left + dx + "px";
223 | draggableHandle.style.top = top + dy + "px";
224 | resizeCallback(width, height);
225 |
226 | x = event.pageX;
227 | y = event.pageY;
228 | }
229 | },
230 | function (event) {
231 | dragging = false;
232 | UnTrackMouse(draggableHandle);
233 | }
234 | );
235 | }
236 |
237 | function InstallMover(node) {
238 | if (node.style.left === "" || node.style.top === "") {
239 | return;
240 | }
241 |
242 | var draggableHandle = document.createElement("div");
243 | draggableHandle.setAttribute("class", "DraggableHandle");
244 | draggableHandle.style.left = "1px";
245 | draggableHandle.style.top = "1px";
246 | draggableHandle.style.backgroundColor = "blue";
247 | node.appendChild(draggableHandle);
248 |
249 | var dragging = false;
250 | var x = 0.0;
251 | var y = 0.0;
252 |
253 | AttachMouseEvents(
254 | draggableHandle,
255 | function (event) {
256 | dragging = true;
257 | x = event.pageX;
258 | y = event.pageY;
259 | TrackMouse(draggableHandle);
260 | },
261 | function (event) {
262 | if (dragging) {
263 | var dx = event.pageX - x;
264 | var dy = event.pageY - y;
265 |
266 | node.style.left = GetPx(node.style.left) + dx + "px";
267 | node.style.top = GetPx(node.style.top) + dy + "px";
268 |
269 | x = event.pageX;
270 | y = event.pageY;
271 | }
272 | },
273 | function (event) {
274 | dragging = false;
275 | UnTrackMouse(draggableHandle);
276 | }
277 | );
278 | }
279 |
280 | function InstallDraggableHandlers(node, resizeCallback) {
281 | InstallMover(node);
282 | InstallResizer(node, resizeCallback);
283 | }
284 |
285 | window.addEventListener("mousemove", function (event) {
286 | if (bodyOnMouseMove) {
287 | bodyOnMouseMove(event);
288 | }
289 | }, false);
290 |
291 | window.addEventListener("mouseup", function (event) {
292 | if (bodyOnMouseUp) {
293 | bodyOnMouseUp(event);
294 | }
295 | }, false);
296 |
297 | /********************************************************************************
298 | Layout Embedder
299 | ********************************************************************************/
300 |
301 | function CreateLayoutEmbedder(layout, rows, columns) {
302 | if (rows === undefined) rows = 1;
303 | if (columns === undefined) columns = 1;
304 |
305 | var div = document.createElement("div");
306 | div.style.display = "block";
307 | div.style.position = "relative";
308 | div.style.border = "1px solid blue";
309 | div.style.float = "left";
310 | div.style.margin = "10px 10px 10px 10px";
311 |
312 | var child = layout.BoundsHtmlElement;
313 | if (child === undefined) {
314 | child = layout;
315 | }
316 | child.style.position = "relative";
317 | child.style.width = (columns * 100) + "px";
318 | child.style.height = (rows * 100) + "px";
319 | child.style.margin = "10px 10px 10px 10px";
320 | div.appendChild(child);
321 |
322 | InstallDraggableHandlers(div, function (width, height) {
323 | child.style.width = (width - 20) + "px";
324 | child.style.height = (height - 20) + "px";
325 | });
326 | return div;
327 | }
--------------------------------------------------------------------------------
/Wildcard.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Wildcard
5 |
6 |
7 |
8 |
9 |
10 |
18 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/web.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------