Exemplo n.º 1
0
            private void UpdateContentImpl(
                RemoteFileDescr forFile, UploadStatus?formerStatus, AnchorBasedActionView widget,
                bool isOperationRunning)
            {
                var enabledVal =
                    _parent.Downloadable &&
                    forFile.Status != UploadStatus.Running &&
                    forFile.FileId != null &&
                    !isOperationRunning;

                Logger.Debug(GetType(),
                             "UpdateContentImpl file={0} formerStatus={1} isOperationRunning={2} enabled={3}",
                             forFile, formerStatus, isOperationRunning, enabledVal);

                widget.Enabled = enabledVal;

                if (formerStatus.HasValue && formerStatus.Value == forFile.Status)
                {
                    //no need to recreate details
                    return;
                }

                switch (forFile.Status)
                {
                case UploadStatus.Running: {
                    widget.State = ActionViewState.CreateOperationRunning();

                    var throbber = new HTMLDivElement {
                        TextContent = FontAwesomeSolid.IconSpinner
                    };
                    throbber.AddClasses(IconFontType.FontAwesomeSolid.ToCssClassName());

                    throbber.Style.FontSize = $"{_parent._cellSize.width/3}px";
                    throbber.Style.SetProperty("animation", "throbberSpin 1.0s linear infinite");

                    widget.Widget.AppendChild(throbber);
                    break;
                }

                case UploadStatus.Failed:
                case UploadStatus.Succeeded:
                    if (formerStatus.HasValue && formerStatus.Value == UploadStatus.Running)
                    {
                        //file just uploaded (succ or fail)
                        SetupOnClick(forFile, widget, false);
                    }

                    if (forFile.UploadErrorMessage != null)
                    {
                        widget.Widget.SetAttribute(
                            Magics.AttrDataErrorsTooltip, forFile.UploadErrorMessage);
                    }

                    if (forFile.ThumbDimensions != null)
                    {
                        var dim = _parent.CalculateDimensionsFittingIntoCell(
                            forFile.ThumbDimensions.Value);
                        var img = new HTMLImageElement {
                            Width  = dim.width,
                            Height = dim.height,
                            Src    = forFile.ThumbnailDataUrl
                        };
                        widget.Widget.AppendChild(img);
                    }
                    else
                    {
                        var icn = new HTMLDivElement {
                            TextContent = FontAwesomeSolid.IconFileAlt
                        };
                        icn.AddClasses(IconFontType.FontAwesomeSolid.ToCssClassName());
                        icn.Style.FontSize = $"{_parent._cellSize.width/3}px";

                        widget.Widget.AppendChild(icn);
                    }
                    break;

                default: throw new Exception("unsupported UploadStatus");
                }
            }
Exemplo n.º 2
0
        /// <param name="whichOne">true = first, false=second</param>
        private static BuiltPanels <T> BuildHideable <T>(
            T panels, bool whichOne, bool showable, IFormRenderer <HTMLElement> renderer)
            where T : TwoPanelsWithResizer
        {
            var fstIsHideable = whichOne;
            var toBeHidden    = fstIsHideable ? panels.FirstPanel : panels.SecondPanel;

            var hideAct = new HTMLDivElement {
                TextContent = FontAwesomeSolid.IconTimes
            }
            .With(x => x.AddClasses(
                      Magics.CssClassHideAction, Magics.CssClassEnabled, IconFontType.FontAwesomeSolid.ToCssClassName()));
            var showAct = showable ? new HTMLDivElement {
                TextContent = FontAwesomeSolid.IconBars
            }
            .With(x => x.AddClasses(
                      Magics.CssClassShowAction, IconFontType.FontAwesomeSolid.ToCssClassName())) : null;

            panels.FirstPanel.AddClasses(Magics.CssClassPositionRelative);
            var leftCanvas = new ElementWrapperFormCanvas(
                Toolkit.BaseFormCanvasTitleStrategy,
                panels.FirstPanel,
                Toolkit.DefaultExitButtonBuilder,
                Toolkit.DefaultLayoutMode,
                fstIsHideable ? hideAct : showAct);

            var leftRenderer = renderer.CreateRendererWithBase(leftCanvas);

            panels.SecondPanel.AddClasses(Magics.CssClassPositionRelative);
            var rightCanvas = new ElementWrapperFormCanvas(
                Toolkit.BaseFormCanvasTitleStrategy,
                panels.SecondPanel,
                Toolkit.DefaultExitButtonBuilder,
                Toolkit.DefaultLayoutMode,
                fstIsHideable ? showAct : hideAct);

            var rightRenderer = renderer.CreateRendererWithBase(rightCanvas);

            var lastSize = new MutableHolder <Tuple <double, double> >();
            var shown    = new MutableHolder <bool>(true);

            void HideAction()
            {
                if (!shown.Value)
                {
                    Logger.Debug(typeof(TwoPanelsWithResizerBuilder), "already hidden");
                    return;
                }

                hideAct.RemoveClasses(Magics.CssClassEnabled);
                if (showable)
                {
                    showAct.AddClasses(Magics.CssClassEnabled);
                }

                lastSize.Value = panels.Sizes;
                toBeHidden.AddClasses(Magics.CssClassNotRendered);
                panels.Splitter.AddClasses(Magics.CssClassNotRendered);
                shown.Value = false;
                panels.ForceSizeCalculation(VisibilityAction.Hiding);
            }

            void ShowAction()
            {
                if (shown.Value)
                {
                    Logger.Debug(typeof(TwoPanelsWithResizerBuilder), "already shown");
                    return;
                }

                if (showable)
                {
                    showAct.RemoveClasses(Magics.CssClassEnabled);
                }

                hideAct.AddClasses(Magics.CssClassEnabled);
                toBeHidden.RemoveClasses(Magics.CssClassNotRendered);
                panels.Splitter.RemoveClasses(Magics.CssClassNotRendered);
                shown.Value = true;
                panels.ForceSizeCalculation(VisibilityAction.Showing, lastSize.Value);
            }

            hideAct.OnClick += ev => HideAction();
            if (showable)
            {
                showAct.OnClick += ev => ShowAction();
            }

            return(BuiltPanels <T> .BuiltHideable(panels, leftRenderer, rightRenderer,
                                                  leftCanvas, rightCanvas, HideAction, ShowAction));
        }