Trilium Frontend API
    Preparing search index...

    Class IconView

    The icon view class.

    Hierarchy (View Summary)

    Index
    • Returns IconView

    _unboundChildren: ViewCollection

    A collection of view instances, which have been added directly into the module:ui/template~Template#children.

    Collections registered with #createCollection.

    content: string

    The SVG source of the icon.

    The user must provide the entire XML string, not just the path. See the {@glink framework/architecture/ui-library#setting-label-icon-and-tooltip UI library} guide for details.

    element: HTMLElement

    An HTML element of the view. null until module:ui/view~View#render rendered from the module:ui/view~View#template template. The class-level example above illustrates typical usage. The full description, fenced examples, and assignment note are in the block comment immediately above the element field in the source.

    fillColor: string

    The fill color of the child path.ck-icon__fill.

    ''
    
    isColorInherited: boolean

    When set true (default), all parts of the icon inherit the fill color from the CSS color property of the icon's DOM parent.

    This effectively makes the icon monochromatic and allows it to change its fill color dynamically, for instance, when a module:ui/button/buttonview~ButtonView displays an icon and it switches between different states (pushed, hovered, etc.) the icon will follow along.

    Note: For the monochromatic icon to render properly, it must be made up of shapes that can be filled with color instead of, for instance, paths with strokes. Be sure to use the outline stroke tool (the name could be different in your vector graphics editor) before exporting your icon. Also, remove any excess fill="..." attributes that could break the color inheritance.

    Note: If you want to preserve the original look of your icon and disable dynamic color inheritance, set this flag to false.

    true
    
    isRendered: boolean

    Set true when the view has already been module:ui/view~View#render rendered.

    isVisible: boolean

    Controls whether the icon is visible.

    true
    
    locale: Locale

    A set of tools to localize the user interface.

    Also see module:core/editor/editor~Editor#locale.

    Shorthand for module:utils/locale~Locale#t.

    Note: If #locale instance hasn't been passed to the view this method may not be available.

    module:utils/locale~Locale#t

    template?: Template

    Template of this view. It provides the #element representing the view in DOM, which is #render rendered.

    viewBox: string

    This attribute specifies the boundaries to which the icon content should stretch.

    '0 0 20 20'
    
    viewUid?: string
    • get bindTemplate(): BindChain<this>

      Shorthand for module:ui/template~Template.bind, a binding module:ui/template~BindChain interface pre–configured for the view instance.

      It provides module:ui/template~BindChain#to to() and module:ui/template~BindChain#if if() methods that initialize bindings with observable attributes and attach DOM listeners.

      class SampleView extends View {
      constructor( locale ) {
      super( locale );

      const bind = this.bindTemplate;

      // These {@link module:utils/observablemixin~Observable observable} attributes will control
      // the state of the view in DOM.
      this.set( {
      elementClass: 'foo',
      isEnabled: true
      } );

      this.setTemplate( {
      tag: 'p',

      attributes: {
      // The class HTML attribute will follow elementClass
      // and isEnabled view attributes.
      class: [
      bind.to( 'elementClass' )
      bind.if( 'isEnabled', 'present-when-enabled' )
      ]
      },

      on: {
      // The view will fire the "clicked" event upon clicking <p> in DOM.
      click: bind.to( 'clicked' )
      }
      } );
      }
      }

      Returns BindChain<this>

    • Creates a new collection of views, which can be used as module:ui/template~Template#children of this view.

      class SampleView extends View {
      constructor( locale ) {
      super( locale );

      const child = new ChildView( locale );
      this.items = this.createCollection( [ child ] );

      this.setTemplate( {
      tag: 'p',

      // `items` collection will render here.
      children: this.items
      } );
      }
      }

      const view = new SampleView( locale );
      view.render();

      // It will append <p><child#element></p> to the <body>.
      document.body.appendChild( view.element );

      Type Parameters

      Parameters

      • Optionalviews: Iterable<T>

        Initial views of the collection.

      Returns ViewCollection<T>

      A new collection of view instances.

    • The opposite of #registerChild. Removes a child view from this view instance. Once removed, the child is no longer managed by its parent, e.g. it can safely become a child of another parent view.

      Parameters

      Returns void

      #registerChild

    • Recursively destroys the view instance and child views added by #registerChild and residing in collections created by the #createCollection.

      Destruction disables all event listeners:

      • created on the view, e.g. view.on( 'event', () => {} ),
      • defined in the #template for DOM events.

      Returns void

    • module:ui/template~Template.extend Extends the #template of the view with with given definition.

      A shorthand for:

      Template.extend( view.template, definition );
      

      Note: Is requires the #template to be already set. See #setTemplate.

      Parameters

      Returns void

    • Registers a new child view under the view instance. Once registered, a child view is managed by its parent, including #render rendering and #destroy destruction.

      To revert this, use #deregisterChild.

      class SampleView extends View {
      constructor( locale ) {
      super( locale );

      this.childA = new SomeChildView( locale );
      this.childB = new SomeChildView( locale );

      this.setTemplate( { tag: 'p' } );

      // Register the children.
      this.registerChild( [ this.childA, this.childB ] );
      }

      render() {
      super.render();

      this.element.appendChild( this.childA.element );
      this.element.appendChild( this.childB.element );
      }
      }

      const view = new SampleView( locale );

      view.render();

      // Will append <p><childA#element><b></b><childB#element></p>.
      document.body.appendChild( view.element );

      Note: There's no need to add child views if they're already referenced in the #template:

      class SampleView extends View {
      constructor( locale ) {
      super( locale );

      this.childA = new SomeChildView( locale );
      this.childB = new SomeChildView( locale );

      this.setTemplate( {
      tag: 'p',

      // These children will be added automatically. There's no
      // need to call {@link #registerChild} for any of them.
      children: [ this.childA, this.childB ]
      } );
      }

      // ...
      }

      Parameters

      Returns void

    • Recursively renders the view.

      Once the view is rendered:

      • the #element becomes an HTML element out of #template,
      • the #isRendered flag is set true.

      Note: The children of the view:

      • defined directly in the #template
      • residing in collections created by the #createCollection method,
      • and added by #registerChild are also rendered in the process.

      In general, render() method is the right place to keep the code which refers to the #element and should be executed at the very beginning of the view's life cycle.

      It is possible to module:ui/template~Template.extend the #template before the view is rendered. To allow an early customization of the view (e.g. by its parent), such references should be done in render().

      class SampleView extends View {
      constructor() {
      this.setTemplate( {
      // ...
      } );
      },

      render() {
      // View#element becomes available.
      super.render();

      // The "scroll" listener depends on #element.
      this.listenTo( window, 'scroll', () => {
      // A reference to #element would render the #template and make it non-extendable.
      if ( window.scrollY > 0 ) {
      this.element.scrollLeft = 100;
      } else {
      this.element.scrollLeft = 0;
      }
      } );
      }
      }

      const view = new SampleView();

      // Let's customize the view before it gets rendered.
      view.extendTemplate( {
      attributes: {
      class: [
      'additional-class'
      ]
      }
      } );

      // Late rendering allows customization of the view.
      view.render();

      Returns void

    • Sets the #template of the view with with given definition.

      A shorthand for:

      view.setTemplate( definition );
      

      Parameters

      Returns void