All files / src options.ts

100% Statements 14/14
100% Branches 0/0
100% Functions 0/0
100% Lines 14/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83        1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x                                 1x                                                                                               1x 1x    
import { OptionsTemplate, OptionsTemplateValue, OptionsAndOptionsTemplateValue, OptionsAndOptionsTemplate, Func } from "core/typings";
import { optionsTemplateTypes as oTypes, transform } from "core/options";
import { OverlayScrollbars } from "typings";
 
const classNameAllowedValues: OptionsTemplateValue<string | null> = [oTypes.string, oTypes.null];
const numberAllowedValues: OptionsTemplateValue<number> = oTypes.number;
const booleanNullAllowedValues: OptionsTemplateValue<boolean | null> = [oTypes.boolean, oTypes.null];
const stringArrayNullAllowedValues: OptionsTemplateValue<string | Array<string> | null> = [oTypes.string, oTypes.array, oTypes.null];
const booleanTrueTemplate: OptionsAndOptionsTemplateValue<boolean> = [true, oTypes.boolean];
const booleanFalseTemplate: OptionsAndOptionsTemplateValue<boolean> = [false, oTypes.boolean];
const callbackTemplate: OptionsAndOptionsTemplateValue<Func | null> = [null, [oTypes.function, oTypes.null]];
const resizeAllowedValues: OptionsTemplateValue<OverlayScrollbars.ResizeBehavior> = 'none both horizontal vertical';
const overflowBehaviorAllowedValues: OptionsTemplateValue<OverlayScrollbars.OverflowBehavior> = 'visible-hidden visible-scroll scroll hidden';
const scrollbarsVisibilityAllowedValues: OptionsTemplateValue<OverlayScrollbars.VisibilityBehavior> = 'visible hidden auto';
const scrollbarsAutoHideAllowedValues: OptionsTemplateValue<OverlayScrollbars.AutoHideBehavior> = 'never scroll leavemove';
 
/**
 * A object which serves as "default options object" and "options template object".
 * I combined these two into one object so that I don't have to define two separate big objects, instead I define one big object.
 * 
 * The property value is a tuple:
 * the first value is the default value
 * the second value is the template value
 * Example:
 * {
 *  a: ['default', [Type.string, Type.null]],
 *  b: [250, Type.number]
 * }
 * Property "a" has a default value of 'default' and it can be a string or null
 * Property "b" has a default value of 250 and it can be number
 */
const defaultOptionsWithTemplate: OptionsAndOptionsTemplate<Required<OverlayScrollbars.Options>> = {
    className: ['os-theme-dark', classNameAllowedValues],                   //null || string
    resize: ['none', resizeAllowedValues],                                  //none || both  || horizontal || vertical || n || b || h || v
    sizeAutoCapable: booleanTrueTemplate,                                   //true || false
    clipAlways: booleanTrueTemplate,                                        //true || false
    normalizeRTL: booleanTrueTemplate,                                      //true || false
    paddingAbsolute: booleanFalseTemplate,                                  //true || false
    autoUpdate: [null, booleanNullAllowedValues],                           //true || false || null
    autoUpdateInterval: [33, numberAllowedValues],                          //number
    updateOnLoad: [['img'], stringArrayNullAllowedValues],                  //string || array || null
    nativeScrollbarsOverlaid: {
        showNativeScrollbars: booleanFalseTemplate,                         //true || false
        initialize: booleanFalseTemplate                                    //true || false
    },
    overflowBehavior: {
        x: ['scroll', overflowBehaviorAllowedValues],                       //visible-hidden  || visible-scroll || hidden || scroll || v-h || v-s || h || s
        y: ['scroll', overflowBehaviorAllowedValues]                        //visible-hidden  || visible-scroll || hidden || scroll || v-h || v-s || h || s
    },
    scrollbars: {
        visibility: ['auto', scrollbarsVisibilityAllowedValues],            //visible || hidden || auto || v || h || a
        autoHide: ['never', scrollbarsAutoHideAllowedValues],               //never || scroll || leave || move || n || s || l || m
        autoHideDelay: [800, numberAllowedValues],                          //number
        dragScrolling: booleanTrueTemplate,                                 //true || false
        clickScrolling: booleanFalseTemplate,                               //true || false
        touchSupport: booleanTrueTemplate,                                  //true || false
        snapHandle: booleanFalseTemplate                                    //true || false
    },
    textarea: {
        dynWidth: booleanFalseTemplate,                                     //true || false
        dynHeight: booleanFalseTemplate,                                    //true || false
        inheritedAttrs: [['style', 'class'], stringArrayNullAllowedValues], //string || array || null
    },
    callbacks: {
        onInitialized: callbackTemplate,                                    //null || function
        onInitializationWithdrawn: callbackTemplate,                        //null || function
        onDestroyed: callbackTemplate,                                      //null || function
        onScrollStart: callbackTemplate,                                    //null || function
        onScroll: callbackTemplate,                                         //null || function
        onScrollStop: callbackTemplate,                                     //null || function
        onOverflowChanged: callbackTemplate,                                //null || function
        onOverflowAmountChanged: callbackTemplate,                          //null || function
        onDirectionChanged: callbackTemplate,                               //null || function
        onContentSizeChanged: callbackTemplate,                             //null || function
        onHostSizeChanged: callbackTemplate,                                //null || function
        onUpdated: callbackTemplate                                         //null || function
    }
}
 
export const optionsTemplate: OptionsTemplate<Required<OverlayScrollbars.Options>> = transform(defaultOptionsWithTemplate, true);
export const defaultOptions: OverlayScrollbars.Options = transform(defaultOptionsWithTemplate);