Index.cshtml 14 KB

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