diff options
| -rw-r--r-- | .eslintrc.json | 21 | ||||
| -rw-r--r-- | README.md | 3 | ||||
| -rw-r--r-- | ext/bg/context.html | 67 | ||||
| -rw-r--r-- | ext/bg/js/audio.js | 2 | ||||
| -rw-r--r-- | ext/bg/js/context.js | 39 | ||||
| -rw-r--r-- | ext/bg/js/deinflector.js | 2 | ||||
| -rw-r--r-- | ext/bg/js/profile-conditions.js | 22 | ||||
| -rw-r--r-- | ext/bg/js/search.js | 2 | ||||
| -rw-r--r-- | ext/bg/js/translator.js | 20 | ||||
| -rw-r--r-- | ext/bg/legal.html | 1 | ||||
| -rw-r--r-- | ext/bg/settings.html | 2 | ||||
| -rw-r--r-- | ext/fg/float.html | 2 | ||||
| -rw-r--r-- | ext/fg/js/document.js | 2 | ||||
| -rw-r--r-- | ext/fg/js/popup.js | 2 | ||||
| -rw-r--r-- | ext/mixed/js/audio.js | 2 | ||||
| -rw-r--r-- | ext/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.css | 28 | ||||
| -rw-r--r-- | ext/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.js | 9 | 
17 files changed, 144 insertions, 82 deletions
| diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..44eaeff8 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,21 @@ +{ +    "extends": "eslint:recommended", +    "parserOptions": { +        "ecmaVersion": 8 +    }, +    "rules": { +        "arrow-parens": ["error", "as-needed"], +        "comma-dangle": ["error", "never"], +        "dot-notation": "error", +        "eqeqeq": 2, +        "no-case-declarations": "error", +        "no-const-assign": 2, +        "no-undef": 0, +        "no-unused-vars": 0, +        "no-var": 2, +        "prefer-const": 2, +        "quote-props": ["error", "consistent"], +        "quotes": [2, "single", "avoid-escape"], +        "semi": 2 +    } +} @@ -236,7 +236,7 @@ other developers who want to help out. I take pride in the high quality of the c  following basic guidelines when creating pull requests:  *   Please discuss large features before writing code. -*   Follow the [conventions and style](https://raw.githubusercontent.com/FooSoft/dotfiles/master/.eslintrc.json) of the existing code. +*   Follow the [conventions and style](.eslintrc.json) of the existing code.  *   Write clean, modern ES6 code (`const`/`let`, `await`, arrow functions, etc.)  *   Large pull requests without a clear scope will not be merged.  *   Incomplete or non-standalone features will not be merged. @@ -256,7 +256,6 @@ Yomichan uses several third-party libraries to function. Below are links to home  versions packaged.  *   Bootstrap: [homepage](https://getbootstrap.com/) - [snapshot](https://github.com/twbs/bootstrap/releases/download/v3.3.7/bootstrap-3.3.7-dist.zip) - [license](https://github.com/twbs/bootstrap/blob/v3.3.7/LICENSE) -*   Bootstrap Toggle: [homepage](https://www.bootstraptoggle.com/) - [snapshot](https://github.com/minhur/bootstrap-toggle/archive/b76c094.zip) - [license](https://github.com/minhur/bootstrap-toggle/blob/2.2.0/LICENSE)  *   Handlebars: [homepage](https://handlebarsjs.com/) - [snapshot](http://builds.handlebarsjs.com.s3.amazonaws.com/handlebars.min-714a4c4.js) - [license](https://github.com/wycats/handlebars.js/blob/v4.0.6/LICENSE)  *   jQuery: [homepage](https://blog.jquery.com/) - [snapshot](https://code.jquery.com/jquery-3.2.1.min.js) - [license](https://github.com/jquery/jquery/blob/3.2.1/LICENSE.txt)  *   JSZip: [homepage](https://stuk.github.io/jszip/) - [snapshot](https://raw.githubusercontent.com/Stuk/jszip/de7f52fbcba485737bef7923a83f0fad92d9f5bc/dist/jszip.min.js) - [license](https://github.com/Stuk/jszip/blob/v3.1.3/LICENSE.markdown) diff --git a/ext/bg/context.html b/ext/bg/context.html index 7e08dddd..bd62270b 100644 --- a/ext/bg/context.html +++ b/ext/bg/context.html @@ -11,7 +11,6 @@          <link rel="icon" type="image/png" href="/mixed/img/icon128.png" sizes="128x128">          <link rel="stylesheet" type="text/css" href="/mixed/lib/bootstrap/css/bootstrap.min.css">          <link rel="stylesheet" type="text/css" href="/mixed/lib/bootstrap/css/bootstrap-theme.min.css"> -        <link rel="stylesheet" type="text/css" href="/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.css">          <style type="text/css">              body {                  padding: 10px; @@ -89,12 +88,73 @@              .link-group-label {                  vertical-align: middle;              } + + +            .toggle { +                width: 60px; +                height: 34px; +                position: relative; +                overflow: hidden; +            } +            .toggle-group { +                position: absolute; +                width: 200%; +                left: 0; +                top: 0; +                bottom: 0; +                user-select: none; +            } +            .toggle-group.toggle-group-animated { +                transition: transform 0.35s; +            } +            .toggle-on, +            .toggle-off { +                position: absolute; +                top: 0; +                bottom: 0; +                margin: 0; +                border: 0; +                border-radius: 0; +            } +            .toggle-on { +                padding-right: 24px; +                left: 0; +                right: 50%; +            } +            .toggle-off { +                padding-left: 24px; +                left: 50%; +                right: 0; +            } +            .toggle-handle { +                position: relative; +                margin: 0 auto; +                padding-top: 0; +                padding-bottom: 0; +                height: 100%; +                width: 0; +                border-width: 0 1px; +            } + +            .toggle>input[type=checkbox] { +                display: none; +            } +            .toggle>input[type=checkbox]:not(:checked)~.toggle-group { +                transform: translateX(-50%); +            }          </style>      </head>      <body>          <div id="mini">              <div> -                <input type="checkbox" id="enable-search"> +                <label class="btn btn-primary toggle"> +                    <input type="checkbox" id="enable-search" /> +                    <div class="toggle-group"> +                        <span class="btn btn-primary toggle-on">On</span> +                        <span class="btn btn-default active toggle-off">Off</span> +                        <span class="btn btn-default toggle-handle"></span> +                    </div> +                </label>              </div>              <div class="btn-group">                  <a title="Search (Alt + Insert)
(Middle click to open in new tab)" class="btn btn-default btn-xs action-open-search"><span class="glyphicon glyphicon-search"></span></a> @@ -118,9 +178,6 @@              </a>          </div> -        <script src="/mixed/lib/jquery.min.js"></script> -        <script src="/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.js"></script> -          <script src="/mixed/js/extension.js"></script>          <script src="/bg/js/api.js"></script> diff --git a/ext/bg/js/audio.js b/ext/bg/js/audio.js index 3efcce46..cd42a158 100644 --- a/ext/bg/js/audio.js +++ b/ext/bg/js/audio.js @@ -128,7 +128,7 @@ function audioUrlNormalize(url, baseUrl, basePath) {          if (url[0] === '/') {              if (url.length >= 2 && url[1] === '/') {                  // Begins with "//" -                url = baseUrl.substr(0, baseUrl.indexOf(':') + 1) + url; +                url = baseUrl.substring(0, baseUrl.indexOf(':') + 1) + url;              } else {                  // Begins with "/"                  url = baseUrl + url; diff --git a/ext/bg/js/context.js b/ext/bg/js/context.js index 3fb27f0d..b288a79a 100644 --- a/ext/bg/js/context.js +++ b/ext/bg/js/context.js @@ -26,26 +26,26 @@ function showExtensionInfo() {  }  function setupButtonEvents(selector, command, url) { -    const node = $(selector); -    node.on('click', (e) => { +    const node = document.querySelector(selector); +    node.addEventListener('click', (e) => {          if (e.button !== 0) { return; }          apiCommandExec(command, {newTab: e.ctrlKey});          e.preventDefault(); -    }) -    .on('auxclick', (e) => { +    }, false); +    node.addEventListener('auxclick', (e) => {          if (e.button !== 1) { return; }          apiCommandExec(command, {newTab: true});          e.preventDefault(); -    }); +    }, false);      if (typeof url === 'string') { -        node.attr('href', url); -        node.attr('target', '_blank'); -        node.attr('rel', 'noopener'); +        node.href = url; +        node.target = '_blank'; +        node.rel = 'noopener';      }  } -$(document).ready(utilAsync(() => { +window.addEventListener('DOMContentLoaded', () => {      showExtensionInfo();      apiGetEnvironmentInfo().then(({browser}) => { @@ -64,13 +64,18 @@ $(document).ready(utilAsync(() => {          url: window.location.href      };      apiOptionsGet(optionsContext).then(options => { -        const toggle = $('#enable-search'); -        toggle.prop('checked', options.general.enable).change(); -        toggle.bootstrapToggle(); -        toggle.change(() => apiCommandExec('toggle')); +        const toggle = document.querySelector('#enable-search'); +        toggle.checked = options.general.enable; +        toggle.addEventListener('change', () => apiCommandExec('toggle'), false); + +        const toggle2 = document.querySelector('#enable-search2'); +        toggle2.checked = options.general.enable; +        toggle2.addEventListener('change', () => apiCommandExec('toggle'), false); -        const toggle2 = $('#enable-search2'); -        toggle2.prop('checked', options.general.enable).change(); -        toggle2.change(() => apiCommandExec('toggle')); +        setTimeout(() => { +            for (const n of document.querySelectorAll('.toggle-group')) { +                n.classList.add('toggle-group-animated'); +            } +        }, 10);      }); -})); +}); diff --git a/ext/bg/js/deinflector.js b/ext/bg/js/deinflector.js index ce4b2961..e2fb7461 100644 --- a/ext/bg/js/deinflector.js +++ b/ext/bg/js/deinflector.js @@ -44,7 +44,7 @@ class Deinflector {                      results.push({                          source, -                        term: term.slice(0, -kanaIn.length) + kanaOut, +                        term: term.substring(0, term.length - kanaIn.length) + kanaOut,                          rules: rulesOut,                          definitions: [],                          reasons: [reason, ...reasons] diff --git a/ext/bg/js/profile-conditions.js b/ext/bg/js/profile-conditions.js index 5daa904e..8272e5dd 100644 --- a/ext/bg/js/profile-conditions.js +++ b/ext/bg/js/profile-conditions.js @@ -17,6 +17,26 @@   */ +function _profileConditionTestDomain(urlDomain, domain) { +    return ( +        urlDomain.endsWith(domain) && +        ( +            domain.length === urlDomain.length || +            urlDomain[urlDomain.length - domain.length - 1] === '.' +        ) +    ); +} + +function _profileConditionTestDomainList(url, domainList) { +    const urlDomain = new URL(url).hostname.toLowerCase(); +    for (const domain of domainList) { +        if (_profileConditionTestDomain(urlDomain, domain)) { +            return true; +        } +    } +    return false; +} +  const profileConditionsDescriptor = {      popupLevel: {          name: 'Popup Level', @@ -69,7 +89,7 @@ const profileConditionsDescriptor = {                  transform: (optionValue) => optionValue.split(/[,;\s]+/).map(v => v.trim().toLowerCase()).filter(v => v.length > 0),                  transformReverse: (transformedOptionValue) => transformedOptionValue.join(', '),                  validateTransformed: (transformedOptionValue) => (transformedOptionValue.length > 0), -                test: ({url}, transformedOptionValue) => (transformedOptionValue.indexOf(new URL(url).hostname.toLowerCase()) >= 0) +                test: ({url}, transformedOptionValue) => _profileConditionTestDomainList(url, transformedOptionValue)              },              matchRegExp: {                  name: 'Matches RegExp', diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index 20d0c58c..b4731e6a 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -210,7 +210,7 @@ class DisplaySearch extends Display {              const match = /[\*\uff0a]+$/.exec(query);              if (match !== null) {                  details.wildcard = true; -                query = query.substr(0, query.length - match[0].length); +                query = query.substring(0, query.length - match[0].length);              }              const valid = (query.length > 0); diff --git a/ext/bg/js/translator.js b/ext/bg/js/translator.js index 583d6e31..e27cbdff 100644 --- a/ext/bg/js/translator.js +++ b/ext/bg/js/translator.js @@ -327,22 +327,22 @@ class Translator {          const deinflections = [];          for (let i = text.length; i > 0; --i) { -            const textSlice = text.slice(0, i); -            deinflections.push(...this.deinflector.deinflect(textSlice)); +            const textSubstring = text.substring(0, i); +            deinflections.push(...this.deinflector.deinflect(textSubstring));          }          return deinflections;      } -    getDeinflections2(text, text2) { +    getDeinflections2(text1, text2) {          const deinflections = []; -        for (let i = text.length; i > 0; --i) { -            const textSlice = text.slice(0, i); -            const text2Slice = text2.slice(0, i); -            deinflections.push(...this.deinflector.deinflect(textSlice)); -            if (textSlice !== text2Slice) { -                deinflections.push(...this.deinflector.deinflect(text2Slice)); +        for (let i = text1.length; i > 0; --i) { +            const text1Substring = text1.substring(0, i); +            const text2Substring = text2.substring(0, i); +            deinflections.push(...this.deinflector.deinflect(text1Substring)); +            if (text1Substring !== text2Substring) { +                deinflections.push(...this.deinflector.deinflect(text2Substring));              }          } @@ -516,6 +516,6 @@ class Translator {      static getNameBase(name) {          const pos = name.indexOf(':'); -        return (pos >= 0 ? name.substr(0, pos) : name); +        return (pos >= 0 ? name.substring(0, pos) : name);      }  } diff --git a/ext/bg/legal.html b/ext/bg/legal.html index 377d25ba..3047ab3e 100644 --- a/ext/bg/legal.html +++ b/ext/bg/legal.html @@ -41,7 +41,6 @@ and are used in conformance with the Group's <a href="https://www.edrdg.org/edrd              <h3>Third-Party Software Licenses</h3>              <ul>                  <li><a href="https://github.com/twbs/bootstrap/blob/v3.3.7/LICENSE" target="_blank" rel="noopener">Bootstrap v3.3.7</a></li> -                <li><a href="https://github.com/minhur/bootstrap-toggle/blob/2.2.0/LICENSE" target="_blank" rel="noopener">Bootstrap Toggle v2.2.0</a></li>                  <li><a href="https://github.com/wycats/handlebars.js/blob/v4.0.6/LICENSE" target="_blank" rel="noopener">Handlebars v4.0.6</a></li>                  <li><a href="https://github.com/jquery/jquery/blob/3.2.1/LICENSE.txt" target="_blank" rel="noopener">jQuery v3.2.1</a></li>                  <li><a href="https://github.com/Stuk/jszip/blob/v3.1.3/LICENSE.markdown" target="_blank" rel="noopener">JSZip v3.1.3</a></li> diff --git a/ext/bg/settings.html b/ext/bg/settings.html index 0badb817..262386e9 100644 --- a/ext/bg/settings.html +++ b/ext/bg/settings.html @@ -488,7 +488,7 @@                          <button class="btn btn-primary" id="dict-file-button">Import Dictionary</button>                          <button class="btn btn-danger" id="dict-purge-button">Purge Database</button>                      </div> -                    <div hidden><input type="file" id="dict-file" multiple></div> +                    <div hidden><input type="file" id="dict-file" accept=".zip,application/zip" multiple></div>                  </div>                  <div class="modal fade" tabindex="-1" role="dialog" id="dict-purge-modal"> diff --git a/ext/fg/float.html b/ext/fg/float.html index aec3db20..73118917 100644 --- a/ext/fg/float.html +++ b/ext/fg/float.html @@ -31,8 +31,6 @@              </div>          </div> -        <script src="/mixed/lib/wanakana.min.js"></script> -          <script src="/mixed/js/extension.js"></script>          <script src="/fg/js/api.js"></script> diff --git a/ext/fg/js/document.js b/ext/fg/js/document.js index a168705e..8161c85a 100644 --- a/ext/fg/js/document.js +++ b/ext/fg/js/document.js @@ -359,7 +359,7 @@ function isElementTransparent(element) {      }      const style = window.getComputedStyle(element);      return ( -        parseFloat(style.opacity) < 0 || +        parseFloat(style.opacity) <= 0 ||          style.visibility === 'hidden' ||          (style.backgroundImage === 'none' && isColorTransparent(style.backgroundColor))      ); diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js index 1f9317e0..ac96f9e8 100644 --- a/ext/fg/js/popup.js +++ b/ext/fg/js/popup.js @@ -391,7 +391,7 @@ class Popup {      static isOnExtensionPage() {          try {              const url = chrome.runtime.getURL('/'); -            return window.location.href.substr(0, url.length) === url; +            return window.location.href.substring(0, url.length) === url;          } catch (e) {              // NOP          } diff --git a/ext/mixed/js/audio.js b/ext/mixed/js/audio.js index ff50dee1..4e9d04fa 100644 --- a/ext/mixed/js/audio.js +++ b/ext/mixed/js/audio.js @@ -75,7 +75,7 @@ class TextToSpeechAudio {          for (const group of m[1].split('&')) {              const sep = group.indexOf('=');              if (sep < 0) { continue; } -            searchParameters[decodeURIComponent(group.substr(0, sep))] = decodeURIComponent(group.substr(sep + 1)); +            searchParameters[decodeURIComponent(group.substring(0, sep))] = decodeURIComponent(group.substring(sep + 1));          }          if (!searchParameters.text) { return null; } diff --git a/ext/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.css b/ext/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.css deleted file mode 100644 index 0d42ed09..00000000 --- a/ext/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.css +++ /dev/null @@ -1,28 +0,0 @@ -/*! ======================================================================== - * Bootstrap Toggle: bootstrap-toggle.css v2.2.0 - * http://www.bootstraptoggle.com - * ======================================================================== - * Copyright 2014 Min Hur, The New York Times Company - * Licensed under MIT - * ======================================================================== */ -.checkbox label .toggle,.checkbox-inline .toggle{margin-left:-20px;margin-right:5px} -.toggle{position:relative;overflow:hidden} -.toggle input[type=checkbox]{display:none} -.toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left .35s;-webkit-transition:left .35s;-moz-user-select:none;-webkit-user-select:none} -.toggle.off .toggle-group{left:-100%} -.toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0} -.toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0} -.toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px} -.toggle.btn{min-width:59px;min-height:34px} -.toggle-on.btn{padding-right:24px} -.toggle-off.btn{padding-left:24px} -.toggle.btn-lg{min-width:79px;min-height:45px} -.toggle-on.btn-lg{padding-right:31px} -.toggle-off.btn-lg{padding-left:31px} -.toggle-handle.btn-lg{width:40px} -.toggle.btn-sm{min-width:50px;min-height:30px} -.toggle-on.btn-sm{padding-right:20px} -.toggle-off.btn-sm{padding-left:20px} -.toggle.btn-xs{min-width:35px;min-height:22px} -.toggle-on.btn-xs{padding-right:12px} -.toggle-off.btn-xs{padding-left:12px}
\ No newline at end of file diff --git a/ext/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.js b/ext/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.js deleted file mode 100644 index 37113200..00000000 --- a/ext/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/*! ======================================================================== - * Bootstrap Toggle: bootstrap-toggle.js v2.2.0 - * http://www.bootstraptoggle.com - * ======================================================================== - * Copyright 2014 Min Hur, The New York Times Company - * Licensed under MIT - * ======================================================================== */ -+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.toggle"),f="object"==typeof b&&b;e||d.data("bs.toggle",e=new c(this,f)),"string"==typeof b&&e[b]&&e[b]()})}var c=function(b,c){this.$element=a(b),this.options=a.extend({},this.defaults(),c),this.render()};c.VERSION="2.2.0",c.DEFAULTS={on:"On",off:"Off",onstyle:"primary",offstyle:"default",size:"normal",style:"",width:null,height:null},c.prototype.defaults=function(){return{on:this.$element.attr("data-on")||c.DEFAULTS.on,off:this.$element.attr("data-off")||c.DEFAULTS.off,onstyle:this.$element.attr("data-onstyle")||c.DEFAULTS.onstyle,offstyle:this.$element.attr("data-offstyle")||c.DEFAULTS.offstyle,size:this.$element.attr("data-size")||c.DEFAULTS.size,style:this.$element.attr("data-style")||c.DEFAULTS.style,width:this.$element.attr("data-width")||c.DEFAULTS.width,height:this.$element.attr("data-height")||c.DEFAULTS.height}},c.prototype.render=function(){this._onstyle="btn-"+this.options.onstyle,this._offstyle="btn-"+this.options.offstyle;var b="large"===this.options.size?"btn-lg":"small"===this.options.size?"btn-sm":"mini"===this.options.size?"btn-xs":"",c=a('<label class="btn">').html(this.options.on).addClass(this._onstyle+" "+b),d=a('<label class="btn">').html(this.options.off).addClass(this._offstyle+" "+b+" active"),e=a('<span class="toggle-handle btn btn-default">').addClass(b),f=a('<div class="toggle-group">').append(c,d,e),g=a('<div class="toggle btn" data-toggle="toggle">').addClass(this.$element.prop("checked")?this._onstyle:this._offstyle+" off").addClass(b).addClass(this.options.style);this.$element.wrap(g),a.extend(this,{$toggle:this.$element.parent(),$toggleOn:c,$toggleOff:d,$toggleGroup:f}),this.$toggle.append(f);var h=this.options.width||Math.max(c.outerWidth(),d.outerWidth())+e.outerWidth()/2,i=this.options.height||Math.max(c.outerHeight(),d.outerHeight());c.addClass("toggle-on"),d.addClass("toggle-off"),this.$toggle.css({width:h,height:i}),this.options.height&&(c.css("line-height",c.height()+"px"),d.css("line-height",d.height()+"px")),this.update(!0),this.trigger(!0)},c.prototype.toggle=function(){this.$element.prop("checked")?this.off():this.on()},c.prototype.on=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._offstyle+" off").addClass(this._onstyle),this.$element.prop("checked",!0),void(a||this.trigger()))},c.prototype.off=function(a){return this.$element.prop("disabled")?!1:(this.$toggle.removeClass(this._onstyle).addClass(this._offstyle+" off"),this.$element.prop("checked",!1),void(a||this.trigger()))},c.prototype.enable=function(){this.$toggle.removeAttr("disabled"),this.$element.prop("disabled",!1)},c.prototype.disable=function(){this.$toggle.attr("disabled","disabled"),this.$element.prop("disabled",!0)},c.prototype.update=function(a){this.$element.prop("disabled")?this.disable():this.enable(),this.$element.prop("checked")?this.on(a):this.off(a)},c.prototype.trigger=function(b){this.$element.off("change.bs.toggle"),b||this.$element.change(),this.$element.on("change.bs.toggle",a.proxy(function(){this.update()},this))},c.prototype.destroy=function(){this.$element.off("change.bs.toggle"),this.$toggleGroup.remove(),this.$element.removeData("bs.toggle"),this.$element.unwrap()};var d=a.fn.bootstrapToggle;a.fn.bootstrapToggle=b,a.fn.bootstrapToggle.Constructor=c,a.fn.toggle.noConflict=function(){return a.fn.bootstrapToggle=d,this},a(function(){a("input[type=checkbox][data-toggle^=toggle]").bootstrapToggle()}),a(document).on("click.bs.toggle","div[data-toggle^=toggle]",function(b){var c=a(this).find("input[type=checkbox]");c.bootstrapToggle("toggle"),b.preventDefault()})}(jQuery); -//# sourceMappingURL=bootstrap-toggle.min.js.map
\ No newline at end of file |