123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- //jshint eqnull:true
- define(function () {
- "use strict";
- function inherits (child, parent) {
- child.prototype = Object.create(parent.prototype, {
- constructor: {
- value: child,
- enumerable: false, configurable: true, writable: true
- }
- });
- return child;
- }
- function installMethodOfJsObject (obj, name, fn) {
- Object.defineProperty(obj, name, {
- value: fn,
- enumerable: false, configurable: true, writable: true
- });
- }
- function noop () {
- }
- function declareJsMethod (obj, name) {
- if (obj[name] == null) installMethodOfJsObject(obj, name, noop);
- }
- /* Convert a Smalltalk selector into a JS selector */
- function st2js (string) {
- return '_' + string
- .replace(/:/g, '_')
- .replace(/[\&]/g, '_and')
- .replace(/[\|]/g, '_or')
- .replace(/[+]/g, '_plus')
- .replace(/-/g, '_minus')
- .replace(/[*]/g, '_star')
- .replace(/[\/]/g, '_slash')
- .replace(/[\\]/g, '_backslash')
- .replace(/[\~]/g, '_tild')
- .replace(/%/g, '_percent')
- .replace(/>/g, '_gt')
- .replace(/</g, '_lt')
- .replace(/=/g, '_eq')
- .replace(/,/g, '_comma')
- .replace(/[@]/g, '_at');
- };
- function js2st (selector) {
- if (selector.match(/^__/)) {
- return binaryJsToSt(selector);
- } else {
- return keywordJsToSt(selector);
- }
- }
- function keywordJsToSt (selector) {
- return selector.replace(/^_/, '').replace(/_/g, ':');
- }
- function binaryJsToSt (selector) {
- return selector
- .replace(/^_/, '')
- .replace(/_and/g, '&')
- .replace(/_or/g, '|')
- .replace(/_plus/g, '+')
- .replace(/_minus/g, '-')
- .replace(/_star/g, '*')
- .replace(/_slash/g, '/')
- .replace(/_backslash/g, '\\')
- .replace(/_tild/g, '~')
- .replace(/_percent/g, '%')
- .replace(/_gt/g, '>')
- .replace(/_lt/g, '<')
- .replace(/_eq/g, '=')
- .replace(/_comma/g, ',')
- .replace(/_at/g, '@');
- }
- function addElement (array, el) {
- if (typeof el === 'undefined') {
- return;
- }
- if (array.indexOf(el) === -1) {
- array.push(el);
- }
- }
- function removeElement (array, el) {
- var i = array.indexOf(el);
- if (i !== -1) {
- array.splice(i, 1);
- }
- }
- function extend (target, source) {
- Object.keys(source).forEach(function (key) {
- target[key] = source[key];
- });
- return target;
- }
- function extendWithMethods (target, source) {
- Object.keys(source).forEach(function (key) {
- installMethodOfJsObject(target, key, source[key]);
- });
- return target;
- }
- function deleteKeysFrom (keys, obj) {
- keys.forEach(function (each) {
- delete obj[each];
- });
- }
- return {
- deleteKeysFrom: deleteKeysFrom,
- extendWithMethods: extendWithMethods,
- extend: extend,
- removeElement: removeElement,
- addElement: addElement,
- js2st: js2st,
- st2js: st2js,
- declareJsMethod: declareJsMethod,
- installMethodOfJsObject: installMethodOfJsObject,
- inherits: inherits
- }
- });
|