Jump To …

can.control.view.js

/*
* CanJS - 1.1.2 (2012-11-28)
* http://canjs.us/
* Copyright (c) 2012 Bitovi
* Licensed MIT
*/
(function (can, window, undefined) {

can/control/view/view.js

  var URI = steal.URI || steal.File;

  can.Control.getFolder = function () {
    return can.underscore(this.fullName.replace(/\./g, "/")).replace("/Controllers", "");
  };

  can.Control._calculatePosition = function (Class, view) {
    var classParts = Class.fullName.split('.'),
      classPartsWithoutPrefix = classParts.slice(0);
    classPartsWithoutPrefix.splice(0, 2), action_name = "init"; // Remove prefix (usually 2 elements)
    var hasControllers = (classParts.length > 2) && classParts[1] == 'Controllers',
      path = hasControllers ? can.underscore(classParts[0]) : can.underscore(classParts.join("/")),
      controller_name = can.underscore(classPartsWithoutPrefix.join('/')).toLowerCase(),
      suffix = (typeof view == "string" && /\.[\w\d]+$/.test(view)) ? "" : can.view.ext;

calculate view

    if (typeof view == "string") {
      if (view.substr(0, 2) == "//") { //leave where it is
      } else {
        view = "//" + URI(path).join('views/' + (view.indexOf('/') !== -1 ? view : (hasControllers ? controller_name + '/' : "") + view)) + suffix;
      }
    } else if (!view) {
      view = "//" + URI(path).join('views/' + (hasControllers ? controller_name + '/' : "") + action_name.replace(/\.|#/g, '').replace(/ /g, '_')) + suffix;
    }
    return view;
  };

  var calculateHelpers = function (myhelpers) {
    var helpers = {};
    if (myhelpers) {
      if (can.isArray(myhelpers)) {
        for (var h = 0; h < myhelpers.length; h++) {
          can.extend(helpers, myhelpers[h]);
        }
      }
      else {
        can.extend(helpers, myhelpers);
      }
    } else {
      if (this._default_helpers) {
        helpers = this._default_helpers;
      }

load from name

      var current = window;
      var parts = this.constructor.fullName.split(/\./);
      for (var i = 0; i < parts.length; i++) {
        if (current) {
          if (typeof current.Helpers == 'object') {
            can.extend(helpers, current.Helpers);
          }
          current = current[parts[i]];
        }
      }

      if (current && typeof current.Helpers == 'object') {
        can.extend(helpers, current.Helpers);
      }

      this._default_helpers = helpers;
    }
    return helpers;
  };

  can.Control.prototype.view = function (view, data, myhelpers) {

shift args if no view is provided

    if (typeof view != "string" && !myhelpers) {
      myhelpers = data;
      data = view;
      view = null;
    }

guess from controller name

    view = can.Control._calculatePosition(this.constructor, view, this.called);

calculate data

    data = data || this;

calculate helpers

    var helpers = calculateHelpers.call(this, myhelpers);

    return can.view(view, data, helpers); //what about controllers in other folders?
  };


})(can, this);