Built files from Bizgaze WebServer
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678
  1. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  2. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  3. return new (P || (P = Promise))(function (resolve, reject) {
  4. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  5. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  6. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  7. step((generator = generator.apply(thisArg, _arguments || [])).next());
  8. });
  9. };
  10. var Unibase;
  11. (function (Unibase) {
  12. let Platform;
  13. (function (Platform) {
  14. let Layouts;
  15. (function (Layouts) {
  16. let Components;
  17. (function (Components) {
  18. class LayoutBuilder extends Unibase.Platform.Core.BaseComponent {
  19. constructor() {
  20. super(...arguments);
  21. this.ThemeId = 0;
  22. this.activeMode = "";
  23. this.Thumbnail = '';
  24. this.BackgroundImageId = 0;
  25. this.modes = [];
  26. this.layoutSettings = [];
  27. this.isLayoutSettingsModified = false;
  28. this.Logo = Unibase.Themes.Compact.Components.Index.Instance().Logo;
  29. this.isModeButtonClicked = false;
  30. this.backgroundImageSimplebar = ".layoutbuilder-simple-scroll-bar .simplebar-content-wrapper";
  31. this.primaryItem = '#myColorTabContent #primary .colors-wrap .color-box';
  32. this.secondaryItem = '#myColorTabContent #secondary .colors-wrap .color-box';
  33. this.highLightItem = '#myColorTabContent #highlight .colors-wrap .color-box';
  34. this.primaryTextItem = '#myTextColorTabContent #primaryText .colors-wrap .color-box';
  35. this.secondaryTextItem = '#myTextColorTabContent #secondaryText .colors-wrap .color-box';
  36. this.buttonMode = '#dipsplay-modes-section .buttons-wrap button.mode-btn';
  37. this.customModeInputSection = '#dipsplay-modes-section .custom-mode-section .custom-mode-input-section';
  38. this.customModeInput = '#dipsplay-modes-section .custom-mode-section input.custom-mode-input';
  39. this.layoutElement = '.layout-builder #menu-layouts .card-body .row.layout-row a';
  40. this.detailsViewElement = '.layout-builder #detail-list-view .card-body .row.detail-row a';
  41. this.backgroundImageElement = '.layout-builder #background-image-view .card-body .row a';
  42. this.logoElementLeft = '.layout-builder-dashboard .biz-submenu .brand-img';
  43. this.logoElementTop = '.layout-builder-dashboard .top-navbar .brand-img';
  44. this.defaultDisplayModes = [];
  45. this.instance = this;
  46. }
  47. cssFiles() {
  48. return [
  49. 'libs/dragula/dist/style.css',
  50. 'platform/layout/components/layoutbuilder/style.layoutbuilder.css',
  51. "libs/spectrum-2.0.8/dist/spectrum.css"
  52. ];
  53. }
  54. jsFiles() {
  55. return [
  56. "platform/layout/managers/themelayoutmanager.js",
  57. "libs/dragula/dist/dragula.min.js",
  58. "libs/dragula/dist/init.js",
  59. "libs/spectrum-2.0.8/dist/spectrum.js",
  60. ];
  61. }
  62. html(id, containerid) {
  63. var instance = this;
  64. let html = Unibase.Platform.Layouts.Components.LayoutBuilder_Template.Instance().loadTemplate();
  65. return html;
  66. }
  67. load(formId, containerid, callback) {
  68. $('.color-pickr-container').each((index, picker) => {
  69. let colorType = $(picker).attr('data-name');
  70. $(`.sp-container.${colorType}`).remove();
  71. });
  72. let instance = this;
  73. instance.isLayoutSettingsModified = false;
  74. instance.isModeButtonClicked = false;
  75. $(".btn-layout-builder-close").click(function () {
  76. $('.biz-wrapper').removeClass('.biz-drawer-push biz-drawer-pushright');
  77. $('#' + containerid).modal('hide');
  78. $('#' + containerid).remove();
  79. });
  80. instance.addDefaultDisplayModes();
  81. instance.fileCacheHelper.loadJsFile('platform/core/infos/status.js', function () { });
  82. Layouts.Managers.ThemeLayoutManager.Instance().getLayoutBuilderInfo(0, 0).then(function (response) {
  83. $(".preloader-it").delay(1000).fadeIn("slow");
  84. let result = response.result;
  85. if (result != null) {
  86. instance.currentTheme = response.result.CurrentTheme;
  87. let result = response.result.LayoutInfo;
  88. for (var i = 0; i < result.length; i++) {
  89. let curLayout = result[i];
  90. let layoutId = curLayout.LayoutId;
  91. curLayout.Thumbnail = curLayout.Thumbnail.replace(".png", ".svg");
  92. $(".layout-builder #menu-layouts .layout-row").append(`<a href="javascript:;" class="col-6 p-0 mb-2 pr-2 p-relative" data-id="${layoutId}" data-index="${curLayout.LayoutIndex}">
  93. <img src="${curLayout.Thumbnail}" class="rounded w-100 h-100" data-dynamic="1" onerror="ReloadImage(event)" title="${curLayout.LayoutName}" />
  94. <i class="zmdi zmdi-check"></i>
  95. </a>`);
  96. let elementId = "layoutPreviewHtml_" + layoutId;
  97. let divHtml = "<div id='" + elementId + "' class='d-none layoutpreviewhtml'> </div>";
  98. $(curLayout.AppendTo).prepend(divHtml);
  99. if (curLayout.PreviewHtml.includes('%3')) {
  100. $("#" + elementId).append(HtmlHelper.getHelper().decode(curLayout.PreviewHtml));
  101. }
  102. else {
  103. $("#" + elementId).append(curLayout.PreviewHtml);
  104. }
  105. }
  106. result = response.result.LayoutSettings;
  107. if (result) {
  108. instance.layoutSettings = [];
  109. for (let i = 0; i < result.length; i++) {
  110. let layoutSetting = result[i];
  111. let layoutSettingObj = {
  112. LayoutId: layoutSetting.LayoutId,
  113. SettingValue: layoutSetting.SettingValue,
  114. logoImgUrl: layoutSetting.LogoImageUrl,
  115. IsOverrideLogo: layoutSetting.IsOverrideLogo
  116. };
  117. instance.layoutSettings.push(layoutSettingObj);
  118. }
  119. }
  120. $(instance.layoutElement).click(function () {
  121. $(instance.layoutElement).removeClass('active');
  122. $(this).addClass('active');
  123. let id = Number($(this).attr('data-id'));
  124. instance.LayoutId = id;
  125. let elementId = "layoutPreviewHtml_" + id;
  126. $(".layoutpreviewhtml").addClass('d-none');
  127. $("#" + elementId).removeClass('d-none');
  128. $(".layout-builder-dashboard").removeClass('biz-layout-3-preview');
  129. let layoutIndex = Number($(this).attr('data-index'));
  130. if (layoutIndex == 3)
  131. $(".layout-builder-dashboard").addClass('biz-layout-3-preview');
  132. if (instance.isLayoutSettingsModified) {
  133. bootbox.confirm({
  134. message: "Do you want to save previous layout settings?",
  135. className: "layout-builder-bootbox",
  136. callback: function (result) {
  137. if (result) {
  138. instance.getLayoutSettings();
  139. MessageHelper.Instance().showSuccess('Layout Settings Saved!', '');
  140. instance.appendLayoutSettings(id);
  141. }
  142. else {
  143. instance.logoFileData = null;
  144. instance.appendLayoutSettings(id);
  145. }
  146. instance.isLayoutSettingsModified = false;
  147. }
  148. });
  149. }
  150. else {
  151. instance.appendLayoutSettings(id);
  152. }
  153. });
  154. result = response.result.DetailViewInfo;
  155. for (var i = 0; i < result.length; i++) {
  156. let viewLayout = result[i];
  157. let id = viewLayout.DetailsViewId;
  158. $(".layout-builder #detail-list-view .detail-row").append(`<a href="javascript:;" class="col-6 p-0 mb-2 pr-2 p-relative" data-id="${id}">
  159. <img src="${viewLayout.Thumbnail}" class="rounded w-100 h-100" data-dynamic="1" onerror="ReloadImage(event)" title="${viewLayout.DetailsViewName}" />
  160. <i class="zmdi zmdi-check"></i>
  161. </a>`);
  162. var elementId = "detailsViewPreviewHtml_" + id;
  163. var divHtml = "<div id='" + elementId + "' class='d-none detailsviewpreviewhtml'> </div>";
  164. $(".layout-builder-dashboard #bizgaze_body .biz-wrapper .biz-pg-wrapper ._bizgaze_detail_container").append(divHtml);
  165. $("#" + elementId).append(viewLayout.PreviewHtml);
  166. }
  167. $(instance.detailsViewElement).click(function () {
  168. $(instance.detailsViewElement).removeClass('active');
  169. $(this).addClass('active');
  170. let id = Number($(this).attr('data-id'));
  171. instance.viewId = id;
  172. let elementId = "detailsViewPreviewHtml_" + id;
  173. $(".detailsviewpreviewhtml").addClass('d-none');
  174. $("#" + elementId).removeClass('d-none');
  175. });
  176. $('.isStructSettingsEnableChk').on('click', function () {
  177. var msg, enable;
  178. enable = !$('.isStructSettingsEnableChk').prop("checked");
  179. if ($('.isStructSettingsEnableChk').prop("checked")) {
  180. msg = 'Are you sure enable structures in apps or details page ?';
  181. }
  182. else {
  183. msg = 'Are you sure? Do you want to disable structures? <br><br> All structures and layouts of widgets will be missing.You need to reconfigure.';
  184. }
  185. bootbox.confirm({
  186. message: msg,
  187. closeButton: false,
  188. buttons: {
  189. confirm: {
  190. label: 'OK',
  191. className: 'btn-success'
  192. },
  193. cancel: {
  194. label: 'Cancel',
  195. className: 'btn-danger'
  196. }
  197. },
  198. callback: function (result) {
  199. return __awaiter(this, void 0, void 0, function* () {
  200. if (result) {
  201. $('.isStructSettingsEnableChk').prop("checked", $('.isStructSettingsEnableChk').prop("checked"));
  202. }
  203. else {
  204. $('.isStructSettingsEnableChk').prop("checked", enable);
  205. }
  206. });
  207. }
  208. });
  209. });
  210. $('.isStructSettingsEnableChk').prop("checked", Unibase.Themes.Compact.Components.Index.Instance().currentTheme.isstructenable);
  211. instance.loadColorPalettes();
  212. result = response.result.DisplayModesInfo;
  213. for (let i = 0; i < result.length; i++) {
  214. let DisplayMode = result[i];
  215. let DisplayModeName = result[i].DisplayModeName;
  216. if (DisplayModeName != null) {
  217. if (DisplayModeName.toLowerCase() == "light" || DisplayModeName.toLowerCase() == "dark") {
  218. let iconClass = DisplayModeName.toLowerCase() == "light" ? "fa-sun-o text-warning" : "fa-moon-o";
  219. instance.appendDisplayMode(iconClass, DisplayMode);
  220. }
  221. else {
  222. instance.appendDisplayMode("", DisplayMode);
  223. }
  224. }
  225. }
  226. instance.enableButtonModeClick();
  227. let themeobj = Unibase.Platform.Membership.Infos.Identity.currentUser.settings.find(x => x.settingName == "themeobj").settingValue;
  228. if (themeobj != null && themeobj != "" && themeobj != undefined) {
  229. instance.currentTheme = themeobj;
  230. let currentTheme = themeobj;
  231. instance.ThemeId = currentTheme.themeId;
  232. instance.Thumbnail = currentTheme.thumbnail;
  233. instance.BackgroundImageId = currentTheme.backgroundImageId;
  234. instance.LayoutId = currentTheme.layoutId;
  235. instance.viewId = currentTheme.detailsViewId;
  236. $(`${instance.layoutElement}[data-id="${currentTheme.layoutId}"]`).click();
  237. $(`${instance.detailsViewElement}[data-id="${currentTheme.detailsViewId}"]`).click();
  238. $(`${instance.buttonMode}[data-id="${currentTheme.displayModeId}"]`).click();
  239. if (currentTheme != null) {
  240. if (currentTheme.thumbnail != "" && currentTheme.thumbnail != null) {
  241. if (currentTheme.thumbnail.includes('tenants\\default\\layoutbuilder\\backgroundimages')) {
  242. let imageUrl = `'${instance.currentTheme.thumbnail.replace(/\\/g, "/")}'`;
  243. instance.applyBackgroundImage(imageUrl);
  244. }
  245. else {
  246. Unibase.Themes.Compact.Components.Index.Instance().getImageUrl(currentTheme.thumbnail).then(function (imageUrl) {
  247. instance.applyBackgroundImage(imageUrl);
  248. });
  249. }
  250. }
  251. }
  252. $('#imagepickerThumbnail').change(function (e) {
  253. let file = e;
  254. var t = file.target.files[0].type.split('/').pop().toLowerCase();
  255. if (t != "jpeg" && t != "jpg" && t != "png" && t != "bmp" && t != "gif") {
  256. MessageHelper.Instance().showError('Please select a valid image file', 'layoutBuilderErrMsg');
  257. $("#imagepickerThumbnail").val('');
  258. return false;
  259. }
  260. Unibase.Platform.Helpers.FileHelper.Instance().getBase64(e).then(function (response) {
  261. instance.imageUploadEffect(response);
  262. $("#imagepickerThumbnail").val('');
  263. });
  264. });
  265. }
  266. $(instance.logoElementLeft).attr('src', instance.Logo);
  267. $(instance.logoElementTop).attr('src', instance.Logo);
  268. instance.appendBackgroundImages(response.result.BackgroundImages);
  269. }
  270. $(".preloader-it").delay(1000).fadeOut("slow");
  271. let el = $(".custom-scollable-container .simplebar-content-wrapper")[0];
  272. instance.addScrollOnDrag(el);
  273. $('.layout-builder').removeClass('d-none');
  274. });
  275. $('#dipsplay-modes-section .custom-mode-section button.custom-mode-btn').click(function () {
  276. $(instance.customModeInputSection).toggleClass('d-none');
  277. if (!$(instance.customModeInputSection).hasClass('d-none')) {
  278. $($(instance.customModeInput)[0]).focus();
  279. }
  280. });
  281. $(instance.customModeInput).on('keypress', function (e) {
  282. if (e.which == 13) {
  283. instance.addDisplayMode();
  284. }
  285. });
  286. if (callback !== null) {
  287. callback();
  288. }
  289. }
  290. addDisplayMode() {
  291. let instance = this;
  292. let DisplayModeName = $(instance.customModeInput).val().toString();
  293. if (DisplayModeName != '') {
  294. let isExists = false;
  295. for (let key in instance.modes) {
  296. let text = instance.modes[key].DisplayModeName.toLowerCase();
  297. if (text == DisplayModeName.toLowerCase()) {
  298. isExists = true;
  299. break;
  300. }
  301. }
  302. if (!isExists) {
  303. let postData = {
  304. DisplayModeId: 0,
  305. DisplayModeName: DisplayModeName,
  306. PrimaryColor: "black",
  307. SecondaryColor: "black",
  308. HighlightColor: "#7b6464",
  309. PrimaryTextColor: "white",
  310. SecondaryTextColor: "black",
  311. };
  312. Unibase.Platform.Layouts.Managers.ThemeLayoutManager.Instance().saveDisplayMode(postData).then(function (response) {
  313. if (response.result != null) {
  314. if (response.status == Unibase.Data.Status.Success) {
  315. MessageHelper.Instance().showSuccess(response.message, '');
  316. instance.appendDisplayMode("", response.result);
  317. $(instance.customModeInput).val('');
  318. $(instance.customModeInputSection).addClass('d-none');
  319. }
  320. }
  321. });
  322. }
  323. }
  324. }
  325. addDefaultDisplayModes() {
  326. const instance = this;
  327. instance.defaultDisplayModes['Default'] = { PrimaryColor: 'rgb(42, 46, 51)', SecondaryColor: 'rgb(232, 252, 253)', HighlightColor: 'rgb(0, 176, 255)', PrimaryTextColor: 'rgb(242, 231, 231)', SecondaryTextColor: '"rgb(15, 15, 15)', TransparentPrimaryColor: 'rgb(42, 46, 51)' };
  328. instance.defaultDisplayModes['Pine Green'] = { PrimaryColor: 'rgb(0, 109, 119)', SecondaryColor: 'rgb(131, 197, 190)', HighlightColor: 'rgb(2, 82, 89)', PrimaryTextColor: 'rgb(255, 255, 255)', SecondaryTextColor: 'rgb(0, 0, 0)', TransparentPrimaryColor: 'rgb(0, 109, 119)' };
  329. instance.defaultDisplayModes['Blue'] = { PrimaryColor: 'rgb(55, 80, 217)', SecondaryColor: 'rgb(232, 252, 253)', HighlightColor: 'rgb(26, 43, 130)', PrimaryTextColor: 'rgb(255, 255, 255)', SecondaryTextColor: 'rgb(0, 0, 0)', TransparentPrimaryColor: 'rgb(55, 80, 217)' };
  330. instance.defaultDisplayModes['Dark Grey'] = { PrimaryColor: 'rgb(25, 63, 100)', SecondaryColor: 'rgb(232, 252, 253)', HighlightColor: 'rgb(11, 41, 70)', PrimaryTextColor: 'rgb(255, 255, 255)', SecondaryTextColor: 'rgb(0, 0, 0)', TransparentPrimaryColor: 'rgb(25, 63, 100)' };
  331. instance.defaultDisplayModes['Light Blue'] = { PrimaryColor: 'rgb(47, 114, 190)', SecondaryColor: 'rgb(195, 233, 248)', HighlightColor: 'rgb(25, 88, 159)', PrimaryTextColor: 'rgb(255, 255, 255)', SecondaryTextColor: 'rgb(0, 0, 0)', TransparentPrimaryColor: 'rgb(47, 114, 190)' };
  332. instance.defaultDisplayModes['Pink'] = { PrimaryColor: 'rgb(243, 39, 110)', SecondaryColor: 'rgb(246, 248, 249)', HighlightColor: 'rgb(206, 16, 82)', PrimaryTextColor: 'rgb(255, 255, 255)', SecondaryTextColor: 'rgb(0, 0, 0)', TransparentPrimaryColor: 'rgb(0, 0, 0)' };
  333. }
  334. resetDisplayMode() {
  335. const instance = this;
  336. const displayModeName = $('#dipsplay-modes-section .mode-btn.active').attr('data-name');
  337. const displayModeSettings = instance.defaultDisplayModes[displayModeName];
  338. for (const property in displayModeSettings) {
  339. $(`#color-picker-${property}`).val(displayModeSettings[property]);
  340. const elem = $(`#color-picker-${property}`);
  341. elem.spectrum("set", displayModeSettings[property]).trigger('change');
  342. }
  343. MessageHelper.Instance().showSuccess('Display Mode reset successful.', '');
  344. $(`#displayModeResetBtn`).blur();
  345. }
  346. enableColorPicker() {
  347. let instance = this;
  348. $('.color-pickr-container').each((index, picker) => {
  349. let colorType = $(picker).attr('data-name');
  350. let activeColor = instance.modes[instance.activeMode][colorType];
  351. let element = $(`.color-pickr-container[data-name="${colorType}"] #color-picker-${colorType}`);
  352. if ($(`.sp-container.${colorType}`).length) {
  353. if (activeColor == 'none' || activeColor == '')
  354. activeColor = 'black';
  355. element.val(activeColor).trigger('change');
  356. return;
  357. }
  358. element.spectrum({
  359. color: activeColor,
  360. type: "color",
  361. showInput: true,
  362. maxSelectionSize: 1,
  363. showInitial: true,
  364. allowEmpty: false,
  365. showAlpha: true,
  366. disabled: false,
  367. localStorageKey: false,
  368. showPaletteOnly: false,
  369. togglePaletteOnly: false,
  370. clickoutFiresChange: true,
  371. containerClassName: colorType,
  372. replacerClassName: colorType,
  373. showPalette: true,
  374. palette: [
  375. ["#000", "#444", "#666", "#999", "#ccc", "#eee", "#f3f3f3", "#fff"],
  376. ["#f00", "#f90", "#ff0", "#0f0", "#0ff", "#00f", "#90f", "#f0f"],
  377. ["#f4cccc", "#fce5cd", "#fff2cc", "#d9ead3", "#d0e0e3", "#cfe2f3", "#d9d2e9", "#ead1dc"],
  378. ["#ea9999", "#f9cb9c", "#ffe599", "#b6d7a8", "#a2c4c9", "#9fc5e8", "#b4a7d6", "#d5a6bd"],
  379. ["#e06666", "#f6b26b", "#ffd966", "#93c47d", "#76a5af", "#6fa8dc", "#8e7cc3", "#c27ba0"],
  380. ["#c00", "#e69138", "#f1c232", "#6aa84f", "#45818e", "#3d85c6", "#674ea7", "#a64d79"],
  381. ["#900", "#b45f06", "#bf9000", "#38761d", "#134f5c", "#0b5394", "#351c75", "#741b47"],
  382. ["#600", "#783f04", "#7f6000", "#274e13", "#0c343d", "#073763", "#20124d", "#4c1130"]
  383. ],
  384. showSelectionPalette: true,
  385. selectionPalette: ["red", "green", "blue"],
  386. locale: 'fr',
  387. togglePaletteMoreText: 'More',
  388. togglePaletteLessText: 'Less',
  389. clearText: "",
  390. noColorSelectedText: "",
  391. showButtons: true,
  392. chooseText: "Choose",
  393. cancelText: "Cancel",
  394. move: function (color) {
  395. let convertedColor = color.toRgbString();
  396. instance.modes[instance.activeMode][colorType] = convertedColor;
  397. let colorList = convertedColor.match(/\((.*?)\)/)[1].split(',');
  398. let opacity = 0;
  399. let opacityElement = $(`.sp-container.${colorType} .sp-picker-container .sp-input-container input.opacity`);
  400. if (colorList.length > 3) {
  401. opacity = Number(colorList[3]) * 100;
  402. opacityElement.val(opacity.toFixed(2) + " %");
  403. opacityElement.removeClass('d-none');
  404. }
  405. else {
  406. opacityElement.addClass('d-none');
  407. }
  408. if (instance.isModeButtonClicked == false)
  409. instance.appendOrRemoveCss(instance.modes[instance.activeMode]);
  410. },
  411. hide: function (color) {
  412. $(this).trigger('change');
  413. }
  414. });
  415. let colorPickerContainer = $(`.sp-container.${colorType} .sp-picker-container .sp-input-container`);
  416. colorPickerContainer.addClass('d-flex').append(`<input type="text" class="opacity" title="Opacity" value="0%" disabled/>`);
  417. colorPickerContainer.find('.sp-input').trigger('change');
  418. });
  419. instance.isModeButtonClicked = false;
  420. }
  421. enableButtonModeClick() {
  422. $('body style.colorClasses').remove();
  423. let instance = this;
  424. $(instance.buttonMode).unbind('click');
  425. $(instance.buttonMode).click(function () {
  426. $(instance.buttonMode).removeClass('active');
  427. $(this).addClass('active');
  428. let modeName = $(this).attr('data-class');
  429. if (modeName == 'custom') {
  430. instance.unhideDisplayModes();
  431. }
  432. else {
  433. }
  434. instance.activeMode = $(this).find('.btn-text').html();
  435. instance.activeDisplayModeId = Number($(this).attr('data-id'));
  436. instance.isModeButtonClicked = true;
  437. instance.appendOrRemoveCss(instance.modes[instance.activeMode]);
  438. instance.enableColorPicker();
  439. let paletteId = instance.modes[instance.activeMode].PaletteId;
  440. if (paletteId === 0) {
  441. paletteId = '';
  442. }
  443. $('#palettesSelect').val(paletteId).trigger('change');
  444. if (instance.defaultDisplayModes[instance.activeMode]) {
  445. $('#displayModeResetBtn').removeClass('d-none');
  446. }
  447. else {
  448. $('#displayModeResetBtn').addClass('d-none');
  449. }
  450. });
  451. }
  452. appendBackgroundImages(backgroundImages) {
  453. let instance = this;
  454. let backGroundImagescrollBar = `#background-image-view .dropdown-menu-scrollbar`;
  455. backgroundImages.forEach((backgroundImage) => {
  456. let IsDefaultClass = backgroundImage.IsDefault ? 'default' : '';
  457. $(".layout-builder #background-image-view .row").append(`<a href="javascript:;" class="col-6 p-relative px-1 ${IsDefaultClass}" data-url="${backgroundImage.Thumbnail}" data-id="${backgroundImage.BackgroundImageId}">
  458. <div class="p-relative">
  459. <img src="${backgroundImage.Thumbnail}" class="rounded w-100" data-dynamic="1" onerror = "ReloadImage(event)" />
  460. <div class="delete" data-id="${backgroundImage.BackgroundImageId}">
  461. <i class="fa fa-trash"></i>
  462. </div>
  463. </div>
  464. <i class="zmdi zmdi-check"></i>
  465. </a>`);
  466. $(backGroundImagescrollBar).animate({ scrollTop: $(backGroundImagescrollBar).prop("scrollHeight") });
  467. $(`${instance.backgroundImageElement}[data-id="${backgroundImage.BackgroundImageId}"]`).click(function (e) {
  468. if ($(this).hasClass('active')) {
  469. $(this).removeClass('active');
  470. $($(instance.backgroundImageSimplebar)[0]).css('background-image', '').removeClass('background-image');
  471. instance.Thumbnail = "";
  472. instance.BackgroundImageId = 0;
  473. instance.unhideDisplayModes();
  474. instance.appendOrRemoveCss(instance.modes[instance.activeMode]);
  475. }
  476. else {
  477. $(instance.backgroundImageElement).removeClass('active');
  478. $(this).addClass('active');
  479. let img = $(this).find('img').attr('src');
  480. instance.Thumbnail = $(this).attr('data-url');
  481. instance.BackgroundImageId = Number($(this).attr('data-id'));
  482. if (img.includes('tenants\\default\\layoutbuilder\\backgroundimages')) {
  483. let imageUrl = `'${img.replace(/\\/g, "/")}'`;
  484. instance.applyBackgroundImage(imageUrl);
  485. }
  486. else {
  487. instance.applyBackgroundImage(img);
  488. }
  489. }
  490. });
  491. $(`${instance.backgroundImageElement}[data-id="${backgroundImage.BackgroundImageId}"] .delete`).click(function (e) {
  492. e.stopPropagation();
  493. let imageId = Number($(this).attr('data-id'));
  494. let postData = { BackgroundImageId: imageId };
  495. Unibase.Platform.Layouts.Managers.ThemeLayoutManager.Instance().deleteBackgroundImage(postData).then(function (response) {
  496. if (response.status == Unibase.Data.Status.Success)
  497. $(`${instance.backgroundImageElement}[data-id="${imageId}"]`).remove();
  498. });
  499. });
  500. if (backgroundImage.Thumbnail == instance.Thumbnail)
  501. $(`${instance.backgroundImageElement}[data-id="${backgroundImage.BackgroundImageId}"]`).addClass('active');
  502. });
  503. }
  504. appendOrRemoveCss(defaultColors) {
  505. let instance = this;
  506. if (instance.Thumbnail != "") {
  507. instance.unhideTransperentPrimaryTab();
  508. }
  509. else {
  510. instance.hideTransperentPrimaryTab();
  511. }
  512. let colors = Object.create(defaultColors);
  513. $('body style#layoutBuilderColorStyles').remove();
  514. let layoutBuilderColors = `<style id="layoutBuilderColorStyles">
  515. /* First Left Layout Start */
  516. .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-primary-color .biz-submenu {
  517. background: ${colors.PrimaryColor} !important; /* Transperent Color*/
  518. opacity: 0.95;
  519. }
  520. .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-primary-color .biz-main-menu,
  521. .layout-builder-dashboard .top-navbar nav.navbar {
  522. background: ${colors.PrimaryColor} !important;
  523. }
  524. @media (max-width: 1199px) {
  525. body.background-image .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-primary-color .biz-main-menu,
  526. body.background-image .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-primary-color .biz-submenu {
  527. background: ${colors.PrimaryColor} !important;
  528. }
  529. }
  530. .layout-builder-dashboard ._bizgaze_detail_container,
  531. .layout-builder-dashboard .biz-pg-wrapper{
  532. background: ${colors.SecondaryColor} !important;
  533. }
  534. .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-primary-text-color .biz-main-menu .menu-content-wrap > .navbar-nav > .nav-item.sunbnav-active > .nav-link .nav-icon-wrap,
  535. .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-highlight-color .navbar-nav li.active-item {
  536. background-color: ${colors.HighlightColor} !important;
  537. }
  538. .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-primary-text-color .biz-main-menu .menu-content-wrap > .navbar-nav > .nav-item > .nav-link .nav-icon-wrap,
  539. .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-primary-text-color .biz-submenu .nav-header span,
  540. .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-primary-text-color .biz-submenu .nav-header a,
  541. .layout-builder-dashboard .biz-wrapper.biz__icon__menu .biz-menu.biz-primary-text-color .biz-submenu .nav-options-container ul li a {
  542. color: ${colors.PrimaryTextColor} !important
  543. }
  544. .layout-builder-dashboard .biz-pg-wrapper {
  545. color: ${colors.SecondaryTextColor} !important;
  546. }
  547. /* Second Top Layout Start*/
  548. .layout-builder-dashboard #bizgaze_body .top-navbar.hk-wrapper.hk-horizontal-nav nav.navbar.biz-primary-color,
  549. .layout-builder-dashboard #bizgaze_body .top-navbar.hk-wrapper.hk-horizontal-nav .hk-navbar.biz-primary-color nav.hk-nav .navbar-nav-wrap ul.collapsing,
  550. .layout-builder-dashboard #bizgaze_body .top-navbar.hk-wrapper.hk-horizontal-nav .hk-navbar.biz-primary-color nav.hk-nav .navbar-nav-wrap ul.collapse {
  551. background: ${colors.PrimaryColor} !important;
  552. }
  553. .simplebar-content-wrapper.background-image .layout-builder-dashboard #bizgaze_body .top-navbar.hk-wrapper.hk-horizontal-nav .hk-navbar.biz-primary-color nav.hk-nav .navbar-nav-wrap ul.collapsing,
  554. .simplebar-content-wrapper.background-image .layout-builder-dashboard #bizgaze_body .top-navbar.hk-wrapper.hk-horizontal-nav .hk-navbar.biz-primary-color nav.hk-nav .navbar-nav-wrap ul.collapse {
  555. background: ${colors.TransparentPrimaryColor} !important;
  556. }
  557. .layout-builder-dashboard #bizgaze_body .top-navbar .hk-navbar.biz-primary-text-color .navbar-nav-wrap ul li a,
  558. .layout-builder-dashboard #bizgaze_body .top-navbar .hk-navbar.biz-primary-text-color ul.navbar-nav.hk-navbar-content li.nav-item a.nav-link span {
  559. color: ${colors.PrimaryTextColor} !important
  560. }
  561. /* Third Left Layout Start */
  562. .layout-builder-dashboard #bizgaze_body .top-navbar.hk-wrapper.hk-vertical-nav .hk-navbar.biz-primary-color nav.hk-nav {
  563. background: ${colors.PrimaryColor} !important;
  564. }
  565. /* .simplebar-content-wrapper.background-image .layout-builder-dashboard #bizgaze_body .top-navbar.hk-wrapper.hk-vertical-nav.biz-layout-3-top-navbar-preview .hk-navbar.biz-primary-color nav.hk-nav {
  566. background: ${colors.TransparentPrimaryColor} !important;
  567. } */
  568. .layout-builder-dashboard #bizgaze_body .top-navbar .hk-navbar.biz-primary-text-color .navbar-toggle-btn {
  569. color: ${colors.PrimaryTextColor} !important
  570. }`;
  571. layoutBuilderColors += `
  572. </style>`;
  573. $('body').prepend(layoutBuilderColors);
  574. }
  575. appendDisplayMode(iconClass, displayMode) {
  576. let instance = this;
  577. let DisplayModeName = displayMode.DisplayModeName;
  578. let DisplayModeId = displayMode.DisplayModeId;
  579. let button = "";
  580. if (iconClass != "") {
  581. button = `<button class="btn mode-btn btn-outline btn-wth-icon icon-left mb-15 mr-2 p-relative" data-class="${DisplayModeName}" data-id="${DisplayModeId}"><span><span class="icon-label"><span class="fa ${iconClass}"></span></span><span class="btn-text">${DisplayModeName}</span></span></button>`;
  582. }
  583. else {
  584. button = `<button class="btn mode-btn btn-outline text-dark mb-15 mr-2 p-relative" data-class="custom" data-id="${DisplayModeId}" data-name="${DisplayModeName}"><span class="btn-text">${DisplayModeName}</span><i class="zmdi zmdi-close delete" data-id="${DisplayModeId}" data-name="${DisplayModeName}"></i></button>`;
  585. }
  586. $('#dipsplay-modes-section .buttons-wrap').append(button);
  587. let mode = {
  588. "DisplayModeId": DisplayModeId,
  589. "DisplayModeName": DisplayModeName,
  590. "PrimaryColor": displayMode.PrimaryColor,
  591. "TransparentPrimaryColor": displayMode.TransparentPrimaryColor,
  592. "SecondaryColor": displayMode.SecondaryColor,
  593. "HighlightColor": displayMode.HighlightColor,
  594. "PrimaryTextColor": displayMode.PrimaryTextColor,
  595. "SecondaryTextColor": displayMode.SecondaryTextColor,
  596. "PaletteId": displayMode.PaletteId
  597. };
  598. instance.modes[DisplayModeName] = mode;
  599. instance.enableButtonModeClick();
  600. $(`${instance.buttonMode} .delete[data-id="${DisplayModeId}"]`).click(function (e) {
  601. e.stopPropagation();
  602. let element = $(this);
  603. bootbox.confirm('Are you sure you want to delete?', function (result) {
  604. if (result) {
  605. let displayModeId = Number(element.attr('data-id'));
  606. let DisplayModeName = element.attr('data-name');
  607. if (DisplayModeName == "Default")
  608. return;
  609. let postData = { DisplayModeId: displayModeId };
  610. Unibase.Platform.Layouts.Managers.ThemeLayoutManager.Instance().deleteDisplayMode(postData).then(function (response) {
  611. if (response.status == Unibase.Data.Status.Success) {
  612. delete instance.modes[DisplayModeName];
  613. $(`${instance.buttonMode}[data-id="${displayModeId}"]`).remove();
  614. MessageHelper.Instance().showSuccess(response.message, '');
  615. }
  616. else if (response.status == Unibase.Data.Status.Error) {
  617. MessageHelper.Instance().showError(response.message, 'layoutBuilderErrMsg');
  618. }
  619. });
  620. }
  621. });
  622. });
  623. }
  624. loadColorPalettes() {
  625. const instance = this;
  626. instance.fileCacheHelper.loadJsFile("apps/crm/palettes/managers/palettemanager.js", function () {
  627. const palettemanager = Bizgaze.Apps.Crm.Palettes.Managers.PaletteManager.Instance();
  628. palettemanager.getPallettes().then(function (pallresponse) {
  629. const palettedata = [];
  630. if (pallresponse.result) {
  631. for (const palette of pallresponse.result) {
  632. palettedata.push({ id: palette.paletteid, text: palette.name });
  633. }
  634. }
  635. $("#palettesSelect").select2({
  636. placeholder: 'Select Palette',
  637. data: palettedata,
  638. allowClear: true,
  639. }).on('select2:select select2:clear', function () {
  640. const selectedPalette = +$(this).val();
  641. instance.modes[instance.activeMode].PaletteId = selectedPalette;
  642. });
  643. const paletteId = instance.modes[instance.activeMode].PaletteId;
  644. if (paletteId != 0) {
  645. $('#palettesSelect').val(paletteId).trigger('change');
  646. }
  647. });
  648. });
  649. }
  650. appendLayoutSettings(layoutId) {
  651. const instance = this;
  652. const navParentGroupsArr = ['dashboards', 'apps', 'reports', 'isStructures'];
  653. let layoutNavHtml = '';
  654. navParentGroupsArr.map(navGroup => {
  655. layoutNavHtml += `<li class="nav-group-item">
  656. <div class="enable-settings-control d-flex justify-content-between align-items-center mb-10 pl-0">
  657. <label class="nav-group-label font-weight-500 text-capitalize mb-0" for="${navGroup}SettingsEnableChk" data-group="${navGroup}">${navGroup}</label>
  658. <input type="checkbox" class="nav-settings-input" id="${navGroup}SettingsEnableChk" onchange="Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().toggleLayoutNavSettings('${navGroup}')">
  659. </div>
  660. <div class="group-options-wrap d-none" id="${navGroup}SettingsWrap">
  661. <div class="nav-group-option d-flex justify-content-between mb-10">
  662. <span>Icon</span>
  663. <label class="switch mb-0" for="${navGroup}IconChk"><input id="${navGroup}IconChk" type="checkbox" onchange="Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().onChangeLayoutNavSetting('${navGroup}','icon')"><span></span></label>
  664. </div>
  665. <div class="nav-group-option d-flex justify-content-between mb-10">
  666. <span>Title</span>
  667. <label class="switch mb-0" for="${navGroup}TitleChk"><input id="${navGroup}TitleChk" type="checkbox" onchange="Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().onChangeLayoutNavSetting('${navGroup}','title')"><span></span></label>
  668. </div>
  669. </div>
  670. </li>`;
  671. }).join('');
  672. $('#navParentGroupsList').html(layoutNavHtml).attr('data-layoutid', layoutId);
  673. $('#isStructuresSettingsWrap').siblings('.enable-settings-control').addClass('hidden');
  674. $('#isStructuresSettingsWrap').remove();
  675. let layoutLogoHtml = `<input type="file" class="logo-upload-input mt-15" id="logoUploadInput" accept="image/*" onchange="Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().layoutLogoUpload(event);">
  676. <div id="layoutLogoWrap" class="layout-logo-wrap mt-15 d-none">
  677. <img id="layoutLogoPreview" src="" alt="your image" class="img-fluid layout-logo-preview" data-dynamic="1" onerror="ReloadImage(event)"/>
  678. <a href="javascript:;" class="delete" id="layoutLogoDeleteBtn" onclick="Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().deleteLayoutLogo(${layoutId});">
  679. <i class="fa fa-trash"></i>
  680. </a>
  681. </div>
  682. <div class="logo-override-chk-wrap d-flex justify-content-between mt-15">
  683. <span class="font-weight-500 text-capitalize">Override Company Logo</span>
  684. <label class="switch mb-0" for="logoOverrideChk"><input type="checkbox" class="logo-override-chk" id="logoOverrideChk" onchange="Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().onChangeOverrideLogoSetting()"><span></span></label>
  685. </div>`;
  686. $('#logoSettingsBody').html(layoutLogoHtml).attr('data-layoutid', layoutId);
  687. instance.bindLayoutSettings(layoutId);
  688. }
  689. bindLayoutSettings(layoutId) {
  690. const instance = this;
  691. if (instance.layoutSettings.length != 0) {
  692. let layoutArrIndex = instance.layoutSettings.findIndex(x => x.LayoutId == layoutId);
  693. if (layoutArrIndex != -1) {
  694. const settingValues = JSON.parse(instance.layoutSettings[layoutArrIndex].SettingValue);
  695. $.each(settingValues, function (key, obj) {
  696. let navGroup = key.toString();
  697. if (obj.IsEnabled) {
  698. $(`#${navGroup}SettingsEnableChk`).prop('checked', true);
  699. $(`#${navGroup}SettingsWrap`).removeClass('d-none');
  700. }
  701. if (obj.Icon) {
  702. $(`#${navGroup}IconChk`).prop('checked', true);
  703. }
  704. if (obj.Title) {
  705. $(`#${navGroup}TitleChk`).prop('checked', true);
  706. }
  707. });
  708. let logoImageUrl = instance.layoutSettings[layoutArrIndex].logoImgUrl;
  709. if (logoImageUrl == "") {
  710. const logoData = instance.layoutSettings[layoutArrIndex].LogoData;
  711. if (logoData)
  712. logoImageUrl = `data:image/${logoData.FileType};base64,${logoData.FileData}`;
  713. }
  714. const isOverrideLogo = instance.layoutSettings[layoutArrIndex].IsOverrideLogo;
  715. if (logoImageUrl) {
  716. $('#layoutLogoPreview').attr('src', logoImageUrl).parent().removeClass('d-none');
  717. $('#logoOverrideChk').prop({ 'disabled': false, 'checked': isOverrideLogo });
  718. }
  719. else {
  720. $('#logoOverrideChk').prop('disabled', true);
  721. }
  722. }
  723. else {
  724. $(`#navParentGroupsList`).find('.nav-settings-input').prop('checked', true).trigger('change');
  725. instance.isLayoutSettingsModified = false;
  726. }
  727. }
  728. else {
  729. $(`#navParentGroupsList`).find('.nav-settings-input').not('#isStructuresSettingsEnableChk').prop('checked', true).trigger('change');
  730. instance.isLayoutSettingsModified = false;
  731. }
  732. }
  733. toggleLayoutNavSettings(navGroup) {
  734. const instance = this;
  735. instance.isLayoutSettingsModified = true;
  736. if ($(`#${navGroup}SettingsEnableChk`).is(':checked')) {
  737. $(`#${navGroup}SettingsWrap`).removeClass('d-none');
  738. $(`#${navGroup}SettingsWrap`).find('input:checkbox').prop('checked', true);
  739. }
  740. else {
  741. $(`#${navGroup}SettingsWrap`).addClass('d-none');
  742. $(`#${navGroup}SettingsWrap`).find('input:checkbox').prop('checked', false);
  743. }
  744. }
  745. onChangeLayoutNavSetting(navGroup, setting) {
  746. const instance = this;
  747. instance.isLayoutSettingsModified = true;
  748. let isAllSettingsChecked = false;
  749. $(`#${navGroup}SettingsWrap input:checkbox`).each(function (i, e) {
  750. if ($(e).is(':checked')) {
  751. isAllSettingsChecked = true;
  752. }
  753. });
  754. if (isAllSettingsChecked) {
  755. $(`#${navGroup}SettingsEnableChk`).prop('checked', true);
  756. }
  757. }
  758. getLayoutSettings() {
  759. const instance = this;
  760. let layoutSettingObj = {};
  761. const selectedLayoutId = Number($('#navParentGroupsList').attr('data-layoutid'));
  762. if (!selectedLayoutId) {
  763. return;
  764. }
  765. $('#navParentGroupsList .nav-group-label').each(function (i, e) {
  766. let navGroup = $(e).attr('data-group');
  767. layoutSettingObj[navGroup] = {
  768. IsEnabled: $(`#${navGroup}SettingsEnableChk`).is(':checked'),
  769. Icon: $(`#${navGroup}IconChk`).is(':checked'),
  770. Title: $(`#${navGroup}TitleChk`).is(':checked')
  771. };
  772. });
  773. let layoutsettings = {
  774. LayoutId: selectedLayoutId,
  775. SettingValue: JSON.stringify(layoutSettingObj),
  776. LogoData: instance.logoFileData,
  777. IsOverrideLogo: $('#logoOverrideChk').is(':checked')
  778. };
  779. let layoutArrIndex = instance.layoutSettings.findIndex(x => x.LayoutId == selectedLayoutId);
  780. if (layoutArrIndex != -1) {
  781. instance.layoutSettings[layoutArrIndex].SettingValue = layoutsettings.SettingValue;
  782. instance.layoutSettings[layoutArrIndex].LogoData = layoutsettings.LogoData;
  783. instance.layoutSettings[layoutArrIndex].IsOverrideLogo = layoutsettings.IsOverrideLogo;
  784. instance.layoutSettings[layoutArrIndex].logoImgUrl = "";
  785. }
  786. else {
  787. instance.layoutSettings.push(layoutsettings);
  788. }
  789. instance.logoFileData = null;
  790. }
  791. layoutLogoUpload(e) {
  792. const instance = this;
  793. const layoutId = Number($('#logoSettingsBody').attr('data-layoutid'));
  794. const inputEl = document.getElementById('logoUploadInput');
  795. const fileType = inputEl.files[0].type.split('/').pop().toLowerCase();
  796. if (fileType != "jpeg" && fileType != "jpg" && fileType != "png" && fileType != "bmp" && fileType != "gif") {
  797. MessageHelper.Instance().showError('Please select a valid image file', 'layoutBuilderErrMsg');
  798. $("#logoUploadInput").val('');
  799. return false;
  800. }
  801. else {
  802. const [file] = inputEl.files;
  803. if (file) {
  804. const reader = new FileReader();
  805. reader.onload = function () {
  806. $('#layoutLogoPreview').attr('src', `${reader.result}`).parent().removeClass('d-none');
  807. };
  808. if (file) {
  809. reader.readAsDataURL(file);
  810. }
  811. Unibase.Platform.Helpers.FileHelper.Instance().getBase64(e).then(function (response) {
  812. instance.logoFileData = response;
  813. let layoutArrIndex = instance.layoutSettings.findIndex(x => x.LayoutId == layoutId);
  814. if (layoutArrIndex != -1) {
  815. instance.layoutSettings[layoutArrIndex].LogoData = instance.logoFileData;
  816. instance.layoutSettings[layoutArrIndex].isLogoDelete = false;
  817. }
  818. });
  819. $('#logoOverrideChk').prop('disabled', false);
  820. instance.isLayoutSettingsModified = true;
  821. }
  822. }
  823. }
  824. onChangeOverrideLogoSetting() {
  825. const instance = this;
  826. instance.isLayoutSettingsModified = true;
  827. }
  828. deleteLayoutLogo(layoutId) {
  829. const instance = this;
  830. $('#layoutLogoPreview').attr('src', '').parent().addClass('d-none');
  831. $('#logoOverrideChk').prop('checked', false).attr("disabled", 'true');
  832. let layoutArrIndex = instance.layoutSettings.findIndex(x => x.LayoutId == layoutId);
  833. if (layoutArrIndex != -1) {
  834. instance.layoutSettings[layoutArrIndex].isLogoDelete = true;
  835. }
  836. instance.isLayoutSettingsModified = true;
  837. }
  838. saveTheme() {
  839. let instance = this;
  840. let modes = [];
  841. for (let key in this.modes) {
  842. let displayMode = this.modes[key];
  843. let mode = {
  844. DisplayModeId: displayMode["DisplayModeId"],
  845. DisplayModeName: displayMode.DisplayModeName,
  846. PrimaryColor: displayMode["PrimaryColor"],
  847. TransparentPrimaryColor: displayMode["TransparentPrimaryColor"],
  848. SecondaryColor: displayMode["SecondaryColor"],
  849. HighlightColor: displayMode["HighlightColor"],
  850. PrimaryTextColor: displayMode["PrimaryTextColor"],
  851. SecondaryTextColor: displayMode["SecondaryTextColor"],
  852. PaletteId: displayMode["PaletteId"],
  853. };
  854. modes.push(mode);
  855. }
  856. this.instance.getLayoutSettings();
  857. let postData = {
  858. ThemeId: this.ThemeId,
  859. LayoutId: this.LayoutId,
  860. DetailsViewId: this.viewId,
  861. DisplayModeId: this.activeDisplayModeId,
  862. BackgroundImageId: this.BackgroundImageId,
  863. DisplayModes: modes,
  864. LayoutSettings: this.layoutSettings,
  865. isStructEnable: $('.isStructSettingsEnableChk').prop("checked")
  866. };
  867. Unibase.Platform.Layouts.Managers.ThemeLayoutManager.Instance().saveTheme(postData).then(function (response) {
  868. if (response.status == Unibase.Data.Status.Success) {
  869. MessageHelper.Instance().showSuccess(response.message, '');
  870. instance.refrshLayout(response);
  871. }
  872. });
  873. }
  874. refrshLayout(response) {
  875. let result = response.result;
  876. var themeobj = Unibase.Platform.Membership.Infos.Identity.getCurrentUser().settings.find(x => x.settingName == "themeobj").settingValue;
  877. let layoutSettingsObj = {
  878. settingValue: result.LayoutSettings,
  879. isOverrideLogo: result.IsOverrideLogo,
  880. logoImageUrl: result.LogoImageUrl
  881. };
  882. var isAppStructureEnable = Unibase.Themes.Compact.Components.Index.Instance().isAppStructureEnable;
  883. if (result.IsStructEnable != undefined) {
  884. isAppStructureEnable = result.IsStructEnable;
  885. }
  886. if (themeobj != null && themeobj != "" && themeobj != undefined) {
  887. let resultObj = {
  888. layoutId: result.LayoutId,
  889. layoutIndex: result.LayoutIndex,
  890. layoutName: result.LayoutName,
  891. layoutHtmlPath: result.LayoutHtmlPath,
  892. detailsViewId: result.DetailsViewId,
  893. detailsViewIndex: result.DetailsViewIndex,
  894. thumbnail: result.Thumbnail,
  895. primaryColor: result.PrimaryColor,
  896. secondaryColor: result.SecondaryColor,
  897. highlightColor: result.HighlightColor,
  898. primaryTextColor: result.PrimaryTextColor,
  899. secondaryTextColor: result.SecondaryTextColor,
  900. transparentPrimaryColor: result.TransparentPrimaryColor,
  901. displayModeId: result.DisplayModeId,
  902. backgroundImageId: result.BackgroundImageId,
  903. themeId: result.ThemeId,
  904. layoutSettings: layoutSettingsObj,
  905. isstructenable: isAppStructureEnable,
  906. paletteId: result.PaletteId
  907. };
  908. var newobj = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  909. newobj.settings.find(x => x.settingName == "themeobj").settingValue = resultObj;
  910. Unibase.Platform.Membership.Infos.Identity.setCurrentUser(newobj);
  911. if (isMobileApp()) {
  912. Unibase.Platform.Helpers.MobileHelper.Instance().redirectToLogin();
  913. }
  914. else {
  915. window.location.href = '#/welcome';
  916. window.location.reload();
  917. }
  918. }
  919. }
  920. applyBackgroundImage(imageURL) {
  921. let instance = this;
  922. instance.appendOrRemoveCss(instance.modes[instance.activeMode]);
  923. $($(instance.backgroundImageSimplebar)[0]).css('background-image', 'url(' + imageURL + ')').addClass('background-image');
  924. }
  925. imageUploadEffect(imageFile) {
  926. let instance = this;
  927. $('.layout-builder .background-change .progress-wrap').removeClass('d-none');
  928. $('.layout-builder .background-change .progress-wrap').addClass('d-flex');
  929. let i = 0;
  930. let isUploadCompleted = false;
  931. let uploadTimer = setInterval(() => {
  932. if (isUploadCompleted == true) {
  933. clearInterval(uploadTimer);
  934. $('.layout-builder .background-change .progress-wrap .progress .progress-bar').width(0 + '%');
  935. $('.layout-builder .background-change .progress-wrap .progress-text').html(0 + '%');
  936. $('.layout-builder .background-change .progress-wrap').removeClass('d-flex');
  937. $('.layout-builder .background-change .progress-wrap').addClass('d-none');
  938. }
  939. else {
  940. $('.layout-builder .background-change .progress-wrap .progress .progress-bar').width(i + '%');
  941. $('.layout-builder .background-change .progress-wrap .progress-text').html(i + '%');
  942. if (i < 99)
  943. i++;
  944. }
  945. }, 100);
  946. let postData = { BackgroundImageId: 0, FileData: imageFile };
  947. Unibase.Platform.Layouts.Managers.ThemeLayoutManager.Instance().saveBackgroundImage(postData).then(function (response) {
  948. if (response.status == Unibase.Data.Status.Success && response.result != null) {
  949. isUploadCompleted = true;
  950. let imageItem = response.result;
  951. instance.Thumbnail = imageItem.Thumbnail;
  952. instance.BackgroundImageId = imageItem.BackgroundImageId;
  953. $(`${instance.backgroundImageElement}`).removeClass('active');
  954. instance.appendBackgroundImages([imageItem]);
  955. Unibase.Themes.Compact.Components.Index.Instance().getImageUrl(instance.Thumbnail).then(function (imageUrl) {
  956. instance.applyBackgroundImage(imageUrl);
  957. });
  958. }
  959. });
  960. }
  961. hideTransperentPrimaryTab() {
  962. $(".background-colors ul.nav-tabs li[title='Transparent Primary']").addClass('d-none');
  963. }
  964. unhideTransperentPrimaryTab() {
  965. $(".background-colors ul.nav-tabs li[title='Transparent Primary']").removeClass('d-none');
  966. }
  967. hideDisplayModes() {
  968. $(".layout-builder .drawer-body .background-colors").addClass('d-none');
  969. $(".layout-builder .drawer-body .text-colors").addClass('d-none');
  970. }
  971. unhideDisplayModes() {
  972. $(".layout-builder .drawer-body .background-colors").removeClass('d-none');
  973. $(".layout-builder .drawer-body .text-colors").removeClass('d-none');
  974. }
  975. addScrollOnDrag(el) {
  976. let x = 0, y = 0, top = 0, left = 0;
  977. let draggingFunction = (e) => {
  978. document.addEventListener('mouseup', () => {
  979. document.removeEventListener("mousemove", draggingFunction);
  980. });
  981. el.scrollLeft = left - e.pageX + x;
  982. el.scrollTop = top - e.pageY + y;
  983. el.style.cursor = 'grab';
  984. el.style.removeProperty('user-select');
  985. };
  986. el.addEventListener('mousedown', (e) => {
  987. e.preventDefault();
  988. el.style.cursor = 'grabbing';
  989. el.style.userSelect = 'none';
  990. y = e.pageY;
  991. x = e.pageX;
  992. top = el.scrollTop;
  993. left = el.scrollLeft;
  994. document.addEventListener('mousemove', draggingFunction);
  995. });
  996. }
  997. loadBuilder(formId, installedAppId, appConfigurationId) {
  998. var formbuilderinstance = LayoutBuilder.Instance();
  999. formbuilderinstance.init();
  1000. }
  1001. init() {
  1002. var instance = this;
  1003. instance.render();
  1004. }
  1005. render() {
  1006. var layoutBuilder = Unibase.Platform.Layouts.Components.LayoutBuilder.Instance();
  1007. this.navigationHelper.popup(0, '', layoutBuilder, function (containerid) {
  1008. }, Platform.Helpers.Size.ExtraLarge);
  1009. }
  1010. static Instance() {
  1011. if (this.instance === undefined) {
  1012. this.instance = new LayoutBuilder();
  1013. }
  1014. return this.instance;
  1015. }
  1016. }
  1017. Components.LayoutBuilder = LayoutBuilder;
  1018. })(Components = Layouts.Components || (Layouts.Components = {}));
  1019. })(Layouts = Platform.Layouts || (Platform.Layouts = {}));
  1020. })(Platform = Unibase.Platform || (Unibase.Platform = {}));
  1021. })(Unibase || (Unibase = {}));
  1022. var Unibase;
  1023. (function (Unibase) {
  1024. let Platform;
  1025. (function (Platform) {
  1026. let Layouts;
  1027. (function (Layouts) {
  1028. let Components;
  1029. (function (Components) {
  1030. class LayoutBuilder_Template {
  1031. loadTemplate() {
  1032. let instance = this;
  1033. let html = `
  1034. <div class="biz-wrapper biz-wrapper2 layout-builder d-none drawer-small drawer-right biz-drawer-push biz-drawer-pushright ">
  1035. <!-- Drawer Push -->
  1036. <div id="drawer_push" class="biz-drawer drawer-wthout-footer drawer-small drawer-right biz-drawer-toggle">
  1037. <div class="drawer-header">
  1038. <div class="drawer-text"> Settings </div>
  1039. <button type="button" class="drawer-close close">
  1040. <span aria-hidden="true">&times;</span>
  1041. </button>
  1042. </div>
  1043. <div class="drawer-body">
  1044. <div data-simplebar class="simple-scroll-bar pb-15">
  1045. <div class="drawer-content-wrap">
  1046. <div class="collapse-simple">
  1047. <div class="card dipsplay-modes">
  1048. <div class="card-header">
  1049. <a href="javascript:;" class="no-collapse">Display Modes</a>
  1050. </div>
  1051. <div class="title-devider"></div>
  1052. <div id="dipsplay-modes-section">
  1053. <div class="card-body buttons-wrap">
  1054. </div>
  1055. <div class="custom-mode-section">
  1056. <button class="btn custom-mode-btn btn-outline text-dark btn-wth-icon icon-left mb-15 mr-2 w-100"><span><span class="icon-label"><span class="fa fa-plus"></span></span><span class="btn-text">Custom Mode</span></span></button>
  1057. <div class="custom-mode-input-section d-none">
  1058. <input type="text" class="form-control custom-mode-input shadow-none" placeholder="Enter mode name">
  1059. <a href="javascript:;" class="btn btn-theme px-2 ml-2" type="button" onclick="Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().addDisplayMode()">Add</a>
  1060. </div>
  1061. </div>
  1062. </div>
  1063. </div>
  1064. <div class="card background-colors d-none">
  1065. <div class="card-header d-flex justify-content-between align-items-center">
  1066. <a href="javascript:;" class="no-collapse">Background Colors</a>
  1067. <button class="btn btn-outline-danger btn-xs font-12 display-mode-reset-btn" id="displayModeResetBtn" onclick="Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().resetDisplayMode()" title="Reset Display Mode">Reset</button>
  1068. </div>
  1069. <div class="title-devider"></div>
  1070. <div>
  1071. <div class="color-pickr-container" data-name="PrimaryColor">
  1072. <span>Primary</span>
  1073. <input id="color-picker-PrimaryColor" value='#276cb8' />
  1074. </div>
  1075. <div class="color-pickr-container" data-name="SecondaryColor">
  1076. <span>Secondary</span>
  1077. <input id="color-picker-SecondaryColor" value='#276cb8' />
  1078. </div>
  1079. <div class="color-pickr-container" data-name="HighlightColor">
  1080. <span>Highlight </span>
  1081. <input id="color-picker-HighlightColor" value='' />
  1082. </div>
  1083. <div class="color-pickr-container" data-name="TransparentPrimaryColor">
  1084. <span>Transparent</span>
  1085. <input id="color-picker-TransparentPrimaryColor" value='' />
  1086. </div>
  1087. </div>
  1088. </div>
  1089. <div class="card text-colors d-none">
  1090. <div class="card-header">
  1091. <a href="javascript:;" class="no-collapse">Text Colors</a>
  1092. </div>
  1093. <div class="title-devider"></div>
  1094. <div>
  1095. <div class="color-pickr-container" data-name="PrimaryTextColor">
  1096. <span>Primary</span>
  1097. <input id="color-picker-PrimaryTextColor" value='' />
  1098. </div>
  1099. <div class="color-pickr-container" data-name="SecondaryTextColor">
  1100. <span>Secondary</span>
  1101. <input id="color-picker-SecondaryTextColor" value='' />
  1102. </div>
  1103. </div>
  1104. </div>
  1105. <div class="card color-palettes">
  1106. <div class="card-header">
  1107. <a href="javascript:;" class="no-collapse">Palettes</a>
  1108. </div>
  1109. <div class="title-devider"></div>
  1110. <div>
  1111. <select class="form-control" id="palettesSelect"><option></option></select>
  1112. </div>
  1113. </div>
  1114. <div class="card logo-settings">
  1115. <div class="card-header">
  1116. <a href="javascript:;" class="no-collapse">Logo Settings</a>
  1117. </div>
  1118. <div class="title-devider"></div>
  1119. <div class="card-body logo-setting-body pa-0" id="logoSettingsBody">
  1120. </div>
  1121. </div>
  1122. <div class="card collapse-simple toggle-nav-parent-group-options pb-0">
  1123. <div class="card-header">
  1124. <a role="button" data-toggle="collapse" href="#layoutSettings" aria-expanded="true">Layout Nav Settings</a>
  1125. </div>
  1126. <div class="title-devider"></div>
  1127. <div class="collapse show" id="layoutSettings">
  1128. <ul class="nav-parent-groups-list" id="navParentGroupsList">
  1129. </ul>
  1130. </div>
  1131. </div>
  1132. </div>
  1133. </div>
  1134. </div>
  1135. </div>
  1136. </div>
  1137. <!-- /Drawer Push -->
  1138. <!-- Main Content -->
  1139. <div class="biz-pg-wrapper py-0 layout-builder">
  1140. <div class="biz-pg-body">
  1141. <div class="biz-bldr-wrap bldr__aside__left form-bldr-wrap">
  1142. <header class="bldr-head">
  1143. <div class="d-flex align-items-center">
  1144. <a class="btn btn-icon btn-flush-theme mr-1" data-target="#drawer_push" data-drawer="push-normal" href="javascript:;"><span class="btn-icon-wrap"><i class="la la-fill-drip font-25"></i></span></a>Settings
  1145. </div>
  1146. <div class="bldr-options-wrap">
  1147. <a href="javascript:;" class="btn btn-theme px-4" type="button" onclick="Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().saveTheme()">Save</a>
  1148. <a class="btn btn-layout-builder-close btn-outline-danger px-4 ml-3" href="javascript:;" id="">Close</a>
  1149. </div>
  1150. <div class="form-error-message ml-0 l-0" id="layoutBuilderErrMsg"></div>
  1151. </header>
  1152. <div class="bldr-aside-left">
  1153. <ul class="nav nav-light nav-tabs d-none">
  1154. <li class="nav-item">
  1155. <a class="nav-link active" data-toggle="tab" href="#tab_outline">
  1156. <span class="nav-link-text">Components</span>
  1157. </a>
  1158. </li>
  1159. <li class="nav-item">
  1160. <a class="nav-link" data-toggle="tab" href="#tab_column">
  1161. <span class="nav-link-text">Fileld</span>
  1162. </a>
  1163. </li>
  1164. </ul>
  1165. ${instance.getLeftHtml()}
  1166. </div>
  1167. <div class="bldr-body">
  1168. <header class="bldr-sec-head justify-content-center">
  1169. <ul class="nav nav-line nav-tabs nav-light">
  1170. <li class="nav-item">
  1171. <a class="nav-link active" data-toggle="tab" href="#dashboard">
  1172. <span class="nav-link-text">Preview</span>
  1173. </a>
  1174. </li>
  1175. <!-- <li class="nav-item">
  1176. <a class="nav-link" data-toggle="tab" href="#tab_builder">
  1177. <span class="nav-link-text">Code Builder</span>
  1178. </a>
  1179. </li> -->
  1180. </ul>
  1181. <div class="left-aside-togglable"></div>
  1182. <a class="btn btn-icon btn-flush-theme flush-soft-hover active drawer-toggle-link" data-target="#drawer_push" data-drawer="push-normal" href="#"><span class="btn-icon-wrap"><span class="fa fa-cog"></span></span></a>
  1183. </header>
  1184. <div data-simplebar class="simple-scroll-bar custom-scollable-container layoutbuilder-simple-scroll-bar" style="overflow:hidden;">
  1185. <div class="tab-content">
  1186. <div class="tab-pane fade show active layout-builder-dashboard p-relative" id="dashboardpo">
  1187. <div id="bizgaze_body" style="margin-topx: 60px;">
  1188. <div class="biz-wrapper biz__icon__menu biz__fullheight__menu biz__submenu biz__bottom__nav__menu">
  1189. <div class="biz-pg-wrapper SecondaryColor SecondaryTextColor" style="min-height: 937px;margin-right: 0px;position: fixed;top: 0;left: 410px;width: 100%;">
  1190. <!-- Container -->
  1191. <div class="_bizgaze_detail_container col-sm SecondaryColor" id="_modal_bizgaze_edit_1620714971">
  1192. </div>
  1193. </div>
  1194. <!-- /Container -->
  1195. </div>
  1196. </div>
  1197. </div>
  1198. </div>
  1199. </div>
  1200. </div>
  1201. </div>
  1202. </div>
  1203. </div>
  1204. </div>
  1205. `;
  1206. return html;
  1207. }
  1208. getLeftHtml() {
  1209. let html = `<div data-simplebar class="simple-scroll-bar" style="overflow-x: hidden;">
  1210. <div class="tab-content" style="padding-bottom : 5rem;">
  1211. <div class="tab-pane fade show active" id="tab_outline">
  1212. <div class="collapse-simple">
  1213. <div class="card layout pb-0">
  1214. <div class="card-header">
  1215. <a href="javascript:;" class="no-collapse biz-primary-text-color-removed pt-0">Layout</a>
  1216. </div>
  1217. <div class="title-devider biz-border-color"></div>
  1218. <p class="biz-primary-text-color-removed">Choose your preferred layout</p>
  1219. <div id="menu-layouts">
  1220. <div class="card-body pb-0">
  1221. <div class="row layout-row checkbox-container">
  1222. </div>
  1223. </div>
  1224. </div>
  1225. </div>
  1226. <div class="card detail pb-0">
  1227. <div class="card-header">
  1228. <a href="javascript:;" class="no-collapse biz-primary-text-color-removed">Details</a>
  1229. </div>
  1230. <div class="title-devider biz-border-color"></div>
  1231. <p class="biz-primary-text-color-removed">Choose your preferred view</p>
  1232. <div id="detail-list-view">
  1233. <div class="card-body pb-0">
  1234. <div class="row detail-row checkbox-container">
  1235. </div>
  1236. <div class="align-items-center d-flex justify-content-between mb-10 pl-0">
  1237. <span class="text-capitalize mb-0">Enable Structures</span>
  1238. <label class="switch mb-0" for="isStructSettingsEnableChk"><input id="isStructSettingsEnableChk" class="isStructSettingsEnableChk" type="checkbox" ><span></span></label>
  1239. </div>
  1240. </div>
  1241. </div>
  1242. </div>
  1243. <div class="card background-change">
  1244. <div class="card-header">
  1245. <a href="javascript:;" class="no-collapse biz-primary-text-color-removed">Background Image</a>
  1246. </div>
  1247. <div class="title-devider biz-border-color"></div>
  1248. <div id="background-image-view">
  1249. <div class="card-body">
  1250. <div class="row dropdown-menu-scrollbar checkbox-container">
  1251. </div>
  1252. </div>
  1253. </div>
  1254. <div class="card-body thumbnail-input-card p-2 py-3 d-flex flex-column align-items-center font-14 p-relative">
  1255. <input type="file" class="imagepickerThumbnail" id="imagepickerThumbnail" accept="image/*" required>
  1256. <span>Upload from Computer</span>
  1257. <img src="tenants/themes/compact/imgs/cloud.svg" alt="folder icon" class="w-15 h-15">
  1258. <div class="progress-wrap w-100 d-none">
  1259. <div class="progress mt-2">
  1260. <div class="progress-bar" role="progressbar" style="width: 0%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"></div>
  1261. </div>
  1262. <h6 class="text-dark progress-text ml-20 font-13">0%</h6>
  1263. </div>
  1264. </div>
  1265. </div>
  1266. </div>
  1267. </div>
  1268. <div class="tab-pane fade" id="tab_column">
  1269. </div>
  1270. </div>
  1271. </div>`;
  1272. return html;
  1273. }
  1274. static Instance() {
  1275. return new LayoutBuilder_Template();
  1276. }
  1277. }
  1278. Components.LayoutBuilder_Template = LayoutBuilder_Template;
  1279. })(Components = Layouts.Components || (Layouts.Components = {}));
  1280. })(Layouts = Platform.Layouts || (Platform.Layouts = {}));
  1281. })(Platform = Unibase.Platform || (Unibase.Platform = {}));
  1282. })(Unibase || (Unibase = {}));
  1283. var Unibase;
  1284. (function (Unibase) {
  1285. let Themes;
  1286. (function (Themes) {
  1287. let Compact;
  1288. (function (Compact) {
  1289. let Components;
  1290. (function (Components) {
  1291. class UserTheme extends Unibase.Platform.Core.BaseComponent {
  1292. constructor() {
  1293. super(...arguments);
  1294. this.layoutElement = '#user-themes #menu-layouts .card-body .row.layout-row a';
  1295. this.detailsViewElement = '#user-themes #detail-list-view .card-body .row.detail-row a';
  1296. this.backgroundImageElement = '#user-themes #background-image-view .card-body .row a';
  1297. this.displayModeElement = '#user-themes #theme-switcher-colors .card-body .row a';
  1298. this.currentUserTheme = {
  1299. LayoutId: 0,
  1300. DetailsViewId: 0,
  1301. DisplayModeId: 0,
  1302. BackgroundImageId: 0,
  1303. ThemeId: 0,
  1304. IsCompanyTheme: false,
  1305. };
  1306. }
  1307. userTheme(isCompany, companyId, roleId, isRole) {
  1308. let instance = this;
  1309. var _fileCacheHelper = Unibase.Platform.Helpers.FileCacheHelper.Instance();
  1310. Unibase.Platform.Helpers.FileCacheHelper.Instance().loadCssFiles(['platform/layout/components/layoutbuilder/style.layoutbuilder.css'], function () {
  1311. if (companyId == undefined || companyId == "" || companyId == null) {
  1312. companyId = 0;
  1313. }
  1314. if (roleId == undefined || roleId == "" || roleId == null) {
  1315. roleId = 0;
  1316. }
  1317. Unibase.Platform.Layouts.Managers.ThemeLayoutManager.Instance().getLayoutBuilderInfo(companyId, roleId).then(function (response) {
  1318. $(".biz-wrapper").addClass("biz-settings-toggle");
  1319. $(".hk-wrapper").addClass("biz-settings-toggle");
  1320. / Plain Html /;
  1321. let leftHtml = Unibase.Platform.Layouts.Components.LayoutBuilder_Template.Instance().getLeftHtml();
  1322. let onclick = "Unibase.Themes.Compact.Components.UserTheme.Instance().saveUserTheme()";
  1323. if (isCompany || isRole) {
  1324. onclick = "Unibase.Themes.Compact.Components.UserTheme.Instance().saveCompanyTheme()";
  1325. }
  1326. let html = `
  1327. <div class="user-themes" id="user-themes">
  1328. <div class="user-themes-header"></div>
  1329. <div class="user-themes-body">
  1330. ${leftHtml}
  1331. </div>
  1332. <div class="user-themes-footer">
  1333. <a href="javascript:;" class="btn btn-theme px-4 w-100" type="button" onclick="` + onclick + `">Apply</a>
  1334. </div>
  1335. </div>`;
  1336. $("#settings-panel-body").html(html);
  1337. $("#settings-panel-head-title").html("Themes");
  1338. let themeSwitchHtml = ` <div class="card theme-switcher">
  1339. <div class="card-header">
  1340. <a href="javascript:;" class="no-collapse biz-primary-text-color-removed" > Theme Switcher </a>
  1341. </div>
  1342. <div class="title-devider biz-border-color-removed"> </div>
  1343. <div id="theme-switcher-colors">
  1344. <div class="card-body pb-0" >
  1345. <div class="row dropdown-menu-scrollbar checkbox-container">
  1346. </div>
  1347. </div>
  1348. </div>
  1349. </div>`;
  1350. $("#user-themes .background-change").before(themeSwitchHtml);
  1351. response.result.LayoutInfo.forEach((layout) => {
  1352. let curLayout = layout;
  1353. let layoutId = curLayout.LayoutId;
  1354. curLayout.Thumbnail = curLayout.Thumbnail.replace(".png", ".svg");
  1355. $("#user-themes #menu-layouts .layout-row").append(`<a href="javascript:;" class="col-6 p-0 pr-2 p-relative" data-id="${layoutId}" data-index="${curLayout.LayoutIndex}">
  1356. <img src="${curLayout.Thumbnail}" class="rounded w-100 h-100" data-dynamic="1" onerror="ReloadImage(event)" title="${curLayout.LayoutName}" />
  1357. <i class="zmdi zmdi-check"></i>
  1358. </a>`);
  1359. });
  1360. $(instance.layoutElement).click(function () {
  1361. $(instance.layoutElement).removeClass('active');
  1362. $(this).addClass('active');
  1363. let id = Number($(this).attr('data-id'));
  1364. instance.currentUserTheme.LayoutId = id;
  1365. });
  1366. response.result.DetailViewInfo.forEach((viewLayout) => {
  1367. if (viewLayout.DetailsViewName != "Popup") {
  1368. let id = viewLayout.DetailsViewId;
  1369. $("#user-themes #detail-list-view .detail-row").append(`<a href="javascript:;" class="col-6 p-0 mb-2 pr-2 p-relative" data-id="${id}">
  1370. <img src="${viewLayout.Thumbnail}" class="rounded w-100 h-100" data-dynamic="1" onerror="ReloadImage(event)" title="${viewLayout.DetailsViewName}" />
  1371. <i class="zmdi zmdi-check"></i>
  1372. </a>`);
  1373. }
  1374. });
  1375. $('.isStructSettingsEnableChk').parent().siblings().remove();
  1376. $('[for="isStructSettingsEnableChk"]').remove();
  1377. $(instance.detailsViewElement).click(function () {
  1378. $(instance.detailsViewElement).removeClass('active');
  1379. $(this).addClass('active');
  1380. let id = Number($(this).attr('data-id'));
  1381. instance.currentUserTheme.DetailsViewId = id;
  1382. });
  1383. response.result.DisplayModesInfo.forEach((displayMode) => {
  1384. $("#user-themes #theme-switcher-colors .row").append(`<a href="javascript:;" class="p-relative mr-2 mb-2" data-id="${displayMode.DisplayModeId}" title="${displayMode.DisplayModeName}">
  1385. <div class="p-relative color-box border biz-border-color-removed" style="background-color:${displayMode.PrimaryColor}">
  1386. </div>
  1387. <i class="zmdi zmdi-check"></i>
  1388. </a>`);
  1389. });
  1390. $(instance.displayModeElement).click(function () {
  1391. $(instance.displayModeElement).removeClass('active');
  1392. $(this).addClass('active');
  1393. $(`${instance.backgroundImageElement}.solid-color .color-box`).css("background-color", $(this).find('.color-box').css("background-color"));
  1394. $(`${instance.backgroundImageElement}.solid-color color-box`).addClass('active');
  1395. let id = Number($(this).attr('data-id'));
  1396. instance.currentUserTheme.DisplayModeId = id;
  1397. });
  1398. let solidColorImage = `<a href="javascript:;" class="col-4 p-relative px-1 solid-color active" data-id="0">
  1399. <div class="p-relative color-box border biz-border-color-removed" style="height:65px">
  1400. </div>
  1401. <i class="zmdi zmdi-check"></i>
  1402. </a>`;
  1403. $("#user-themes #background-image-view .row").append(solidColorImage);
  1404. response.result.BackgroundImages.forEach((backgroundImage) => {
  1405. let IsDefaultClass = backgroundImage.IsDefault ? 'default' : '';
  1406. $("#user-themes #background-image-view .row").append(`<a href="javascript:;" class="col-4 p-relative px-1 ${IsDefaultClass}" data-url="${backgroundImage.Thumbnail}" data-id="${backgroundImage.BackgroundImageId}">
  1407. <div class="p-relative">
  1408. <img src="${backgroundImage.Thumbnail}" class="rounded w-100" data-dynamic="1" onerror = "ReloadImage(event)" />
  1409. <div class="delete" data-id="${backgroundImage.BackgroundImageId}">
  1410. <i class="fa fa-trash"></i>
  1411. </div>
  1412. </div>
  1413. <i class="zmdi zmdi-check"></i>
  1414. </a>`);
  1415. });
  1416. $(instance.backgroundImageElement).click(function () {
  1417. $(instance.backgroundImageElement).removeClass('active');
  1418. $(this).addClass('active');
  1419. instance.currentUserTheme.BackgroundImageId = Number($(this).attr('data-id'));
  1420. });
  1421. let currentTheme = Unibase.Themes.Compact.Components.Index.Instance().currentTheme;
  1422. if (isCompany || isRole) {
  1423. currentTheme = response.result.CompanyTheme;
  1424. if (currentTheme === '') {
  1425. instance.currentUserTheme.LayoutId = 0;
  1426. instance.currentUserTheme.DetailsViewId = 0;
  1427. instance.currentUserTheme.DisplayModeId = 0;
  1428. instance.currentUserTheme.BackgroundImageId = 0;
  1429. instance.currentUserTheme.ThemeId = 0;
  1430. }
  1431. if (isRole && $(".hdn_themeid").length === 0) {
  1432. $('._bizgaze_popup_container').last().find('.section_Hidden').append(`<input type="hidden" class="hdn_themeid" value="0"><input type="hidden" class="hdn_displaymodeid" value="0">`);
  1433. }
  1434. if (currentTheme === '' && $(".hdn_themeid").val() != "0") {
  1435. instance.bindSelectedUserThemeSettings();
  1436. return;
  1437. }
  1438. }
  1439. $(`${instance.layoutElement}[data-id="${currentTheme.layoutId}"]`).click();
  1440. $(`${instance.detailsViewElement}[data-id="${currentTheme.detailsViewId}"]`).click();
  1441. $(`${instance.displayModeElement}[data-id="${currentTheme.displayModeId}"]`).click();
  1442. $(`${instance.backgroundImageElement}[data-id="${currentTheme.backgroundImageId}"]`).click();
  1443. instance.currentUserTheme.ThemeId = currentTheme.themeId;
  1444. instance.currentUserTheme.IsCompanyTheme = currentTheme.isCompanyTheme;
  1445. });
  1446. });
  1447. }
  1448. bindSelectedUserThemeSettings() {
  1449. const instance = this;
  1450. const currentTheme = JSON.parse($(".hdn_themeid").val().toString());
  1451. const { LayoutId, DetailsViewId, DisplayModeId, BackgroundImageId } = currentTheme;
  1452. $(`${instance.layoutElement}[data-id="${LayoutId}"]`).trigger('click');
  1453. $(`${instance.detailsViewElement}[data-id="${DetailsViewId}"]`).trigger('click');
  1454. $(`${instance.displayModeElement}[data-id="${DisplayModeId}"]`).trigger('click');
  1455. $(`${instance.backgroundImageElement}[data-id="${BackgroundImageId}"]`).trigger('click');
  1456. }
  1457. init(isCompany, companyId) {
  1458. let instance = this;
  1459. var _fileCacheHelper = Unibase.Platform.Helpers.FileCacheHelper.Instance();
  1460. Unibase.Platform.Helpers.FileCacheHelper.Instance().loadCssFiles(['platform/layout/components/layoutbuilder/style.layoutbuilder.css'], function () {
  1461. Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFiles(['platform/core/infos/status.js', 'platform/layout/managers/themelayoutmanager.js'], function () {
  1462. if (companyId == undefined || companyId == "" || companyId == null) {
  1463. companyId = 0;
  1464. }
  1465. Unibase.Platform.Layouts.Managers.ThemeLayoutManager.Instance().getLayoutBuilderInfo(companyId, 0).then(function (response) {
  1466. $(".biz-wrapper").addClass("biz-settings-toggle");
  1467. $(".hk-wrapper").addClass("biz-settings-toggle");
  1468. let leftHtml = Unibase.Platform.Layouts.Components.LayoutBuilder_Template.Instance().getLeftHtml();
  1469. let onclick = "Unibase.Themes.Compact.Components.UserTheme.Instance().saveUserTheme()";
  1470. if (isCompany) {
  1471. onclick = "Unibase.Themes.Compact.Components.UserTheme.Instance().saveCompanyTheme()";
  1472. }
  1473. let html = `<div class="user-themes" id="user-themes">
  1474. <div class="user-themes-header"></div>
  1475. <div class="user-themes-body">
  1476. ${leftHtml}
  1477. </div>
  1478. <div class="user-themes-footer">
  1479. <a href="javascript:;" class="btn btn-theme px-4 w-100" type="button" onclick="` + onclick + `">Apply</a>
  1480. </div>
  1481. </div>`;
  1482. $("#settings-panel-body").html(html);
  1483. $("#settings-panel-head-title").html("Themes");
  1484. let themeSwitchHtml = `<div class="card theme-switcher">
  1485. <div class="card-header">
  1486. <a href="javascript:;" class="no-collapse biz-primary-text-color-removed" > Theme Switcher </a>
  1487. </div>
  1488. <div class="title-devider biz-border-color-removed"> </div>
  1489. <div id="theme-switcher-colors">
  1490. <div class="card-body pb-0" >
  1491. <div class="row dropdown-menu-scrollbar checkbox-container">
  1492. </div>
  1493. </div>
  1494. </div>
  1495. </div>`;
  1496. $("#user-themes .background-change").before(themeSwitchHtml);
  1497. response.result.LayoutInfo.forEach((layout) => {
  1498. let curLayout = layout;
  1499. let layoutId = curLayout.LayoutId;
  1500. curLayout.Thumbnail = curLayout.Thumbnail.replace(".png", ".svg");
  1501. $("#user-themes #menu-layouts .layout-row").append(`<a href="javascript:;" class="col-6 p-0 pr-2 p-relative" data-id="${layoutId}" data-index="${curLayout.LayoutIndex}">
  1502. <img src="${curLayout.Thumbnail}" class="rounded w-100 h-100" data-dynamic="1" onerror="ReloadImage(event)" title="${curLayout.LayoutName}" />
  1503. <i class="zmdi zmdi-check"></i>
  1504. </a>`);
  1505. });
  1506. $(instance.layoutElement).click(function () {
  1507. $(instance.layoutElement).removeClass('active');
  1508. $(this).addClass('active');
  1509. let id = Number($(this).attr('data-id'));
  1510. instance.currentUserTheme.LayoutId = id;
  1511. });
  1512. response.result.DetailViewInfo.forEach((viewLayout) => {
  1513. if (viewLayout.DetailsViewName != "Popup") {
  1514. let id = viewLayout.DetailsViewId;
  1515. $("#user-themes #detail-list-view .detail-row").append(`<a href="javascript:;" class="col-6 p-0 mb-2 pr-2 p-relative" data-id="${id}">
  1516. <img src="${viewLayout.Thumbnail}" class="rounded w-100 h-100" data-dynamic="1" onerror="ReloadImage(event)" title="${viewLayout.DetailsViewName}" />
  1517. <i class="zmdi zmdi-check"></i>
  1518. </a>`);
  1519. }
  1520. });
  1521. $(instance.detailsViewElement).click(function () {
  1522. $(instance.detailsViewElement).removeClass('active');
  1523. $(this).addClass('active');
  1524. let id = Number($(this).attr('data-id'));
  1525. instance.currentUserTheme.DetailsViewId = id;
  1526. });
  1527. response.result.DisplayModesInfo.forEach((displayMode) => {
  1528. $("#user-themes #theme-switcher-colors .row").append(`<a href="javascript:;" class="p-relative mr-2 mb-2" data-id="${displayMode.DisplayModeId}" title="${displayMode.DisplayModeName}">
  1529. <div class="p-relative color-box border biz-border-color-removed" style="background-color:${displayMode.PrimaryColor}">
  1530. </div>
  1531. <i class="zmdi zmdi-check"></i>
  1532. </a>`);
  1533. });
  1534. $(instance.displayModeElement).click(function () {
  1535. $(instance.displayModeElement).removeClass('active');
  1536. $(this).addClass('active');
  1537. $(`${instance.backgroundImageElement}.solid-color .color-box`).css("background-color", $(this).find('.color-box').css("background-color"));
  1538. $(`${instance.backgroundImageElement}.solid-color color-box`).addClass('active');
  1539. let id = Number($(this).attr('data-id'));
  1540. instance.currentUserTheme.DisplayModeId = id;
  1541. });
  1542. let solidColorImage = `<a href="javascript:;" class="col-4 p-relative px-1 solid-color active" data-id="0">
  1543. <div class="p-relative color-box border biz-border-color-removed" style="height:65px">
  1544. </div>
  1545. <i class="zmdi zmdi-check"></i>
  1546. </a>`;
  1547. $("#user-themes #background-image-view .row").append(solidColorImage);
  1548. response.result.BackgroundImages.forEach((backgroundImage) => {
  1549. let IsDefaultClass = backgroundImage.IsDefault ? 'default' : '';
  1550. $("#user-themes #background-image-view .row").append(`<a href="javascript:;" class="col-4 p-relative px-1 ${IsDefaultClass}" data-url="${backgroundImage.Thumbnail}" data-id="${backgroundImage.BackgroundImageId}">
  1551. <div class="p-relative">
  1552. <img src="${backgroundImage.Thumbnail}" class="rounded w-100" data-dynamic="1" onerror = "ReloadImage(event)" />
  1553. <div class="delete" data-id="${backgroundImage.BackgroundImageId}">
  1554. <i class="fa fa-trash"></i>
  1555. </div>
  1556. </div>
  1557. <i class="zmdi zmdi-check"></i>
  1558. </a>`);
  1559. });
  1560. $(instance.backgroundImageElement).click(function () {
  1561. $(instance.backgroundImageElement).removeClass('active');
  1562. $(this).addClass('active');
  1563. instance.currentUserTheme.BackgroundImageId = Number($(this).attr('data-id'));
  1564. });
  1565. let currentTheme = Unibase.Themes.Compact.Components.Index.Instance().currentTheme;
  1566. if (isCompany) {
  1567. currentTheme = response.result.CompanyTheme;
  1568. }
  1569. $(`${instance.layoutElement}[data-id="${currentTheme.layoutId}"]`).click();
  1570. $(`${instance.detailsViewElement}[data-id="${currentTheme.detailsViewId}"]`).click();
  1571. $(`${instance.displayModeElement}[data-id="${currentTheme.displayModeId}"]`).click();
  1572. $(`${instance.backgroundImageElement}[data-id="${currentTheme.backgroundImageId}"]`).click();
  1573. instance.currentUserTheme.ThemeId = currentTheme.themeId;
  1574. instance.currentUserTheme.IsCompanyTheme = currentTheme.isCompanyTheme;
  1575. });
  1576. });
  1577. });
  1578. }
  1579. saveCompanyTheme() {
  1580. let instance = this;
  1581. let postData = {
  1582. LayoutId: instance.currentUserTheme.LayoutId,
  1583. ThemeId: instance.currentUserTheme.ThemeId || 0,
  1584. DetailsViewId: instance.currentUserTheme.DetailsViewId,
  1585. DisplayModeId: instance.currentUserTheme.DisplayModeId,
  1586. BackgroundImageId: instance.currentUserTheme.BackgroundImageId
  1587. };
  1588. const placeholder = $('._bizgaze_popup_container').last().find('.form-error-message').first().attr('id');
  1589. if (!postData.LayoutId && !postData.DetailsViewId && !postData.DisplayModeId) {
  1590. MessageHelper.Instance().showError('Select Theme.', placeholder);
  1591. return;
  1592. }
  1593. if (!postData.LayoutId) {
  1594. MessageHelper.Instance().showError('Select Preferred Layout in Theme.', placeholder);
  1595. return;
  1596. }
  1597. else if (!postData.DetailsViewId) {
  1598. MessageHelper.Instance().showError('Select Preferred Details View in Theme.', placeholder);
  1599. return;
  1600. }
  1601. else if (!postData.DisplayModeId) {
  1602. MessageHelper.Instance().showError('Select Theme Switcher.', placeholder);
  1603. return;
  1604. }
  1605. $(".hdn_themeid").val(JSON.stringify(postData));
  1606. $(".hdn_displaymodeid").val(instance.currentUserTheme.DisplayModeId);
  1607. $(".biz-wrapper,.hk-wrapper").removeClass("biz-settings-toggle");
  1608. }
  1609. saveUserTheme() {
  1610. let instance = this;
  1611. let postData = {
  1612. LayoutId: instance.currentUserTheme.LayoutId,
  1613. ThemeId: instance.currentUserTheme.IsCompanyTheme ? 0 : instance.currentUserTheme.ThemeId,
  1614. DetailsViewId: instance.currentUserTheme.DetailsViewId,
  1615. DisplayModeId: instance.currentUserTheme.DisplayModeId,
  1616. BackgroundImageId: instance.currentUserTheme.BackgroundImageId
  1617. };
  1618. Unibase.Platform.Layouts.Managers.ThemeLayoutManager.Instance().saveUserTheme(postData).then(function (response) {
  1619. if (response.status == Unibase.Data.Status.Success) {
  1620. MessageHelper.Instance().showSuccess(response.message, '');
  1621. Unibase.Platform.Layouts.Components.LayoutBuilder.Instance().refrshLayout(response);
  1622. }
  1623. });
  1624. }
  1625. static Instance() {
  1626. if (this.instance === undefined) {
  1627. this.instance = new UserTheme();
  1628. }
  1629. return this.instance;
  1630. }
  1631. }
  1632. Components.UserTheme = UserTheme;
  1633. })(Components = Compact.Components || (Compact.Components = {}));
  1634. })(Compact = Themes.Compact || (Themes.Compact = {}));
  1635. })(Themes = Unibase.Themes || (Unibase.Themes = {}));
  1636. })(Unibase || (Unibase = {}));