Пример #1
0
                setup: function () {
                    /* jshint ignore:start */

                    var numberOfItems = 10000;
                    var filteredCount = this.results.attr('numberOfItems');
                    var values = this.makeArray(numberOfItems);
                    var source = new can.List();


                    values.forEach(function (element, index) {
                        if (index < filteredCount) {
                            element.completed = true;
                        } else {
                            element.completed = false;
                        }

                        source.push(element);
                    });

                    var element = source.attr(numberOfItems - 1);
                    var filtered = source.dFilter(this.makePredicateFn());

                    var renderer = can.stache(
                        "<ul>\n{{#each filtered}}\n<li></li>\n{{/each}}\n</ul>");

                    var fragment = renderer({
                        filtered: filtered
                    });

                    $(this.sandboxEl).html(fragment);

                    /* jshint ignore:end */
                },
Пример #2
0
                setup: function () {
                    /* jshint ignore:start */

                    var numberOfItems = this.results.attr('numberOfItems');
                    var values = this.makeArray(numberOfItems);
                    var source = new can.List();

                    values.forEach(function (element) {
                        source.push(element);
                    });

                    var updateIndex = source.attr('length') - 1;
                    var element = source.attr(updateIndex);
                    var filtered = source.dFilter(this.makePredicateFn());

                    var renderer = can.stache(
                        "<ul>\n{{#each filtered}}\n<li></li>\n{{/each}}\n</ul>");

                    var fragment = renderer({
                        filtered: filtered
                    });

                    $('#sandbox').html(fragment);

                    /* jshint ignore:end */
                },
Пример #3
0
    template: function (data, options) {

        // fetch a subtemplate content from datagrid tag
        var fragment = document.createDocumentFragment();
        var element = document.createElement('div');
        fragment.appendChild(element);

        options.attr('tags').content(element, {
            scope: data,
            options: options
        });

        if (data.attr('embedded') === 'true' ) {
            data.attr('config.embedded', true);
        }

        data.attr('config').processControlDocumentFragment(fragment);

        var classes = 'datagrid-layout';
        classes += ' {{#if config.visibleForm}}collapsed{{/if}}';
        classes += ' {{#if config.embedded}}embedded{{/if}}';
        classes += ' {{#if config.formConfig}}has-form{{/if}}';

        var html = '<div class="' + classes + '">';

        html +=    '<div class="datagrid-header"><h4>{{title}}</h4>';
        html += '{{#if config.allowInsert}}<button can-click="showInsertForm" class="btn small right primary insert">Insert</button>{{/if}}';

        data.attr('config').actions.each(function(action) {

            html += action.getTopTemplate();

        });


        html += '</div>';

        html += '<div class="datagrid">';
        html += '<loader data-name="datagrid-loader"></loader>';
        html += '<div class="datagrid-table">';
        html += '<datagrid-filters config="{config.filtersConfig}"></datagrid-filters>';
        html += '<datagrid-pagination config="{config.pagination}"></datagrid-pagination>';
        html += '<datagrid-table config="{config}"></datagrid-table>';
        html += '<datagrid-pagination config="{config.pagination}"></datagrid-pagination>';
        html += '</div>';
        html += '</div>';

        html += '{{#if config.visibleForm}}<div class="datagrid-edit-form">';
        html += '<div class="overlay"></div>';
        html += '<div class="edit-form-window"><st-form config="{config.formConfig}" visible-form="{config.visibleForm}"></st-form></div>';
        html += '</div>{{/if}}';

        html += '</div>';

        return can.stache(html)(data, options);
    },
Пример #4
0
	beforeEach: function () {
		template = can.stache('<bitstrap-dropdown items="{items}" button-label="test"></bitstrap-dropdown>');
		$('#qunit-fixture').append(template({}));
		$component = $('bitstrap-dropdown',$('#qunit-fixture') );
		vm = can.viewModel($component);
		
		var items = new can.List([{label:'test'},{label:'hello'}]);
		
		vm.attr('items', items);
	}
Пример #5
0
 template: function(data, helpers) {
     var filters = data.attr('config').filters;
     if (!can.isEmptyObject(filters.attr())) { //There are some filters to render
         var html = '<div class="datagrid-filters">';
         filters.each(function(filter){
             html += '   <div class="form-group filter-'+filter.name+'" data-filter-type="' + filter.type + '">' + filter.getLabelTemplate() + filter.getTemplate();
             if (filter.name === 'search') {
                 html += '<button class="icon-search search-input-toggle"></button>';
             }
             html += '</div>'; //end of .form-group
         });
         html += '</div>'; //end of .datagrid-filters
         return can.stache(html)(data, helpers);
     } else {
         return ''; //No filters -> nothing to render
     }
 },
Пример #6
0
QUnit.test('Create button is disabled while posting data', function () {
    var expectingRequest = true;
    var frag = can.stache('<tournament-list {app-state}="appState" {tournament}="tournament" />')({
        appState: {
            isAdmin: true
        },
        tournament: {
            name: 'Ballderdash',
            date: '01/21/1987'
        }
    });
    var resolveRequest;

    fixture('POST /services/tournaments', function (req, res) {
        ok(expectingRequest, 'Request was made');

        // Determine when the request resolves, later
        resolveRequest = res;

        // The request should only be made once
        expectingRequest = false;
    });

    $('#qunit-fixture').html(frag);

    // Click the button multiple times and ensure it's disabled
    // during requests
    F('tournament-list .create-btn')
        .visible('Create button is visible')
        .attr('disabled', undefined, 'Create button is enabled')
        .click()
        .attr('disabled', 'disabled', 'Create button is disabled after click')
        .click()
        .then(function () {
            resolveRequest({});
        })
        .attr('disabled', undefined,
            'Create button is enabled after the request is resolved');
});
Пример #7
0
	QUnit.test('Form is only shown to admins', function () {
		var session = new Session({
			user: {
				isAdmin: false
			}
		});

		var frag = can.stache('<player-edit {session}="session" />')({
			session: session
		});

		$('#qunit-fixture').html(frag);

		F('player-edit .edit-form')
			.missing('Edit form is excluded for non-admin user')
			.then(function () {
				session.attr('user', {
					isAdmin: true
				});
			})
			.exists('Edit form is included for admin user');
	});
Пример #8
0
import $ from "jquery";
import F from "funcunit";

F.attach(QUnit);

QUnit.module("bit-tabs view model");

QUnit.test("basics", function(){
	var tabsVM = new BitTabsVM();
	var panelVM = new BitPanelVM();
	tabsVM.addPanel(panelVM);

	equal(panelVM.attr("active"), true, "first panel added is active");
});

var template = can.stache("<bit-tabs tabs-class='nav nav-tabs'><bit-panel title='First'>Hello!</bit-panel><bit-panel title='Second'>Another</bit-panel></bit-tabs>");

QUnit.module("bit-tabs component",{
	setup: function(){
		$("#qunit-fixture").append(template());
	}
});

QUnit.test("basics", function(){
  F("bit-tabs ul li").text(/First/, "has text");
  F("bit-tabs ul").hasClass("nav", true).hasClass("nav-tabs", true, "tabsClass gets assigned to ul");
});

QUnit.test("clicking works", function(){
  F("bit-tabs li:nth(1)").click();
  F("bit-panel:nth(1)").text("Another", "Correct text shown");
Пример #9
0
import fixtures from "../../fixtures/fixture_data.json";
import can from "can";
import $ from "jquery";

import Bit from "../../models/bit";

import "../../bits_vertical_infinite/";
import "./custom_bit";

var bitData = new Bit.List(fixtures.data);

var template = can.stache('<bh-bits-vertical-infinite bits={bits} bit-tag="bh-custom-bit"></bh-bits-vertical-infinite>');

var State = can.Map.extend({
	isAdmin(){
		return false;
	},
	assetRoot: "../",
	hubId: 1
});

$('#app').html(template({
	bits: bitData,
	state: new State()
}));
Пример #10
0
import can from "can";
import Service from "./service";
import moment from "moment";

import "can/map/define/";
import "components/service-config-formatter/";

var TOOLTIP = can.stache('<bh-service-config-formatter service="{this}"></bh-service-config-formatter>');

var fillInMissingTimepoints = function(points, length){
	var firstRun = true;
	
	while(points.length < length){
		if(firstRun){
			points.unshift(0);
			firstRun = false;
		} else {
			points.unshift(null);
		}
		
	}
	return points;
};

var alphaVersion = function(color){
	return 'rgba' + color.substring(3, color.length - 1) + ', .2)';
};

var Analytics = can.Model.extend({
	findAll : '/api/v3/analytics?source_type={sourceType}&resolution={resolution}&owner_id={ownerId}'
}, {
Пример #11
0
Component.extend({
    tag: "task-editor",
    view: stache(`

        {{# if logout }}
            <h1><code>&lt;task-editor&gt;</code></h1>
            <p>
                This content is provided by the <code>&lt;task-editor&gt;</code> component.
                Click <a href="{{ routeUrl(page='home') }}">Home</a> to return to the homepage, or
                <button on:click='logout()'>Logout</button> to log out. Edit the task below:

            </p>
        {{/ else }}
            <h2>Task Editor</h2>
        {{/ if }}
        <form on:submit='save(scope.event)'>
            Name: {{ name }}
            <p>
                <input value:bind='name'/>
            </p>
            Progress: {{ progress }}
            <p>
                <percent-slider value:bind='progress'/>
            </p>
            <button disabled:from="isSaving">
                {{# if(isSaving) }}Saving{{ else }}Save{{/ if }}
            </button>
        </form>
    `),
    ViewModel: DefineMap.extend({
        id: "number",
Пример #12
0
QUnit.test('Register button exists', function () {
    var frag = can.stache('<bitballs-navigation></bitballs-navigation>')();
    var buttons = $(frag).find('.register-btn');

    QUnit.equal(buttons.length, 1, 'Register button found');
});
Пример #13
0
 beforeEach: function () {
     var frag = can.stache('<bitballs-navigation></bitballs-navigation>')();
     testUtils.insertAndPopulateIframe('#qunit-fixture', frag);
 },
Пример #14
0
import QUnit from "steal-qunit";
// import {CanPanelVM, CanTabsVM} from "bit-tabs";
import can from "can";
import stache from "can/view/stache/";
import $ from "jquery";

QUnit.module("bit-strap-scrollspy view model");

QUnit.test("basics", function(){
	QUnit.ok(true, 'works');
});

var template = can.stache("<div></div>");

QUnit.module("bit-strap-scrollspy component",{
	setup: function(){
		$("#qunit-fixture").append(template());
	}
});

QUnit.test("basics", function(){
	QUnit.ok(true, 'works');
});
Пример #15
0
    template: function (data, options) {

        var formConfig = data.attr('config');

        if (!formConfig.configProcessed()) {
            _fullFillConfigFromInner(formConfig, data, options);
            formConfig.setDefaultValues();
        }

        var html = '';

        html += '<loader data-name="form-loader"></loader>';
        html += '<div class="form-container">';
        html += '<div class="form-content">';

        data.attr('config').titles.each(function (title) {
            html += title.getTemplate();
        });

        data.attr('config').structuredFields.each(function (field) {
            html += field.getTemplate();
        });

        html += '<div class="form-areas">';
        data.attr('config').areas.each(function (area) {
            html += area.getTemplate();
        });
        html += '</div>';

        html += '</div>'; //form-content

        html += '</div>'; //container

        var actionsHtml = '';
        data.attr('config').actions.each(function (action) {
            actionsHtml += action.getTemplate();
        });

        if (actionsHtml) { //add footer only if there is any action
            html += '<div class="form-bottom">';
            html += actionsHtml;
            html += '</div>';
        }

        var resultFragment = can.stache(html)(data, options);

        data.attr('config').areas.each(function (area) {

            var areaContainer = resultFragment.querySelectorAll('#' + area.attr('id'))[0];
            var areaFragmentInner = area.getInnerFragment(options);

            var shouldBeHiddenCompute = area.getHiddenCompute();

            if (!shouldBeHiddenCompute()) {
                areaContainer.appendChild(areaFragmentInner);
            }

            var shouldBeHiddenListener = function (event, newShouldBeHidden) {
                var isHidden = areaFragmentInner.parentNode !== areaContainer;
                if (newShouldBeHidden && !isHidden) {
                    areaContainer.removeChild(areaFragmentInner);

                } else if (!newShouldBeHidden && isHidden) {
                    areaContainer.appendChild(areaFragmentInner);
                }
            };

            shouldBeHiddenCompute.bind('change', shouldBeHiddenListener);
            data._context.onRemovedCallbacks.push(function () {
                shouldBeHiddenCompute.unbind('change', shouldBeHiddenListener);
            });

        });
        return resultFragment;
    },
Пример #16
0
		renderCard : function(bit, opts){
			var tag = this.attr('bitTag');
			var template = can.stache('<' + tag + ' bit="{bit}" state="{state}"></' + tag + '>');
			return template(opts.scope.add({bit: bit}));
		}
Пример #17
0
import can from 'can';
import Component from 'can.component';
import registerIndex from '../../templates/authentication/register.stache';
import RegisterModel from '../models/authenticationModel';

export default can.Component.extend({
    tag: 'register-user',
    template: can.stache(registerIndex),
    viewModel: {
        username: '',
        password: '',
        email: '',
        registerUser: function(vm) {
            var user = new RegisterModel({
                username: vm.username,
                password: vm.password,
                email: vm.email
            });
            user.save();
        }
    }
});