JavaScript Proprietary Library Example: Difference between revisions

From Chorke Wiki
Jump to navigation Jump to search
(Created page with "==Prototyping Library== <syntaxhighlight lang="js"> /** * This is the Number.lpad() method developed aim to support * oracle like lpad single rows function for JS Engine. *...")
 
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
Javascript is pretty cool programming language ever. Easy to read and write. Most of the beginner unable to understand, read, write OOP in Javascript. Where professional are fluent in OOP Javascript. Most of the professional have to relay customized Javascript library on top of others Open Source Javascript framework. Here is example for beginner to professional those are interested to write OOP in Javascript.
==Prototyping Library==
==Prototyping Library==
<syntaxhighlight lang="js">
<syntaxhighlight lang="js">
Line 33: Line 35:
             return typeof args[number] != 'undefined' ? args[number] : match;
             return typeof args[number] != 'undefined' ? args[number] : match;
         });
         });
    };
})();
/**
* This is the String.info() method developed aim to support
* Java like print String in perspectives of JS Engine.
*
* @public
* @package    String
* @class      String.info()
*/
;String.prototype.info||(function(){
    String.prototype.info = function() {
        if(console && console.info){
            console.info(this.toString());
        }
        return this;
     };
     };
})();
})();
Line 54: Line 72:
})();
})();
/**
/**
  * This is the String.info() method developed aim to support
  * This is the String.warn() method developed aim to support
  * Java like print String in perspectives of JS Engine.
  * Java like print String in perspectives of JS Engine.
  *
  *
  * @public
  * @public
  * @package    String
  * @package    String
  * @class      String.info()
  * @class      String.warn()
  */
  */
;String.prototype.info||(function(){
;String.prototype.warn||(function(){
     String.prototype.info = function() {
     String.prototype.warn = function() {
         if(console && console.info){
         if(console && console.warn){
             console.info(this.toString());
             console.warn(this.toString());
         }
         }
         return this;
         return this;
Line 140: Line 158:
         $class  : 'CKi.Edu.YouTube.Channel',
         $class  : 'CKi.Edu.YouTube.Channel',
         $meta    : function(){return $.meta(me)},
         $meta    : function(){return $.meta(me)},
         add      : function(name, lang, liked){
         getIndex : function(name, index, channel){
            channels.push({name: name, lang: lang, like: liked});
            return channels
        },
        remove  : function(name, index){
             for(index=0;index < channels.length;index++){
             for(index=0;index < channels.length;index++){
                 if(channels[index].name == name){
                 channel = channels[index];
                    channels.splice(index, 1);
                if(channel.name.toLowerCase() == name.toLowerCase()){
                     return channels;
                     return index;
                 }
                 }
             }
             }
             return channels;
             return -1;
        },
        isExist  : function(name, index){
            index = me.getIndex(name);
            return index >= 0;
        },
        add      : function(name, lang, liked){
            if(!me.isExist(name)){
                channels.push({name: name, lang: lang||'English', like: liked||0});
            } else {'"{0}" Already Exist!'.format(name).warn();}
            return me;
        },
        del      : function(name, index){
            if(me.isExist(name)){
                index = me.getIndex(name);
                channels.splice(index, 1);
                return me;
            } else {'"{0}" Not Yet Found!'.format(name).warn();}
            return me;
         },
         },
         compare  : function(prev, next) {
         compare  : function(prev, next) {
Line 172: Line 204:
                 lang = channel.lang;
                 lang = channel.lang;
                 like = channel.like;
                 like = channel.like;
                 out += tpl.format((index + 1).lpad(2), name, lang.rpad(12, ' '), like&&'x');
                 out += tpl.format((index + 1).lpad(2), name, lang.rpad(12, ' '), (like ? 'x' : ' '));
                 out += ((index+1)%20) ? '' : '\n';
                 out += ((index+1)%20) ? '' : '\n';
             }
             }
Line 179: Line 211:
         print    : function(){
         print    : function(){
             me.format().info();
             me.format().info();
            return me;
         }
         }
     }
     }
Line 184: Line 217:
})(CKi);
})(CKi);
</syntaxhighlight>
</syntaxhighlight>


==Checking Library==
==Checking Library==
<syntaxhighlight lang="js">
<syntaxhighlight lang="js">
CKi.Edu.YouTube.Channel.add('Ascriber', 'English', 1);
(function(Channel){
CKi.Edu.YouTube.Channel.add('Academia', 'English', 1);
    Channel.add('Babycare').add('Beverage').add('Bodycare').add('Breeding').add('Carecure');
CKi.Edu.YouTube.Channel.add('Agronomy', 'English', 1);
    Channel.add('Interior').add('Inventor').add('Kingdoms').add('Kitchens').add('Literary');
CKi.Edu.YouTube.Channel.print();
    Channel.add('Cultural').add('Diligent').add('Donation').add('Economia', 'Dutch').add('Emporium');
    Channel.add('Gardenia').add('Hatchery').add('Healthya', 'Romanian').add('Heritage', 0, 1).add('Historic');
    Channel.add('Exterior').add('Fabricat', 'Romanian').add('Fabulous').add('Farmacia').add('Festival');
    Channel.add('Academia', 0, 1).add('Agronomy', 0, 1).add('AirCargo').add('Airlines').add('Antiques');
    Channel.add('Aquarium', 0, 1).add('Artifact').add('Ascriber').add('Assembla', 'Catalan').add('Atlantic');
    Channel.add('Composer').add('Composts', 0, 1).add('Crafting', 0, 1).add('Cruising').add('Cuisines', 0, 1);
    Channel.add('Homecare').add('HutBazar', 'Bangla').add('Hygienia', 'Finish').add('Imaginer').add('Imperial');
    Channel.add('interior').add('Inventor').del('Tearfear').del('babycare').del('Beverage');
    Channel.print();
})(CKi.Edu.YouTube.Channel);
</syntaxhighlight>
</syntaxhighlight>
==References==
* [https://stackoverflow.com/questions/939326/ Execute JavaScript without Eval]
* [https://www.mediawiki.org/wiki/Adding_javascript_to_wiki_pages Adding Javascript to Wiki Pages]
* [[Template:Chorke/YouTube/Channel|Chorke/YouTube/Channel.tpl]]
* [[MediaWiki:Chorke/YouTube/Channel.js|Chorke/YouTube/Channel.js]]
* [[MediaWiki:Common.js|Common.js]]

Latest revision as of 20:24, 16 June 2022

Javascript is pretty cool programming language ever. Easy to read and write. Most of the beginner unable to understand, read, write OOP in Javascript. Where professional are fluent in OOP Javascript. Most of the professional have to relay customized Javascript library on top of others Open Source Javascript framework. Here is example for beginner to professional those are interested to write OOP in Javascript.

Prototyping Library

/**
 * This is the Number.lpad() method developed aim to support
 * oracle like lpad single rows function for JS Engine.
 *
 * @public
 * @package     Number
 * @class       Number.lpad()
 */
;Number.prototype.lpad||(function(){
    Number.prototype.lpad = function(width, fill, me, padded) {
        me = this.toString();
        if(me.length >= width){
            return me;
        }
        padded = new Array(width - me.length + 1);
        return padded.join(fill||'0') + me;
    };
})();
/**
 * This is the String.format() method developed aim to support
 * Java like format String in perspectives of JS Engine.
 *
 * @public
 * @package     String
 * @class       String.format()
 */
;String.prototype.format||(function(){
    String.prototype.format = function() {
        var args = arguments;
        return this.replace(/{(\d+)}/g, function(match, number) {
            return typeof args[number] != 'undefined' ? args[number] : match;
        });
    };
})();
/**
 * This is the String.info() method developed aim to support
 * Java like print String in perspectives of JS Engine.
 *
 * @public
 * @package     String
 * @class       String.info()
 */
;String.prototype.info||(function(){
    String.prototype.info = function() {
        if(console && console.info){
            console.info(this.toString());
        }
        return this;
    };
})();
/**
 * This is the String.rpad() method developed aim to support
 * Oracle like rpad single rows function for JS Engine.
 *
 * @public
 * @package     String
 * @class       String.rpad()
 */
;String.prototype.rpad||(function(){
    String.prototype.rpad = function(width, fill, me, padded) {
        me = this;
        if(me.length >= width){
            return me;
        }
        padded = new Array(width - me.length + 1);
        return me + padded.join(fill||'0');
    };
})();
/**
 * This is the String.warn() method developed aim to support
 * Java like print String in perspectives of JS Engine.
 *
 * @public
 * @package     String
 * @class       String.warn()
 */
;String.prototype.warn||(function(){
    String.prototype.warn = function() {
        if(console && console.warn){
            console.warn(this.toString());
        }
        return this;
    };
})();

Proprietary Library

/**
 * @public
 * @class     Chorke
 * @package   Default
 */
var Chorke=Chorke||(function(me){
    me = {
        $class   : 'Chorke',
        $package : 'Default',
        meta     : function(ns, tpl, out){
            tpl = '{\n  "package" : "{0}",\n  "class"   : "{1}"\n}';
            out = tpl.format(ns.$package, ns.$class);
            return out;
        }
    };
    return me;
})(),
/**
 * @public
 * @class     CKi
 * @package   Default
 */
CKi=CKi||(function(me){
    me.$class = 'CKi';
    me.$meta   = function(){return me.meta(me)};
    return me;
})(Chorke);
/**
 * @public
 * @static
 * @package   CKi
 * @class     CKi.Edu
 */
;CKi.Edu||(function($, me){
    me = {
        $package : 'CKi',
        $class   : 'CKi.Edu',
        $meta    : function(){return $.meta(me)}
    }
    $.Edu = me;
})(CKi);
/**
 * @public
 * @static
 * @package   CKi.Edu
 * @class     CKi.Edu.YouTube
 */
;CKi.Edu.YouTube||(function($, me){
    me = {
        $package : 'CKi.Edu',
        $class   : 'CKi.Edu.YouTube',
        $meta    : function(){return $.meta(me)}
    }
    $.Edu.YouTube = me;
})(CKi);
/**
 * @public
 * @static
 * @package   CKi.Edu.YouTube
 * @class     CKi.Edu.YouTube.Channel
 */
;CKi.Edu.YouTube.Channel||(function($, me, channels){
    channels = [];
    me = {
        $package : 'CKi.Edu.YouTube',
        $class   : 'CKi.Edu.YouTube.Channel',
        $meta    : function(){return $.meta(me)},
        getIndex : function(name, index, channel){
            for(index=0;index < channels.length;index++){
                channel = channels[index];
                if(channel.name.toLowerCase() == name.toLowerCase()){
                    return index;
                }
            }
            return -1;
        },
        isExist  : function(name, index){
            index = me.getIndex(name);
            return index >= 0;
        },
        add      : function(name, lang, liked){
            if(!me.isExist(name)){
                channels.push({name: name, lang: lang||'English', like: liked||0});
            } else {'"{0}" Already Exist!'.format(name).warn();}
            return me;
        },
        del      : function(name, index){
            if(me.isExist(name)){
                index = me.getIndex(name);
                channels.splice(index, 1);
                return me;
            } else {'"{0}" Not Yet Found!'.format(name).warn();}
            return me;
        },
        compare  : function(prev, next) {
            if (prev.name < next.name){
                return -1;
            } else if (prev.name > next.name){
                return 1;
            }
            return 0;
        },
        sort     : function(){
            return channels.sort(me.compare);
        },
        format   : function(index, channel, name, lang, like, tpl, out){
            tpl = ' {0}. Chorke {1}, Inc.   => {2}[{3}]\n';
            out = '\n';me.sort();
            for(index=0;index < channels.length;index++){
                channel = channels[index];
                name = channel.name;
                lang = channel.lang;
                like = channel.like;
                out += tpl.format((index + 1).lpad(2), name, lang.rpad(12, ' '), (like ? 'x' : ' '));
                out += ((index+1)%20) ? '' : '\n';
            }
            return out;
        },
        print    : function(){
            me.format().info();
            return me;
        }
    }
    $.Edu.YouTube.Channel = me;
})(CKi);

Checking Library

(function(Channel){
    Channel.add('Babycare').add('Beverage').add('Bodycare').add('Breeding').add('Carecure');
    Channel.add('Interior').add('Inventor').add('Kingdoms').add('Kitchens').add('Literary');
    Channel.add('Cultural').add('Diligent').add('Donation').add('Economia', 'Dutch').add('Emporium');
    Channel.add('Gardenia').add('Hatchery').add('Healthya', 'Romanian').add('Heritage', 0, 1).add('Historic');
    Channel.add('Exterior').add('Fabricat', 'Romanian').add('Fabulous').add('Farmacia').add('Festival');
    Channel.add('Academia', 0, 1).add('Agronomy', 0, 1).add('AirCargo').add('Airlines').add('Antiques');
    Channel.add('Aquarium', 0, 1).add('Artifact').add('Ascriber').add('Assembla', 'Catalan').add('Atlantic');
    Channel.add('Composer').add('Composts', 0, 1).add('Crafting', 0, 1).add('Cruising').add('Cuisines', 0, 1);
    Channel.add('Homecare').add('HutBazar', 'Bangla').add('Hygienia', 'Finish').add('Imaginer').add('Imperial');
    Channel.add('interior').add('Inventor').del('Tearfear').del('babycare').del('Beverage');
    Channel.print();
})(CKi.Edu.YouTube.Channel);

References