public static void Run(IFormRenderer <HTMLElement> renderer) { var mainFrm = new MainForm(); var showInfo = new InformationalMessageForm("Some important info", "Info form title"); var altMainFrm = new AltMainForm(); renderer.ReplaceMaster(mainFrm); mainFrm.Ended += (form, outcome) => { switch (outcome) { case MainForm.Outcome.EndRequested: renderer.Remove(form); break; case MainForm.Outcome.InfoRequested: renderer.AddPopup(showInfo); break; case MainForm.Outcome.ReplaceMaster: renderer.ReplaceMaster(altMainFrm); break; } }; showInfo.Ended += (form, _) => renderer.Remove(form); //just dismiss this popup (no relevant outcome) }
public InternationalizationFlow(ITranslationsService service) { _downloadTranslation = new RemoteActionsCallerForm(x => x.Add( () => _choose.ChosenValue, service.FetchTranslation, y => I18n.ConfigureImplementation( () => new TranslationWithFallbackI18n(_choose.ChosenValue.ToString(), y)))); _choose = new EnumChoiceForm <SupportedLang>( "Language choice", true, SupportedLang.EN, x => x.GetLangName(), x => { x.Choice.Widget.Style.Display = Display.Grid; x.Choice.Widget.Style.GridTemplateColumns = "auto 1fr"; x.Description.Widget.InnerHTML = @"For sake of simplicity you need to make explicit choice below. In a normal program, you would take current language either from logged in user property or from browser's Accept-Language header field. If you study source code you will see that messages eligible for translation are declared as: I18n.Translate(""Some message that should be localized"") Those messages can be easily found and translated within JSON file using <a target='_blank' href='https://github.com/d-p-y/oldschool-i18n'>OldSchool-I18n</a>"; x.Description.Widget.Style.WhiteSpace = WhiteSpace.Pre; x.Description.Widget.Style.PaddingBottom = "20px"; x.Description.Widget.ClassName = "grayedOut"; }); _welcomeDialog = new InformationalMessageForm(); }
public TabbedViewValidationFlow() { _input = new IntroduceItemForm(); var confirmView = new InformationalMessageFormView(); confirmView.Message.Widget.AddClasses(Magics.CssClassPreserveNewlines); _msg = new InformationalMessageForm(confirmView); }
public HelloFlow(IHelloWorldService service) { _askForName = new TextInputForm("What's your name?", "Hello there"); _getAnswer = new RemoteActionsCallerForm( x => x.Add(() => _askForName.Introduced, //service param service.SayHello, y => _sayHello.Init(y))); //consume service reply _sayHello = new InformationalMessageForm(); }
public static void OnReady() { Toolkit.InitializeToolkit(); var renderer = Toolkit.DefaultFormRenderer(); var msg = new InformationalMessageForm("Hello world"); msg.Ended += (x, _) => renderer.Remove(x); renderer.AddPopup(msg); }
public HelloWorldFlow(IHelloWorldService service) { _askForName = new TextInputForm( "What's your name?", "Hello there", TextType.TreatAsText, "", Validator.IsNotEmptyOrWhitespaceOnly); _getAnswer = new RemoteActionsCallerForm( x => x.Add(() => _askForName.Introduced, //service param service.SayHello, y => _sayHello.Init(y))); //consume service reply _sayHello = new InformationalMessageForm("", "Server reply"); }
public IntroFlow(VersionInfo version, bool skipWelcome) { _skipWelcome = skipWelcome; _introduction = new InformationalMessageForm( $@"This is Philadelphia Toolkit Demo App!<br> Click OK and then use top menu for further demos<br><br> <span class='grayedOut'> Notice that when you resize browser then forms stays centered. <br> You can also drag this dialog freely<br> Press enter to automatically activate default form button in this topmost dialog. </span><br><br> Version information:<br> gitSha1: {version?.sha}<br> gitCommittedAt: {version?.committedAt}<br> compiledAt: {version?.compiledAt}", "Welcome", TextType.TreatAsHtml); }
public NavigationProgram() { _dataEntry = new SomeChoicesForm(); _msg = new InformationalMessageForm("", "Outcome display"); }
private void OnReadyIAWApp() { var chooseActivity = new VerticalMenuForm <MenuItems>( "Demo choice", EnumExtensions.GetEnumValues <MenuItems>(), x => x.GetLabel(), lbl => new InputTypeButtonActionView(lbl), isCancellable: false); var inputName = new TextInputForm("Name", "What's your nickname?"); var greetUser = new InformationalMessageForm("", "Greetings!"); var scanResultView = new InformationalMessageFormView(customActionBuilder: x => new AnchorBasedActionView(x)); var scanResult = new InformationalMessageForm(scanResultView, "", "Scan result"); //quick hack for sake of demo var photoTakenResultView = new InformationalMessageFormView(customActionBuilder: x => new AnchorBasedActionView(x)); photoTakenResultView.Message.Widget.RemoveAllChildren(); var photoTakenResult = new InformationalMessageForm(photoTakenResultView, "", "Your photo"); var scanCodeView = new QrScannerFormView(); var performScan = new QrScannerForm <string>( scanCodeView, "Scan QR code", "Any QR is fine", x => Task.FromResult(x)); var takePhotoView = new PhotoTakerFormView(); var takePhoto = new PhotoTakerForm(takePhotoView); chooseActivity.Ended += (x, outcome) => { _renderer.ClearMaster(); switch (outcome) { case CompletedOrCanceled.Completed: switch (x.Chosen) { case MenuItems.DataInput: _renderer.ReplaceMaster(inputName); break; case MenuItems.QrCodeScanner: _renderer.ReplaceMaster(performScan); break; case MenuItems.PhotoTaker: takePhoto.ClearImage(); _renderer.ReplaceMaster(takePhoto); break; default: throw new Exception("unsupported MenuItems"); } break; } }; inputName.Ended += async(x, outcome) => { switch (outcome) { case CompletedOrCanceled.Completed: await greetUser.Init("Hi " + inputName.Introduced + "!"); _renderer.ReplaceMaster(greetUser); break; case CompletedOrCanceled.Canceled: _renderer.ReplaceMaster(chooseActivity); break; } }; greetUser.Ended += (x, _) => _renderer.ReplaceMaster(inputName); performScan.Ended += async(x, outcome) => { switch (outcome) { case CompletedOrCanceled.Completed: await scanResult.Init("QR content: " + performScan.ScannedCode); _renderer.AddPopup(scanResult); break; case CompletedOrCanceled.Canceled: _renderer.ReplaceMaster(chooseActivity); break; } }; scanResult.Ended += (x, _) => { _renderer.Remove(x); _renderer.ReplaceMaster(chooseActivity); }; takePhoto.Ended += (x, outcome) => { switch (outcome) { case CompletedOrCanceled.Completed: var img = new HTMLImageElement(); img.Style.MaxWidth = "50vw"; img.Style.MaxHeight = "50vh"; var fr = new FileReader(); fr.OnLoad += _ => img.Src = (string)fr.Result; fr.ReadAsDataURL(takePhoto.PhotoAsFile); photoTakenResultView.Message.Widget.ReplaceChildren(new[] { img }); _renderer.AddPopup(photoTakenResult); break; case CompletedOrCanceled.Canceled: _renderer.ReplaceMaster(chooseActivity); break; } }; photoTakenResult.Ended += (x, _) => { _renderer.Remove(x); _renderer.ReplaceMaster(chooseActivity); }; _renderer.ReplaceMaster(chooseActivity); }
public MainMenuFlow(ISomeService someService, ITranslationsService translationsService, IHttpRequester httpRequester) { IFormRenderer <HTMLElement> CreateRenderer() => _baseRenderer.CreateRendererWithBase( new ElementWrapperFormCanvas( Toolkit.BaseFormCanvasTitleStrategy, _mainMenuFormView.BodyPanel.Widget, Toolkit.DefaultExitButtonBuilder, Toolkit.DefaultLayoutMode)); _aboutMsg = new InformationalMessageForm( new InformationalMessageFormView(TextType.TreatAsHtml), "<b>Philadelphia Toolkit Demo</b><br>by TODO IT spółka z o.o.", "About program"); _aboutMsg.Ended += (x, _) => _lastRenderer.Remove(x); _licensesInfoMsg = new InformationalMessageForm( new InformationalMessageFormView(TextType.TreatAsHtml), OpenSourceLicensesText.OpenSourceLicensesHtml, I18n.Translate("Used open source licensed programs and libraries")); _licensesInfoMsg.Ended += (x, _) => _lastRenderer.Remove(x); var menuItems = new List <MenuItemUserModel> { CreateSubTree("Features", CreateLocalLeaf( "Server-sent events", () => new SseDemoFlow(someService).Run(CreateRenderer())), CreateLocalLeaf( "Forms navigation", () => new NavigationProgram().Run(CreateRenderer())), CreateLocalLeaf( "Internationalization", () => new InternationalizationFlow(translationsService).Run(CreateRenderer()))), CreateSubTree("Data validation", CreateLocalLeaf( "Simplest", () => new ValidationProgram().Run(CreateRenderer())), CreateLocalLeaf( "Tabbed view indicator", () => new TabbedViewValidationFlow().Run(CreateRenderer())), CreateLocalLeaf( "File uploads", () => new UploaderDemoFlow(someService, httpRequester).Run(CreateRenderer()))), CreateSubTree("Widgets", CreateLocalLeaf( "Databound datagrid", () => new DataboundDatagridProgram(someService).Run(CreateRenderer())), CreateLocalLeaf( "Datetime pickers", () => new DateTimeDemoProgram().Run(CreateRenderer())), CreateLocalLeaf( "Dropdowns", () => new DropdownsProgram().Run(CreateRenderer())), CreateLocalLeaf( "Master details", () => new MasterDetailsProgram(someService).Run(CreateRenderer())), CreateLocalLeaf( "Flexible layout", () => new FlexibleLayoutFlow().Run(CreateRenderer()))), CreateSubTree("Help", CreateLocalLeaf( "About program", () => { _lastRenderer = CreateRenderer(); _lastRenderer.AddPopup(_aboutMsg); }), CreateLocalLeaf( "Open source licenses", () => { _lastRenderer = CreateRenderer(); _lastRenderer.AddPopup(_licensesInfoMsg); }) ) }; //TODO dropdown with not-legal-anymore/scratched value //TODO add I18n demo _mainMenuFormView = new HorizontalLinksMenuFormView(); _mainMenuForm = new MenuForm(_mainMenuFormView, menuItems); }