Talktive_AB Example :: ESX Trait Test

by Peter Seliger

HTML

<title>Talktive_AB Example :: ESX Trait Test</title>

<!-- esx-trait.js //-->
<script>
(function(r){function g(a){var c="none",b;Y(a)&&(ta(a)?c=ua:(b=Z(a),t("^class\\s+"+a.name+"\\s+\\{").test(b)?c=va:t("\\([^)]*\\)\\s+=>\\s+\\(").test(b)?c=wa:z(a)&&(c=xa(a)?ya:za(a)||Aa(a)||Ba(a)?Ca:aa)));return c===aa}function C(a){return["^\\[object\\s+",a,"\\]$"].join("")}function v(a,c){var b=Da[c];return!!b&&0<=b.indexOf(a)}function M(a,c,b){return function(){var d=arguments;c.apply(b,d);return a.apply(b,d)}}function N(a,c,b){return function(){var d=arguments,e=a.apply(b,d);c.apply(b,d);return e}}function Ea(a,c,b,d){return function(){var e=arguments;c.call(b,e,d);return a.apply(b,e)}}function Fa(a,c,b,d){return function(){var e=arguments,f=a.apply(b,e);c.call(b,e,d);return f}}function Ga(a,c,b,d){return function(){var e=arguments,f=a.apply(b,e);c.call(b,f,e,d);return f}}function Ha(a,c,b,d){return function(){var e=arguments,f;try{f=a.apply(b,e)}catch(l){c.call(b,l,e,d)}return f}}function Ia(a,c,b,d){return function(){var e=arguments,f,g;try{f=a.apply(b,e)}catch(m){g=m}c.call(b,g||f,e,d);return f}}function Ja(a,c,b,d){return function(){return c.call(b,a,c,arguments,d)}}function Ka(a,c){return function(){var b=this[a];g(b)||(b=u);this[a]=M(b,c,this)}}function La(a,c){return function(){var b=this[a];g(b)||(b=u);this[a]=N(b,c,this)}}function Ma(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ea(d,c,this,b)}}function Na(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Fa(d,c,this,b)}}function Oa(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ga(d,c,this,b)}}function Pa(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ha(d,c,this,b)}}function Qa(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ia(d,c,this,b)}}function Ra(a,c){return function(b){var d=this[a];g(d)||(d=u);this[a]=Ja(d,c,this,b)}}function ba(a,c,b){a.useTraits.rules.push(new A({type:"without",traitList:c,methodNameList:b}))}function...

SCSS

dl#console-log {
  dt {
    font-family: sans-serif;
    color: #249d7f;
  //color: #2795ee;
  }
  dd {
    margin: -7px 0 17px 2em;
    color: #a151d2;
  //color: #f18c16;
  }
}

JavaScript

var Talktive_A = (function () {
  var
    smallTalk = function () {
      console.log("Talktive_A.smalltalk : ", "aaa");
    },
    bigTalk = function () {
      console.log("Talktive_A.bigTalk : ", "AAA");
    };

  return function Talktive_A () {
    this.smallTalk = smallTalk;
    this.bigTalk = bigTalk;
  };

}());

var Talktive_B = (function () {
  var
    smallTalk = function () {
      console.log("Talktive_B.smalltalk : ", "bbb");
    },
    bigTalk = function () {
      console.log("Talktive_B.bigTalk : ", "BBB");
    };

  return function Talktive_B () {
    this.smallTalk = smallTalk;
    this.bigTalk = bigTalk;
  };

}());



(function (console, elmLogList) {
	if (console) {

		console.log = function () {
			var
				argsArray	= Array.from(arguments),
        message		= argsArray.shift(),

				elmDt			= document.createElement("dt"),
				elmDd			= document.createElement("dd"),

        elmPre		= document.createElement("pre"),
        elmCode		= document.createElement("code"),

				result		= argsArray.map(function (type) {
					return JSON.stringify(type);
        }).join(" ,");
			elmDt
      	.appendChild(document.createTextNode(message));
			elmDd
				.appendChild(document.createElement("pre"))
        .appendChild(document.createElement("code"))
				.appendChild(document.createTextNode(result));

			elmLogList.appendChild(elmDt);
			elmLogList.appendChild(elmDd);
    }
  }
}(console, document.querySelector("#console-log")));



var Talktive_AB = Trait.create(function (use, applicator) {

  use(Talktive_A, Talktive_B)

    .apply(Talktive_A, "smallTalk")
    .apply(Talktive_B, "smallTalk").as("talk")
    .apply(Talktive_A, "bigTalk").before(Talktive_B);
});

var talker = Talktive_AB.call({});

talker.talk();      // console does log       : " bbb "
talker.smallTalk(); // console does log       : " aaa "
talker.bigTalk();   // 1stly console does log : " AAA "
                    // 2ndly console does log : " BBB "