public static HtmlBuilder Header( this HtmlBuilder hb, Context context, SiteSettings ss, long siteId, string referenceType, Error.Types errorType, bool useNavigationMenu, bool useSearch, ServerScriptModelRow serverScriptModelRow) { return(hb.Header(id: "Header", action: () => hb .HeaderLogo( context: context, ss: ss) .NavigationMenu( context: context, ss: ss, siteId: siteId, referenceType: referenceType, errorType: errorType, useNavigationMenu: useNavigationMenu, useSearch: useSearch, serverScriptModelRow: serverScriptModelRow))); }
public static HtmlBuilder NavigationMenu( this HtmlBuilder hb, Context context, SiteSettings ss, long siteId, string referenceType, Error.Types errorType, bool useNavigationMenu, bool useSearch, ServerScriptModelRow serverScriptModelRow) { return(errorType == Error.Types.None && useNavigationMenu && !context.Publish ? hb.Nav( id: "Navigations", css: "ui-widget-header", action: () => hb .Menus( context: context, ss: ss, siteId: siteId, referenceType: referenceType, muenuId: "NavigationMenu", menus: ExtendedAssembleNavigationMenu( navigationMenus: Parameters.NavigationMenus, extendedNavigationMenus: ExtendedNavigationMenu(context)), serverScriptModelRow: serverScriptModelRow) .Search( context: context, _using: useSearch && !Parameters.Search.DisableCrossSearch)) .ResponsiveMenu( context: context) : hb); }
public static ResponseCollection ViewMode( this ResponseCollection res, Context context, SiteSettings ss, View view, string invoke = null, Message message = null, bool editOnGrid = false, bool loadScroll = false, bool bodyOnly = false, string bodySelector = null, ServerScriptModelRow serverScriptModelRow = null, HtmlBuilder body = null) { return(res .Html(!bodyOnly ? "#ViewModeContainer" : bodySelector, body) .View(context: context, ss: ss, view: view) .Invoke("initRelatingColumnWhenViewChanged") .ReplaceAll( "#Breadcrumb", new HtmlBuilder().Breadcrumb( context: context, ss: ss), _using: context.Controller == "items") .ReplaceAll("#Guide", new HtmlBuilder() .Guide( context: context, ss: ss)) .ReplaceAll("#CopyDirectUrlToClipboard", new HtmlBuilder() .CopyDirectUrlToClipboard( context: context, view: view)) .ReplaceAll("#Aggregations", new HtmlBuilder() .Aggregations( context: context, ss: ss, view: view)) .ReplaceAll("#MainCommandsContainer", new HtmlBuilder() .MainCommands( context: context, ss: ss, view: view, verType: Versions.VerTypes.Latest, backButton: !context.Publish && !editOnGrid, serverScriptModelRow: serverScriptModelRow)) .SetMemory("formChanged", false, _using: !editOnGrid) .Invoke(invoke) .Message(message) .Messages(context.Messages) .LoadScroll(loadScroll) .ClearFormData( context: context, ss: ss, editOnGrid: editOnGrid) .Log(context.GetLog())); }
private static HtmlBuilder HiddenData( this HtmlBuilder hb, Context context, SiteSettings ss = null, ServerScriptModelRow serverScriptModelRow = null) { return(!context.Ajax ? hb .Hidden(controlId: "ApplicationPath", value: Locations.Get(context: context)) .Hidden( controlId: "Token", value: context.Token(), _using: Parameters.Security.TokenCheck) .Hidden(controlId: "Language", value: context.Language) .Hidden(controlId: "DeptId", value: context.DeptId.ToString()) .Hidden(controlId: "UserId", value: context.UserId.ToString()) .Hidden(controlId: "LoginId", value: context.LoginId) .Hidden(controlId: "Publish", value: "1", _using: context.Publish) .Hidden(controlId: "Responsive", value: "1", _using: context.Responsive) .Hidden(controlId: "TableName", value: ss?.ReferenceType) .Hidden(controlId: "Controller", value: context.Controller) .Hidden(controlId: "Action", value: context.Action) .Hidden(controlId: "Id", value: context.Id.ToString()) .Hidden(controlId: "TenantId", value: context.TenantId.ToString()) .Hidden(controlId: "SiteId", value: ss?.SiteId.ToString()) .Hidden(controlId: "JoinedSites", value: ss?.JoinedSsHash ?.Select(o => new { SiteId = o.Key, o.Value.ReferenceType, o.Value.Title }) .ToJson()) .HiddenSiteSettings( context: context, ss: ss) .HiddenServerScript( context: context, ss: ss, serverScriptModelRow: serverScriptModelRow) .ExtendedSql(context: context) .Hidden( controlId: "Log", value: (new { Log = context.GetLog() }).ToJson()) .Hidden( controlId: "data-validation-maxlength-type", value: Parameters.Validation.MaxLengthCountType) .Hidden( controlId: "data-validation-maxlength-regex", value: Parameters.Validation.SingleByteCharactorRegexClient) : hb); }
public static HtmlBuilder MainContainer( this HtmlBuilder hb, Context context, SiteSettings ss, View view, Versions.VerTypes verType, BaseModel.MethodTypes methodType, long siteId, long parentId, string referenceType, string siteReferenceType, string title, Error.Types errorType = General.Error.Types.None, string[] messageData = null, bool useBreadcrumb = true, bool useTitle = true, bool useSearch = true, bool useNavigationMenu = true, ServerScriptModelRow serverScriptModelRow = null, Action action = null) { return(hb.Div(id: "MainContainer", action: () => hb .Header( context: context, ss: ss, siteId: siteId, referenceType: referenceType, errorType: errorType, useNavigationMenu: useNavigationMenu, useSearch: useSearch, serverScriptModelRow: serverScriptModelRow) .Content( context: context, ss: ss, view: view, errorType: errorType, messageData: messageData, siteId: siteId, title: title, useBreadcrumb: useBreadcrumb, useTitle: useTitle, action: action) .Div(id: "BottomMargin") .Footer() .BackUrl( context: context, siteId: siteId, parentId: parentId, referenceType: referenceType, siteReferenceType: siteReferenceType))); }
private static ServerScriptModelRow SetRow( SiteSettings ss, ExpandoObject model, ExpandoObject columns) { var row = new ServerScriptModelRow { ExtendedRowCss = String(model, nameof(ServerScriptModelRow.ExtendedRowCss)), Columns = SetColumns( ss: ss, columns: columns) }; return(row); }
private static HtmlBuilder HiddenServerScript( this HtmlBuilder hb, Context context, SiteSettings ss, ServerScriptModelRow serverScriptModelRow) { serverScriptModelRow?.Hidden?.ForEach(hidden => hb .Hidden(controlId: hidden.Key, value: hidden.Value)); var replaceFieldColumns = serverScriptModelRow?.ReplaceFieldColumns(context: context) ?? new List <string>(); hb.Hidden( controlId: "ReplaceFieldColumns", value: replaceFieldColumns.ToJson()); return(hb); }
public static ServerScriptModelRow Execute( Context context, SiteSettings ss, BaseItemModel itemModel, View view, ServerScript[] scripts) { if (!(Parameters.Script.ServerScript != false && context.ContractSettings.Script != false)) { return(null); } itemModel = itemModel ?? new BaseItemModel(); ServerScriptModelRow scriptValues = null; using (var model = new ServerScriptModel( context: context, ss: ss, data: Values( ss: ss, model: itemModel), columns: Columns(ss), columnFilterHach: view?.ColumnFilterHash, columnSorterHach: view?.ColumnSorterHash)) { using (var engine = context.CreateScriptEngin()) { engine.AddHostObject("context", model.Context); engine.AddHostObject("model", model.Data); engine.AddHostObject("columns", model.Columns); engine.AddHostObject("siteSettings", model.SiteSettings); engine.AddHostObject("view", model.View); foreach (var script in scripts) { engine.Execute(script.Body); } } scriptValues = SetValues( context: context, ss: ss, model: itemModel, view: view, data: model); } return(scriptValues); }
private static HtmlBuilder HiddenServerScript( this HtmlBuilder hb, Context context, SiteSettings ss, ServerScriptModelRow scriptValues) { scriptValues?.Hidden?.ForEach(hidden => hb .Hidden(controlId: hidden.Key, value: hidden.Value)); var needReplaceHtml = scriptValues?.NeedReplaceHtml( context: context, ss: ss) ?? new List <string>(); hb.Hidden( controlId: "NeedReplaceHtml", value: needReplaceHtml.ToJson()); return(hb); }
private static HtmlBuilder Button( this HtmlBuilder hb, ServerScriptModelRow serverScriptModelRow, View.CommandDisplayTypes?commandDisplayTypes, string controlId = null, string text = null, string controlCss = null, string title = null, string accessKey = null, string onClick = null, string href = null, string dataId = null, string icon = null, string selector = null, string action = null, string method = null, string confirm = null, string type = "button", bool _using = true) { return(hb.Button( controlId: controlId, text: text, controlCss: controlCss, style: serverScriptModelRow?.Elements?.Hidden(controlId) == true || commandDisplayTypes == View.CommandDisplayTypes.Hidden ? "display:none;" : string.Empty, title: title, accessKey: accessKey, onClick: onClick, href: href, dataId: dataId, icon: icon, selector: selector, action: action, method: method, confirm: confirm, type: type, disabled: serverScriptModelRow?.Elements?.Disabled(controlId) == true || commandDisplayTypes == View.CommandDisplayTypes.Disabled, _using: _using && serverScriptModelRow?.Elements?.None(controlId) != true && commandDisplayTypes != View.CommandDisplayTypes.None)); }
private static ServerScriptModelRow SetRow( Context context, SiteSettings ss, ExpandoObject model, ExpandoObject columns, ServerScriptModelHidden hidden) { var row = new ServerScriptModelRow { ExtendedRowCss = String(model, nameof(ServerScriptModelRow.ExtendedRowCss)), Columns = SetColumns( context: context, ss: ss, columns: columns), Hidden = hidden.GetAll() }; return(row); }
public virtual ServerScriptModelRow SetByBeforeOpeningPageServerScript( Context context, SiteSettings ss, View view = null) { var scriptValues = ServerScriptUtilities.Execute( context: context, ss: ss, itemModel: null, view: view, where : script => script.BeforeOpeningPage == true, condition: "BeforeOpeningPage"); if (scriptValues != null) { SetServerScriptModelColumns(context: context, ss: ss, scriptValues: scriptValues); ServerScriptModelRow = scriptValues; } return(scriptValues); }
private static ServerScriptModelRow SetRow( Context context, SiteSettings ss, ExpandoObject model, ExpandoObject columns, ServerScriptModelHidden hidden, ServerScriptElements elements, BaseItemModel itemModel) { var row = new ServerScriptModelRow { ExtendedRowCss = String(model, nameof(ServerScriptModelRow.ExtendedRowCss)), ExtendedRowData = String(model, nameof(ServerScriptModelRow.ExtendedRowData)), Columns = SetColumns( context: context, ss: ss, columns: columns, model: itemModel), Hidden = hidden.GetAll(), Elements = elements }; return(row); }
public static HtmlBuilder Template( this HtmlBuilder hb, Context context, SiteSettings ss, View view, Versions.VerTypes verType, BaseModel.MethodTypes methodType, long siteId = 0, long parentId = 0, string referenceType = null, string siteReferenceType = null, string title = null, string body = null, bool useBreadcrumb = true, bool useTitle = true, bool useSearch = true, bool useNavigationMenu = true, string script = null, string userScript = null, string userStyle = null, ServerScriptModelRow scriptValues = null, Action action = null) { return(hb.Container( context: context, ss: ss, body: body, action: () => hb .Raw(HtmlHtmls.ExtendedHtmls( context: context, id: "HtmlBodyTop")) .MainContainer( context: context, ss: ss, view: view, verType: verType, methodType: methodType, siteId: siteId, parentId: parentId, referenceType: referenceType, siteReferenceType: siteReferenceType, title: title, useBreadcrumb: useBreadcrumb, useTitle: useTitle, useSearch: useSearch, useNavigationMenu: useNavigationMenu, action: action) .TemplateDialogs( context: context, ss: ss, useNavigationMenu: useNavigationMenu) .HiddenData( context: context, ss: ss, scriptValues: scriptValues) .VideoDialog( context: context, ss: ss) .Styles( context: context, ss: ss, userStyle: userStyle) .Scripts( context: context, ss: ss, script: script, userScript: userScript) .Raw(HtmlHtmls.ExtendedHtmls( context: context, id: "HtmlBodyBottom")))); }
public static HtmlBuilder Tr( this HtmlBuilder hb, Context context, SiteSettings ss, DataRow dataRow, IEnumerable <Column> columns, bool editRow, bool checkRow, string idColumn, RecordSelector recordSelector = null, FormDataSet formDataSet = null) { var dataId = dataRow.Long(idColumn); var dataVersion = dataRow.Int("Ver"); var isHistory = dataRow.Bool("IsHistory"); var EditColumns = !isHistory ? columns.ToDictionary( column => column.ColumnName, column => EditColumn( context: context, column: column)) : new Dictionary <string, bool>(); BaseItemModel rowModel = null; switch (ss.ReferenceType) { case "Issues": var issueModel = new IssueModel( context: context, ss: ss, dataRow: dataRow, formData: editRow ? formDataSet?.FirstOrDefault(o => o.Id == dataRow.Long("IssueId"))?.Data : null); ss.SetColumnAccessControls( context: context, mine: issueModel.Mine(context: context)); rowModel = issueModel; break; case "Results": var resultModel = new ResultModel( context: context, ss: ss, dataRow: dataRow, formData: editRow ? formDataSet?.FirstOrDefault(o => o.Id == dataRow.Long("ResultId"))?.Data : null); ss.SetColumnAccessControls( context: context, mine: resultModel.Mine(context: context)); rowModel = resultModel; break; } ; var serverScriptRowValues = rowModel?.SetByBeforeOpeningPageServerScript( context: context, ss: ss); var extendedRowCss = serverScriptRowValues?.ExtendedRowCss; extendedRowCss = extendedRowCss.IsNullOrEmpty() ? string.Empty : " " + extendedRowCss; return(hb.Tr( attributes: new HtmlAttributes() .Class("grid-row" + extendedRowCss) .DataId(dataId.ToString()) .DataVer(dataVersion) .DataLatest(1, _using: !isHistory) .Add(name: "data-history", value: "1", _using: isHistory) .Add(name: "data-locked", value: "1", _using: dataRow.Bool("Locked")), action: () => { if (editRow) { hb.Td(action: () => hb .Button( title: Displays.Reload(context: context), controlCss: "button-icon", onClick: $"$p.getData($(this)).Id={dataId};$p.send($(this));", icon: "ui-icon-refresh", action: "ReloadRow", method: "post", _using: !isHistory) .Button( title: Displays.Copy(context: context), controlCss: "button-icon", onClick: $"$p.getData($(this)).OriginalId={dataId};$p.send($(this));", icon: "ui-icon-copy", action: "CopyRow", method: "post", _using: !isHistory && context.CanCreate(ss: ss)) .Hidden( controlId: $"{ss.ReferenceType}_Timestamp_{ss.SiteId}_{dataId}", css: "timestamp", value: dataRow .Field <DateTime>("UpdatedTime") .ToString("yyyy/M/d H:m:s.fff"))); } else if (checkRow) { hb.Td(action: () => hb .CheckBox( controlCss: "grid-check", _checked: recordSelector.Checked(dataId), dataId: dataId.ToString(), _using: !isHistory)); } var depts = new Dictionary <string, DeptModel>(); var groups = new Dictionary <string, GroupModel>(); var registrations = new Dictionary <string, RegistrationModel>(); var users = new Dictionary <string, UserModel>(); var sites = new Dictionary <string, SiteModel>(); var issues = new Dictionary <string, IssueModel>(); var results = new Dictionary <string, ResultModel>(); ServerScriptModelRow serverScriptValues = null; columns.ForEach(column => { var key = column.TableName(); switch (column.SiteSettings?.ReferenceType) { case "Depts": var deptModel = depts.Get(key); if (deptModel == null) { deptModel = new DeptModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias); depts.Add(key, deptModel); ss.SetColumnAccessControls( context: context, mine: deptModel.Mine(context: context)); serverScriptValues = deptModel.SetByBeforeOpeningPageServerScript( context: context, ss: ss); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, deptModel: deptModel); break; case "Groups": var groupModel = groups.Get(key); if (groupModel == null) { groupModel = new GroupModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias); groups.Add(key, groupModel); ss.SetColumnAccessControls( context: context, mine: groupModel.Mine(context: context)); serverScriptValues = groupModel.SetByBeforeOpeningPageServerScript( context: context, ss: ss); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, groupModel: groupModel); break; case "Registrations": var registrationModel = registrations.Get(key); if (registrationModel == null) { registrationModel = new RegistrationModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias); registrations.Add(key, registrationModel); ss.SetColumnAccessControls( context: context, mine: registrationModel.Mine(context: context)); serverScriptValues = registrationModel.SetByBeforeOpeningPageServerScript( context: context, ss: ss); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, registrationModel: registrationModel); break; case "Users": var userModel = users.Get(key); if (userModel == null) { userModel = new UserModel( context: context, ss: column.SiteSettings, dataRow: dataRow, tableAlias: column.TableAlias); users.Add(key, userModel); ss.SetColumnAccessControls( context: context, mine: userModel.Mine(context: context)); serverScriptValues = userModel.SetByBeforeOpeningPageServerScript( context: context, ss: ss); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, userModel: userModel); break; case "Sites": var siteModel = sites.Get(key); if (siteModel == null) { siteModel = new SiteModel( context: context, dataRow: dataRow, formData: editRow ? formDataSet?.FirstOrDefault(o => o.Id == dataRow.Long("SiteId"))?.Data : null, tableAlias: column.TableAlias); sites.Add(key, siteModel); ss.SetColumnAccessControls( context: context, mine: siteModel.Mine(context: context)); serverScriptValues = siteModel.SetByBeforeOpeningPageServerScript( context: context, ss: ss); } hb.TdValue( context: context, ss: column.SiteSettings, column: column, siteModel: siteModel); break; case "Issues": var issueModel = issues.Get(key); if (issueModel == null) { issueModel = new IssueModel( context: context, ss: column.SiteSettings, dataRow: dataRow, formData: editRow ? formDataSet?.FirstOrDefault(o => o.Id == dataRow.Long("IssueId"))?.Data : null, tableAlias: column.TableAlias); issues.Add(key, issueModel); ss.SetColumnAccessControls( context: context, mine: issueModel.Mine(context: context)); serverScriptValues = issueModel.SetByBeforeOpeningPageServerScript( context: context, ss: ss); } if (!issueModel.Locked && EditColumns.Get(column.ColumnName) && column.CanUpdate(baseModel: issueModel)) { hb.Td( css: column.TextAlign == SiteSettings.TextAlignTypes.Right ? " right-align" : string.Empty, action: () => hb.Field( context: context, column: column, issueModel: issueModel, ss: column.SiteSettings, controlOnly: true, idSuffix: issueModel.IdSuffix())); } else { hb.TdValue( context: context, ss: column.SiteSettings, column: column, issueModel: issueModel, serverScriptValues: serverScriptValues ?.Columns ?.Get(column?.ColumnName)); } break; case "Results": var resultModel = results.Get(key); if (resultModel == null) { resultModel = new ResultModel( context: context, ss: column.SiteSettings, dataRow: dataRow, formData: editRow ? formDataSet?.FirstOrDefault(o => o.Id == dataRow.Long("ResultId"))?.Data : null, tableAlias: column.TableAlias); results.Add(key, resultModel); ss.SetColumnAccessControls( context: context, mine: resultModel.Mine(context: context)); serverScriptValues = resultModel.SetByBeforeOpeningPageServerScript( context: context, ss: ss); } if (!resultModel.Locked && EditColumns.Get(column.ColumnName) && column.CanUpdate(baseModel: resultModel)) { hb.Td( css: column.TextAlign == SiteSettings.TextAlignTypes.Right ? " right-align" : string.Empty, action: () => hb.Field( context: context, column: column, resultModel: resultModel, ss: column.SiteSettings, controlOnly: true, idSuffix: resultModel.IdSuffix())); } else { hb.TdValue( context: context, ss: column.SiteSettings, column: column, resultModel: resultModel, serverScriptValues: serverScriptValues ?.Columns ?.Get(column?.ColumnName)); } break; } }); })); }
public static ServerScriptModelRow Execute( Context context, SiteSettings ss, BaseItemModel itemModel, View view, ServerScript[] scripts, bool onTesting = false) { if (!(Parameters.Script.ServerScript != false && context.ContractSettings.NewFeatures() && context.ContractSettings.Script != false)) { return(null); } if (!(context?.ServerScriptDepth < 10)) { return(null); } itemModel = itemModel ?? new BaseItemModel(); ServerScriptModelRow scriptValues = null; using (var model = new ServerScriptModel( context: context, ss: ss, data: Values( context: context, ss: ss, model: itemModel), columns: Columns( context: context, ss: ss), columnFilterHash: view?.ColumnFilterHash, columnSorterHash: view?.ColumnSorterHash, onTesting: onTesting)) { using (var engine = new Microsoft.ClearScript.V8.V8ScriptEngine( Microsoft.ClearScript.V8.V8ScriptEngineFlags.EnableDateTimeConversion)) { try { engine.ContinuationCallback = model.ContinuationCallback; engine.AddHostObject("context", model.Context); engine.AddHostObject("model", model.Model); engine.AddHostObject("depts", model.Depts); engine.AddHostObject("groups", model.Groups); engine.AddHostObject("users", model.Users); engine.AddHostObject("columns", model.Columns); engine.AddHostObject("siteSettings", model.SiteSettings); engine.AddHostObject("view", model.View); engine.AddHostObject("items", model.Items); engine.AddHostObject("hidden", model.Hidden); engine.AddHostObject("extendedSql", model.ExtendedSql); engine.AddHostObject("notifications", model.Notification); foreach (var script in scripts) { engine.Execute(script.Body); } } finally { engine.ContinuationCallback = null; } } scriptValues = SetValues( context: context, ss: ss, model: itemModel, view: view, data: model); } return(scriptValues); }
public static void SetServerScriptModelColumns(Context context, SiteSettings ss, ServerScriptModelRow scriptValues) { scriptValues?.Columns.ForEach(scriptColumn => { var column = ss.GetColumn( context: context, columnName: scriptColumn.Key); if (column != null) { if (scriptColumn.Value.ChoiceHash != null) { var searchText = context.Forms.Data("DropDownSearchText"); var searchIndexes = searchText.SearchIndexes(); column.ChoiceHash = scriptColumn.Value ?.ChoiceHash ?.Where(o => searchIndexes?.Any() != true || searchIndexes.All(p => o.Key.ToString() == p || (o.Value?.ToString()).RegexLike(p).Any())) ?.ToDictionary( o => o.Key.ToString(), o => new Choice( o.Key.ToString(), o.Value?.ToString())); column.AddChoiceHashByServerScript = true; } column.ServerScriptModelColumn = scriptColumn.Value; } }); }
private static HtmlBuilder Menus( this HtmlBuilder hb, Context context, SiteSettings ss, long siteId, string referenceType, string muenuId, string css = null, string cssUiWidget = null, List <NavigationMenu> menus = null, bool childMenu = false, ServerScriptModelRow serverScriptModelRow = null) { if (menus?.Any() != true) { return(hb); } return(hb.Ul( id: muenuId, css: $"{css} {cssUiWidget}".Trim(), action: () => menus .ExtensionWhere <NavigationMenu>(context) .ForEach(menu => { var id = menu.ContainerId ?? menu.MenuId; if (Check( context: context, ss: ss, menus: menu, _using: serverScriptModelRow?.Elements?.None(id) != true && Using( context: context, ss: ss, referenceType: referenceType, siteId: siteId, menu: menu))) { hb.Li( id: id, css: menu.ChildMenus?.Any() != true ? null : "sub-menu", attributes: new HtmlAttributes() .Style( value: "display:none;", _using: serverScriptModelRow?.Elements?.Hidden(id) == true), action: () => hb .Content( context: context, ss: ss, siteId: siteId, childMenu: childMenu, menu: menu) .Menus( context: context, ss: ss, siteId: siteId, referenceType: referenceType, muenuId: menu.MenuId, css: "menu", cssUiWidget: "ui-widget-content", childMenu: true, menus: menu.ChildMenus, serverScriptModelRow: serverScriptModelRow)); } }))); }
public static HtmlBuilder MainCommands( this HtmlBuilder hb, Context context, SiteSettings ss, View view = null, Versions.VerTypes verType = Versions.VerTypes.Latest, bool readOnly = false, bool backButton = true, bool updateButton = false, bool copyButton = false, bool moveButton = false, bool mailButton = false, bool deleteButton = false, ServerScriptModelRow serverScriptModelRow = null, Action extensions = null) { if (context.Controller == "items" && context.Action == "edit" && !ss.IsSite(context: context)) { view = view ?? Views.GetBySession( context: context, ss: ss); } return(hb.Div(id: "MainCommandsContainer", action: () => hb .Div(id: "MainCommands", action: () => { if (backButton) { hb.Button( controlId: "GoBack", text: Displays.GoBack(context: context), controlCss: "button-icon", accessKey: "q", onClick: "$p.back();", icon: "ui-icon-circle-arrow-w"); } if (context.Action == "new") { switch (context.Controller) { case "registrations": hb.Button( controlId: "RegistrationId", controlCss: "button-icon validate", text: Displays.Invite(context: context), onClick: "$p.send($(this));", icon: "ui-icon-mail-closed", action: "Create", method: "post"); break; default: hb.Button( controlId: "CreateCommand", text: Displays.Create(context: context), controlCss: "button-icon validate", accessKey: "s", onClick: "$p.send($(this));", icon: "ui-icon-disk", action: "Create", method: "post"); break; } } else if (verType == Versions.VerTypes.Latest) { switch (context.Controller) { case "users": hb.Common( context: context, ss: ss, view: view, readOnly: readOnly, updateButton: updateButton, copyButton: copyButton, moveButton: moveButton, mailButton: mailButton, deleteButton: deleteButton, serverScriptModelRow: serverScriptModelRow); switch (context.Action) { case "index": hb .Button( controlId: "BulkDeleteCommand", text: Displays.BulkDelete(context: context), controlCss: "button-icon", accessKey: "r", onClick: "$p.send($(this));", icon: "ui-icon-trash", action: "BulkDelete", method: "delete", confirm: "ConfirmDelete", _using: context.CanDelete(ss: ss) && !readOnly) .Button( controlId: "EditImportSettings", text: Displays.Import(context: context), controlCss: "button-icon", accessKey: "w", onClick: "$p.openImportSettingsDialog($(this));", icon: "ui-icon-arrowreturnthick-1-e", selector: "#ImportSettingsDialog", _using: context.CanImport(ss: ss) && !readOnly) .Button( controlId: "OpenExportSelectorDialogCommand", text: Displays.Export(context: context), controlCss: "button-icon", accessKey: "x", onClick: "$p.openExportSelectorDialog($(this));", icon: "ui-icon-arrowreturnthick-1-w", action: "OpenExportSelectorDialog", method: "post", _using: context.CanExport(ss: ss)); break; } break; case "registrations": switch (context.Action) { case "login": hb.Button( controlId: "RegistrationId", controlCss: "button-icon validate", text: Displays.ApprovalRequest(context: context), onClick: "$p.send($(this));", icon: "ui-icon-mail-closed", action: "ApprovalRequest", method: "post"); break; case "edit": hb .Button( controlId: "RegistrationApproval", text: Displays.Approval(context: context), controlCss: "button-icon", onClick: "$p.send($(this));", icon: "ui-icon-mail-closed", action: "Approval", method: "put", _using: Permissions.PrivilegedUsers(loginId: context.LoginId)) .Button( controlId: "DeleteCommand", text: Displays.Delete(context: context), controlCss: "button-icon", accessKey: "r", onClick: "$p.send($(this));", icon: "ui-icon-trash", action: "Delete", method: "delete", confirm: "ConfirmDelete", _using: deleteButton && context.CanDelete(ss: ss) && !ss.IsSite(context: context) && !readOnly); break; case "index": hb.Button( controlId: "BulkDeleteCommand", text: Displays.BulkDelete(context: context), controlCss: "button-icon", accessKey: "r", onClick: "$p.send($(this));", icon: "ui-icon-trash", action: "BulkDelete", method: "delete", confirm: "ConfirmDelete", _using: context.CanDelete(ss: ss) && !readOnly); break; } break; case "items": hb.Common( context: context, ss: ss, view: view, readOnly: readOnly, updateButton: updateButton, copyButton: copyButton, moveButton: moveButton, mailButton: mailButton, deleteButton: deleteButton, serverScriptModelRow: serverScriptModelRow); if (context.Forms.Bool("EditOnGrid")) { hb .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.UpdateCommand, controlId: "UpdateByGridCommand", text: Displays.Update(context: context), controlCss: "button-icon validate", accessKey: "s", onClick: "$p.send($(this));", icon: "ui-icon-disk", action: "UpdateByGrid", method: "post", _using: context.CanUpdate(ss: ss)) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.EditOnGridCommand, controlId: "EditOnGridCommand", text: Displays.ListMode(context: context), controlCss: "button-icon", onClick: "$p.editOnGrid($(this),0);", icon: "ui-icon-arrowreturnthick-1-w", action: "Index", method: "post"); } else if (ss.ReferenceType != "Sites") { switch (context.Action) { case "index": hb .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.BulkMoveTargetsCommand, controlId: "BulkMoveTargetsCommand", text: Displays.BulkMove(context: context), controlCss: "button-icon open-dialog", accessKey: "o", onClick: "$p.moveTargets($(this));", icon: "ui-icon-transferthick-e-w", selector: "#MoveDialog", action: "MoveTargets", method: "get", _using: ss.MoveTargets?.Any() == true && context.CanUpdate(ss: ss) && !ss.GridColumnsHasSources(gridColumns: view?.GridColumns) && ss.MoveTargetsOptions(sites: ss.NumberOfMoveTargetsTable(context: context)) .Any(o => ss.MoveTargets.Contains(o.Key.ToLong())) && !readOnly) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.BulkDeleteCommand, controlId: "BulkDeleteCommand", text: Displays.BulkDelete(context: context), controlCss: "button-icon", accessKey: "r", onClick: "$p.send($(this));", icon: "ui-icon-trash", action: "BulkDelete", method: "delete", confirm: "ConfirmDelete", _using: context.CanDelete(ss: ss) && !ss.GridColumnsHasSources(gridColumns: view?.GridColumns) && !readOnly) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.EditImportSettings, controlId: "EditImportSettings", text: Displays.Import(context: context), controlCss: "button-icon", accessKey: "w", onClick: "$p.openImportSettingsDialog($(this));", icon: "ui-icon-arrowreturnthick-1-e", selector: "#ImportSettingsDialog", _using: context.CanImport(ss: ss) && !readOnly) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.OpenExportSelectorDialogCommand, controlId: "OpenExportSelectorDialogCommand", text: Displays.Export(context: context), controlCss: "button-icon", accessKey: "x", onClick: "$p.openExportSelectorDialog($(this));", icon: "ui-icon-arrowreturnthick-1-w", action: "OpenExportSelectorDialog", method: "post", _using: context.CanExport(ss: ss)) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.OpenBulkUpdateSelectorDialogCommand, controlId: "OpenBulkUpdateSelectorDialogCommand", text: Displays.BulkUpdate(context: context), controlCss: "button-icon", accessKey: "s", onClick: "$p.openBulkUpdateSelectorDialog($(this));", icon: "ui-icon-disk", action: "OpenBulkUpdateSelectorDialog", method: "post", _using: context.CanUpdate(ss: ss) && ss.GetAllowBulkUpdateOptions(context: context)?.Any() == true && !readOnly) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.EditOnGridCommand, controlId: "EditOnGridCommand", text: Displays.EditMode(context: context), controlCss: "button-icon", onClick: "$p.editOnGrid($(this),1);", icon: "ui-icon-arrowreturnthick-1-w", action: "Index", method: "post", _using: ss.GridEditorType == SiteSettings.GridEditorTypes.Grid && context.CanUpdate(ss: ss) && !ss.GridColumnsHasSources(gridColumns: view?.GridColumns) && ss.IntegratedSites?.Any() != true && !readOnly); break; case "crosstab": hb.Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.ExportCrosstabCommand, controlId: "ExportCrosstabCommand", text: Displays.Export(context: context), controlCss: "button-icon", accessKey: "x", onClick: "$p.exportCrosstab();", icon: "ui-icon-arrowreturnthick-1-w", _using: context.CanExport(ss: ss)); break; } } break; default: hb.Common( context: context, ss: ss, view: view, readOnly: readOnly, updateButton: updateButton, copyButton: copyButton, moveButton: moveButton, mailButton: mailButton, deleteButton: deleteButton, serverScriptModelRow: serverScriptModelRow); break; } extensions?.Invoke(); } }))); }
public static HtmlBuilder GridHeader( this HtmlBuilder hb, Context context, SiteSettings ss, IEnumerable <Column> columns, View view = null, bool sort = true, bool editRow = false, bool checkRow = true, bool checkAll = false, string action = "GridRows", ServerScriptModelRow serverScriptModelRow = null) { return(hb.Tr( css: "ui-widget-header", action: () => { if (editRow) { hb.Th( action: () => { if (editRow && context.CanCreate(ss: ss)) { hb.Button( title: Displays.New(context: context), controlCss: "button-icon", onClick: "$p.newOnGrid($(this));", icon: "ui-icon-plus", action: "NewOnGrid", method: "post"); } }); } else if (checkRow) { hb.Th(action: () => hb .CheckBox( controlId: "GridCheckAll", _checked: checkAll)); } columns.ForEach(column => { var gridLabelText = column.GridLabelText; var serverScriptLabelText = serverScriptModelRow?.Columns ?.Get(column.ColumnName) ?.LabelText; if (gridLabelText == column.LabelText && serverScriptLabelText != null && serverScriptLabelText != column.LabelText) { gridLabelText = serverScriptLabelText; } if (sort) { hb.Th( css: column.CellCss(css: "sortable"), attributes: new HtmlAttributes() .DataName(column.ColumnName), action: () => hb .Div( attributes: new HtmlAttributes() .DataId("ViewSorters__" + column.ColumnName) .Add("data-order-type", OrderBy( view, column.ColumnName)) .DataAction(action) .DataMethod("post"), action: () => hb .Span(action: () => hb .Text(text: gridLabelText)) .SortIcon( view: view, key: column.ColumnName))); } else { hb.Th( css: column.CellCss(), action: () => hb .Text(text: gridLabelText)); } }); })); }
private static HtmlBuilder Common( this HtmlBuilder hb, Context context, SiteSettings ss, View view, bool readOnly, bool updateButton, bool copyButton, bool moveButton, bool mailButton, bool deleteButton, ServerScriptModelRow serverScriptModelRow) { return(hb .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.UpdateCommand, controlId: "UpdateCommand", text: Displays.Update(context: context), controlCss: "button-icon validate", accessKey: "s", onClick: "$p.send($(this));", icon: "ui-icon-disk", action: "Update", method: "put", _using: updateButton && context.CanUpdate(ss: ss) && !readOnly) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.OpenCopyDialogCommand, controlId: "OpenCopyDialogCommand", text: Displays.Copy(context: context), controlCss: "button-icon open-dialog", accessKey: "c", onClick: "$p.openDialog($(this));", icon: "ui-icon-copy", selector: "#CopyDialog", _using: copyButton && context.CanCreate(ss: ss) && (ss.IsSite(context: context) || ss.AllowCopy == true)) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.ReferenceCopyCommand, controlId: "ReferenceCopyCommand", text: Displays.ReferenceCopy(context: context), controlCss: "button-icon", accessKey: "k", onClick: $"location.href='{Locations.ItemNew(context: context, id: ss.SiteId)}?CopyFrom={context.Id}'", icon: "ui-icon-copy", _using: copyButton && context.CanCreate(ss: ss) && !ss.IsSite(context: context) && ss.AllowReferenceCopy == true) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.MoveTargetsCommand, controlId: "MoveTargetsCommand", text: Displays.Move(context: context), controlCss: "button-icon open-dialog", accessKey: "o", onClick: "$p.moveTargets($(this));", icon: "ui-icon-transferthick-e-w", selector: "#MoveDialog", action: "MoveTargets", method: "get", _using: moveButton && ss.MoveTargets?.Any() == true && context.CanUpdate(ss: ss) && ss.MoveTargetsOptions(sites: ss.NumberOfMoveTargetsTable(context: context)) .Any(o => ss.MoveTargets.Contains(o.Key.ToLong())) && !readOnly) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.EditOutgoingMail, controlId: "EditOutgoingMail", text: Displays.Mail(context: context), controlCss: "button-icon", onClick: "$p.openOutgoingMailDialog($(this));", icon: "ui-icon-mail-closed", action: "Edit", method: "put", accessKey: "m", _using: mailButton && context.CanSendMail(ss: ss)) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.DeleteCommand, controlId: "DeleteCommand", text: Displays.Delete(context: context), controlCss: "button-icon", accessKey: "r", onClick: "$p.send($(this));", icon: "ui-icon-trash", action: "Delete", method: "delete", confirm: "ConfirmDelete", _using: deleteButton && context.CanDelete(ss: ss) && !ss.IsSite(context: context) && !readOnly) .Button( serverScriptModelRow: serverScriptModelRow, commandDisplayTypes: view?.OpenDeleteSiteDialogCommand, controlId: "OpenDeleteSiteDialogCommand", text: Displays.DeleteSite(context: context), controlCss: "button-icon", accessKey: "r", onClick: "$p.openDeleteSiteDialog($(this));", icon: "ui-icon-trash", _using: deleteButton && context.CanDelete(ss: ss) && ss.IsSite(context: context) && !readOnly)); }
public static ServerScriptModelRow Execute( Context context, SiteSettings ss, BaseItemModel itemModel, View view, ServerScript[] scripts, string condition, bool debug, bool onTesting = false) { if (!(Parameters.Script.ServerScript != false && context.ContractSettings.ServerScript != false && context.ServerScriptDisabled == false)) { return(null); } if (!(context?.ServerScriptDepth < 10)) { return(null); } itemModel = itemModel ?? new BaseItemModel(); ServerScriptModelRow scriptValues = null; using (var model = new ServerScriptModel( context: context, ss: ss, data: Values( context: context, ss: ss, model: itemModel), columns: Columns( context: context, ss: ss, model: itemModel), view: view, condition: condition, debug: debug, onTesting: onTesting)) { using (var engine = new ScriptEngine(debug: debug)) { try { engine.ContinuationCallback = model.ContinuationCallback; engine.AddHostObject("context", model.Context); engine.AddHostObject("model", model.Model); engine.AddHostObject("depts", model.Depts); engine.AddHostObject("groups", model.Groups); engine.AddHostObject("users", model.Users); engine.AddHostObject("columns", model.Columns); engine.AddHostObject("siteSettings", model.SiteSettings); engine.AddHostObject("view", model.View); engine.AddHostObject("items", model.Items); engine.AddHostObject("hidden", model.Hidden); engine.AddHostObject("elements", model.Elements); engine.AddHostObject("extendedSql", model.ExtendedSql); engine.AddHostObject("notifications", model.Notification); if (!Parameters.Script.DisableServerScriptHttpClient) { engine.AddHostObject("httpClient", model.HttpClient); } engine.AddHostObject("utilities", model.Utilities); engine.Execute(scripts.Select(o => o.Body).Join("\n")); } finally { engine.ContinuationCallback = null; } } scriptValues = SetValues( context: context, ss: ss, model: itemModel, view: view, data: model); } return(scriptValues); }