Index.cshtml 13 KB

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