Subversion Repositories oidplus

Rev

Rev 637 | Rev 759 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 637 Rev 679
Line 2... Line 2...
2
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
2
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
3
 * Licensed under the LGPL or a commercial license.
3
 * Licensed under the LGPL or a commercial license.
4
 * For LGPL see License.txt in the project root for license information.
4
 * For LGPL see License.txt in the project root for license information.
5
 * For commercial licenses see https://www.tiny.cloud/
5
 * For commercial licenses see https://www.tiny.cloud/
6
 *
6
 *
7
 * Version: 5.9.2 (2021-09-08)
7
 * Version: 5.10.2 (2021-11-17)
8
 */
8
 */
9
(function () {
9
(function () {
10
    'use strict';
10
    'use strict';
11
 
11
 
12
    var Cell = function (initial) {
12
    var Cell = function (initial) {
Line 273... Line 273...
273
          r.push(x);
273
          r.push(x);
274
        }
274
        }
275
      }
275
      }
276
      return r;
276
      return r;
277
    };
277
    };
-
 
278
    var findUntil = function (xs, pred, until) {
-
 
279
      for (var i = 0, len = xs.length; i < len; i++) {
-
 
280
        var x = xs[i];
-
 
281
        if (pred(x, i)) {
-
 
282
          return Optional.some(x);
-
 
283
        } else if (until(x, i)) {
-
 
284
          break;
-
 
285
        }
-
 
286
      }
-
 
287
      return Optional.none();
-
 
288
    };
-
 
289
    var find$1 = function (xs, pred) {
-
 
290
      return findUntil(xs, pred, never);
-
 
291
    };
278
    var flatten = function (xs) {
292
    var flatten = function (xs) {
279
      var r = [];
293
      var r = [];
280
      for (var i = 0, len = xs.length; i < len; ++i) {
294
      for (var i = 0, len = xs.length; i < len; ++i) {
281
        if (!isArray(xs[i])) {
295
        if (!isArray(xs[i])) {
282
          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
296
          throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
Line 292... Line 306...
292
      return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();
306
      return i >= 0 && i < xs.length ? Optional.some(xs[i]) : Optional.none();
293
    };
307
    };
294
    var head = function (xs) {
308
    var head = function (xs) {
295
      return get$4(xs, 0);
309
      return get$4(xs, 0);
296
    };
310
    };
-
 
311
    var findMap = function (arr, f) {
-
 
312
      for (var i = 0; i < arr.length; i++) {
-
 
313
        var r = f(arr[i], i);
-
 
314
        if (r.isSome()) {
-
 
315
          return r;
-
 
316
        }
-
 
317
      }
-
 
318
      return Optional.none();
-
 
319
    };
297
 
320
 
298
    var keys = Object.keys;
321
    var keys = Object.keys;
299
    var each = function (obj, f) {
322
    var each = function (obj, f) {
300
      var props = keys(obj);
323
      var props = keys(obj);
301
      for (var k = 0, len = props.length; k < len; k++) {
324
      for (var k = 0, len = props.length; k < len; k++) {
Line 303... Line 326...
303
        var x = obj[i];
326
        var x = obj[i];
304
        f(x, i);
327
        f(x, i);
305
      }
328
      }
306
    };
329
    };
307
 
330
 
-
 
331
    var contains = function (str, substr) {
-
 
332
      return str.indexOf(substr) !== -1;
-
 
333
    };
-
 
334
 
308
    var isSupported$1 = function (dom) {
335
    var isSupported$1 = function (dom) {
309
      return dom.style !== undefined && isFunction(dom.style.getPropertyValue);
336
      return dom.style !== undefined && isFunction(dom.style.getPropertyValue);
310
    };
337
    };
311
 
338
 
312
    var fromHtml = function (html, scope) {
339
    var fromHtml = function (html, scope) {
Line 364... Line 391...
364
    var isElement = isType(ELEMENT);
391
    var isElement = isType(ELEMENT);
365
    var isText = isType(TEXT);
392
    var isText = isType(TEXT);
366
    var isDocument = isType(DOCUMENT);
393
    var isDocument = isType(DOCUMENT);
367
    var isDocumentFragment = isType(DOCUMENT_FRAGMENT);
394
    var isDocumentFragment = isType(DOCUMENT_FRAGMENT);
368
 
395
 
-
 
396
    var cached = function (f) {
-
 
397
      var called = false;
-
 
398
      var r;
-
 
399
      return function () {
-
 
400
        var args = [];
-
 
401
        for (var _i = 0; _i < arguments.length; _i++) {
-
 
402
          args[_i] = arguments[_i];
-
 
403
        }
-
 
404
        if (!called) {
-
 
405
          called = true;
-
 
406
          r = f.apply(null, args);
-
 
407
        }
-
 
408
        return r;
-
 
409
      };
-
 
410
    };
-
 
411
 
-
 
412
    var DeviceType = function (os, browser, userAgent, mediaMatch) {
-
 
413
      var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
-
 
414
      var isiPhone = os.isiOS() && !isiPad;
-
 
415
      var isMobile = os.isiOS() || os.isAndroid();
-
 
416
      var isTouch = isMobile || mediaMatch('(pointer:coarse)');
-
 
417
      var isTablet = isiPad || !isiPhone && isMobile && mediaMatch('(min-device-width:768px)');
-
 
418
      var isPhone = isiPhone || isMobile && !isTablet;
-
 
419
      var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
-
 
420
      var isDesktop = !isPhone && !isTablet && !iOSwebview;
-
 
421
      return {
-
 
422
        isiPad: constant(isiPad),
-
 
423
        isiPhone: constant(isiPhone),
-
 
424
        isTablet: constant(isTablet),
-
 
425
        isPhone: constant(isPhone),
-
 
426
        isTouch: constant(isTouch),
-
 
427
        isAndroid: os.isAndroid,
-
 
428
        isiOS: os.isiOS,
-
 
429
        isWebView: constant(iOSwebview),
-
 
430
        isDesktop: constant(isDesktop)
-
 
431
      };
-
 
432
    };
-
 
433
 
-
 
434
    var firstMatch = function (regexes, s) {
-
 
435
      for (var i = 0; i < regexes.length; i++) {
-
 
436
        var x = regexes[i];
-
 
437
        if (x.test(s)) {
-
 
438
          return x;
-
 
439
        }
-
 
440
      }
-
 
441
      return undefined;
-
 
442
    };
-
 
443
    var find = function (regexes, agent) {
-
 
444
      var r = firstMatch(regexes, agent);
-
 
445
      if (!r) {
-
 
446
        return {
-
 
447
          major: 0,
-
 
448
          minor: 0
-
 
449
        };
-
 
450
      }
-
 
451
      var group = function (i) {
-
 
452
        return Number(agent.replace(r, '$' + i));
-
 
453
      };
-
 
454
      return nu$2(group(1), group(2));
-
 
455
    };
-
 
456
    var detect$3 = function (versionRegexes, agent) {
-
 
457
      var cleanedAgent = String(agent).toLowerCase();
-
 
458
      if (versionRegexes.length === 0) {
-
 
459
        return unknown$2();
-
 
460
      }
-
 
461
      return find(versionRegexes, cleanedAgent);
-
 
462
    };
-
 
463
    var unknown$2 = function () {
-
 
464
      return nu$2(0, 0);
-
 
465
    };
-
 
466
    var nu$2 = function (major, minor) {
-
 
467
      return {
-
 
468
        major: major,
-
 
469
        minor: minor
-
 
470
      };
-
 
471
    };
-
 
472
    var Version = {
-
 
473
      nu: nu$2,
-
 
474
      detect: detect$3,
-
 
475
      unknown: unknown$2
-
 
476
    };
-
 
477
 
-
 
478
    var detectBrowser$1 = function (browsers, userAgentData) {
-
 
479
      return findMap(userAgentData.brands, function (uaBrand) {
-
 
480
        var lcBrand = uaBrand.brand.toLowerCase();
-
 
481
        return find$1(browsers, function (browser) {
-
 
482
          var _a;
-
 
483
          return lcBrand === ((_a = browser.brand) === null || _a === void 0 ? void 0 : _a.toLowerCase());
-
 
484
        }).map(function (info) {
-
 
485
          return {
-
 
486
            current: info.name,
-
 
487
            version: Version.nu(parseInt(uaBrand.version, 10), 0)
-
 
488
          };
-
 
489
        });
-
 
490
      });
-
 
491
    };
-
 
492
 
-
 
493
    var detect$2 = function (candidates, userAgent) {
-
 
494
      var agent = String(userAgent).toLowerCase();
-
 
495
      return find$1(candidates, function (candidate) {
-
 
496
        return candidate.search(agent);
-
 
497
      });
-
 
498
    };
-
 
499
    var detectBrowser = function (browsers, userAgent) {
-
 
500
      return detect$2(browsers, userAgent).map(function (browser) {
-
 
501
        var version = Version.detect(browser.versionRegexes, userAgent);
-
 
502
        return {
-
 
503
          current: browser.name,
-
 
504
          version: version
-
 
505
        };
-
 
506
      });
-
 
507
    };
-
 
508
    var detectOs = function (oses, userAgent) {
-
 
509
      return detect$2(oses, userAgent).map(function (os) {
-
 
510
        var version = Version.detect(os.versionRegexes, userAgent);
-
 
511
        return {
-
 
512
          current: os.name,
-
 
513
          version: version
-
 
514
        };
-
 
515
      });
-
 
516
    };
-
 
517
 
-
 
518
    var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
-
 
519
    var checkContains = function (target) {
-
 
520
      return function (uastring) {
-
 
521
        return contains(uastring, target);
-
 
522
      };
-
 
523
    };
-
 
524
    var browsers = [
-
 
525
      {
-
 
526
        name: 'Edge',
-
 
527
        versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
-
 
528
        search: function (uastring) {
-
 
529
          return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');
-
 
530
        }
-
 
531
      },
-
 
532
      {
-
 
533
        name: 'Chrome',
-
 
534
        brand: 'Chromium',
-
 
535
        versionRegexes: [
-
 
536
          /.*?chrome\/([0-9]+)\.([0-9]+).*/,
-
 
537
          normalVersionRegex
-
 
538
        ],
-
 
539
        search: function (uastring) {
-
 
540
          return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');
-
 
541
        }
-
 
542
      },
-
 
543
      {
-
 
544
        name: 'IE',
-
 
545
        versionRegexes: [
-
 
546
          /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
-
 
547
          /.*?rv:([0-9]+)\.([0-9]+).*/
-
 
548
        ],
-
 
549
        search: function (uastring) {
-
 
550
          return contains(uastring, 'msie') || contains(uastring, 'trident');
-
 
551
        }
-
 
552
      },
-
 
553
      {
-
 
554
        name: 'Opera',
-
 
555
        versionRegexes: [
-
 
556
          normalVersionRegex,
-
 
557
          /.*?opera\/([0-9]+)\.([0-9]+).*/
-
 
558
        ],
-
 
559
        search: checkContains('opera')
-
 
560
      },
-
 
561
      {
-
 
562
        name: 'Firefox',
-
 
563
        versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
-
 
564
        search: checkContains('firefox')
-
 
565
      },
-
 
566
      {
-
 
567
        name: 'Safari',
-
 
568
        versionRegexes: [
-
 
569
          normalVersionRegex,
-
 
570
          /.*?cpu os ([0-9]+)_([0-9]+).*/
-
 
571
        ],
-
 
572
        search: function (uastring) {
-
 
573
          return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');
-
 
574
        }
-
 
575
      }
-
 
576
    ];
-
 
577
    var oses = [
-
 
578
      {
-
 
579
        name: 'Windows',
-
 
580
        search: checkContains('win'),
-
 
581
        versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
-
 
582
      },
-
 
583
      {
-
 
584
        name: 'iOS',
-
 
585
        search: function (uastring) {
-
 
586
          return contains(uastring, 'iphone') || contains(uastring, 'ipad');
-
 
587
        },
-
 
588
        versionRegexes: [
-
 
589
          /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
-
 
590
          /.*cpu os ([0-9]+)_([0-9]+).*/,
-
 
591
          /.*cpu iphone os ([0-9]+)_([0-9]+).*/
-
 
592
        ]
-
 
593
      },
-
 
594
      {
-
 
595
        name: 'Android',
-
 
596
        search: checkContains('android'),
-
 
597
        versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
-
 
598
      },
-
 
599
      {
-
 
600
        name: 'OSX',
-
 
601
        search: checkContains('mac os x'),
-
 
602
        versionRegexes: [/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]
-
 
603
      },
-
 
604
      {
-
 
605
        name: 'Linux',
-
 
606
        search: checkContains('linux'),
-
 
607
        versionRegexes: []
-
 
608
      },
-
 
609
      {
-
 
610
        name: 'Solaris',
-
 
611
        search: checkContains('sunos'),
-
 
612
        versionRegexes: []
-
 
613
      },
-
 
614
      {
-
 
615
        name: 'FreeBSD',
-
 
616
        search: checkContains('freebsd'),
-
 
617
        versionRegexes: []
-
 
618
      },
-
 
619
      {
-
 
620
        name: 'ChromeOS',
-
 
621
        search: checkContains('cros'),
-
 
622
        versionRegexes: [/.*?chrome\/([0-9]+)\.([0-9]+).*/]
-
 
623
      }
-
 
624
    ];
-
 
625
    var PlatformInfo = {
-
 
626
      browsers: constant(browsers),
-
 
627
      oses: constant(oses)
-
 
628
    };
-
 
629
 
-
 
630
    var edge = 'Edge';
-
 
631
    var chrome = 'Chrome';
-
 
632
    var ie = 'IE';
-
 
633
    var opera = 'Opera';
-
 
634
    var firefox = 'Firefox';
-
 
635
    var safari = 'Safari';
-
 
636
    var unknown$1 = function () {
-
 
637
      return nu$1({
-
 
638
        current: undefined,
-
 
639
        version: Version.unknown()
-
 
640
      });
-
 
641
    };
-
 
642
    var nu$1 = function (info) {
-
 
643
      var current = info.current;
-
 
644
      var version = info.version;
-
 
645
      var isBrowser = function (name) {
-
 
646
        return function () {
-
 
647
          return current === name;
-
 
648
        };
-
 
649
      };
-
 
650
      return {
-
 
651
        current: current,
-
 
652
        version: version,
-
 
653
        isEdge: isBrowser(edge),
-
 
654
        isChrome: isBrowser(chrome),
-
 
655
        isIE: isBrowser(ie),
-
 
656
        isOpera: isBrowser(opera),
-
 
657
        isFirefox: isBrowser(firefox),
-
 
658
        isSafari: isBrowser(safari)
-
 
659
      };
-
 
660
    };
-
 
661
    var Browser = {
-
 
662
      unknown: unknown$1,
-
 
663
      nu: nu$1,
-
 
664
      edge: constant(edge),
-
 
665
      chrome: constant(chrome),
-
 
666
      ie: constant(ie),
-
 
667
      opera: constant(opera),
-
 
668
      firefox: constant(firefox),
-
 
669
      safari: constant(safari)
-
 
670
    };
-
 
671
 
-
 
672
    var windows = 'Windows';
-
 
673
    var ios = 'iOS';
-
 
674
    var android = 'Android';
-
 
675
    var linux = 'Linux';
-
 
676
    var osx = 'OSX';
-
 
677
    var solaris = 'Solaris';
-
 
678
    var freebsd = 'FreeBSD';
-
 
679
    var chromeos = 'ChromeOS';
-
 
680
    var unknown = function () {
-
 
681
      return nu({
-
 
682
        current: undefined,
-
 
683
        version: Version.unknown()
-
 
684
      });
-
 
685
    };
-
 
686
    var nu = function (info) {
-
 
687
      var current = info.current;
-
 
688
      var version = info.version;
-
 
689
      var isOS = function (name) {
-
 
690
        return function () {
-
 
691
          return current === name;
-
 
692
        };
-
 
693
      };
-
 
694
      return {
-
 
695
        current: current,
-
 
696
        version: version,
-
 
697
        isWindows: isOS(windows),
-
 
698
        isiOS: isOS(ios),
-
 
699
        isAndroid: isOS(android),
-
 
700
        isOSX: isOS(osx),
-
 
701
        isLinux: isOS(linux),
-
 
702
        isSolaris: isOS(solaris),
-
 
703
        isFreeBSD: isOS(freebsd),
-
 
704
        isChromeOS: isOS(chromeos)
-
 
705
      };
-
 
706
    };
-
 
707
    var OperatingSystem = {
-
 
708
      unknown: unknown,
-
 
709
      nu: nu,
-
 
710
      windows: constant(windows),
-
 
711
      ios: constant(ios),
-
 
712
      android: constant(android),
-
 
713
      linux: constant(linux),
-
 
714
      osx: constant(osx),
-
 
715
      solaris: constant(solaris),
-
 
716
      freebsd: constant(freebsd),
-
 
717
      chromeos: constant(chromeos)
-
 
718
    };
-
 
719
 
-
 
720
    var detect$1 = function (userAgent, userAgentDataOpt, mediaMatch) {
-
 
721
      var browsers = PlatformInfo.browsers();
-
 
722
      var oses = PlatformInfo.oses();
-
 
723
      var browser = userAgentDataOpt.bind(function (userAgentData) {
-
 
724
        return detectBrowser$1(browsers, userAgentData);
-
 
725
      }).orThunk(function () {
-
 
726
        return detectBrowser(browsers, userAgent);
-
 
727
      }).fold(Browser.unknown, Browser.nu);
-
 
728
      var os = detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);
-
 
729
      var deviceType = DeviceType(os, browser, userAgent, mediaMatch);
-
 
730
      return {
-
 
731
        browser: browser,
-
 
732
        os: os,
-
 
733
        deviceType: deviceType
-
 
734
      };
-
 
735
    };
-
 
736
    var PlatformDetection = { detect: detect$1 };
-
 
737
 
-
 
738
    var mediaMatch = function (query) {
-
 
739
      return window.matchMedia(query).matches;
-
 
740
    };
-
 
741
    var platform = cached(function () {
-
 
742
      return PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch);
-
 
743
    });
-
 
744
    var detect = function () {
-
 
745
      return platform();
-
 
746
    };
-
 
747
 
369
    var is = function (element, selector) {
748
    var is = function (element, selector) {
370
      var dom = element.dom;
749
      var dom = element.dom;
371
      if (dom.nodeType !== ELEMENT) {
750
      if (dom.nodeType !== ELEMENT) {
372
        return false;
751
        return false;
373
      } else {
752
      } else {
Line 594... Line 973...
594
      return SugarPosition(x, y);
973
      return SugarPosition(x, y);
595
    };
974
    };
596
 
975
 
597
    var get = function (_win) {
976
    var get = function (_win) {
598
      var win = _win === undefined ? window : _win;
977
      var win = _win === undefined ? window : _win;
-
 
978
      if (detect().browser.isFirefox()) {
-
 
979
        return Optional.none();
-
 
980
      } else {
599
      return Optional.from(win['visualViewport']);
981
        return Optional.from(win['visualViewport']);
-
 
982
      }
600
    };
983
    };
601
    var bounds = function (x, y, width, height) {
984
    var bounds = function (x, y, width, height) {
602
      return {
985
      return {
603
        x: x,
986
        x: x,
604
        y: y,
987
        y: y,