Index.cshtml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. @{
  2. ViewBag.Title = "Index";
  3. Layout = "~/Views/Shared/_Layout.cshtml";
  4. }
  5. @model GreenTree.Nachtragsmanagement.Web.Models.Home.HomeModel
  6. <script>
  7. var openOffsetX = 10;
  8. var openOffsetY = 5;
  9. var popupNames = [];
  10. var popupElements = {};
  11. var popupStatus = {};
  12. var popupImages = {};
  13. var popupDescriptions = {};
  14. var popupWidths = {};
  15. var popupHeights = {};
  16. var popupLocationsX = {};
  17. var popupLocationsY = {};
  18. var popupMinimized = {};
  19. var contentX = 0;
  20. var contentY = 0;
  21. var dragElement = null;
  22. var dragStart = {};
  23. @foreach (var g in Model.AvailableFunctions)
  24. {
  25. foreach (var i in g.Value)
  26. {
  27. ViewContext.Writer.WriteLine("popupNames.push(\"" + i.Name + "\");");
  28. ViewContext.Writer.WriteLine("popupElements[\"" + i.Name + "\"] = \"" + i.Name + "_PW-1\";");
  29. ViewContext.Writer.WriteLine("popupImages[\"" + i.Name + "\"] = \"" + Url.Content(i.ImageUrl) + "\";");
  30. ViewContext.Writer.WriteLine("popupDescriptions[\"" + i.Name + "\"] = \"" + i.Description + "\";");
  31. }
  32. }
  33. $(document).ready(function () {
  34. $(".functionNavigationContainer").height($(window).height() - $(".globalFooter").height() - 3);
  35. $(".functionContentContainer").height($(window).height() - $(".globalFooter").height() - 3);
  36. $(".functionContentContainer").width($(window).width() - $(".functionNavigationContainer").width() - 3);
  37. contentX = $(".functionContentContainer").position().left;
  38. contentY = $(".functionContentContainer").position().top;
  39. for (var i = 0; i < popupNames.length; i++) {
  40. var popupElem = $("#" + popupNames[i] + "-Popup_PW-1");
  41. var headerElem = $("#" + popupNames[i] + "-Popup_PW-1 > .dxpc-mainDiv > .dxpc-header");
  42. var contentWrapper = $("#" + popupNames[i] + "-Popup_PW-1 .dxpc-contentWrapper");
  43. var content = $("#" + popupNames[i] + "-Popup_PW-1 .dxpc-content");
  44. popupElem.draggable({
  45. containment: $(".functionContentContainer"),
  46. handle: headerElem
  47. });
  48. popupElem.resizable({
  49. containment: $(".functionContentContainer"),
  50. alsoResize: [contentWrapper, content]
  51. });
  52. popupElem.on("dragstop", function (e, s) {
  53. var controls = ASPxClientControl.GetControlCollection();
  54. var popupName = e.currentTarget.id.replace("_PW-1", "");
  55. var functionName = e.currentTarget.id.replace("-Popup_PW-1", "");
  56. var popupElement = controls.GetByName(popupName);
  57. var popupControl = MVCxClientPopupControl.Cast(popupElement);
  58. var popupPositionX = $(this).position().left;
  59. var popupPositionY = $(this).position().top;
  60. popupLocationsX[functionName] = popupPositionX;
  61. popupLocationsY[functionName] = popupPositionY;
  62. });
  63. popupElem.on("resizestop", function (e, s) {
  64. var controls = ASPxClientControl.GetControlCollection();
  65. var popupName = e.currentTarget.id.replace("_PW-1", "");
  66. var functionName = e.currentTarget.id.replace("-Popup_PW-1", "");
  67. var popupElement = controls.GetByName(popupName);
  68. var popupControl = MVCxClientPopupControl.Cast(popupElement);
  69. var popupWidth = $(this).width();
  70. var popupHeight = $(this).height();
  71. popupWidths[functionName] = popupWidth;
  72. popupHeights[functionName] = popupHeight;
  73. popupControl.SetWidth(popupWidth);
  74. popupControl.SetHeight(popupHeight);
  75. });
  76. }
  77. })
  78. //function checkResizeBorders(s, e) {
  79. // var controls = ASPxClientControl.GetControlCollection();
  80. // var popupName = s.name.replace("-Popup", "");
  81. // var popupElement = controls.GetByName(s.name);
  82. // var popupControl = MVCxClientPopupControl.Cast(popupElement);
  83. // var curWidth = popupControl.GetWidth();
  84. // var curHeight = popupControl.GetHeight();
  85. // if (popupLocationsX[popupName] + curWidth >= contentX + $(".functionContentContainer").width()) {
  86. // popupControl.SetWidth($(".functionContentContainer").width() - popupLocationsX[popupName]);
  87. // }
  88. // if (popupLocationsY[popupName] + curHeight >= contentY + $(".functionContentContainer").height()) {
  89. // popupControl.SetHeight($(".functionContentContainer").height() - popupLocationsY[popupName]);
  90. // }
  91. //}
  92. function showFunction(e) {
  93. if (!e) return;
  94. var controls = ASPxClientControl.GetControlCollection();
  95. var popupName = e.item.name + "-Popup";
  96. var popupElement = controls.GetByName(popupName);
  97. var popupControl = MVCxClientPopupControl.Cast(popupElement);
  98. if (popupControl.IsVisible()) return;
  99. if (popupMinimized[e.item.name] == true) {
  100. popupControl.Show();
  101. $("#" + e.item.name + "-PanelItem").fadeTo(500, 1);
  102. } else if (!popupStatus[e.item.name] || popupStatus[e.item.name] == "closed") {
  103. if (popupWidths[e.item.name] && popupHeights[e.item.name]) {
  104. popupControl.SetWidth(popupWidths[e.item.name]);
  105. popupControl.SetHeight(popupHeights[e.item.name]);
  106. }
  107. popupControl.RefreshContentUrl();
  108. popupControl.ShowAtPos(contentX + openOffsetX, contentY + openOffsetY);
  109. popupLocationsX[e.item.name] = contentX + openOffsetX;
  110. popupLocationsY[e.item.name] = contentY + openOffsetY;
  111. openOffsetX += 50;
  112. openOffsetY += 25;
  113. var popupPanel = $(
  114. '<div id="' + e.item.name + '-PanelItem" class="popupPanelItem" onclick=\'normalizeFunction("' + e.item.name + '")\'>' +
  115. '<img src="' + popupImages[e.item.name] + '" />' +
  116. '<span>' + popupDescriptions[e.item.name] + '</span>' +
  117. '<img src="@Url.Content("~/Content/Images/close-16.png")" onclick=\'hideFunction("' + e.item.name + '", false)\' />' +
  118. '</div>')
  119. .hide()
  120. .appendTo(".popupPanel")
  121. .fadeIn(500);
  122. }
  123. popupStatus[e.item.name] = "normalized";
  124. }
  125. function normalizeFunction(popupName) {
  126. var controls = ASPxClientControl.GetControlCollection();
  127. var popupElementName = popupName + "-Popup";
  128. var popupElement = controls.GetByName(popupElementName);
  129. var popupControl = MVCxClientPopupControl.Cast(popupElement);
  130. if (popupStatus[popupName] == "maximized") {
  131. popupControl.Show();
  132. } else {
  133. popupControl.ShowAtPos(popupLocationsX[popupName], popupLocationsY[popupName]);
  134. popupStatus[popupName] = "normalized";
  135. }
  136. popupMinimized[popupName] = false;
  137. $("#" + popupName + "-PanelItem").fadeTo(500, 1);
  138. }
  139. function toggleMaximizeFunction(popupName) {
  140. var controls = ASPxClientControl.GetControlCollection();
  141. var popupElementName = popupName + "-Popup";
  142. var popupElement = controls.GetByName(popupElementName);
  143. var popupControl = MVCxClientPopupControl.Cast(popupElement);
  144. var popupElem = $("#" + popupElementName + "_PW-1");
  145. var popupContentElem = $("#" + popupElementName + "_PW-1 > .dxpc-mainDiv");
  146. var popupHeaderElem = $("#" + popupElementName + "_PW-1 > .dxpc-mainDiv > .dxpc-header");
  147. if (popupStatus[popupName] && popupStatus[popupName] == "minimized") {
  148. popupControl.Show();
  149. } else if (popupStatus[popupName] && popupStatus[popupName] == "normalized") {
  150. popupWidths[popupName] = popupControl.GetWidth();
  151. popupHeights[popupName] = popupControl.GetHeight();
  152. popupControl.ShowAtPos(contentX, contentY);
  153. popupControl.SetWidth($(".functionContentContainer").width());
  154. popupControl.SetHeight($(".functionContentContainer").height() - 1);
  155. popupStatus[popupName] = "maximized";
  156. popupContentElem.removeClass("dxpc-shadow");
  157. popupHeaderElem.removeClass("devExAllowDrag");
  158. popupElem.draggable("disable");
  159. popupElem.resizable("disable");
  160. } else if (popupStatus[popupName] && popupStatus[popupName] == "maximized") {
  161. popupControl.ShowAtPos(popupLocationsX[popupName], popupLocationsY[popupName]);
  162. popupControl.SetWidth(popupWidths[popupName]);
  163. popupControl.SetHeight(popupHeights[popupName]);
  164. popupStatus[popupName] = "normalized";
  165. popupContentElem.addClass("dxpc-shadow");
  166. popupHeaderElem.addClass("devExAllowDrag");
  167. popupElem.draggable("enable");
  168. popupElem.resizable("enable");
  169. // Prevent growing of function container so it breaks below navigation container
  170. $(".functionContentContainer").width($(".functionContentContainer").width() - 50);
  171. $(".functionContentContainer").width($(".functionContentContainer").width() + 50);
  172. }
  173. }
  174. function hideFunction(popupName, minimize) {
  175. var controls = ASPxClientControl.GetControlCollection();
  176. var popupElementName = popupName + "-Popup";
  177. var popupElement = controls.GetByName(popupElementName);
  178. var popupControl = MVCxClientPopupControl.Cast(popupElement);
  179. var popupContentElem = $("#" + popupElementName + "_PW-1 > .dxpc-mainDiv");
  180. popupControl.Hide();
  181. if (minimize == true) {
  182. if (popupStatus[popupName] == "maximized") {
  183. popupLocationsX[popupName] = contentX;
  184. popupLocationsY[popupName] = contentY;
  185. }
  186. popupMinimized[popupName] = true;
  187. $("#" + popupName + "-PanelItem").fadeTo(500, 0.6);
  188. } else {
  189. popupStatus[popupName] = "closed";
  190. popupContentElem.addClass("dxpc-shadow");
  191. popupContentElem.addClass("devExAllowDrag");
  192. var iframe = popupControl.GetWindowContentIFrame();
  193. iframe.contentWindow.document.open();
  194. iframe.contentWindow.document.write("");
  195. iframe.contentWindow.document.close();
  196. $("#" + popupName + "-PanelItem").fadeOut(500, function () {
  197. $(this).remove();
  198. });
  199. }
  200. event.stopPropagation();
  201. }
  202. </script>
  203. @foreach (var g in Model.AvailableFunctions)
  204. {
  205. foreach (var i in g.Value)
  206. {
  207. Html.DevExpress().PopupControl(s =>
  208. {
  209. s.Name = i.Name + "-Popup";
  210. s.HeaderText = i.Description;
  211. s.SetHeaderTemplateContent(
  212. "<div class=\"functionHeader\">" +
  213. "<img class=\"headerIcon\" src=\"" + Url.Content(i.ImageUrl) + "\" />" +
  214. "<span class=\"headerText\">" + i.Description + "</span>" +
  215. "<img class=\"controlIcon\" src=\"" +
  216. Url.Content("~/Content/Images/close-16.png") + "\" onclick=\"hideFunction('" + i.Name + "',false);\" />" +
  217. "<img class=\"controlIcon\" src=\"" +
  218. Url.Content("~/Content/Images/maximize-16.png") + "\" onclick=\"toggleMaximizeFunction('" + i.Name + "');\" />" +
  219. "<img class=\"controlIcon\" src=\"" +
  220. Url.Content("~/Content/Images/minimize-16.png") + "\" onclick=\"hideFunction('" + i.Name + "',true);\" />" +
  221. "</div>");
  222. s.ContentUrl = Url.RouteUrl(i.RouteName);
  223. s.Modal = false;
  224. s.ShowMaximizeButton = (i.AllowMaximize.HasValue && i.AllowMaximize.Value) ? true : false;
  225. s.Width = new Unit(i.BaseWidth.Value, UnitType.Pixel);
  226. s.Height = new Unit(i.BaseHeight.Value, UnitType.Pixel);
  227. s.MinWidth = new Unit(i.MinWidth.Value, UnitType.Pixel);
  228. s.MinHeight = new Unit(i.MinHeight.Value, UnitType.Pixel);
  229. s.CloseAction = CloseAction.None;
  230. s.AllowDragging = false;
  231. //s.AllowResize = true;
  232. //s.ClientSideEvents.Resize = "function (s, e) { checkResizeBorders(s, e); }";
  233. s.Styles.Header.CssClass += "devExAllowDrag";
  234. }).GetHtml();
  235. }
  236. }
  237. <table class="homeContainer">
  238. <tbody>
  239. <tr>
  240. <td class="functionNavigationContainer">
  241. @Html.DevExpress().NavBar(s =>
  242. {
  243. s.Name = "devNavBarFunctions";
  244. s.Width = new Unit(100, UnitType.Percentage);
  245. s.ClientSideEvents.ItemClick = "function (s, e) { showFunction(e); }";
  246. s.Styles.Item.Cursor = "pointer";
  247. s.ControlStyle.Border.BorderStyle = BorderStyle.None;
  248. s.Styles.GroupHeader.Border.BorderStyle = BorderStyle.None;
  249. s.Styles.GroupHeader.CssClass += "devExBorderBottom devExBorderBottomGray devExBorderBottomSmall";
  250. s.Styles.GroupContent.Border.BorderStyle = BorderStyle.None;
  251. s.Styles.GroupContent.CssClass += "devExBorderBottom";
  252. s.Styles.Item.Border.BorderStyle = BorderStyle.None;
  253. s.Styles.Item.CssClass += "devExBorderBottom";
  254. foreach (var g in Model.AvailableFunctions)
  255. {
  256. s.Groups.Add(n1 =>
  257. {
  258. n1.Name = g.Key.Name;
  259. n1.Text = g.Key.Description;
  260. n1.ItemImagePosition = ImagePosition.Top;
  261. foreach (var i in g.Value)
  262. {
  263. n1.Items.Add(n2 =>
  264. {
  265. n2.Name = i.Name;
  266. n2.Text = i.Description;
  267. n2.Image.Url = i.ImageUrl;
  268. n2.Image.UrlHottracked = GreenTree.Nachtragsmanagement.Core.StaticHelper.AddSuffix(i.ImageUrl, "-contrast", true);
  269. });
  270. }
  271. });
  272. }
  273. }).GetHtml()
  274. </td>
  275. <td class="functionContentContainer">
  276. </td>
  277. </tr>
  278. </tbody>
  279. </table>