Ejemplo n.º 1
0
    function isActiveForRoute(routeName) {
      var handlers = router.router.recognizer.handlersFor(routeName);
      var leafName = handlers[handlers.length-1].handler;
      var maximumContexts = numberOfContextsAcceptedByHandler(routeName, handlers);

      // NOTE: any ugliness in the calculation of activeness is largely
      // due to the fact that we support automatic normalizing of
      // `resource` -> `resource.index`, even though there might be
      // dynamic segments / query params defined on `resource.index`
      // which complicates (and makes somewhat ambiguous) the calculation
      // of activeness for links that link to `resource` instead of
      // directly to `resource.index`.

      // if we don't have enough contexts revert back to full route name
      // this is because the leaf route will use one of the contexts
      if (contexts.length > maximumContexts) {
        routeName = leafName;
      }

      var args = routeArgs(routeName, contexts, null);
      var isActive = router.isActive.apply(router, args);
      if (!isActive) { return false; }

      if (Ember.FEATURES.isEnabled("query-params-new")) {
        if (!isCurrentWhenSpecified && leafName === loadedParams.targetRouteName) {
          var visibleQueryParams = {};
          merge(visibleQueryParams, loadedParams.queryParams);
          router._prepareQueryParams(loadedParams.targetRouteName, loadedParams.models, visibleQueryParams);
          isActive = shallowEqual(visibleQueryParams, router.router.state.queryParams);
        }
      }
      return isActive;
    }
Ejemplo n.º 2
0
  _invoke: function(event) {
    if (!isSimpleClick(event)) { return true; }

    if (this.preventDefault !== false) {
      if (Ember.FEATURES.isEnabled("ember-routing-linkto-target-attribute")) {
        var targetAttribute = get(this, 'target');
        if (!targetAttribute || targetAttribute === '_self') {
          event.preventDefault();
        }
      } else {
        event.preventDefault();
      }
    }

    if (this.bubbles === false) { event.stopPropagation(); }

    if (get(this, '_isDisabled')) { return false; }

    if (get(this, 'loading')) {
      Ember.Logger.warn("This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid.");
      return false;
    }

    if (Ember.FEATURES.isEnabled("ember-routing-linkto-target-attribute")) {
      var targetAttribute2 = get(this, 'target');
      if (targetAttribute2 && targetAttribute2 !== '_self') {
        return false;
      }
    }

    var router = get(this, 'router');
    var loadedParams = get(this, 'loadedParams');

    var transition = router._doTransition(loadedParams.targetRouteName, loadedParams.models, loadedParams.queryParams);
    if (get(this, 'replace')) {
      transition.method('replace');
    }

    // Schedule eager URL update, but after we've given the transition
    // a chance to synchronously redirect.
    // We need to always generate the URL instead of using the href because
    // the href will include any rootURL set, but the router expects a URL
    // without it! Note that we don't use the first level router because it
    // calls location.formatURL(), which also would add the rootURL!
    var args = routeArgs(loadedParams.targetRouteName, loadedParams.models, transition.state.queryParams);
    var url = router.router.generate.apply(router.router, args);

    run.scheduleOnce('routerTransitions', this, this._eagerUpdateUrl, transition, url);
  },
Ejemplo n.º 3
0
  _doTransition: function(_targetRouteName, models, _queryParams) {
    var targetRouteName = _targetRouteName || getActiveTargetName(this.router);
    Ember.assert("The route " + targetRouteName + " was not found", targetRouteName && this.router.hasRoute(targetRouteName));

    var queryParams = {};
    merge(queryParams, _queryParams);
    this._prepareQueryParams(targetRouteName, models, queryParams);

    var transitionArgs = routeArgs(targetRouteName, models, queryParams);
    var transitionPromise = this.router.transitionTo.apply(this.router, transitionArgs);

    listenForTransitionErrors(transitionPromise);

    return transitionPromise;
  },
Ejemplo n.º 4
0
  href: computed('loadedParams', function computeLinkViewHref() {
    if (get(this, 'tagName') !== 'a') { return; }

    var router = get(this, 'router');
    var loadedParams = get(this, 'loadedParams');

    if (!loadedParams) {
      return get(this, 'loadingHref');
    }

    var visibleQueryParams = {};
    merge(visibleQueryParams, loadedParams.queryParams);
    router._prepareQueryParams(loadedParams.targetRouteName, loadedParams.models, visibleQueryParams);

    var args = routeArgs(loadedParams.targetRouteName, loadedParams.models, visibleQueryParams);
    var result = router.generate.apply(router, args);
    return result;
  }),