From fab1763ab2737b12dc1ec695f18cfebbabd6bdba Mon Sep 17 00:00:00 2001 From: softwarerero Date: Wed, 30 Aug 2017 21:49:27 -0400 Subject: [PATCH] Add back reactivity --- README.md | 4 +- build/t9n.js | 41 +++++++++++++++---- examples/meteorNpm/client/index.html | 2 +- examples/meteorNpm/client/index.js | 8 +++- .../.gitignore | 0 .../README.md | 0 examples/meteorPackage/client/client.coffee | 13 ++++++ .../client/index.html | 10 ++++- .../package.json | 0 .../server/helpers.coffee | 0 .../server/test.coffee | 0 .../server/testLanguageVariant.coffee | 0 examples/meteorPpackage/client/client.coffee | 4 -- package.js | 8 ++-- package.json | 2 +- smart.json | 2 +- t9n.coffee | 13 ++++++ 17 files changed, 85 insertions(+), 22 deletions(-) rename examples/{meteorPpackage => meteorPackage}/.gitignore (100%) rename examples/{meteorPpackage => meteorPackage}/README.md (100%) create mode 100644 examples/meteorPackage/client/client.coffee rename examples/{meteorPpackage => meteorPackage}/client/index.html (65%) rename examples/{meteorPpackage => meteorPackage}/package.json (100%) rename examples/{meteorPpackage => meteorPackage}/server/helpers.coffee (100%) rename examples/{meteorPpackage => meteorPackage}/server/test.coffee (100%) rename examples/{meteorPpackage => meteorPackage}/server/testLanguageVariant.coffee (100%) delete mode 100644 examples/meteorPpackage/client/client.coffee diff --git a/README.md b/README.md index b11d749..7ca5de5 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ When using `npm` the translation files will not be loaded eagerly any longer. Se To make it work with `npm` the files have been translated to JavaScript, so if you use CoffeeScript you can require from the main directory and if you use JavaScript you would import/require from `build`. -Breaking change: Reactivity for the language and translations are no longer available. This used a Meteor functionality which is not available in a plain Node environment, which also consumed a lot of resources and many applications never used it. If this is a critical feature for somebody please open a ticket, this could be maybe implemented in a separate package. +In theory this package can be used in any JavaScript project, but reactivity is only available within a Meteor environment. -The `examples` show different use cases: +These `examples` show different use cases: - meteorPackage: This is way it has been used in former versions as a meteor package. - meteorNpm: Use t9n as npm package within Meteor. diff --git a/build/t9n.js b/build/t9n.js index 6028d81..0fcbc38 100644 --- a/build/t9n.js +++ b/build/t9n.js @@ -1,6 +1,8 @@ // Generated by CoffeeScript 1.12.7 (function() { - var T9n; + var T9n, tracker; + + tracker = require('meteor/tracker'); if (typeof Meteor !== "undefined" && Meteor !== null) { Meteor.startup(function() { @@ -21,32 +23,44 @@ T9n.language = ''; + T9n.dep = tracker.Tracker ? new tracker.Tracker.Dependency() : void 0; + + T9n.depLanguage = tracker.Tracker ? new tracker.Tracker.Dependency() : void 0; + T9n.missingPrefix = ">"; T9n.missingPostfix = "<"; T9n.map = function(language, map) { + var ref; if (!this.maps[language]) { this.maps[language] = {}; } - return this.registerMap(language, '', false, map); + this.registerMap(language, '', false, map); + return (ref = this.dep) != null ? ref.changed() : void 0; }; T9n.get = function(label, markIfMissing, args, language) { - var index, parent, ref, ref1, ret; + var index, parent, ref, ref1, ref2, ref3, ret; if (markIfMissing == null) { markIfMissing = true; } if (args == null) { args = {}; } + if ((ref = this.dep) != null) { + ref.depend(); + } + if ((ref1 = this.depLanguage) != null) { + ref1.depend(); + } if (typeof label !== 'string') { return ''; } if (language == null) { language = this.language; } - ret = (ref = this.maps[language]) != null ? ref[label] : void 0; + ret = (ref2 = this.maps[language]) != null ? ref2[label] : void 0; if (!ret) { index = language.lastIndexOf('_'); if (index) { @@ -57,7 +71,7 @@ } } if (!ret) { - ret = (ref1 = this.maps[this.defaultLanguage]) != null ? ref1[label] : void 0; + ret = (ref3 = this.maps[this.defaultLanguage]) != null ? ref3[label] : void 0; } if (!ret) { if (markIfMissing) { @@ -91,15 +105,26 @@ }; T9n.getLanguage = function() { + var ref; + if ((ref = this.depLanguage) != null) { + ref.depend(); + } return this.language; }; T9n.getLanguages = function() { + var ref; + if ((ref = this.dep) != null) { + ref.depend(); + } return Object.keys(this.maps).sort(); }; T9n.getLanguageInfo = function() { - var i, k, keys, len, results; + var i, k, keys, len, ref, results; + if ((ref = this.dep) != null) { + ref.depend(); + } keys = Object.keys(this.maps).sort(); results = []; for (i = 0, len = keys.length; i < len; i++) { @@ -113,6 +138,7 @@ }; T9n.setLanguage = function(language) { + var ref; if (this.language === language) { return; } @@ -124,7 +150,8 @@ throw Error("language " + language + " does not exist"); } } - return this.language = language; + this.language = language; + return (ref = this.depLanguage) != null ? ref.changed() : void 0; }; T9n.replaceParams = function(str, args) { diff --git a/examples/meteorNpm/client/index.html b/examples/meteorNpm/client/index.html index 3a2f6f0..097f353 100644 --- a/examples/meteorNpm/client/index.html +++ b/examples/meteorNpm/client/index.html @@ -8,8 +8,8 @@