Example #1
0
var mixin = exports.mixin = function (mixinClass) {
  var Klass = this,
      originalInitialize = Klass.prototype.initialize;

  // Will not override any existing functions
  _.defaults(Klass, mixinClass);
  _.defaults(Klass.prototype, mixinClass.prototype);

  return Klass;
};
Example #2
0
exports.creator = function (options) {
    options = options || {};
    if (!options.permissions) {
        options.permissions = {};
    }
    var p = options.permissions;
    if (p.add) {
        p.add = permissions.all([
            permissions.matchUsername(),
            p.add
        ]);
    }
    else {
        p.add = permissions.matchUsername();
    }
    if (p.update) {
        p.update = permissions.all([
            permissions.fieldUneditable(),
            p.update
        ]);
    }
    else {
        p.update = permissions.fieldUneditable();
    }
    return exports.string(_.defaults(options, {
        required: false,
        widget: widgets.creator(),
        default_value: function (req) {
            return (req.userCtx && req.userCtx.name) || '';
        }
    }));
};
Example #3
0
exports.login = function (doc, req) {
    if (!doc) doc = {};
    var settings = _.defaults(doc, dashboard_settings.defaultSettings);
    var dashboard_url = dashboard_links.dashboardURL(settings, 'dashboard', 'dashboard', req);

    if (utils.isUser(req)) {
        // if there is a redirect, have them go to a page that checks they can access
        if (req.query.redirect) {
            var redirect = './go?location=' + req.query.redirect;
            return {
                code: 302,
                body: 'Redirecting to go controller.',
                headers: {"Location": redirect}
            };
        }
        return {
            code: 302,
            body: 'You are already signed in.',
            headers: {"Location": dashboard_url}
        };
    }

    if (settings.sessions.type === "internal" && settings.sessions.internal.login_type === 'browserid') {
        return browseridLogin(settings, req);
    } else {
        return usersTableLogin(settings, req);
    }
}
Example #4
0
var EmbeddedList = exports.EmbeddedList = function EmbeddedList(options) {
    options = options || {};
    var type = options.type;
    if (!type) {
        throw new Error('No type specified');
    }
    options.permissions = _.defaults((options.permissions || {}), {
        add: permissions.inherit(type),
        remove: permissions.inherit(type),
        update:   permissions.inherit(type)
    });
    _.extend(this, _.defaults(options, {
        required: true
    }));
    this.type = type;
};
Example #5
0
exports.install = function(doc, req) {
    var is_auth = utils.isAdmin(req) || utils.isAdminParty(req) ;

    if (!doc) doc = {};
    var settings = _.defaults(doc, dashboard_settings.defaultSettings);
    var dashboard_url = dashboard_links.dashboardURL(settings, 'dashboard', 'dashboard', req);

    var login_link =  './login?redirect=install';
    if (req.query.app_url) {
        login_link += '%3Fapp_url%3D' + encodeURIComponent(req.query.app_url);
    }
    var installation_location_icon = 'install_to_dashboard.png';
    var installation_location_type = 'Garden';
    var installation_location_description = dashboard_links.friendlyName(dashboard_url);
    if (settings.host_options.hosted) {
        var installation_location_icon = 'garden20.png';
        var installation_location_type = 'hosted';
        var installation_location_description = settings.host_options.hosted_name;
        if (!installation_location_description) {
            installation_location_description = "Garden20";
        }

    }

    var content = templates['install.html']({
        app_url: req.query.app_url,
        is_auth : is_auth,
        host_options : JSON.stringify(settings.host_options),
        login_link : login_link,
        hosted : settings.host_options.hosted,
        installation_location_icon: installation_location_icon,
        installation_location_type : installation_location_type,
        installation_location_description : installation_location_description
    });





    var scripts = [
        "static/js/install.js",
        "jam/events/events.js",
        "jam/couchr/couchr-browser.js",
        "jam/pico-couch-ddoc/pico-couch-ddoc.js",
        "jam/ractive/Ractive.js",
        "jam/ractive-couch/ractive-couch.js",
        "jam/gardener-status/gardener-status.js"
    ];
    return {
        code: 200,
        body: templates['base.html']({
            dont_cache : true,
            title: 'Install Application1',
            content: content,
            scripts : scripts,
            dashboard_url : dashboard_url,
            baseURL: utils.getBaseURL(req)
        })
    };
}
Example #6
0
Form.prototype.toHTML = function (req,
                                  /* optional */ RendererClass,
                                  /* optional */ options,
                                  /* optional */ create_defaults) {
    var values = this.values;

    options = options || {};
    options.operation = options.operation || (values ? 'update': 'add');

    if (create_defaults) {
        values = _.defaults(
            values, fieldset.createDefaults(this.fields, req)
        );
    } else if (!values) {
        values = fieldset.createDefaults(this.fields, req);
    }

    RendererClass = (RendererClass || render.defaultRenderer());
    var renderer = new RendererClass();
    return (
        renderer.start(
            errsWithoutFields(this.errors)
        ) +
        this.renderFields(
            renderer, this.fields, values, this.raw, this.errors, [], options
        ) +
        renderer.end() +
        render.scriptTagForEvent('renderFinish')
    );
};
Example #7
0
documentModel.parseText = function(text, options) {
    _.defaults(options, {
         // this will set how tokens are merged together
         // with a value larger than 1, tokens will be merged
         // otherwise, the token list will be kept as is
        maxTokensToMerge: 1,
        
        // this will only return merged token (original tokens will be ignored)
        keepMergedOnly: false,
        
        // tokens that exists in the list will be removed 
        // from final result and not merged
        ignoredList: [
            'của', 'là', 'và', 'có', 'đã',
            'những', 'các', 'với',
            'cũng', 'đó', 'như', 'nhiều',
            'còn', 'mà', 'thế', 'đi', 'nhưng',
            'nhất', 'theo', 'sẽ',
            'đang', 'rất', 'hơn'
        ],
        
        // try to be smart or not?
        tryToBeSmart: 0
    });

    var tokenized = tokenizer.tokenize(text);
    var tokens = tokenized.tokens;
    text = tokenizer.normalize(text);

    // merge tokens to form new tokens
    if (options.maxTokensToMerge > 1) {
        var newTokens = documentModel._mergeTokens(
            text,
            // only send not ignored tokens
            _.difference(tokens, options.ignoredList),
            options.maxTokensToMerge
        );
        
        if (options.keepMergedOnly) {
            // ignore original tokens
            // without the special ones
            options.ignoredList = options.ignoredList.concat(_.difference(tokens, tokenized.special));
        }
        
        tokens = tokens.concat(newTokens);
    }
    
    if (options.tryToBeSmart) {
        tokens = documentModel._removeIrrelevantTokens(text, tokens, 50, options.ignoredList);
        // tokens = documentModel._removeSingleAppearTokens(tokens);
        // tokens = documentModel._removeCompoundTokens(tokens);
    }

    // filter out ignored tokens
    if (options.ignoredList.length > 0) {
        tokens = _.difference(tokens, options.ignoredList);
    }
    
    return tokens;
};
Example #8
0
exports.cache_manifest = function(head, req) {
    /*
     * We need to invalidate the cache manifest when the user changes settings, adds/removes apps, adds/removes links,
     * etc. We simply use all the revs of the dashboard assests to invalidate the appcache.
     */

    start({'headers' : {'Content-Type' : 'text/cache-manifest'}});
    var revs = "";
    var settingsDoc = {};
    while ((row = getRow())) {
        if (row.key[0] === 0) {
            settingsDoc = row.value;
            revs += row.value._rev;
        } else {
            revs += row.value;
        }

    }
    var settings = _.defaults(settingsDoc, dashboard_settings.defaultSettings);
    var dashboard_url = dashboard_links.dashboardURL(settings, 'dashboard', 'dashboard', req);

    var extra_resources = [];
    if (settings.top_nav_bar.brand_link) {
        extra_resources.push(dashboard_url + '_db/settings/' + settings.top_nav_bar.icon_name);
    }


    send (templates['dashboard.appcache']({
        revs : revs,
        extra_resources : extra_resources
    }));
}
Example #9
0
var getXML = function(info){
  _.defaults(info, {
    sp: 'webot',
    user: '******'
  })

  var tpl= [
    '<xml>',
      '<ToUserName><![CDATA[<%=sp%>]]></ToUserName>',
      '<FromUserName><![CDATA[<%=user%>]]></FromUserName>',
      '<CreateTime><%=(new Date().getTime())%></CreateTime>',
      '<MsgType><![CDATA[<%=type%>]]></MsgType>',
      '<% if(type=="text"){ %>',
        '<Content><![CDATA[<%=text%>]]></Content>',
      '<% }else if(type=="location"){  %>',
        '<Location_X><%=xPos%></Location_X>',
        '<Location_Y><%=yPos%></Location_Y>',
        '<Scale><%=scale%></Scale>',
        '<Label><![CDATA[<%=label%>]]></Label>',
      '<% }else if(type=="image"){  %>',
        '<PicUrl><![CDATA[<%=pic%>]]></PicUrl>',
      '<% } %>',
    '</xml>'
  ].join('')

  return _.template(tpl)(info);
}
Example #10
0
exports.boolean = function (options) {
    return new Field(_.defaults((options || {}), {
        widget: widgets.checkbox(),
        required: false,
        parse: Boolean
    }));
};
Example #11
0
    _.map(records, function(record) {
      var id = record.Id;
      if (!id) {
        throw new Error('Record id is not found in record.');
      }
      var sobjectType = type || (record.attributes && record.attributes.type) || record.type;
      if (!sobjectType) {
        throw new Error('No SObject Type defined in record');
      }
      record = _.clone(record);
      delete record.Id;
      delete record.type;
      delete record.attributes;

      var url = [ self._baseUrl(), "sobjects", sobjectType, id ].join('/');
      return self.request({
        method : 'PATCH',
        url : url,
        body : JSON.stringify(record),
        headers : _.defaults(options.headers || {}, {
          "Content-Type" : "application/json"
        })
      }, {
        noContentResponse: { id : id, success : true, errors : [] }
      });
    })
Example #12
0
exports.embedList = function (options) {
    return new EmbeddedList(_.defaults((options || {}), {
        widget: widgets.embedList({
            singleton: false,
            widget: widgets.defaultEmbedded()
        })
    }));
};
Example #13
0
function Jsonrpc (url, config){
    EventEmitter.call(this);
    var self = this;
    var cfg = _.defaults(config || {}, {'url' : url, json:true, 
        headers:{'Content-Type': 'application/json'}}
    );
    self.request = request.defaults(cfg);
}
Example #14
0
var User_Apply = function (args){

    if(!args){
        return ;
    }

    _.defaults(this ,  _.pick(args , 'userId' ,'applyId' ,'createTime', 'role' ));
}
Example #15
0
var Approve = function (args){

    if(!args){
        return ;
    }

    _.defaults(this ,  _.pick(args , 'id' ,'reply' , 'applyId' ));
}
Example #16
0
exports.settings = function(doc, req) {
    var isAdmin = utils.isAdmin(req) || utils.isAdminParty(req);


    if (!doc) doc = {};
    var settings = _.defaults(doc, dashboard_settings.defaultSettings);

    if (!utils.isUser(req) && settings.host_options.redirect_frontpage_on_anon) {
        var dashboard_url = dashboard_links.dashboardURL(settings, 'dashboard', 'dashboard', req);
        var login_url = dashboard_url + 'login';
        // not logged in, and please redirect.
        return {
                code: 302,
                body: "See other",
                headers: {"Location": login_url}
            };
    }

    if (!settings.sessions.type) settings.sessions.type = 'local';
    settings.sessions['login_type_' +  settings.sessions.internal.login_type] = true;
    settings.sessions['type_' + settings.sessions.type] = true;


    var content = templates['settings.html']({
        isAdmin : isAdmin,
        settings : settings,
        host_options : JSON.stringify(settings.host_options)
    });

    var scripts = [
        "static/js/settings.js",
        "static/js/lib/jquery.dom.form_params.js",
        "static/js/lib/jquery.form.js",
        "static/js/lib/chosen.jquery.min.js",
        "jam/jquery.lego/jquery.lego.js",
        "jam/json.edit/json.schema.js",
        "jam/json.edit/nsgen.js",
        "jam/json.edit/json.edit.js",
        "jam/events/events.js",
        "jam/couchr/couchr-browser.js",
        "jam/pico-couch-ddoc/pico-couch-ddoc.js",
        "jam/ractive/Ractive.js",
        "jam/ractive-couch/ractive-couch.js",
        "jam/gardener-status/gardener-status.js"
    ];
    return {
        code: 200,
        body: templates['base.html']({
            dont_cache : true,
            title: 'Garden - Settings',
            content: content,
            baseURL: utils.getBaseURL(req),
            scripts : scripts,
            settings : settings
        }),
        "headers": {"Cache-Control": "no-cache"}
    };
}
Example #17
0
function objectField(options, validator) {
    options.validators = options.validators || [];
    options.validators.unshift(validator);
    return new Field(_.defaults((options || {}), {
        parse: function (raw) {
            return JSON.parse(raw);
        }
    }));
};
Example #18
0
var Field = exports.Field = function Field(options) {
    _.extend(this, _.defaults(options || {}, {
        widget: widgets.text(),
        omit_empty: false,
        permissions: {},
        validators: [],
        required: true
    }));
    return this;
};
Example #19
0
exports.string = function (options) {
    return new Field(_.defaults((options || {}), {
        parse: function (raw) {
            if (raw === null || raw === undefined) {
                return '';
            }
            return '' + raw;
        }
    }));
};
Example #20
0
        "createProfile": function(server, primary){
            var primaryLower = primary.toLowerCase();

            if(!_.has(this.profiles, server)){
                this.profiles[server] = {};
            }
            if(!_.has(this.profiles[server], primaryLower)){
                this.profiles[server][primaryLower] = {
                    "profile": {},
                    "preferences": {}
                };
                this.profiles[server][primaryLower].profile.primary = primary;
            }

            // Ensure all profiles have the keys specified by config.json
            //TODO(samstudio8) Currently only handles "top-level"
            _.defaults(this.profiles[server][primaryLower].profile, this.config.schema.profile);
            _.defaults(this.profiles[server][primaryLower].preferences, this.config.schema.preferences);
        },
Example #21
0
exports.frontpage = function(doc, req) {

    if (!doc) doc = {};
    var settings = _.defaults(doc, dashboard_settings.defaultSettings);

    if (!utils.isUser(req) && settings.host_options.redirect_frontpage_on_anon) {
        var dashboard_url = dashboard_links.dashboardURL(settings, 'dashboard', 'dashboard', req);
        var login_url = dashboard_url + 'login';
        // not logged in, and please redirect.
        return {
                code: 302,
                body: "See other",
                headers: {"Location": login_url}
            };
    }


    if (settings.frontpage.use_link) {
        return {
                code: 302,
                body: "See other",
                headers: {"Location": doc.frontpage.link_url}
            };
    }

    // if no trailing slash, for saftey of resource urls, rewrite to a trailing slash
    if (/\/_rewrite$/.test(req.headers["x-couchdb-requested-path"])) {
             return {
                code: 302,
                body: "See other",
                headers: {"Location": req.headers["x-couchdb-requested-path"] + '/'}
            };
    }

    var content;
    if (settings.frontpage.use_markdown) {
        settings.frontpage.markdown_content = showdown.convert( settings.frontpage.markdown );
        content = templates['frontpage_markdown.html'](settings.frontpage);
    } else {
        content = settings.frontpage.html;
    }

    return {
            code: 200,
            body: templates['base.html']({
                title: 'Garden',
                content: content,
                baseURL: utils.getBaseURL(req)
            })
    };
}
Example #22
0
		_.each(req.form, function(val, key) {
			if (!_(key).startsWith("_")) {
				docKey = (key.charAt(key.length-2) === '_') ? key.slice(0, -2)+'_1' : key;
				if (theDoc[docKey].type == "boolean") {
					val = (val) ? true : false;
				}
				req.form[key] = {
					value: val,
					type: theDoc[docKey].type,
					options: theDoc[docKey].options
				};
				_.defaults(req.form, theDoc);
			}
		});
  return function(info, cb){
    //默认值
    info = _.isString(info) ? {text: info} : info;
    
    _.defaults(info, {
      sp: 'webot',
      user: '******',
      type: 'text',
      text: 'help',
      pic: 'http://www.baidu.com/img/baidu_sylogo1.gif',
      xPos: '23.08',
      yPos: '113.24',
      scale: '20',
      label: 'this is a location'
    });

//    console.dir(WeBotShell.TEMPLATE);
    var content = _.template(WeBotShell.TEMPLATE)(info);
    
    //发送请求
    request.post({
      url: url,
      qs: WeBotShell.makeAuthQuery(token),
      body: content
    }, function(err, res, body){
      if(err || res.statusCode=='403' || !body){
        cb(err || res.statusCode, body);
      }else{
        xmlParser.parseString(body, function(err, result){
          if (err || !result || !result.xml){
            cb(err || 'result format incorrect', result);
          }else{
            var json = result.xml;
            json.ToUserName = json.ToUserName && String(json.ToUserName);
            json.FromUserName = json.FromUserName && String(json.FromUserName);
            json.CreateTime = json.CreateTime && Number(json.CreateTime);
            json.FuncFlag = json.FuncFlag && Number(json.FuncFlag);
            json.MsgType = json.MsgType && String(json.MsgType);
            json.Content = json.Content && String(json.Content);
            if(json.MsgType=='news'){
              json.ArticleCount = json.ArticleCount && Number(json.ArticleCount);
              json.Articles = json.Articles && json.Articles.length>=1 && json.Articles[0];
            }
            cb(err, json);
          }
        });
      }
    });
    return content;
  };
Example #24
0
exports.number = function (options) {
    options = prependValidator(options, function (doc, value) {
        if (isNaN(value)) {
            throw new Error('Not a number');
        }
    });
    return new Field(_.defaults((options || {}), {
        parse: function (raw) {
            if (raw === '' || raw === null || raw === undefined) {
                return NaN;
            }
            return Number(raw);
        }
    }));
};
Example #25
0
exports.numberChoice = function (options) {
    options = options || {};
    prependValidator(options, function (doc, value) {
        if (isNaN(value)) {
            throw new Error('Not a number');
        }
    });
    return exports.choice(_.defaults(options, {
        parse: function (raw) {
            if (raw === null || raw === '') {
                return '';
            }
            return Number(raw);
        }
    }));
};
Example #26
0
exports.topbar_css = function(head, req) {
    var settingsDoc = {};
    var selectedThemeDoc = null;
    start({'headers' : {'Content-Type' : 'text/css'}});
    while ((row = getRow())) {
        if (row.key === 0) settingsDoc = row.doc;
        if (row.key === 1) selectedThemeDoc = row.doc;
    }
    var settings = _.defaults(settingsDoc, dashboard_settings.defaultSettings);
    var position = 'relative';
    if (req.query.position) position = req.query.position;
    var theme_content;

    try {
        var not_theme = settings.top_nav_bar.notification_theme || 'libnotify';
        var theme = 'humane-' + not_theme + '.css';
        theme_content = templates[theme]({});
    } catch(ignore){}

    var default_height = 25;
    if (selectedThemeDoc){
        var meta = selectedThemeDoc.couchapp || selectedThemeDoc.kanso;
        if (meta && meta.config && meta.config.topbar && meta.config.topbar.height) {
            default_height = selectedThemeDoc.kanso.config.topbar.height;
        }
    }
    var custom_icon_top_padding = 3;
    if (settings.top_nav_bar.icon_name && settings.top_nav_bar.icon_height) {
        custom_icon_top_padding = (default_height - settings.top_nav_bar.icon_height) / 2;

    }
    var template = templates['topbar.css'];
    if (selectedThemeDoc) {
        template = handlebars.compile(selectedThemeDoc['topbar.css']);
    }

    send (template({
        top_nav_bar : settings.top_nav_bar,
        custom_icon_top_padding : custom_icon_top_padding,
        theme_content : theme_content,
        position: position
    }));


}
Example #27
0
/**
 * 获取logger对象, 参考日志类 https://github.com/flatiron/winston
 */
function getLogger(options){
  //默认参数
  options = _.defaults(options||{},{
    type: 'common'
  });
  
  var winston = require('winston');
  
  //日志Adapter
  var consoleAdapter = new winston.transports.Console(options.consoleOptions || {
    colorize: true,
    timestamp: function(){
      return utils.formatDate(new Date(),'hh:mm:ss');
    }
  });

  var fileAdapter = new winston.transports.File(options.fileOptions || {
    filename: options.filename || 'output.log',
    colorize: false,
    maxsize: 1024 * 1024 * 10,
    maxFiles: 1,
    json: false,
    timestamp: function(){
      return utils.formatDate();
    }
  });
  
  //返回
  var transports = [];
  switch(options.type){
    //默认是Console + File
    case 'common':
      transports = [consoleAdapter,fileAdapter];
      break;

    case 'console':
      transports = [consoleAdapter];
      break;

    case 'file':
      transports = [fileAdapter];
      break;
  }
  return new winston.Logger({transports: transports});
}
Example #28
0
exports.array = function (options) {
    options = options || {};
    options.hint = options.hint || "Values should be comma separated";
    prependValidator(options, function (doc, value) {
        if (!_.isArray(value)) {
            throw new Error('Not an array');
        }
    });
    return exports.string(_.defaults(options, {
        parse: function (raw) {
            var result = utils.parseCSV(raw || '')[0] || [];
            if (options.parseEach) {
                result = _.map(result, options.parseEach);
            }
            return result;
        }
    }));
};
Example #29
0
exports.login = function (doc, req) {
    if (!doc) doc = {};
    var settings = _.defaults(doc, dashboard_settings.defaultSettings);
    var dashboard_url = dashboard_links.dashboardURL(settings, 'dashboard', 'dashboard', req);

    if (utils.isUser(req)) {
        return {
            code: 302,
            body: 'You are already signed in.',
            headers: {"Location": dashboard_url}
        };
    }

    if (settings.sessions.type === "internal" && settings.sessions.internal.login_type === 'browserid') {
        return browseridLogin(settings, req);
    } else {
        return usersTableLogin(settings, req);
    }
}
Example #30
0
exports.frontpage = function(doc, req) {

    if (!doc) doc = {};
    var settings = _.defaults(doc, dashboard_settings.defaultSettings);

    if (!utils.isUser(req) && settings.host_options.redirect_frontpage_on_anon) {
        var dashboard_url = dashboard_links.dashboardURL(settings, 'dashboard', 'dashboard', req);
        var login_url = dashboard_url + 'login';
        // not logged in, and please redirect.
        return {
                code: 302,
                body: "See other",
                headers: {"Location": login_url}
            };
    }


    if (settings.frontpage.use_link) {
        return {
                code: 302,
                body: "See other",
                headers: {"Location": doc.frontpage.link_url}
            };
    }

    var content;
    if (settings.frontpage.use_markdown) {
        settings.frontpage.markdown_content = showdown.convert( settings.frontpage.markdown );
        content = templates['frontpage_markdown.html'](settings.frontpage);
    } else {
        content = settings.frontpage.html;
    }

    return {
            code: 200,
            body: templates['base.html']({
                title: 'Garden',
                content: content,
                baseURL: utils.getBaseURL(req)
            })
    };
}