/*! sign-machine V2 | ©Nick Freear, 2017-05-21 | License: MIT. */ window.jQuery(function ($) { 'use strict'; var defaults = { id: 'id-sign-machine', timer: 1400, // Milli-seconds. lang_sign: 'sgn-GB', // OR: 'bfi' lang: 'en', label: 'British Sign Language finger spelling.', initial: 'Hello!', ignore_re: /[^a-zA-Z]/g, form: '
', about: 'sign-machine', graphic: '', space: '', script: 'sign-machine.js', dev: false, css_url: '/../../style/sign-machine.css', css_link: '', less_url: '/../../style/sign-machine.less', less_link: '', less_js: '' }; var $config = $('div, script').filter('[ data-sign-machine ]').first(); var options = $config.data(); var SM = $.extend(defaults, options ? options.signMachine : { }); var W = window; var C = W.console; C.warn('SM config: ', $config.data()); // Prepare for 'unpkg' CDN hosting. var $script = $('script').filter('[ src *= "' + SM.script + '" ], [ src *= "sign-machine@" ]').first(); SM.script_url = $script.attr('src'); addStylesheet(); var $CTR = $('#' + SM.id); $CTR .html(SM.form.replace(/%s/, SM.initial) + SM.about) .addClass('sign-machine-v2-js') .attr({ role: 'alert', 'data-sl': SM.lang_sign, 'aria-label': SM.label }); var $form = $CTR.find('form'); var $input = $CTR.find('input[ name = sign ]'); var $inner = $CTR.find('p'); $form.on('submit', function (ev) { ev.preventDefault(); var phrase = $input.val(); signThis(phrase); }); parseQuery(W.location.search); C.warn('SM: sign-machine-v2: ', SM); // ---------------------------------------- var interval; function signThis (phrase) { var ignorecount = (phrase.match(SM.ignore_re) || [ ]).length; var letters = SM.letters = phrase.replace(SM.ignore_re, ' ').split(''); var idx = 0; W.clearInterval(interval); interval = W.setInterval(function () { var letter = letters[ idx ]; var graphic; if (idx > letters.length || !letter) { return W.clearInterval(interval); } if (letter === ' ') { graphic = SM.space; } else { graphic = SM.graphic.replace(/%u/, SM.script_url).replace(/%s/g, letter.toLowerCase()); } $inner.html(graphic); C.warn('SM letter: "%s", %s', letter, graphic); idx++; }, SM.timer); C.warn('SM: request: ', letters, letters.length, ignorecount); } function parseQuery (params) { var mparam = params.match(/[&?]sign=([^&]+)/); if (mparam) { $input.val(W.decodeURIComponent(mparam[ 1 ])); $form.trigger('submit'); } } function addStylesheet () { var $head = $('head'); if (SM.dev) { $head .append(SM.less_js) .append(SM.less_link.replace(/%s/, SM.script_url + SM.less_url)); } else { // Prepare for 'unpkg' CDN hosting. if (/@\d\.\d\.\d(-[\w.]+)(#|_.js|$)/.test(SM.script_url)) { C.warn('SM: npm @version found'); SM.css_url = SM.css_url.replace('/../..', ''); SM.script_url = SM.script_url.replace(/(#.*|_\.js)/, ''); } $head.append(SM.css_link.replace(/%s/, SM.script_url + SM.css_url)); } } });