npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

xktta

v1.0.1

Published

Implementing Internationalization and Validation with Javascript. Based on the ebook Eloquent Javascript 2nd edition and Rails

Downloads

3

Readme

##Dowload

v1.0

or

v1.0.min

or

<script src="https://rawgit.com/juniormesquitadandao/xktta/v1.0/xktta.js"></script>

<script src="https://rawgit.com/juniormesquitadandao/xktta/v1.0/xktta.min.js"></script>

or

bower install xktta --save-dev

or

npm install xktta --save-dev

##What's it? Implementing Internationalization and Validation with Javascript. Based on the ebook Eloquent Javascript 2nd edition and Rails

Xktta
  .init
  .Inflection(function(){
    irregular('singularWord', 'pluralWord');
  })
  //I18n: create as you like
  .I18n('locale', {
  })
  .I18n('otherLocale', {
  })
  //Validator: create as you like
  .Validator('CustomValidator', function(value, attrName, object, options){
  })
  //Class: create as you like
  .Class('ClassName', function(){
    attrAccessor('id');
  })
  .Class('OtherClassName', function(){
    attrAccessor('id', 'className');
  });

var className = new ClassName();
var otherClassName = new OtherClassName();
I18n.translate('path.subPath');
I18n.localize(new Date());
'singularWord'.pluralize;
[].isEmpty;
{}.toJson;
'{}'.asJson;
'#{first} #{last}'.interpolate({first: 'First', last: 'Last'});

##Use cases #####Customer ######Design

Custormer:
  id: attribute
  name: attribute, required
  lastName: attribute, required
  document: attribute, required
  street: attribute, minimum 8 characters, maximum 16 characters
  district: attribute, minimum 8 characters, maximum 16 characters
  phone: attribute, minimum 9 digits
  user: hasOne association, persisted
  fullName: object method, '#{name} #{lastName}'
  className: class method, class name 

######Implementation

Xktta
  .Class('Customer', function(){
    attrAccessor('id', 'name', 'lastName', 'document', 'street', 'district', 'phone', 'user');

    validatesPresenceOf('name', 'lastName');
    validates('document', {
      presence: true
    });
    validatesLengthOf('street', 'district', {
      in: [8, 16],
      allowNull: true}
    );
    validates('phone', { 
      presence: true,
      length: {
        minimum: 9
      }
    });
    validate('user', function(){
      return {
        success: object.user && typeof object.user.id === 'number',
        fail: {
          messageName: 'newRecord'
        }
      };
    });

    def('fullName', function(){
      return '#{name} #{lastName}'.interpolate(object);
    });

    defClass('className', function(){
      return __class__.name;
    });
  });

######How to

var customer = new Customer();

more #####User ######Design

User:
  id: attribute
  email: attribute, required
  custormer_id: attribute
  persona_id: attribute, required
  customer: belongsTo association
  persona: belongsTo association

######Implementation

Xktta
  .Class('User', function(){
    attrAccessor('id', 'email', 'customer', 'persona');

    validatesPresenceOf('email', 'persona_id');
  });

######How to

var user = new User();

more #####Persona ######Design

Persona:
  id: attribute
  name: attribute, required
  users: hasMany association

######Implementation

Xktta
  .Class('Persona', function(){
    attrAccessor('id', 'name', 'users');
    validatesPresenceOf('name');
  });

######How to

var persona = new Persona();

more

##It works for you too? #####Prepare

Xktta
  .init

#####Setting up internal communication of lib You must set the number of flection of the names of their classes to the lib be able to relate members and collections.

  .Inflection(function(){
    irregular('fish', 'fish');
    irregular('person', 'people');
  })

You can verifying calling the following methods on String objects:

'person'.pluralize;
'people'.singularize;

#####Nationalizing the output to client You must set the output data for each language supported by your application.

  .I18n('en', {
  })
  .I18n('pt-BR', {
  })

I18n methods:

  • locale= set locale
  • locale return actual locale
  • translate('path.sub_path',{}) return string by path
  • t(object ,{}) alias to translate method
  • localize(object ,{}) convert object to string
  • l(object ,{}) alias to localize method

######Nationalizing You must choose one of the languages ​​supported by your application.

I18n.locale = 'en';

######Nationalizing date You must set expressions to convert data to string using an external library or the following options.

Date Options:

  • %a convert to abbreviation day name
  • %A convert to day name
  • %b convert to abbreviation month name
  • %B convert to month name
  • %d convert to day number
  • %m convert to month number
  • %Y convert to year number
    date: {
      formats: {
        default: '%Y-%m-%d',
        long: '%B %d, %Y',
        short: '%b %d',
        custom: function(value){
          return 'use external lib to format date';
        }
      }
    }

Now you can use the convert date objects to string according to the set language.

var date = new Date();

I18n.localize(date);
I18n.localize(date, {format: 'short'});
I18n.localize(date, {format: 'custom'});
I18n.l(date);

date.localize();
date.l({format: 'long'});

######Nationalizing time You must set expressions to convert time to string using an external library or the following options.

Date Options:

  • %h convert to hour (12h)
  • %H convert to hour (24h)
  • %M convert to minute
  • %S convert to second
  • %p convert to meridiem (am/pm)
  • %z convert to zone
    time: {
      am: 'am',
      formats: {
        default: '%H:%M:%S %z',
        long: '%H:%M',
        meridiem: '%h:%M:%S %p %z',
        meridiemLong: '%h:%M %p',
        custom: function(value){
          return 'use external lib to format time';
        }
      },
      pm: 'pm'
    }

Now you can use the convert time objects to string according to the set language.

var time = new Date();

I18n.localize(time, {dateType: 'time'});
I18n.localize(time, {dateType: 'time', format: 'meridiem'});
I18n.localize(time, {dateType: 'time', format: 'custom'});
I18n.l(time, {dateType: 'time'});

time.localize({dateType: 'time'});
time.l({dateType: 'time', format: 'long'});

######Nationalizing datetime You must set expressions to convert datetime to string using an external library or the following options.

Date Options:

  • %a convert to abbreviation day name
  • %A convert to day name
  • %b convert to abbreviation month name
  • %B convert to month name
  • %d convert to day number
  • %m convert to month number
  • %Y convert to year number
  • %h convert to hour (12h)
  • %H convert to hour (24h)
  • %M convert to minute
  • %S convert to second
  • %p convert to meridiem (am/pm)
  • %z convert to zone
    datetime: {
      am: 'am',
      formats: {
        default: '%a, %d %b %Y %H:%M:%S %z',
        long: '%B %d, %Y %H:%M',
        short: '%d %b %H:%M',
        custom: function(value){
          return 'use external lib to format datetime';
        }
      },
      pm: 'pm'
    }

Now you can use the convert datetime objects to string according to the set language.

var datetime = new Date();

I18n.localize(datetime, {dateType: 'datetime'});
I18n.localize(datetime, {dateType: 'datetime', format: 'meridiem'});
I18n.localize(datetime, {dateType: 'datetime', format: 'custom'});
I18n.l(datetime, {dateType: 'datetime'});

datetime.localize({dateType: 'datetime'});
datetime.l({dateType: 'datetime', format: 'long'});

######Nationalizing integer You must set expressions to convert integer to string using an external library.

    integer: {
      formats: {
        default: function(value){
          return 'use external lib to format integer';
        }
        other: function(value){
          return 'use external lib to other format integer';
        }
      }
    }

Now you can use the convert integer objects to string according to the set language.

var integer = 9;

I18n.localize(integer);
I18n.l(integer, {format: 'other'});

integer.localize({format: 'other'});
integer.l();

######Nationalizing decimal You must set expressions to convert decimal to string using an external library.

    decimal: {
      formats: {
        default: function(value){
          return 'use external lib to format decimal';
        }
        other: function(value){
          return 'use external lib to other format decimal';
        }
      }
    }

Now you can use the convert decimal objects to string according to the set language.

var decimal = 9.99;

I18n.localize(decimal, {forceDecimal: true});
I18n.l(decimal, {forceDecimal: true, format: 'other'});

decimal.localize({forceDecimal: true, format: 'other'});
decimal.l({forceDecimal: true});

######Nationalizing logic You must set expressions to convert logic to string using an external library.

    logic: {
      formats: {
        default: {
          true: 'No',
          false: 'Yes'
        },
        other: {
          true: 'NOT',
          false: 'OK'
        }
      }
    }

Now you can use the convert logic objects to string according to the set language.

var logic = true;

I18n.localize(logic);
I18n.l(logic, {format: 'other'});

logic.localize({format: 'other'});
logic.l();

######Nationalizing message You must set expressions to convert message to string.

    messages: {
      one: 'Message One',
      two: 'Message Two'
      other: 'Message Other to %{name}'
    }

Now you can use the convert message objects to string according to the set language.

I18n.translate('messages.one');
I18n.t('messages.two');

I18n.translate('messages.other', {name: 'Name'});
I18n.t('messages.other', {name: 'Name'});

######Building classes You must build your classes using this function.

  .Class('Stub', function(){
    attrAccessor('id', 'one', 'two');

    validatesLengthOf('one', {in: [1, 10]});
    validatesLengthOf('two', {is: 5});

    def('full', function(){
      return '#{one #{two}'.interpolate(object);
    });

    defClass('className', function(){
      return __class__.name;
    });
  })
  .Class('Stub2', function(){
    attrAccessor('ident');  
  })

Now you can build and use your objects.

var stub2 = new Stub();
stub2.ident;
stub2.ident = 10;

var stub = new Stub();
stub.id;
stub.id = 10;
stub.one;
stub.one = 11;
stub.two;
stub.one = 3;

stub.isValid;
stub.errors;
stub.errors.messages;
stub.errors.full_messages;

var stub = new Stub({two: 3});
stub.changes;
stub.changes_id;
stub.changes_one;
stub.changes_two;

stub.changed;
stub.changed_id;
stub.changed_one;
stub.changed_two;

stub.reset;

stub.full();
Stub.className();

stub.toJson;
stub.asJson;