示例#1
0
        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();
        }
示例#3
0
        public TabbedViewValidationFlow()
        {
            _input = new IntroduceItemForm();

            var confirmView = new InformationalMessageFormView();

            confirmView.Message.Widget.AddClasses(Magics.CssClassPreserveNewlines);
            _msg = new InformationalMessageForm(confirmView);
        }
示例#4
0
 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();
 }
示例#5
0
        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);
        }
示例#6
0
 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");
 }
示例#7
0
 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);
 }
示例#8
0
 public NavigationProgram()
 {
     _dataEntry = new SomeChoicesForm();
     _msg       = new InformationalMessageForm("", "Outcome display");
 }
示例#9
0
        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);
        }
示例#10
0
        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);
        }