PHP Classes

File: assets/htmlwidgets.js

Recommend this page to a friend!
  Classes of Nikos M.  >  PHP Widget Library for HTML Pages  >  assets/htmlwidgets.js  >  Download  
File: assets/htmlwidgets.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Widget Library for HTML Pages
Generate HTML and JavaScript to show page widgets
Author: By
Last change: v.2.3.0

* enable adding handlers to restore dynamically structured elements
back to default state and remove any event handlers
in case they are re-rendered on same page
* add modelview re-render test example
* minor changes and corrections
Date: 3 months ago
Size: 6,378 bytes
 

Contents

Class file image Download
/**
*  HtmlWidget, client-side utilities
*
*  @version: 2.3.0
*  https://github.com/foo123/HtmlWidget
*
**/
!function(root, name, factory) {
"use strict";
if (('object' === typeof module) && module.exports)
{
    // CommonJS module
    module.exports = factory();
}
else
{
    root[name] = factory();
    if (('function' === typeof define) && define.amd)
    {
        // AMD. Register as an anonymous module.
        define(function(req) {return root[name];});
    }
}
}('undefined' !== typeof self ? self : this, 'htmlwidgets', function() {
"use strict";

var trim_re = /^\s+|\s+$/g,
    trim = String.prototype.trim
        ? function(s) {return s.trim();}
        : function(s) {return s.replace(trim_re, '');}
    ,
    HASDOC = ('undefined' !== typeof window) && !!window.document,
    hasEventListeners = HASDOC && !!window.addEventListener,
    document = HASDOC ? window.document : null,
    eventOptionsSupported = null,
    lastTime = 0, vendors = ['ms', 'moz', 'webkit', 'o'],
    handlers = {}, noop = function() {}
;

/*if (HASDOC)
{
    for(var x = 0; !window.requestAnimationFrame && x < vendors.length; ++x)
    {
        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
    }
    if (!window.requestAnimationFrame)
    {
        window.requestAnimationFrame = function(callback, element) {
            var currTime = new Date().getTime(),
                timeToCall = Math.max(0, 16 - (currTime - lastTime));
                id = window.setTimeout(function() {
                    callback(currTime + timeToCall);
                }, timeToCall)
            ;
            lastTime = currTime + timeToCall;
            return id;
        };
        window.cancelAnimationFrame = function(id) {
            clearTimeout(id);
        };
    }
}*/

function hasEventOptions()
{

    var passiveSupported = false, options = {};
    if (hasEventListeners)
    {
        try {
            Object.defineProperty(options, 'passive', {
                get: function(){
                    passiveSupported = true;
                    return false;
                }
            });
            window.addEventListener('test', null, options);
            window.removeEventListener('test', null, options);
        } catch(e) {
            passiveSupported = false;
        }
    }
    return passiveSupported;
}
function addEvent(target, event, handler, options)
{
    if (null == eventOptionsSupported) eventOptionsSupported = hasEventOptions();
    if (!hasEventListeners) target.attachEvent('on' + event, handler);
    else target.addEventListener(event, handler, eventOptionsSupported ? options : ('object' === typeof(options) ? !!options.capture : !!options));
    return target;
}
function removeEvent(target, event, handler, options)
{
    if (null == eventOptionsSupported) eventOptionsSupported = hasEventOptions();
    if (!hasEventListeners) target.detachEvent('on' + event, handler);
    else target.removeEventListener(event, handler, eventOptionsSupported ? options : ('object' === typeof(options) ? !!options.capture : !!options));
    return target;
}
function fireEvent(target, event, data)
{
    var evt, doc;
    if (target)
    {
        doc = target.ownerDocument || document;
        if (doc.createEvent)
        {
            evt = doc.createEvent('HTMLEvents');
            evt.initEvent(event, true, false);
            if (null != data) evt.data = data;
            target.dispatchEvent(evt);
        }
        else if (doc.createEventObject)
        {
            evt = doc.createEventObject();
            if (null != data) evt.data = data;
            target.fireEvent('on' + event, evt);
        }
    }
    return target;
}

function addHandler(el, type, handler)
{
    if (el && el.id)
    {
        var id = 'hw_'+String(el.id);
        if (!handlers[id]) handlers[id] = {};
        handlers[id][String(type || '')] = handler;
    }
}
function removeHandler(el)
{
    if (el && el.id)
    {
        var id = 'hw_'+String(el.id);
        if (handlers[id]) delete handlers[id];
    }
}
function getHandler(el, type, _default)
{
    if (el && el.id)
    {
        var id = 'hw_'+String(el.id);
        if (handlers[id]) return handlers[id][String(type || '')] || _default;
    }
    return _default;
}

function hasClass(el, className)
{
    return el ? (el.classList
        ? el.classList.contains(className)
        : -1 !== (' ' + el.className + ' ').indexOf(' ' + className + ' ')) : false
    ;
}
function addClass(el, className)
{
    if (el && !hasClass(el, className))
    {
        if (el.classList) el.classList.add(className);
        else el.className = '' === el.className ? className : el.className + ' ' + className;
    }
    return el;
}
function removeClass(el, className)
{
    if (el)
    {
        if (el.classList) el.classList.remove(className);
        else el.className = trim((' ' + el.className + ' ').replace(' ' + className + ' ', ' '));
    }
    return el;
}

function resetInput(inputEl, triggerEvent)
{
    var parent = inputEl.parentNode, next = inputEl.nextSibling, formEl = document.createElement('form');
    formEl.appendChild(inputEl);
    formEl.reset();
    if (next) parent.insertBefore(inputEl, next);
    else parent.appendChild(inputEl);
    formEl = null;
    if (triggerEvent) fireEvent(inputEl, triggerEvent);
    return inputEl;
}

function throttle(f, limit)
{
    var inThrottle = false;
    return function() {
        var context = this, args = arguments;
        if (!inThrottle)
        {
            f.apply(context, args);
            inThrottle = true;
            setTimeout(function(){inThrottle = false;}, limit);
        }
    };
}
function debounce(f, delay)
{
    var timer = null;
    return function() {
        var context = this, args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function(){f.apply(context, args);}, delay);
    };
}

return {
    noop: noop,
    addEvent: addEvent,
    removeEvent: removeEvent,
    fireEvent: fireEvent,
    addHandler: addHandler,
    removeHandler: removeHandler,
    getHandler: getHandler,
    hasClass: hasClass,
    addClass: addClass,
    removeClass: removeClass,
    resetInput: resetInput,
    throttle: throttle,
    debounce: debounce
};
});
For more information send a message to info at phpclasses dot org.