all files / src/ directive.js

100% Statements 35/35
100% Branches 32/32
100% Functions 7/7
100% Lines 35/35
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 84 85 86 87 88 89 90 91 92 93 94 95 96                                                      11×     11×       11×   11× 11×                                                        
/* eslint-disable no-param-reassign, no-unused-vars */
 
import { warn, deprecate } from './utils';
 
function equalLanguage(el, vnode) {
  const vm = vnode.context;
  return el._i18nLanguage === vm.$i18n.i18next.language;
}
 
function equalValue(value, oldValue) {
  if (value === oldValue) {
    return true;
  }
  if (value && oldValue) {
    return (
      value.path === oldValue.path &&
      value.language === oldValue.language &&
      value.args === oldValue.args
    );
  }
}
 
function assert(vnode) {
  const vm = vnode.context;
 
  if (!vm.$i18n) {
    warn('No VueI18Next instance found in the Vue instance');
    return false;
  }
 
  return true;
}
 
function parseValue(value) {
  let path;
  let language;
  let args;
 
  if (typeof value === 'string') {
    path = value;
  } else if (toString.call(value) === '[object Object]') {
    ({ path, language, args } = value);
  }
 
  return { path, language, args };
}
 
function t(el, binding, vnode) {
  const { value } = binding;
 
  const { path, language, args } = parseValue(value);
  if (!path && !language && !args) {
    warn('v-t: invalid value');
    return;
  }
 
  if (!path) {
    warn('v-t: "path" is required');
    return;
  }
 
  if (language) {
    deprecate(`v-t: "language" is deprecated.Use the "lng" property in args.
      https://www.i18next.com/overview/configuration-options#configuration-options`);
  }
 
  const vm = vnode.context;
  el.textContent = vm.$i18n.i18next.t(path, {
    ...(language ? { lng: language } : {}),
    ...args
  });
 
  el._i18nLanguage = vm.$i18n.i18next.language;
}
 
export function bind(el, binding, vnode) {
  if (!assert(vnode)) {
    return;
  }
 
  t(el, binding, vnode);
}
 
export function update(el, binding, vnode, oldVNode) {
  if (equalLanguage(el, vnode) && equalValue(binding.value, binding.oldValue)) {
    return;
  }
 
  t(el, binding, vnode);
}
 
export default {
  bind,
  update
};