ccnq-ko-rule-target
CCNQ Knockout Widget for rule target
$ cnpm install ccnq-ko-rule-target 
SYNC missed versions from official npm registry.

A rule target Knockout Widget for CCNQ(4)

A rule target is an item in the gwlist field of a rule entry in a CCNQ4 ruleset database. Such a database is used by the tough-rate LCR engine, especially its routes-registrant, routes-carrierid, routes-gwid middleware modules.

This module adds a rule-target component in Knockout.

Usage

{RuleTarget,rule_target} = (require 'ccnq-ko-rule-target') knockout

Parameters:

  • value: the gwlist item

  • $root.gateways: a list of valid gateways

  • $root.carriers: a list of valid carriers

    module.exports = (require 'kow') 'rule-target', (ko) ->

    @data class RuleTarget
      constructor: (data) ->
        assert data?, 'data is required'
    

Data

A gwlist item typically contains one of:

  • source_registrant -- if the rule should route through the caller's registrant;

  • gwid -- if the call is to be routed out through a given gateway;

  • carrierid -- if the call is to be routed out through a carrier (a set of gateways with similar costs).

        @source_registrant = ko.observable data.source_registrant
        @gwid = ko.observable data.gwid
        @carrierid = ko.observable data.carrierid
        @_validated = ko.observable false
        return
    

View Model

We expect params="value:$data,$root:$root". This means value is a RuleTarget object.

  @view ({value,$root}) ->
    # assert value instanceof RuleTarget, 'value should be an instance of RuleTarget'
    assert value?, 'value is required'
    {gateways,carriers} = $root
    assert gateways?, 'gateways is required'
    assert carriers?, 'carriers is required'

    chosen = if value.source_registrant() is true
        'registrant'
      else if value.carrierid()?
        'carrier'
      else if value.gwid()?
        'gateway'
    @chosen = ko.observable chosen
    @name = "rule-entry-chosen-#{Math.random()}"

    @gwid = value.gwid
    @carrierid = value.carrierid

    gateway_valid = (id) -> id? and id in gateways
    carrier_valid = (id) -> id? and id in carriers

    @valid = ko.computed =>
      switch @chosen()
        when 'registrant'
          @gwid null
          @carrierid null
          true
        when 'gateway'
          @carrierid null
          gateway_valid @gwid()
        when 'carrier'
          @gwid null
          carrier_valid @carrierid()
        else
          @gwid null
          @carrierid null
          false

Flow the data back to the model.

    @chosen.subscribe =>
      value.source_registrant @chosen() is 'registrant'
    @valid.subscribe (is_valid) =>
      value._validated is_valid

    return

HTML

  @html ({a,ul,li,label,input,text}) ->
    ul '.target', ->
      li '.choice', ->
        label ->
          input
            type:'radio'
            value:'registrant'
            required:true
            bind:
              checked: 'chosen'
              attr: '{name:name}'
          text 'Use Registrant'
      li '.choice', ->
        label ->
          input
            type:'radio'
            value:'carrier'
            bind:
              checked: 'chosen'
              attr: '{name:name}'
            required:true
          text 'Use Carrier '
        input
          list:'carrier'
          name: 'carrierid'
          bind:
            value: 'carrierid'
            enable: 'chosen() === "carrier"'
          required:true
      li '.choice', ->
        label ->
          input
            type:'radio'
            value:'gateway'
            bind:
              checked: 'chosen'
              attr: '{name:name}'
            required:true
          text 'Use Gateway '
        input
          list:'gateway'
          name: 'gwid'
          bind:
            value: 'gwid'
            enable: 'chosen() === "gateway"'
          required: true

assert = require 'assert'

Current Tags

  • 5.0.0                                ...           latest (6 years ago)

15 Versions

  • 5.0.0                                ...           6 years ago
  • 4.1.2                                ...           6 years ago
  • 4.1.1                                ...           6 years ago
  • 4.1.0                                ...           6 years ago
  • 4.0.1                                ...           6 years ago
  • 4.0.0                                ...           6 years ago
  • 3.0.3                                ...           6 years ago
  • 3.0.2                                ...           6 years ago
  • 3.0.1                                ...           6 years ago
  • 3.0.0                                ...           6 years ago
  • 2.1.2                                ...           6 years ago
  • 2.1.1                                ...           6 years ago
  • 2.1.0                                ...           6 years ago
  • 2.0.0                                ...           6 years ago
  • 1.0.0                                ...           6 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 1
Dependencies (3)
Dev Dependencies (2)

Copyright 2014 - 2017 © taobao.org |