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"); } }
/// <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)); }