Example #1
0
    ko.computed(function() {
      var dataValue = ko.utils.unwrapObservable(valueAccessor().data.subsCount),
        isFirstRender = !savedNodes,
        shouldDisplay, needsRefresh, gutter;

      gutter = -(typeof valueAccessor().gutter !== 'undefined' ? valueAccessor().gutter : 1);
      shouldDisplay = dataValue + (didDisplayOnLastUpdate ? gutter : 0) >= ko.utils.unwrapObservable(valueAcc.threshold);
      if (typeof valueAccessor().not !== 'undefined' && valueAccessor().not) {
        shouldDisplay = !shouldDisplay;
      }
      needsRefresh = isFirstRender || (shouldDisplay !== didDisplayOnLastUpdate);

      if (needsRefresh) {
        // Save a copy of the inner nodes on the initial update, but only if we have dependencies.
        if (isFirstRender && ko.computedContext.getDependenciesCount()) {
          savedNodes = ko.bindingHandlers['ifSubs'].cloneNodes(ko.virtualElements.childNodes(element), true /* shouldCleanNodes */ );
        }

        if (shouldDisplay) {
          if (!isFirstRender) {
            ko.virtualElements.setDomNodeChildren(element, ko.bindingHandlers['ifSubs'].cloneNodes(savedNodes));
          }
          ko.applyBindingsToDescendants(bindingContext, element);
        } else {
          ko.virtualElements.emptyNode(element);
        }

        didDisplayOnLastUpdate = shouldDisplay;
      }
    }, null, {
        knockout.computed(function() {
            var viewModel = knockout.unwrap(viewModelValue);
            var content = "<!-- ko __widgetBind: $data -->" + template + "<!-- /ko -->";
            
            // TODO: do we need to tidy up old bindings?
            knockout.utils.setHtml(element, content);
            knockout.utils.domData.set(knockout.virtualElements.firstChild(element), "__widgets", dependencies);

            knockout.applyBindingsToDescendants(viewModel, element);
        });
Example #3
0
    'init': function(element, valueAccessor, ignored1, ignored2, bindingContext) {
        var componentViewModel = ko.utils.unwrapObservable(valueAccessor());    

        var template = componentViewModel['__view'];                

        ko.virtualElements.setDomNodeChildren(element, ko.utils.parseHtmlFragment(template));

        var childBindingContext = bindingContext['createChildContext'](componentViewModel);
        ko.applyBindingsToDescendants(childBindingContext, element);

        if (componentViewModel.afterRender) {
            componentViewModel.afterRender(ko.virtualElements.childNodes(element));
        }

        ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
            if (componentViewModel.dispose) {
                componentViewModel.dispose();
            }
        });


        return { 'controlsDescendantBindings': true };
    },
 init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
     var widgets = knockout.utils.domData.get(element, "__widgets");
     var innerBindingContext = bindingContext.extend({__widgets: widgets});
     knockout.applyBindingsToDescendants(innerBindingContext, element);
     return { controlsDescendantBindings: true };
 }
        .css('max-height', '0')
        .css('overflow', 'hidden')

      const killMe = collapsed.subscribe((v) => {
        if (v) return
        $(el)
          .css('max-height', maxHeight)
          .css('overflow', overflow)
          .css('padding', padding)
          .css('border', border)

        killMe.dispose()
      })
    }

    ko.applyBindingsToDescendants(innerCtx, el)

    ko.computed(() => {
      const isCollapsed = ko.unwrap(valueAccessor())

      if (!initalized) {
        initalized = true
        if (!isCollapsed) return
      }

      $(el)
        .velocity(isCollapsed ? 'slideUp' : 'slideDown', {
          duration: COLLAPSE_DURATION,
          easing: 'easeInOutSine'
        })
Example #6
0
        init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
            var relationship = valueAccessor();
            var instruments = ko.observableArray([]);

            function addInstrument(instrument, linkAttribute) {
                var observable = ko.observable(instrument);

                observable.linkAttribute = ko.observable(linkAttribute);
                instruments.push(observable);

                observable.subscribe(function (instrument) {
                    relationship.attributes.remove(observable.linkAttribute.peek())
                    if (instrument.gid) {
                        observable.linkAttribute(relationship.addAttribute(instrument.gid));
                    } else {
                        observable.linkAttribute(null);
                    }
                });
            }

            function focusLastInput() {
                $(element).find(".ui-autocomplete-input:last").focus();
            }

            _.each(relationship.attributes.peek(), function (attribute) {
                if (attribute.type.root_id == 14) {
                    addInstrument(MB.entity(attribute.type, "instrument"), attribute);
                }
            });

            if (!instruments.peek().length) {
                addInstrument(new MB.entity.Instrument({}));
            }

            var vm = {
                instruments: instruments,

                addItem: function () {
                    addInstrument(new MB.entity.Instrument({}));
                    focusLastInput();
                },

                removeItem: function (item) {
                    var index = instruments.indexOf(item);

                    instruments.remove(item);
                    relationship.attributes.remove(item.linkAttribute.peek());

                    index = index === instruments().length ? index - 1 : index;
                    var $nextButton = $(element).find("button.remove-item:eq(" + index + ")");

                    if ($nextButton.length) {
                        $nextButton.focus();
                    } else {
                        focusLastInput();
                    }
                }
            };

            var childBindingContext = bindingContext.createChildContext(vm);
            ko.applyBindingsToDescendants(childBindingContext, element);

            return { controlsDescendantBindings: true };
        }
 function renderChild() {
     ko.virtualElements.setDomNodeChildren(element, cloneNodes(savedNodes));
     ko.applyBindingsToDescendants(viewModel, element);
 }