• Jump To … +
    ./source/asset-management/image-asset.js ./source/asset-management/noise-asset.js ./source/asset-management/raw-asset.js ./source/asset-management/reaction-diffusion-asset.js ./source/asset-management/sprite-asset.js ./source/asset-management/video-asset.js ./source/core/animation-loop.js ./source/core/display-cycle.js ./source/core/document.js ./source/core/events.js ./source/core/init.js ./source/core/library.js ./source/core/snippets.js ./source/core/user-interaction.js ./source/factory/action.js ./source/factory/anchor.js ./source/factory/animation.js ./source/factory/bezier.js ./source/factory/block.js ./source/factory/button.js ./source/factory/canvas.js ./source/factory/cell.js ./source/factory/cog.js ./source/factory/color.js ./source/factory/conic-gradient.js ./source/factory/crescent.js ./source/factory/element.js ./source/factory/emitter.js ./source/factory/enhanced-label.js ./source/factory/filter.js ./source/factory/gradient.js ./source/factory/grid.js ./source/factory/group.js ./source/factory/label.js ./source/factory/line-spiral.js ./source/factory/line.js ./source/factory/loom.js ./source/factory/mesh.js ./source/factory/net.js ./source/factory/oval.js ./source/factory/particle-force.js ./source/factory/particle-spring.js ./source/factory/particle-world.js ./source/factory/particle.js ./source/factory/pattern.js ./source/factory/picture.js ./source/factory/polygon.js ./source/factory/polyline.js ./source/factory/quadratic.js ./source/factory/radial-gradient.js ./source/factory/rectangle.js ./source/factory/render-animation.js ./source/factory/shape.js ./source/factory/spiral.js ./source/factory/stack.js ./source/factory/star.js ./source/factory/tetragon.js ./source/factory/ticker.js ./source/factory/tracer.js ./source/factory/tween.js ./source/factory/unstacked-element.js ./source/factory/wheel.js ./source/helper/array-pool.js ./source/helper/color-engine.js ./source/helper/document-root-elements.js ./source/helper/filter-engine-bluenoise-data.js ./source/helper/filter-engine.js ./source/helper/random-seed.js ./source/helper/shape-path-calculation.js ./source/helper/shared-vars.js ./source/helper/system-flags.js ./source/helper/utilities.js ./source/helper/workstore.js ./source/mixin/anchor.js ./source/mixin/asset-advanced-functionality.js ./source/mixin/asset-consumer.js ./source/mixin/asset.js ./source/mixin/base.js ./source/mixin/button.js ./source/mixin/cascade.js ./source/mixin/cell-key-functions.js ./source/mixin/delta.js ./source/mixin/display-shape.js ./source/mixin/dom.js ./source/mixin/entity.js ./source/mixin/filter.js ./source/mixin/hidden-dom-elements.js ./source/mixin/mimic.js ./source/mixin/path.js ./source/mixin/pattern.js ./source/mixin/pivot.js ./source/mixin/position.js ./source/mixin/shape-basic.js ./source/mixin/shape-curve.js ./source/mixin/styles.js ./source/mixin/text.js ./source/mixin/tween.js ./source/scrawl.js ./source/untracked-factory/cell-fragment.js ./source/untracked-factory/coordinate.js ./source/untracked-factory/drag-zone.js ./source/untracked-factory/keyboard-zone.js ./source/untracked-factory/observe-update.js ./source/untracked-factory/palette.js ./source/untracked-factory/particle-history.js ./source/untracked-factory/quaternion.js ./source/untracked-factory/state.js ./source/untracked-factory/text-style.js ./source/untracked-factory/vector.js
  • §

    Anchor mixin

    The anchor object holds all the data and functionality required to turn an artefact into an HTML clickable link - <a> element - to external URLs. This mixin adds functionality to artefacts for creating and managing anchor objects.

    Each artifact can have a maximum of one anchor object associated with it.

  • §

    Imports

    import { mergeOver, Ωempty } from '../helper/utilities.js';
    
    import { makeAnchor } from '../factory/anchor.js';
  • §

    Shared constants

    import { BLUR_ACTION, CLICK_ACTION, DESCRIPTION, DISABLED, DOWNLOAD, FOCUS_ACTION, HREF, HREFLANG, NAME, PING, REFERRERPOLICY, REL, TAB_ORDER, TARGET } from '../helper/shared-vars.js';
  • §

    Local constants

    const ANCHORTYPE = 'anchorType';
  • §

    Export function

    export default function (P = Ωempty) {
  • §

    Shared attributes

        const defaultAttributes = {
  • §

    anchor - a handle to the anchor object. When creating or setting an artefact this can be supplied in the argument object as a Javascript object containing the data required to create the anchor.

            anchor: null,
        };
        P.defs = mergeOver(P.defs, defaultAttributes);
  • §

    Packet management

    No additional packet functionality required

  • §

    Clone management

    No additional clone functionality required

  • §

    Kill management

    demolishAnchor - Note that a handlePacketAnchor function is also defined in the position mixin, to manage the surrounding kill functionality.

        P.demolishAnchor = function () {
    
            if (this.anchor) this.anchor.demolish();
        };
  • §

    Get, Set, deltaSet

        const G = P.getters,
            S = P.setters;
  • §

    The following attributes (which largely map to HTML anchor attributes) can be included in the argument object passed to the artefact’s factory and set functions, or passed as a String to the get function:

    artefact.anchorBlurAction        ~~>  anchor.blurAction      boolean - default: true
    artefact.anchorClickAction       ~~>  anchor.clickAction     function - returns onclick string
    artefact.anchorDescription       ~~>  anchor.description
    artefact.anchorDisabled          ~~>  anchor.disabled        boolean: - default: false
    artefact.anchorDownload          ~~>  anchor.download
    artefact.anchorFocusAction       ~~>  anchor.focusAction     boolean - default: true
    artefact.anchorHref              ~~>  anchor.href
    artefact.anchorHreflang          ~~>  anchor.hreflang
    artefact.anchorName              ~~>  anchor.name
    artefact.anchorPing              ~~>  anchor.ping
    artefact.anchorReferrerPolicy    ~~>  anchor.referrerPolicy
    artefact.anchorRel               ~~>  anchor.rel
    artefact.anchorTabOrder          ~~>  anchor.tabOrder         number - default: 0
    artefact.anchorTarget            ~~>  anchor.target
    artefact.anchorType              ~~>  anchor.anchorType
    
  • §

    anchorName

        G.anchorName = function () { return this.anchorGetHelper(NAME); };
  • §

    anchorDescription

        G.anchorDescription = function () { return this.anchorGetHelper(DESCRIPTION); };
        S.anchorDescription = function (item) { this.anchorSetHelper(DESCRIPTION, item); };
  • §

    anchorType

        G.anchorType = function () { return this.anchorGetHelper(ANCHORTYPE); };
        S.anchorType = function (item) { this.anchorSetHelper(ANCHORTYPE, item); };
  • §

    anchorTarget

        G.anchorTarget = function () { return this.anchorGetHelper(TARGET); };
        S.anchorTarget = function (item) { this.anchorSetHelper(TARGET, item); };
  • §

    anchorTabOrder

        G.anchorTabOrder = function () { return this.anchorGetHelper(TAB_ORDER); };
        S.anchorTabOrder = function (item) { this.anchorSetHelper(TAB_ORDER, item); };
  • §

    anchorDisabled

        G.anchorDisabled = function () { return this.anchorGetHelper(DISABLED); };
        S.anchorDisabled = function (item) { this.anchorSetHelper(DISABLED, item); };
  • §

    anchorRel

        G.anchorRel = function () { return this.anchorGetHelper(REL); };
        S.anchorRel = function (item) { this.anchorSetHelper(REL, item); };
  • §

    anchorReferrerPolicy

        G.anchorReferrerPolicy = function () { return this.anchorGetHelper(REFERRERPOLICY); };
        S.anchorReferrerPolicy = function (item) { this.anchorSetHelper(REFERRERPOLICY, item); };
  • §

    anchorPing

        G.anchorPing = function () { return this.anchorGetHelper(PING); };
        S.anchorPing = function (item) { this.anchorSetHelper(PING, item); };
  • §

    anchorHreflang

        G.anchorHreflang = function () { return this.anchorGetHelper(HREFLANG); };
        S.anchorHreflang = function (item) { this.anchorSetHelper(HREFLANG, item); };
  • §

    anchorHref

        G.anchorHref = function () { return this.anchorGetHelper(HREF); };
        S.anchorHref = function (item) { this.anchorSetHelper(HREF, item); };
  • §

    anchorDownload

        G.anchorDownload = function () { return this.anchorGetHelper(DOWNLOAD); };
        S.anchorDownload = function (item) { this.anchorSetHelper(DOWNLOAD, item); };
  • §

    anchorFocusAction

        S.anchorFocusAction = function (item) { this.anchorSetHelper(FOCUS_ACTION, item); };
  • §

    anchorBlurAction

        S.anchorBlurAction = function (item) { this.anchorSetHelper(BLUR_ACTION, item); };
  • §

    anchorClickAction

        S.anchorClickAction = function (item) { this.anchorSetHelper(CLICK_ACTION, item); };
  • §

    The artefact’s factory and set functions’ argument object can include a single anchor attribute, whose value should be an object containing anchor key:value pairs

    artefact.set({
    
        anchor: { ... },
    });
    
        S.anchor = function (items) {
    
            if (!this.anchor) this.buildAnchor(items);
            else this.anchor.set(items);
        };
  • §

    Internal helper functions

        P.anchorGetHelper = function(key) {
    
            if (this.anchor) return this.anchor.get(key);
            return null;
        }
    
        P.anchorSetHelper = function(key, val) {
    
            if (!this.anchor) this.buildAnchor({ [key]: val });
            if (this.anchor) this.anchor.set({ [key]: val });
        }
  • §

    Prototype functions

  • §

    The buildAnchor function triggers the (re)build of the <a> element and adds it to the DOM

        P.buildAnchor = function (items = {}) {
    
            if (this.anchor) this.anchor.demolish();
    
            if (!items.anchorName) items.anchorName = `${this.name}-anchor`;
            if (!items.description) items.description = `Anchor link for ${this.name} ${this.type}`;
    
            items.host = this;
            items.controller = this.getCanvasWrapper();
            items.hold = this.getCanvasNavElement();
    
            this.anchor = makeAnchor(items);
        };
  • §

    rebuildAnchor - triggers the Anchor object’s build function

        P.rebuildAnchor = function () {
    
            if (this.anchor) this.anchor.rebuild();
        };
  • §

    clickAnchor - function to pass a user click (or whatever event has been set up) on the artefact through to the anchor object, for action.

        P.clickAnchor = function () {
    
            if (this.anchor) this.anchor.click();
        };
    }