Index.cshtml 16 KB

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