├── samples
├── iggrid.js
├── images
│ ├── arrowUp.gif
│ └── arrowDown.gif
├── grid
│ └── master-detail
│ │ └── app
│ │ ├── app.js
│ │ ├── services
│ │ └── dataService.js
│ │ ├── controllers
│ │ └── masterDetailController.js
│ │ └── lib
│ │ └── Math.uuid.js
├── sample.css
├── js
│ └── data
│ │ ├── population.js
│ │ ├── tasks.js
│ │ └── candidates.js
├── igUpload.html
├── igDialog.html
├── igVideoPlayer.html
├── igCombo.html
├── igHierarchicalGrid.html
├── igTileManager.html
├── igTreeGrid.html
├── igEditors.html
├── igMap.html
└── igHtmlEditor.html
├── src-samples
├── src
│ ├── iggrid.js
│ ├── images
│ │ ├── arrowUp.gif
│ │ └── arrowDown.gif
│ ├── grid
│ │ └── master-detail
│ │ │ ├── app
│ │ │ ├── app.js
│ │ │ ├── services
│ │ │ │ └── dataService.js
│ │ │ ├── controllers
│ │ │ │ └── masterDetailController.js
│ │ │ └── lib
│ │ │ │ └── Math.uuid.js
│ │ │ └── index.html
│ ├── sample.css
│ ├── js
│ │ └── data
│ │ │ ├── population.js
│ │ │ ├── tasks.js
│ │ │ └── candidates.js
│ ├── igUpload.html
│ ├── igDialog.html
│ ├── igVideoPlayer.html
│ ├── igCombo.html
│ ├── igHierarchicalGrid.html
│ ├── igTreeGrid.html
│ ├── igEditors.html
│ ├── igMap.html
│ ├── igTileManager.html
│ ├── igHtmlEditor.html
│ ├── igGrid-controller.html
│ ├── igPivotGrid-FlatDataSource.html
│ ├── igPivotGrid-XmlaDataSource.html
│ ├── igDataChart.html
│ ├── igGrid.html
│ └── igTree.html
├── app.js
├── .gitignore
├── grunt
│ ├── tasks
│ │ └── generator.js
│ └── lib
│ │ └── generator.js
├── package.json
├── gruntfile.js
├── igniteui-angular-samples.sln
├── readme.md
├── template
│ └── template.html
└── igniteui-angular-samples.njsproj
├── .jshintrc
├── images
├── igniteui-logo.png
└── home-background.jpg
├── .gitignore
├── indexController.js
├── test
├── protractor-conf.js
├── app
│ ├── js
│ │ ├── util.js
│ │ └── my-app-utils.js
│ └── index.html
└── karma.conf.js
├── dist
└── npm
│ ├── package.json
│ └── license.txt
├── bower.json
├── .travis.yml
├── .github
└── workflows
│ ├── node.js.yml
│ └── npm-publish.yml
├── Gruntfile.js
├── license.txt
└── package.json
/samples/iggrid.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src-samples/src/iggrid.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src-samples/app.js:
--------------------------------------------------------------------------------
1 | // empty - for now...
--------------------------------------------------------------------------------
/src-samples/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | bower_components
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "globals": {
3 | "jQuery": true,
4 | "angular": true
5 | }
6 | }
--------------------------------------------------------------------------------
/images/igniteui-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IgniteUI/igniteui-angularjs/HEAD/images/igniteui-logo.png
--------------------------------------------------------------------------------
/images/home-background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IgniteUI/igniteui-angularjs/HEAD/images/home-background.jpg
--------------------------------------------------------------------------------
/samples/images/arrowUp.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IgniteUI/igniteui-angularjs/HEAD/samples/images/arrowUp.gif
--------------------------------------------------------------------------------
/samples/images/arrowDown.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IgniteUI/igniteui-angularjs/HEAD/samples/images/arrowDown.gif
--------------------------------------------------------------------------------
/src-samples/src/images/arrowUp.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IgniteUI/igniteui-angularjs/HEAD/src-samples/src/images/arrowUp.gif
--------------------------------------------------------------------------------
/src-samples/src/images/arrowDown.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IgniteUI/igniteui-angularjs/HEAD/src-samples/src/images/arrowDown.gif
--------------------------------------------------------------------------------
/samples/grid/master-detail/app/app.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | var app = angular.module("app", ["ngResource", "igniteui-directives"]);
4 |
5 | app.constant("localStorage", window.localStorage);
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | bower_components
3 | test_out
4 | coverage
5 | instrument
6 | dist/igniteui-angularjs.min.js
7 | dist/npm/igniteui-angularjs.js
8 | dist/npm/igniteui-angularjs.min.js
9 |
--------------------------------------------------------------------------------
/src-samples/src/grid/master-detail/app/app.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | var app = angular.module("app", ["ngResource", "igniteui-directives"]);
4 |
5 | app.constant("localStorage", window.localStorage);
--------------------------------------------------------------------------------
/indexController.js:
--------------------------------------------------------------------------------
1 | angular.module('app').controller('indexController',
2 |
3 | ['$scope', 'northwindEmployees',
4 | function ($scope, northwindEmployees) {
5 |
6 | 'use strict';
7 |
8 | $scope.employees = northwindEmployees.data.slice(0,4);
9 |
10 | $scope.firstEmployee = $scope.employees[0];
11 |
12 | }]);
--------------------------------------------------------------------------------
/src-samples/grunt/tasks/generator.js:
--------------------------------------------------------------------------------
1 | module.exports = function (grunt) {
2 |
3 | 'use strict';
4 |
5 | grunt.registerMultiTask('generator', 'Generates samples with common layout', function () {
6 | var done = this.async();
7 | var generator = require('../lib/generator.js');
8 | var config = this.data;
9 |
10 | console.log(config.paths.source);
11 |
12 | generator.generate(config, function (stats) {
13 | grunt.log.write(stats.message.yellow)
14 | done();
15 | });
16 | });
17 | };
--------------------------------------------------------------------------------
/src-samples/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "static-site-layout",
3 | "version": "0.0.1",
4 | "description": "Builds static websites with associated CSS and JavaScript files.",
5 | "main": "app.js",
6 | "dependencies": {
7 | "walk": "~2.3.3",
8 | "fs-extra": "^0.11.1",
9 | "graceful-fs": "^3.0.2",
10 | "grunt": "^0.4.5",
11 | "load-grunt-tasks": "^0.6.0",
12 | "grunt-contrib-watch": "^0.6.1"
13 | },
14 | "devDependencies": {},
15 | "scripts": {
16 | "test": "echo \"Error: no test specified\" && exit 1"
17 | },
18 | "author": "Craig Shoemaker",
19 | "license": "MIT"
20 | }
21 |
--------------------------------------------------------------------------------
/samples/sample.css:
--------------------------------------------------------------------------------
1 | .push-down {
2 | margin-top:4em;
3 | }
4 |
5 | .push-down-md {
6 | margin-top:2em;
7 | }
8 |
9 | .push-down-xs {
10 | margin-top:1em;
11 | }
12 |
13 | footer {
14 | border-top:1px solid #ccc;
15 | background-color:#ddd;
16 | padding:50px;
17 | margin-top:25px;
18 | color:#999;
19 | }
20 |
21 | .description {
22 | border-bottom: 1px solid #eee;
23 | margin-bottom: 15px;
24 | margin-top: 15px;
25 | }
26 |
27 | .try-it-out hr {
28 | margin: 0;
29 | margin-top: 4px;
30 | }
31 |
32 |
33 | .try-it-out ul li{
34 | margin-top: 8px;
35 | margin-bottom: 8px;
36 | }
--------------------------------------------------------------------------------
/src-samples/src/sample.css:
--------------------------------------------------------------------------------
1 | .push-down {
2 | margin-top:4em;
3 | }
4 |
5 | .push-down-md {
6 | margin-top:2em;
7 | }
8 |
9 | .push-down-xs {
10 | margin-top:1em;
11 | }
12 |
13 | footer {
14 | border-top:1px solid #ccc;
15 | background-color:#ddd;
16 | padding:50px;
17 | margin-top:25px;
18 | color:#999;
19 | }
20 |
21 | .description {
22 | border-bottom: 1px solid #eee;
23 | margin-bottom: 15px;
24 | margin-top: 15px;
25 | }
26 |
27 | .try-it-out hr {
28 | margin: 0;
29 | margin-top: 4px;
30 | }
31 |
32 |
33 | .try-it-out ul li{
34 | margin-top: 8px;
35 | margin-bottom: 8px;
36 | }
--------------------------------------------------------------------------------
/test/protractor-conf.js:
--------------------------------------------------------------------------------
1 | exports.config = {
2 |
3 | // https://www.protractortest.org/#/server-setup#connecting-directly-to-browser-drivers
4 | directConnect: true,
5 |
6 | allScriptsTimeout: 11000,
7 |
8 | plugins : [{
9 | path: "../node_modules/protractor-istanbul-plugin",
10 | outputPath: "coverage/protractor"
11 | }],
12 |
13 | specs: [
14 | "e2e/*.js"
15 | ],
16 | //chromeOnly: true, //https://github.com/angular/protractor/issues/187
17 | capabilities: {
18 | "browserName": "chrome"
19 | },
20 |
21 | baseUrl: "http://localhost:8000/test/app/",
22 |
23 | framework: "jasmine",
24 |
25 | jasmineNodeOpts: {
26 | defaultTimeoutInterval: 30000
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/samples/js/data/population.js:
--------------------------------------------------------------------------------
1 | app.factory('populationData', [function () {
2 |
3 | var svc = {
4 | data: [
5 | { "CountryName": "China", "Pop1995": 1216, "Pop2005": 1297, "Pop2015": 1361, "Pop2025": 1394 },
6 | { "CountryName": "India", "Pop1995": 920, "Pop2005": 1090, "Pop2015": 1251, "Pop2025": 1396 },
7 | { "CountryName": "United States", "Pop1995": 266, "Pop2005": 295, "Pop2015": 322, "Pop2025": 351 },
8 | { "CountryName": "Indonesia", "Pop1995": 197, "Pop2005": 229, "Pop2015": 256, "Pop2025": 277 },
9 | { "CountryName": "Brazil", "Pop1995": 161, "Pop2005": 186, "Pop2015": 204, "Pop2025": 218 }
10 | ]
11 | };
12 |
13 | return svc;
14 |
15 | }]);
--------------------------------------------------------------------------------
/src-samples/src/js/data/population.js:
--------------------------------------------------------------------------------
1 | app.factory('populationData', [function () {
2 |
3 | var svc = {
4 | data: [
5 | { "CountryName": "China", "Pop1995": 1216, "Pop2005": 1297, "Pop2015": 1361, "Pop2025": 1394 },
6 | { "CountryName": "India", "Pop1995": 920, "Pop2005": 1090, "Pop2015": 1251, "Pop2025": 1396 },
7 | { "CountryName": "United States", "Pop1995": 266, "Pop2005": 295, "Pop2015": 322, "Pop2025": 351 },
8 | { "CountryName": "Indonesia", "Pop1995": 197, "Pop2005": 229, "Pop2015": 256, "Pop2025": 277 },
9 | { "CountryName": "Brazil", "Pop1995": 161, "Pop2005": 186, "Pop2015": 204, "Pop2025": 218 }
10 | ]
11 | };
12 |
13 | return svc;
14 |
15 | }]);
--------------------------------------------------------------------------------
/src-samples/gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function (grunt) {
2 |
3 | grunt.initConfig({
4 | pkg: grunt.file.readJSON('package.json'),
5 | generator: {
6 | 'default': {
7 | paths: {
8 | source: './src',
9 | destination: '../samples',
10 | template: './template/template.html'
11 | }
12 | }
13 | },
14 | watch: {
15 | scripts: {
16 | files: ['./src/**','./template/**'],
17 | tasks: ['generator:default']
18 | },
19 | }
20 | });
21 |
22 |
23 | grunt.loadNpmTasks('grunt-contrib-watch');
24 |
25 | require('load-grunt-tasks')(grunt);
26 |
27 | grunt.loadTasks('./grunt/tasks');
28 |
29 | grunt.registerTask('default', ['generator:default']);
30 |
31 | };
--------------------------------------------------------------------------------
/dist/npm/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "igniteui-angularjs",
3 | "version": "1.0.4",
4 | "main": "dist/igniteui-angularjs.min.js",
5 | "author": "igniteui",
6 | "description" : "A packaged version of IgniteUI directives for AngularJS",
7 | "keywords": [
8 | "ignite ui",
9 | "igniteui",
10 | "angular",
11 | "angularjs",
12 | "infragistics",
13 | "jquery widgets",
14 | "data visualization",
15 | "data grids",
16 | "jquery controls"
17 | ],
18 | "license": "MIT",
19 | "repository": {
20 | "type": "git",
21 | "url": "https://github.com/IgniteUI/igniteui-angularjs.git"
22 | },
23 | "bugs": {
24 | "url": "https://github.com/IgniteUI/igniteui-angularjs/issues"
25 | },
26 | "homepage": "https://github.com/IgniteUI/igniteui-angularjs",
27 | "dependencies": {
28 | "angular": "",
29 | "jquery": "",
30 | "jquery-ui": ""
31 | },
32 | "devDependencies": {},
33 | "scripts": {}
34 | }
35 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "igniteui-angularjs",
3 | "description": "Ignite UI controls for AngularJS",
4 | "homepage": "http://igniteui.com",
5 | "main": "src/igniteui-angularjs.js",
6 | "keywords": [
7 | "ui",
8 | "controls",
9 | "components",
10 | "infragistics",
11 | "angular"
12 | ],
13 | "repository": {
14 | "type": "git",
15 | "url": "git://github.com/IgniteUI/igniteui-angularjs.git"
16 | },
17 | "moduleType": [
18 | "amd",
19 | "globals"
20 | ],
21 | "license": "MIT",
22 | "ignore": [
23 | "**/.*",
24 | "node_modules",
25 | "bower_components",
26 | "test",
27 | "samples",
28 | "src-samples",
29 | "images",
30 | "index.html",
31 | "indexController.js",
32 | "bower.json",
33 | "package.json",
34 | "Gruntfile.js"
35 | ],
36 | "devDependencies": {
37 | "angular": "",
38 | "angular-route": "",
39 | "angular-loader": "",
40 | "angular-mocks": "",
41 | "html5-boilerplate": ""
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/samples/grid/master-detail/app/services/dataService.js:
--------------------------------------------------------------------------------
1 | app.factory("dataService",
2 |
3 | ["$http", "$q",
4 | function($http, $q){
5 |
6 | "use strict";
7 |
8 | var svc = {
9 |
10 | getAll: function(){
11 |
12 | var deferred = $q.defer();
13 |
14 | $http.get("/api/homes").success(deferred.resolve).error(deferred.reject);
15 |
16 | return deferred.promise;
17 | },
18 |
19 | save: function (home) {
20 | var deferred = $q.defer();
21 |
22 | $http.post("/api/homes", home).success(function (result) {
23 | deferred.resolve(result);
24 | }).error(deferred.reject);
25 |
26 | return deferred.promise;
27 | },
28 | };
29 |
30 | return svc;
31 |
32 | }]);
--------------------------------------------------------------------------------
/src-samples/src/grid/master-detail/app/services/dataService.js:
--------------------------------------------------------------------------------
1 | app.factory("dataService",
2 |
3 | ["$http", "$q",
4 | function($http, $q){
5 |
6 | "use strict";
7 |
8 | var svc = {
9 |
10 | getAll: function(){
11 |
12 | var deferred = $q.defer();
13 |
14 | $http.get("/api/homes").success(deferred.resolve).error(deferred.reject);
15 |
16 | return deferred.promise;
17 | },
18 |
19 | save: function (home) {
20 | var deferred = $q.defer();
21 |
22 | $http.post("/api/homes", home).success(function (result) {
23 | deferred.resolve(result);
24 | }).error(deferred.reject);
25 |
26 | return deferred.promise;
27 | },
28 | };
29 |
30 | return svc;
31 |
32 | }]);
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: required
2 | dist: xenial
3 | language: node_js
4 | node_js:
5 | - 'lts/*'
6 | addons:
7 | chrome: stable
8 | services:
9 | - xvfb
10 | before_install:
11 | - export DISPLAY=:99.0
12 | - sleep 3
13 | script:
14 | - npm run start
15 | - sleep 3
16 | - grunt default
17 | - npm run instrument
18 | - npm run test-single
19 | - npm run protractor
20 | - npm run cover-combined
21 | - cat ./coverage/final/lcov.info | coveralls
22 |
23 | # before_deploy:
24 | # # package and navigate to dist
25 | # - grunt build
26 | # - cd dist/npm
27 | # # update package version
28 | # - npm version "$TRAVIS_TAG" --no-git-tag-version --save
29 |
30 | # deploy:
31 | # provider: npm
32 | # skip_cleanup: true
33 | # email: igniteui@infragistics.com
34 | # api_key:
35 | # secure: awkGIEJWnAsXTag3RTFVpEdkx8WSspSqbT6rV3S0VlaIUN1lcMSBIrdNVzyTkKGq4s6SbY8omdHzfX/6uGDMM6+HMI7kGQeYHH0M73dzlVNj0TJ1xHKJ6zuqDXsWWatIRFYe7EkbX3xl9d0b0mfvHMIaLXH1CwxiLVF60CCFfLU=
36 | # on:
37 | # tags: true
38 | # repo: IgniteUI/igniteui-angularjs
39 | # branch: master
40 |
--------------------------------------------------------------------------------
/src-samples/igniteui-angular-samples.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 2013
4 | VisualStudioVersion = 12.0.30723.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "igniteui-angularjs-samples", "igniteui-angularjs-samples.njsproj", "{67F9E854-0DD9-45A9-9253-5079166B847F}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {67F9E854-0DD9-45A9-9253-5079166B847F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {67F9E854-0DD9-45A9-9253-5079166B847F}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {67F9E854-0DD9-45A9-9253-5079166B847F}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {67F9E854-0DD9-45A9-9253-5079166B847F}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | EndGlobal
23 |
--------------------------------------------------------------------------------
/test/app/js/util.js:
--------------------------------------------------------------------------------
1 | function executeScript(script) {
2 | browser.driver.executeScript(script);
3 | }
4 |
5 | function getResult(script) {
6 | return browser.driver.executeScript("return " + script);
7 | }
8 |
9 | function getAll(locatior) {
10 | return browser.findElements(locatior);
11 | }
12 |
13 | function isInitialized(elementId, widget) {
14 | expect(element(by.id(elementId)).isDisplayed()).toBe(true);
15 | var isDataExist = getResult('$("#' + elementId + '").data("' + widget + '") != undefined');
16 | expect(isDataExist).toBe(true);
17 | }
18 |
19 | function resetNorthwindScope() {
20 | browser.driver.executeScript(
21 | 'angular.element($("#grid1")).scope().northwind = angular.copy(angular.element($("#grid1")).scope().northwind_bak.slice(0));'
22 | );
23 | browser.driver.executeScript(
24 | 'angular.element($("#grid1")).scope().$apply();'
25 | );
26 | }
27 |
28 | module.exports.executeScript = executeScript;
29 | module.exports.getResult = getResult;
30 | module.exports.isInitialized = isInitialized;
31 | module.exports.getAll = getAll;
32 | module.exports.resetNorthwindScope = resetNorthwindScope;
--------------------------------------------------------------------------------
/.github/workflows/node.js.yml:
--------------------------------------------------------------------------------
1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3 |
4 | name: Node.js CI
5 |
6 | on:
7 | push:
8 | branches: [ master ]
9 | pull_request:
10 | branches: [ master ]
11 |
12 | jobs:
13 | build:
14 |
15 | runs-on: ubuntu-latest
16 |
17 | strategy:
18 | matrix:
19 | node-version: [12.x, 14.x]
20 |
21 | steps:
22 | - uses: actions/checkout@v2
23 | - name: Use Node.js ${{ matrix.node-version }}
24 | uses: actions/setup-node@v1
25 | with:
26 | node-version: ${{ matrix.node-version }}
27 | - run: npm ci
28 | - run: npm run hint
29 | - run: npm run test-single
30 |
31 | - name: Publish to coveralls.io
32 | if: github.repository == 'IgniteUI/igniteui-angularjs' && matrix.node-version == '14.x'
33 | uses: coverallsapp/github-action@v1.1.2
34 | with:
35 | path-to-lcov: ./coverage/lcov.info
36 | github-token: ${{ github.token }}
37 |
--------------------------------------------------------------------------------
/src-samples/readme.md:
--------------------------------------------------------------------------------
1 | # Samples Source
2 | The files contained in this folder are the source files for the samples. The samples are generated by combining partial HTML files with the template file and are ultimately placed in the `samples` folder off the root of this repository.
3 |
4 | ## Building Samples
5 | When you are developing samples you should use `grunt watch` which automatically rebuilds the samples any time you make a change to any file associated with the samples.
6 |
7 | If you want to manually build the samples you can run `grunt generator:default`.
8 |
9 | ## Using Partial HTML Files
10 | Sample HTML files are available under the `src` folder and require that you use a few placeholder tokens in order to build pages correctly.
11 |
12 | ### Tokens
13 | - `|styles|`: Used to add `link` and `style` elements to the top of the page inside the `head` element
14 | - `|content|`: Used to add the main markup of the page
15 | - `|scripts|`: Used to add scripts at the end of the page
16 |
17 | **Note:** In order for relative links to work on your machine the same way they work on the server ([github.io](http://igniteui.github.io/igniteui-angularjs/)) you need to run the samples from a root directory named `igniteui-angularjs`.
18 |
19 |
--------------------------------------------------------------------------------
/.github/workflows/npm-publish.yml:
--------------------------------------------------------------------------------
1 | name: Npm.js deploy
2 |
3 | on:
4 | release:
5 | types: [created]
6 |
7 | jobs:
8 | build:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v2
12 | - uses: actions/setup-node@v1
13 | with:
14 | node-version: 12
15 | registry-url: 'https://registry.npmjs.org'
16 | - run: echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
17 | - run: echo ${VERSION}
18 |
19 | - run: echo "NG_CLI_ANALYTICS=false" >> $GITHUB_ENV
20 | - run: echo "NODE_OPTIONS='--max_old_space_size=4096'" >> $GITHUB_ENV
21 | - run: npm ci
22 |
23 | - run: npm run build
24 |
25 | # define npm tag
26 | - run: if [[ ${VERSION} == *"alpha"* || ${VERSION} == *"beta"* || ${VERSION} == *"rc"* ]]; then echo "NPM_TAG=next"; else echo "NPM_TAG=latest"; fi >> $GITHUB_ENV
27 | - run: echo ${NPM_TAG}
28 |
29 | # copy readme
30 | - run: cp ../../README.md README.md
31 | working-directory: dist/npm
32 |
33 | # create version and publish it to npmjs
34 | - run: npm version ${VERSION} --no-git-tag-version --save --verbose
35 | working-directory: dist/npm
36 |
37 | - run: npm publish --tag ${NPM_TAG}
38 | working-directory: dist/npm
39 | env:
40 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
41 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | module.exports = function (grunt) {
2 |
3 | grunt.initConfig({
4 | pkg: grunt.file.readJSON("package.json"),
5 | uglify: {
6 | options: {
7 | banner: "/*! <%= pkg.name %> <%= grunt.template.today(\"dd-mm-yyyy\") %> */\n",
8 | report: "min"
9 | },
10 | build: {
11 | src: [ "src/igniteui-angularjs.js" ],
12 | dest: "dist/<%= pkg.name %>.min.js"
13 | }
14 | },
15 |
16 | watch: {
17 | scripts: {
18 | files: ["src/igniteui-angularjs.js"],
19 | tasks: ["jshint"],
20 | options: {
21 | spawn: false
22 | }
23 | }
24 | },
25 |
26 | jshint: {
27 | all: ["Gruntfile.js", "src/igniteui-angularjs.js"],
28 | options: {
29 | jshintrc: ".jshintrc",
30 | reporter: require("jshint-stylish")
31 | }
32 | },
33 |
34 | exec: {
35 | update_src_npm: {
36 | cmd: 'cp src/igniteui-angularjs.js dist/npm/'
37 | },
38 |
39 | update_min_npm: {
40 | cmd: 'cp dist/igniteui-angularjs.min.js dist/npm/'
41 | }
42 | }
43 | });
44 |
45 | // Event handling
46 | grunt.event.on("watch", function (action, filepath) {
47 | grunt.config(["jshint", "all"], filepath);
48 | });
49 |
50 | grunt.loadNpmTasks("grunt-contrib-uglify");
51 | grunt.loadNpmTasks("grunt-contrib-jshint");
52 | grunt.loadNpmTasks("grunt-contrib-watch");
53 | grunt.loadNpmTasks('grunt-exec');
54 |
55 | grunt.registerTask("build", ["uglify", "exec:update_src_npm", "exec:update_min_npm"]);
56 |
57 | grunt.registerTask("default", ["jshint"]);
58 |
59 | };
60 |
--------------------------------------------------------------------------------
/test/karma.conf.js:
--------------------------------------------------------------------------------
1 | module.exports = function (config) {
2 | config.set({
3 |
4 | basePath: "../",
5 |
6 | files: [
7 | "http://code.jquery.com/jquery-1.10.2.min.js",
8 | "http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js",
9 | "bower_components/angular/angular.js",
10 | "bower_components/angular-route/angular-route.js",
11 | "bower_components/angular-mocks/angular-mocks.js",
12 | "https://cdn-na.infragistics.com/igniteui/latest/js/infragistics.core.js",
13 | "https://cdn-na.infragistics.com/igniteui/latest/js/infragistics.dv.js",
14 | "https://cdn-na.infragistics.com/igniteui/latest/js/infragistics.lob.js",
15 | "src/igniteui-angularjs.js",
16 | "test/app/js/my-app.js",
17 | "test/unit/**/*.js"
18 | ],
19 |
20 | crossOriginAttribute: false,
21 |
22 | autoWatch: true,
23 |
24 | frameworks: ["jasmine"],
25 |
26 | plugins: [
27 | require('karma-jasmine'),
28 | require('karma-coverage'),
29 | require('karma-chrome-launcher'),
30 | require('karma-jasmine-html-reporter')
31 | ],
32 | client: {
33 | clearContext: false // leave Jasmine Spec Runner output visible in browser
34 | },
35 | reporters: ["progress", "coverage"],
36 |
37 | preprocessors: {
38 | 'src/*.js': ['coverage']
39 | },
40 |
41 | coverageReporter: {
42 | dir: require('path').join(__dirname, '../coverage/'),
43 | subdir: '.',
44 | reporters: [
45 | { type: 'lcovonly' }
46 | ],
47 | },
48 |
49 | browsers: ["ChromeHeadless"]
50 | });
51 | };
52 |
--------------------------------------------------------------------------------
/license.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Infragistics, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
22 |
23 | ----
24 |
25 | This MIT license does not apply to the Ignite UI controls toolset (http://igniteui.com)
26 | referenced/used in this repository. Please refer to the license for Ignite UI at:
27 | http://www.infragistics.com/legal/license/ultimate/
28 |
29 | Other libraries referenced/used in this repository are subject to their own
30 | licenses. Please refer to their agreements for details. These other
31 | components/libraries are provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
32 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
34 | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
35 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
36 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE OTHER COMPONENTS
37 | OR THE USE OF OTHER DEALINGS IN THE OTHER COMPONENTS.
38 |
--------------------------------------------------------------------------------
/dist/npm/license.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Infragistics, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
22 |
23 | ----
24 |
25 | This MIT license does not apply to the Ignite UI controls toolset (http://igniteui.com)
26 | referenced/used in this repository. Please refer to the license for Ignite UI at:
27 | http://www.infragistics.com/legal/license/ultimate/
28 |
29 | Other libraries referenced/used in this repository are subject to their own
30 | licenses. Please refer to their agreements for details. These other
31 | components/libraries are provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
32 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
34 | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
35 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
36 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE OTHER COMPONENTS
37 | OR THE USE OF OTHER DEALINGS IN THE OTHER COMPONENTS.
38 |
--------------------------------------------------------------------------------
/samples/js/data/tasks.js:
--------------------------------------------------------------------------------
1 | app.factory("tasks", [function () {
2 | var svc = {
3 | data: [
4 | {
5 | "id": 0, "tasks": "Project Plan", "start": "6/2/2014", "finish": "8/22/2014", "duration": "60d", "progress": "32%", "products": [
6 | { "id": 1, "tasks": "Planning", "start": "6/2/2014", "finish": "6/4/2014", "duration": "3d", "progress": "100%" },
7 | { "id": 2, "tasks": "Write a specification", "start": "6/5/2014", "finish": "6/6/2014", "duration": "2d", "progress": "100%" },
8 | { "id": 3, "tasks": "Create a demo application", "start": "6/9/2014", "finish": "6/11/2014", "duration": "3d", "progress": "100%" },
9 | { "id": 4, "tasks": "Collect a feedback", "start": "6/12/2014", "finish": "6/12/2014", "duration": "1d", "progress": "100%" },
10 | {
11 | "id": 5, "tasks": "Design", "start": "6/13/2014", "finish": "6/19/2014", "duration": "5d", "progress": "60%", "products": [
12 | { "id": 8, "tasks": "Conceptual Design", "start": "6/13/2014", "finish": "6/16/2014", "duration": "2d", "progress": "100%" },
13 | { "id": 9, "tasks": "Preliminary Design", "start": "6/17/2014", "finish": "6/18/2014", "duration": "2d", "progress": "65%" },
14 | { "id": 10, "tasks": "Final Design", "start": "6/19/2014", "finish": "6/19/2014", "duration": "1d", "progress": "15%" }
15 | ]
16 | },
17 | {
18 | "id": 6, "tasks": "Development", "start": "6/20/2014", "finish": "8/20/2014", "duration": "44d", "progress": "5%", "products": [
19 | { "id": 11, "tasks": "Implementation", "start": "6/20/2014", "finish": "7/17/2014", "duration": "20d", "progress": "5%" },
20 | { "id": 12, "tasks": "Testing", "start": "7/18/2014", "finish": "7/31/2014", "duration": "10d", "progress": "0%" },
21 | { "id": 13, "tasks": "Bug fixing", "start": "8/1/2014", "finish": "8/14/2014", "duration": "10d", "progress": "0%" },
22 | { "id": 14, "tasks": "Documenting", "start": "8/15/2014", "finish": "8/20/2014", "duration": "4d", "progress": "0%" }
23 | ]
24 | },
25 | { "id": 7, "tasks": "Project Complete", "start": "8/21/2014", "finish": "8/22/2014", "duration": "2d", "progress": "0%" }
26 | ]
27 | }
28 | ]
29 | };
30 | return svc;
31 | }]);
--------------------------------------------------------------------------------
/src-samples/src/js/data/tasks.js:
--------------------------------------------------------------------------------
1 | app.factory("tasks", [function () {
2 | var svc = {
3 | data: [
4 | {
5 | "id": 0, "tasks": "Project Plan", "start": "6/2/2014", "finish": "8/22/2014", "duration": "60d", "progress": "32%", "products": [
6 | { "id": 1, "tasks": "Planning", "start": "6/2/2014", "finish": "6/4/2014", "duration": "3d", "progress": "100%" },
7 | { "id": 2, "tasks": "Write a specification", "start": "6/5/2014", "finish": "6/6/2014", "duration": "2d", "progress": "100%" },
8 | { "id": 3, "tasks": "Create a demo application", "start": "6/9/2014", "finish": "6/11/2014", "duration": "3d", "progress": "100%" },
9 | { "id": 4, "tasks": "Collect a feedback", "start": "6/12/2014", "finish": "6/12/2014", "duration": "1d", "progress": "100%" },
10 | {
11 | "id": 5, "tasks": "Design", "start": "6/13/2014", "finish": "6/19/2014", "duration": "5d", "progress": "60%", "products": [
12 | { "id": 8, "tasks": "Conceptual Design", "start": "6/13/2014", "finish": "6/16/2014", "duration": "2d", "progress": "100%" },
13 | { "id": 9, "tasks": "Preliminary Design", "start": "6/17/2014", "finish": "6/18/2014", "duration": "2d", "progress": "65%" },
14 | { "id": 10, "tasks": "Final Design", "start": "6/19/2014", "finish": "6/19/2014", "duration": "1d", "progress": "15%" }
15 | ]
16 | },
17 | {
18 | "id": 6, "tasks": "Development", "start": "6/20/2014", "finish": "8/20/2014", "duration": "44d", "progress": "5%", "products": [
19 | { "id": 11, "tasks": "Implementation", "start": "6/20/2014", "finish": "7/17/2014", "duration": "20d", "progress": "5%" },
20 | { "id": 12, "tasks": "Testing", "start": "7/18/2014", "finish": "7/31/2014", "duration": "10d", "progress": "0%" },
21 | { "id": 13, "tasks": "Bug fixing", "start": "8/1/2014", "finish": "8/14/2014", "duration": "10d", "progress": "0%" },
22 | { "id": 14, "tasks": "Documenting", "start": "8/15/2014", "finish": "8/20/2014", "duration": "4d", "progress": "0%" }
23 | ]
24 | },
25 | { "id": 7, "tasks": "Project Complete", "start": "8/21/2014", "finish": "8/22/2014", "duration": "2d", "progress": "0%" }
26 | ]
27 | }
28 | ]
29 | };
30 | return svc;
31 | }]);
--------------------------------------------------------------------------------
/src-samples/src/igUpload.html:
--------------------------------------------------------------------------------
1 | |title|Upload|title|
2 |
3 | |styles|
4 |
5 |
6 | |styles|
7 |
8 | |content|
9 |
10 |
11 |
12 |
13 |
TRY IT OUT:
14 |
15 |
16 | - Click on the button to upload a file
17 |
18 |
19 |
20 |
This sample demonstrates how create an igUpload using an AngularJS directive.
21 |
Note: There is no server configured with this sample, so uploads will fail.
22 |
Explore the Code
23 |
24 |
25 |
26 |
27 |
28 | |content|
29 |
30 | |scripts|
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igDialog.html:
--------------------------------------------------------------------------------
1 | |title|igDialog|title|
2 |
3 |
4 | |styles|
5 |
6 | |styles|
7 |
8 | |content|
9 |
10 |
11 |
12 |
13 |
TRY IT OUT:
14 |
15 |
16 | - Drag the dialog around the page by the header
17 | - Close the dialog and refresh the page to see it reappear
18 |
19 |
20 |
21 |
This sample demonstrates how to declare an igDialog with an AngularJS directive.
22 |
Explore the Code
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | |content|
37 |
38 | |scripts|
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igVideoPlayer.html:
--------------------------------------------------------------------------------
1 | |title|igVideoPlayer|title|
2 |
3 | |styles|
4 |
5 | |styles|
6 |
7 | |content|
8 |
9 |
10 |
11 |
12 |
TRY IT OUT:
13 |
14 |
17 |
18 |
19 |
This sample demonstrates how create an igVideoPlayer with an AngularJS directive.
20 |
Explore the Code
21 |
22 |
23 |
24 |
25 | http://dl.infragistics.com/pg/2011-1/web/shared/videoplayer/videos/Infragistics_Presentation_lowRes_1.h264.mp4
26 | http://dl.infragistics.com/pg/2011-1/web/shared/videoplayer/videos/Infragistics_Presentation_lowRes_1.webmvp8.webm
27 | http://dl.infragistics.com/pg/2011-1/web/shared/videoplayer/videos/Infragistics_Presentation_lowRes_1.theora.ogv
28 |
29 |
30 |
31 | |content|
32 |
33 | |scripts|
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 | |scripts|
--------------------------------------------------------------------------------
/test/app/js/my-app-utils.js:
--------------------------------------------------------------------------------
1 | function testEventListener(widget, elementId, event) {
2 | return $("#" + elementId).data(widget).options[event] !== undefined;
3 | }
4 |
5 | function typeInInput(characters, element, callback) {
6 | var keyDown = jQuery.Event("keydown"),
7 | keyPress = jQuery.Event("keypress"),
8 | keyUp = jQuery.Event("keyup"),
9 | value = "";
10 |
11 | characters.split("").forEach(function (ch) {
12 | keyDown.keyCode = keyUp.keyCode = keyPress.keyCode = ch.charCodeAt(0);
13 | keyDown.charCode = keyUp.charCode = keyPress.charCode = ch.charCodeAt(0);
14 | element.trigger(keyDown);
15 | element.trigger(keyPress);
16 | value = value + ch;
17 | element.val(value);
18 | element.trigger(keyUp);
19 | element.trigger("input"); // also throw input for Angular, ngModel only listens for that when supported
20 | if (callback) {
21 | callback();
22 | }
23 | });
24 | }
25 |
26 | function typeInInputWrap(characters, element, scopeEval) {
27 | var editUpdateFlag = false,
28 | scope = element.scope(),
29 | originalValue = scope.$eval(scopeEval);
30 | typeInInput(characters, element, function () {
31 | //check scope value remains unchanged during search entry
32 | if (scope.$eval(scopeEval) != originalValue) {
33 | editUpdateFlag = true;
34 | }
35 | });
36 | return editUpdateFlag;
37 | }
38 |
39 | function keyInteraction(key, target, special) {
40 | keyDownChar(key, target, special);
41 | keyPressChar(key, target, special);
42 | keyUpChar(key, target, special);
43 | }
44 | function keyDownChar(key, target, special) {
45 | var evt = $.Event("keydown");
46 | evt.keyCode = key;
47 | evt.charCode = key;
48 | if (special) {
49 | evt[special] = true;
50 | }
51 | target.trigger(evt);
52 | }
53 | function keyPressChar(key, target, special) {
54 | var evt = $.Event("keypress");
55 | evt.keyCode = key;
56 | evt.charCode = key;
57 | if (special) {
58 | evt[special] = true;
59 | }
60 | target.trigger(evt);
61 | }
62 | function keyUpChar(key, target, special) {
63 | var evt = $.Event("keyup");
64 | evt.keyCode = key;
65 | evt.charCode = key;
66 | if (special) {
67 | evt[special] = true;
68 | }
69 | target.trigger(evt);
70 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "igniteui-angularjs",
3 | "version": "1.0.4",
4 | "main": "src/igniteui-angularjs.js",
5 | "author": "IgniteUI",
6 | "license": "MIT",
7 | "repository": {
8 | "type": "git",
9 | "url": "https://github.com/IgniteUI/igniteui-angularjs.git"
10 | },
11 | "bugs": {
12 | "url": "https://github.com/IgniteUI/igniteui-angularjs/issues"
13 | },
14 | "homepage": "https://github.com/IgniteUI/igniteui-angularjs",
15 | "dependencies": {},
16 | "devDependencies": {
17 | "mkdirp": "",
18 | "coveralls": "",
19 | "grunt": "",
20 | "grunt-exec": "",
21 | "grunt-contrib-jshint": "",
22 | "grunt-contrib-uglify": "",
23 | "grunt-contrib-watch": "",
24 | "jshint-stylish": "",
25 | "protractor": "^7.0.0",
26 | "protractor-istanbul-plugin": "",
27 | "http-server": "",
28 | "bower": "",
29 | "shelljs": "",
30 | "istanbul-coveralls": "",
31 | "karma": "^6.3.2",
32 | "karma-chrome-launcher": "~2.2.0",
33 | "karma-coverage": "^2.0.3",
34 | "karma-jasmine": "^4.0.1",
35 | "karma-jasmine-html-reporter": "^1.5.4",
36 | "karma-junit-reporter": "^2.0.1"
37 | },
38 | "scripts": {
39 | "postinstall": "bower install",
40 | "instrument": "istanbul instrument ./src/ -o ./instrument/",
41 | "cover-protractor": "rm -rf coverage/tmp && mkdirp coverage/tmp/ && cp coverage/protractor/*.json coverage/tmp/ && istanbul report --include=./coverage/tmp/*.json -dir coverage/final",
42 | "cover-combined": "rm -rf coverage/tmp && mkdirp coverage/tmp/ && cp coverage/karma/**/coverage*.json coverage/tmp/ && cp coverage/protractor/*.json coverage/tmp/ && istanbul report --include=./coverage/tmp/*.json -dir coverage/final",
43 | "start": "http-server -a localhost -p 8000 &",
44 | "test": "karma start test/karma.conf.js",
45 | "test-single": "karma start test/karma.conf.js --single-run --code-coverage",
46 | "test-single-firefox": "karma start test/karma.conf.js --browsers Firefox --single-run --reporters junit,dots",
47 | "preprotractor": "webdriver-manager update",
48 | "protractor": "protractor test/protractor-conf.js",
49 | "update-index-async": "node -e \"require('shelljs/global'); sed('-i', /\\/\\/@@NG_LOADER_START@@[\\s\\S]*\\/\\/@@NG_LOADER_END@@/, '//@@NG_LOADER_START@@\\n' + cat('app/bower_components/angular-loader/angular-loader.min.js') + '\\n//@@NG_LOADER_END@@', 'app/index-async.html');\"",
50 | "hint": "grunt default",
51 | "build": "grunt build"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src-samples/template/template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | |title| - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | |styles|
13 |
14 |
15 |
16 |
35 | |content|
36 |
44 |
45 |
46 |
47 |
48 |
49 | |scripts|
50 |
51 |
--------------------------------------------------------------------------------
/samples/grid/master-detail/app/controllers/masterDetailController.js:
--------------------------------------------------------------------------------
1 | app.controller("masterDetailController",
2 |
3 | ["$scope", "dataService",
4 | function ($scope, dataService) {
5 |
6 | "use strict";
7 |
8 | $scope.error = null;
9 |
10 | $scope.message = "";
11 |
12 | $scope.selectedHome = null;
13 | $scope.selectedHomeOriginal = null;
14 |
15 | $scope.save = function(){
16 | dataService.save($scope.selectedHome).then(function(){
17 | $scope.selectedHome = null;
18 | $scope.message = "Home saved";
19 | },
20 | function(error){
21 | $scope.error = error;
22 | angular.copy($scope.selectedHomeOriginal, $scope.selectedHome);
23 | });
24 | };
25 |
26 | $scope.cancel = function(){
27 | angular.copy($scope.selectedHomeOriginal, $scope.selectedHome);
28 | $scope.selectedHome = null;
29 | };
30 |
31 | dataService.getAll().then(function(homes){
32 | $scope.homes = homes;
33 | }, function(error){
34 | $scope.error = error;
35 | });
36 |
37 | // **** Grid-related event handlers ********
38 | $scope.homesGridRendered = function(e){
39 | $scope.message = "Grid is rendered";
40 | };
41 |
42 | $scope.homesGridColumnSorted = function(e, u){
43 | $scope.$apply(function () {
44 | $scope.message = "Column sorted";
45 | });
46 | };
47 |
48 | $scope.homesGridPageSelectionChanged = function(e, u){
49 | $scope.$apply(function () {
50 | $scope.message = "Page index changed";
51 | });
52 | };
53 |
54 | $scope.homesGridPageSizeChanged = function(e, u){
55 | $scope.$apply(function () {
56 | $scope.message = "Page size changed";
57 | });
58 | };
59 |
60 | $scope.homesGridRowSelectionChanged = function (e, ui) {
61 |
62 | var id = ui.row.id;
63 |
64 | for(var i = 0, len = $scope.homes.length; i < len;i++){
65 | if($scope.homes[i].id === id){
66 | $scope.$apply(function () {
67 | debugger;
68 | $scope.selectedHomeOriginal = {};
69 | angular.copy($scope.homes[i], $scope.selectedHomeOriginal);
70 | $scope.selectedHome = $scope.homes[i];
71 | $scope.message = "'" + $scope.selectedHome.streetAddress + "' is selected";
72 | });
73 | break;
74 | }
75 | }
76 | };
77 | // *****************************************
78 |
79 | }]);
--------------------------------------------------------------------------------
/src-samples/src/grid/master-detail/app/controllers/masterDetailController.js:
--------------------------------------------------------------------------------
1 | app.controller("masterDetailController",
2 |
3 | ["$scope", "dataService",
4 | function ($scope, dataService) {
5 |
6 | "use strict";
7 |
8 | $scope.error = null;
9 |
10 | $scope.message = "";
11 |
12 | $scope.selectedHome = null;
13 | $scope.selectedHomeOriginal = null;
14 |
15 | $scope.save = function(){
16 | dataService.save($scope.selectedHome).then(function(){
17 | $scope.selectedHome = null;
18 | $scope.message = "Home saved";
19 | },
20 | function(error){
21 | $scope.error = error;
22 | angular.copy($scope.selectedHomeOriginal, $scope.selectedHome);
23 | });
24 | };
25 |
26 | $scope.cancel = function(){
27 | angular.copy($scope.selectedHomeOriginal, $scope.selectedHome);
28 | $scope.selectedHome = null;
29 | };
30 |
31 | dataService.getAll().then(function(homes){
32 | $scope.homes = homes;
33 | }, function(error){
34 | $scope.error = error;
35 | });
36 |
37 | // **** Grid-related event handlers ********
38 | $scope.homesGridRendered = function(e){
39 | $scope.message = "Grid is rendered";
40 | };
41 |
42 | $scope.homesGridColumnSorted = function(e, u){
43 | $scope.$apply(function () {
44 | $scope.message = "Column sorted";
45 | });
46 | };
47 |
48 | $scope.homesGridPageSelectionChanged = function(e, u){
49 | $scope.$apply(function () {
50 | $scope.message = "Page index changed";
51 | });
52 | };
53 |
54 | $scope.homesGridPageSizeChanged = function(e, u){
55 | $scope.$apply(function () {
56 | $scope.message = "Page size changed";
57 | });
58 | };
59 |
60 | $scope.homesGridRowSelectionChanged = function (e, ui) {
61 |
62 | var id = ui.row.id;
63 |
64 | for(var i = 0, len = $scope.homes.length; i < len;i++){
65 | if($scope.homes[i].id === id){
66 | $scope.$apply(function () {
67 | debugger;
68 | $scope.selectedHomeOriginal = {};
69 | angular.copy($scope.homes[i], $scope.selectedHomeOriginal);
70 | $scope.selectedHome = $scope.homes[i];
71 | $scope.message = "'" + $scope.selectedHome.streetAddress + "' is selected";
72 | });
73 | break;
74 | }
75 | }
76 | };
77 | // *****************************************
78 |
79 | }]);
--------------------------------------------------------------------------------
/samples/grid/master-detail/app/lib/Math.uuid.js:
--------------------------------------------------------------------------------
1 | /*!
2 | Math.uuid.js (v1.4)
3 | http://www.broofa.com
4 | mailto:robert@broofa.com
5 |
6 | Copyright (c) 2010 Robert Kieffer
7 | Dual licensed under the MIT and GPL licenses.
8 | */
9 |
10 | /*
11 | * Generate a random uuid.
12 | *
13 | * USAGE: Math.uuid(length, radix)
14 | * length - the desired number of characters
15 | * radix - the number of allowable values for each character.
16 | *
17 | * EXAMPLES:
18 | * // No arguments - returns RFC4122, version 4 ID
19 | * >>> Math.uuid()
20 | * "92329D39-6F5C-4520-ABFC-AAB64544E172"
21 | *
22 | * // One argument - returns ID of the specified length
23 | * >>> Math.uuid(15) // 15 character ID (default base=62)
24 | * "VcydxgltxrVZSTV"
25 | *
26 | * // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62)
27 | * >>> Math.uuid(8, 2) // 8 character ID (base=2)
28 | * "01001010"
29 | * >>> Math.uuid(8, 10) // 8 character ID (base=10)
30 | * "47473046"
31 | * >>> Math.uuid(8, 16) // 8 character ID (base=16)
32 | * "098F4D35"
33 | */
34 | (function() {
35 | // Private array of chars to use
36 | var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
37 |
38 | Math.uuid = function (len, radix) {
39 | var chars = CHARS, uuid = [], i;
40 | radix = radix || chars.length;
41 |
42 | if (len) {
43 | // Compact form
44 | for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
45 | } else {
46 | // rfc4122, version 4 form
47 | var r;
48 |
49 | // rfc4122 requires these characters
50 | uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
51 | uuid[14] = '4';
52 |
53 | // Fill in random data. At i==19 set the high bits of clock sequence as
54 | // per rfc4122, sec. 4.1.5
55 | for (i = 0; i < 36; i++) {
56 | if (!uuid[i]) {
57 | r = 0 | Math.random()*16;
58 | uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
59 | }
60 | }
61 | }
62 |
63 | return uuid.join('');
64 | };
65 |
66 | // A more performant, but slightly bulkier, RFC4122v4 solution. We boost performance
67 | // by minimizing calls to random()
68 | Math.uuidFast = function() {
69 | var chars = CHARS, uuid = new Array(36), rnd=0, r;
70 | for (var i = 0; i < 36; i++) {
71 | if (i==8 || i==13 || i==18 || i==23) {
72 | uuid[i] = '-';
73 | } else if (i==14) {
74 | uuid[i] = '4';
75 | } else {
76 | if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0;
77 | r = rnd & 0xf;
78 | rnd = rnd >> 4;
79 | uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
80 | }
81 | }
82 | return uuid.join('');
83 | };
84 |
85 | // A more compact, but less performant, RFC4122v4 solution:
86 | Math.uuidCompact = function() {
87 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
88 | var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
89 | return v.toString(16);
90 | });
91 | };
92 | })();
--------------------------------------------------------------------------------
/src-samples/src/grid/master-detail/app/lib/Math.uuid.js:
--------------------------------------------------------------------------------
1 | /*!
2 | Math.uuid.js (v1.4)
3 | http://www.broofa.com
4 | mailto:robert@broofa.com
5 |
6 | Copyright (c) 2010 Robert Kieffer
7 | Dual licensed under the MIT and GPL licenses.
8 | */
9 |
10 | /*
11 | * Generate a random uuid.
12 | *
13 | * USAGE: Math.uuid(length, radix)
14 | * length - the desired number of characters
15 | * radix - the number of allowable values for each character.
16 | *
17 | * EXAMPLES:
18 | * // No arguments - returns RFC4122, version 4 ID
19 | * >>> Math.uuid()
20 | * "92329D39-6F5C-4520-ABFC-AAB64544E172"
21 | *
22 | * // One argument - returns ID of the specified length
23 | * >>> Math.uuid(15) // 15 character ID (default base=62)
24 | * "VcydxgltxrVZSTV"
25 | *
26 | * // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62)
27 | * >>> Math.uuid(8, 2) // 8 character ID (base=2)
28 | * "01001010"
29 | * >>> Math.uuid(8, 10) // 8 character ID (base=10)
30 | * "47473046"
31 | * >>> Math.uuid(8, 16) // 8 character ID (base=16)
32 | * "098F4D35"
33 | */
34 | (function() {
35 | // Private array of chars to use
36 | var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
37 |
38 | Math.uuid = function (len, radix) {
39 | var chars = CHARS, uuid = [], i;
40 | radix = radix || chars.length;
41 |
42 | if (len) {
43 | // Compact form
44 | for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
45 | } else {
46 | // rfc4122, version 4 form
47 | var r;
48 |
49 | // rfc4122 requires these characters
50 | uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
51 | uuid[14] = '4';
52 |
53 | // Fill in random data. At i==19 set the high bits of clock sequence as
54 | // per rfc4122, sec. 4.1.5
55 | for (i = 0; i < 36; i++) {
56 | if (!uuid[i]) {
57 | r = 0 | Math.random()*16;
58 | uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
59 | }
60 | }
61 | }
62 |
63 | return uuid.join('');
64 | };
65 |
66 | // A more performant, but slightly bulkier, RFC4122v4 solution. We boost performance
67 | // by minimizing calls to random()
68 | Math.uuidFast = function() {
69 | var chars = CHARS, uuid = new Array(36), rnd=0, r;
70 | for (var i = 0; i < 36; i++) {
71 | if (i==8 || i==13 || i==18 || i==23) {
72 | uuid[i] = '-';
73 | } else if (i==14) {
74 | uuid[i] = '4';
75 | } else {
76 | if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0;
77 | r = rnd & 0xf;
78 | rnd = rnd >> 4;
79 | uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
80 | }
81 | }
82 | return uuid.join('');
83 | };
84 |
85 | // A more compact, but less performant, RFC4122v4 solution:
86 | Math.uuidCompact = function() {
87 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
88 | var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
89 | return v.toString(16);
90 | });
91 | };
92 | })();
--------------------------------------------------------------------------------
/samples/js/data/candidates.js:
--------------------------------------------------------------------------------
1 | app.factory("candidates", [function () {
2 |
3 | var svc = {
4 | data: [
5 | {name: "Douglas Crockford", text: "Douglas Crockford is an American computer programmer and entrepreneur who is best known for his ongoing involvement in the development of the JavaScript language, for having popularized the data format JSON (JavaScript Object Notation), and for developing various JavaScript related tools such as JSLint and JSMin. He is currently a senior JavaScript architect at PayPal, and is also a writer and speaker on JavaScript, JSON, and related web technologies such as the Yahoo! User Interface Library (YUI).", skills: [
6 | {description: "JavaScript"},
7 | {description: "JSON"},
8 | {description: "HTML"},
9 | {description: "JSLint"}
10 | ], picture: "http://www.igniteui.com/images/samples/tile-manager/450px-Douglas_Crockford.jpg", linkedin: "http://www.linkedin.com/groups?gid=3165057&trk=group-name"
11 | },
12 | {name: "John Resig", text: "John Resig is the Dean of Computer Science at Khan Academy and the creator of the jQuery JavaScript library. He's also the author of the books Pro JavaScript Techniques and Secrets of the JavaScript Ninja. Currently, John is located in Brooklyn, NY and enjoys studying Ukiyo-e (Japanese Woodblock Printing) in his spare time.", skills: [
13 | {description: "JavaScript"},
14 | {description: "JSON"},
15 | {description: "HTML"},
16 | {description: "jQuery"}
17 | ], picture: "http://www.igniteui.com/images/samples/tile-manager/3450728563_69b0bd0743_m.jpg", linkedin: "http://www.linkedin.com/groups?viewMembers=&gid=100943&sik=1360507269893&goback=%2Eanp_100943_1360507269892_1"
18 | },
19 | {name: "Bill Gates", text: "William Henry 'Bill' Gates III (born October 28, 1955) is an American programmer, inventor, business magnate and philanthropist. Gates is the former chief executive and current chairman of Microsoft, the world's largest personal-computer software company, which he co-founded with Paul Allen. He is consistently ranked among the world's wealthiest people and was the wealthiest overall from 1995 to 2009, excluding 2008, when he was ranked third; in 2011 he was the wealthiest American and the second wealthiest person. During his career at Microsoft, Gates held the positions of CEO and chief software architect, and remains the largest individual shareholder, with 6.4 percent of the common stock. He has also authored and co-authored several books.", skills: [
20 | {description: "Entrepreneurship"},
21 | {description: "VB"},
22 | {description: "Operating Systems"},
23 | {description: "Programming Languages"}
24 | ], picture: "http://www.igniteui.com/images/samples/tile-manager/220px-BillGates2012.jpg", linkedin: "http://www.linkedin.com/company/8736?trk=tyah"
25 | },
26 | {
27 | name: "Jon Skeet", text: "Author of C# in Depth. Currently a software engineer at Google, London. Usually a Microsoft MVP (C#, 2003-2010, 2011-)", skills: [
28 | { description: "C#" },
29 | { description: ".NET" },
30 | { description: "Java" }
31 | ], picture: "http://www.igniteui.com/images/samples/tile-manager/jonskeet.jpg", linkedin: "uk.linkedin.com/pub/jon-skeet/0/800/ba3"
32 | }
33 | ]
34 | };
35 |
36 | return svc;
37 |
38 | }]);
--------------------------------------------------------------------------------
/src-samples/src/js/data/candidates.js:
--------------------------------------------------------------------------------
1 | app.factory("candidates", [function () {
2 |
3 | var svc = {
4 | data: [
5 | {name: "Douglas Crockford", text: "Douglas Crockford is an American computer programmer and entrepreneur who is best known for his ongoing involvement in the development of the JavaScript language, for having popularized the data format JSON (JavaScript Object Notation), and for developing various JavaScript related tools such as JSLint and JSMin. He is currently a senior JavaScript architect at PayPal, and is also a writer and speaker on JavaScript, JSON, and related web technologies such as the Yahoo! User Interface Library (YUI).", skills: [
6 | {description: "JavaScript"},
7 | {description: "JSON"},
8 | {description: "HTML"},
9 | {description: "JSLint"}
10 | ], picture: "http://www.igniteui.com/images/samples/tile-manager/450px-Douglas_Crockford.jpg", linkedin: "http://www.linkedin.com/groups?gid=3165057&trk=group-name"
11 | },
12 | {name: "John Resig", text: "John Resig is the Dean of Computer Science at Khan Academy and the creator of the jQuery JavaScript library. He's also the author of the books Pro JavaScript Techniques and Secrets of the JavaScript Ninja. Currently, John is located in Brooklyn, NY and enjoys studying Ukiyo-e (Japanese Woodblock Printing) in his spare time.", skills: [
13 | {description: "JavaScript"},
14 | {description: "JSON"},
15 | {description: "HTML"},
16 | {description: "jQuery"}
17 | ], picture: "http://www.igniteui.com/images/samples/tile-manager/3450728563_69b0bd0743_m.jpg", linkedin: "http://www.linkedin.com/groups?viewMembers=&gid=100943&sik=1360507269893&goback=%2Eanp_100943_1360507269892_1"
18 | },
19 | {name: "Bill Gates", text: "William Henry 'Bill' Gates III (born October 28, 1955) is an American programmer, inventor, business magnate and philanthropist. Gates is the former chief executive and current chairman of Microsoft, the world's largest personal-computer software company, which he co-founded with Paul Allen. He is consistently ranked among the world's wealthiest people and was the wealthiest overall from 1995 to 2009, excluding 2008, when he was ranked third; in 2011 he was the wealthiest American and the second wealthiest person. During his career at Microsoft, Gates held the positions of CEO and chief software architect, and remains the largest individual shareholder, with 6.4 percent of the common stock. He has also authored and co-authored several books.", skills: [
20 | {description: "Entrepreneurship"},
21 | {description: "VB"},
22 | {description: "Operating Systems"},
23 | {description: "Programming Languages"}
24 | ], picture: "http://www.igniteui.com/images/samples/tile-manager/220px-BillGates2012.jpg", linkedin: "http://www.linkedin.com/company/8736?trk=tyah"
25 | },
26 | {
27 | name: "Jon Skeet", text: "Author of C# in Depth. Currently a software engineer at Google, London. Usually a Microsoft MVP (C#, 2003-2010, 2011-)", skills: [
28 | { description: "C#" },
29 | { description: ".NET" },
30 | { description: "Java" }
31 | ], picture: "http://www.igniteui.com/images/samples/tile-manager/jonskeet.jpg", linkedin: "uk.linkedin.com/pub/jon-skeet/0/800/ba3"
32 | }
33 | ]
34 | };
35 |
36 | return svc;
37 |
38 | }]);
--------------------------------------------------------------------------------
/src-samples/igniteui-angular-samples.njsproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | 2.0
6 | {67f9e854-0dd9-45a9-9253-5079166b847f}
7 |
8 | ProjectFiles
9 | app.js
10 | .
11 | .
12 | {3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}
13 | 11.0
14 | $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | False
36 | True
37 | 0
38 | /
39 | http://localhost:48022/
40 | False
41 | True
42 | http://localhost:1337
43 | False
44 |
45 |
46 |
47 |
48 |
49 |
50 | CurrentPage
51 | True
52 | False
53 | False
54 | False
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | False
64 | False
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/src-samples/grunt/lib/generator.js:
--------------------------------------------------------------------------------
1 | (function (module) {
2 |
3 | var
4 | path = require('path'),
5 | fs = require('fs-extra'),
6 | walk = require('walk'),
7 | _config = null;
8 |
9 | module.init = function (config) {
10 | var cwd = process.cwd();
11 |
12 | _config = config;
13 | _config.paths.source = path.resolve(cwd, config.paths.source);
14 | _config.paths.destination = path.resolve(cwd, config.paths.destination);
15 | _config.paths.template = path.resolve(cwd, config.paths.template);
16 | _config.tokens = config.tokens || ['|title|', '|styles|', '|content|', '|scripts|'];
17 | };
18 |
19 | module.generate = function (config, done) {
20 |
21 | if (!config) throw new Error('You must pass in the config options to generate files.');
22 | if (!done) throw new Error('You need to pass a callback into generate so your script can continue once its done.');
23 |
24 | if (_config === null) {
25 | module.init(config);
26 | }
27 |
28 | fs.removeSync(_config.paths.destination);
29 | fs.mkdirSync(_config.paths.destination);
30 |
31 | var options = { followLinks: false };
32 |
33 | var getPropertyNameFromToken = function (token) {
34 | return token.match(/[a-zA-Z]/g).join('').toLowerCase();
35 | };
36 |
37 | var getContent = function (fileContents) {
38 | var content = {};
39 |
40 | var extractText = function (token) {
41 | var contentArray = fileContents.split(token);
42 | return contentArray.length > 1 ? contentArray[1] : '';
43 | };
44 |
45 | _config.tokens.forEach(function (token) {
46 | var propertyName = getPropertyNameFromToken(token);
47 | content[propertyName] = extractText(token);
48 | });
49 |
50 | return content;
51 | };
52 |
53 | var stats = {
54 | filesCount: 0
55 | };
56 |
57 | var
58 | fileContents = '',
59 | contents = '',
60 | finalContent = '',
61 | walker = null,
62 | template = fs.readFileSync(_config.paths.template, 'utf-8');
63 |
64 | walker = walk.walk(_config.paths.source, options);
65 |
66 | walker.on("file", function (root, fileStats, next) {
67 |
68 | var
69 | filePath = path.join(root, fileStats.name),
70 | destinationPath = filePath.replace(_config.paths.source, _config.paths.destination);
71 |
72 | if (path.extname(filePath) === '.html') {
73 | var fileContents = fs.readFileSync(filePath, { encoding: 'utf-8' });
74 | contents = getContent(fileContents);
75 |
76 | finalContent = template;
77 | _config.tokens.forEach(function (token) {
78 | if (finalContent.indexOf(token) > -1) {
79 | finalContent = finalContent.replace(token, contents[getPropertyNameFromToken(token)]);
80 | }
81 | });
82 |
83 | fs.ensureFileSync(destinationPath);
84 | fs.writeFileSync(destinationPath, finalContent);
85 | stats.filesCount++;
86 | next();
87 | } else {
88 | fs.copySync(filePath, destinationPath);
89 | stats.filesCount++;
90 | next();
91 | }
92 | });
93 |
94 | walker.on("errors", function (root, nodeStatsArray, next) {
95 | next();
96 | });
97 |
98 | walker.on("end", function () {
99 | stats.message = stats.filesCount + ' files created'
100 | done(stats);
101 | });
102 | };
103 |
104 | }(module.exports));
--------------------------------------------------------------------------------
/src-samples/src/igCombo.html:
--------------------------------------------------------------------------------
1 | |title|igCombo|title|
2 |
3 | |styles|
4 |
5 |
6 | |styles|
7 |
8 | |content|
9 |
10 |
11 |
12 |
13 |
TRY IT OUT:
14 |
15 |
16 | - Enter a Product ID in the textbox and see how the combos change
17 | - Change a product's name in the group of textboxes below and see how the names change in each combo
18 |
19 |
20 |
21 |
This sample demonstrates how to use AngularJS directives to create igCombos.
22 |
Explore the Code
23 |
24 |
25 |
26 |
27 |
28 |
29 |
values: 1 - 20
30 |
31 |
32 |
33 |
41 |
42 |
43 |
44 |
45 |
46 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
Edit Product Name
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | |content|
70 |
71 | |scripts|
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igHierarchicalGrid.html:
--------------------------------------------------------------------------------
1 | |title|igHierarchicalGrid|title|
2 |
3 | |styles|
4 |
5 |
6 | |styles|
7 |
8 | |content|
9 |
10 |
11 |
12 |
13 |
14 |
This sample demonstrates how AngularJS directives are used to instantiate igHierarchicalGrid.
15 |
Explore the Code
16 |
17 |
18 |
19 |
20 |
21 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | |content|
53 |
54 | |scripts|
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igTreeGrid.html:
--------------------------------------------------------------------------------
1 | |title|igTreeGrid|title|
2 | |styles|
3 |
4 |
5 |
6 | |styles|
7 | |content|
8 |
9 |
10 |
11 |
12 |
13 |
This sample demonstrates how AngularJS directives are used with the igTreeGrid.
14 |
Explore the Code
15 |
16 |
17 |
18 |
19 |
20 |
21 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | |content|
45 |
46 | |scripts|
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igEditors.html:
--------------------------------------------------------------------------------
1 | |title|Editors|title|
2 |
3 | |styles|
4 |
5 |
6 | |styles|
7 |
8 | |content|
9 |
10 |
11 |
12 |
13 |
TRY IT OUT:
14 |
15 |
16 | - Enter a value in one of the editors
17 | - Try to enter values that don't make sense (e.g., alpha characters in a numeric field) and observe the results
18 |
19 |
20 |
21 |
This sample demonstrates how create a number of different editors using AngularJS directives.
22 |
Explore the Code
23 |
24 |
25 |
26 |
72 |
73 | |content|
74 |
75 | |scripts|
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igMap.html:
--------------------------------------------------------------------------------
1 | |title|Map|title|
2 |
3 | |styles|
4 |
5 |
6 |
7 | |styles|
8 |
9 | |content|
10 |
11 |
12 |
13 |
14 |
TRY IT OUT:
15 |
16 |
17 | - Use the mouse wheel to zoom in on the map
18 | - Click and drag or use the arrow keys to pan the map
19 |
20 |
21 |
22 |
This sample demonstrates how create an igMap using an AngularJS directive.
23 |
Explore the Code
24 |
25 |
26 |
27 |
28 |
29 |
30 | |content|
31 |
32 | |scripts|
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igTileManager.html:
--------------------------------------------------------------------------------
1 | |title|Tile Manager|title|
2 |
3 | |styles|
4 |
5 |
6 |
7 |
63 | |styles|
64 |
65 | |content|
66 |
67 |
68 |
69 |
70 |
71 |
72 |
This sample demonstrates how AngularJS directives are used to instantiate igTileManager.
73 |
Explore the Code
74 |
75 |
76 |
92 |
93 | |content|
94 |
95 | |scripts|
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igHtmlEditor.html:
--------------------------------------------------------------------------------
1 | |title|HTML Editor|title|
2 |
3 | |styles|
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 | |styles|
21 |
22 | |content|
23 |
24 |
25 |
26 |
27 |
TRY IT OUT:
28 |
29 |
30 | - Change the content in the TEXTAREA on the right to see igHtmlEditor on the left updated
31 |
32 |
33 |
34 |
This sample demonstrates how AngularJS directives are used with the igHtmlEditor to allow for one-way binding.
35 |
Explore the Code
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | |content|
48 |
49 | |scripts|
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | |scripts|
--------------------------------------------------------------------------------
/samples/igUpload.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Upload - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
38 |
39 |
40 |
41 |
42 |
43 |
TRY IT OUT:
44 |
45 |
46 | - Click on the button to upload a file
47 |
48 |
49 |
50 |
This sample demonstrates how create an igUpload using an AngularJS directive.
51 |
Note: There is no server configured with this sample, so uploads will fail.
52 |
Explore the Code
53 |
54 |
55 |
56 |
57 |
58 |
59 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/src-samples/src/igGrid-controller.html:
--------------------------------------------------------------------------------
1 | |title|igGrid Controller Options|title|
2 |
3 | |styles|
4 |
5 |
6 | |styles|
7 |
8 | |content|
9 |
10 |
11 |
12 |
13 |
14 |
TRY IT OUT:
15 |
16 |
17 | - Add a new product either through the grid's UI or the form on the right of the grid
18 | - Change a product's name in the group of textboxes below and see how the names change in the grid
19 | - Delete a product either through the grid's UI or with the button next to each product in the table under the grid
20 |
21 |
22 |
23 |
This sample demonstrates how Controller options are used with the igGrid directive to allow for two-way binding in the grid.
24 |
Explore the Code
25 |
26 |
27 |
28 |
44 |
45 |
46 |
47 |
67 |
68 | |content|
69 |
70 | |scripts|
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | |scripts|
--------------------------------------------------------------------------------
/samples/igDialog.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | igDialog - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
37 |
38 |
39 |
40 |
41 |
42 |
TRY IT OUT:
43 |
44 |
45 | - Drag the dialog around the page by the header
46 | - Close the dialog and refresh the page to see it reappear
47 |
48 |
49 |
50 |
This sample demonstrates how to declare an igDialog with an AngularJS directive.
51 |
Explore the Code
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/samples/igVideoPlayer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | igVideoPlayer - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
37 |
38 |
39 |
40 |
41 |
42 |
TRY IT OUT:
43 |
44 |
47 |
48 |
49 |
This sample demonstrates how create an igVideoPlayer with an AngularJS directive.
50 |
Explore the Code
51 |
52 |
53 |
54 |
55 | http://dl.infragistics.com/pg/2011-1/web/shared/videoplayer/videos/Infragistics_Presentation_lowRes_1.h264.mp4
56 | http://dl.infragistics.com/pg/2011-1/web/shared/videoplayer/videos/Infragistics_Presentation_lowRes_1.webmvp8.webm
57 | http://dl.infragistics.com/pg/2011-1/web/shared/videoplayer/videos/Infragistics_Presentation_lowRes_1.theora.ogv
58 |
59 |
60 |
61 |
62 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/src-samples/src/igPivotGrid-FlatDataSource.html:
--------------------------------------------------------------------------------
1 | |title|igPivotGrid|title|
2 | |styles|
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
19 | |styles|
20 | |content|
21 |
22 |
23 |
24 |
25 |
26 |
This sample demonstrates how AngularJS directives are used with the igPivotGrid and Olap Flat Data Source.
27 |
Explore the Code
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
37 |
38 |
39 |
40 |
41 |
42 | |content|
43 | |scripts|
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igPivotGrid-XmlaDataSource.html:
--------------------------------------------------------------------------------
1 | |title|igPivotGrid|title|
2 | |styles|
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
19 | |styles|
20 | |content|
21 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
This sample demonstrates how AngularJS directives are used with the igPivotGrid and Olap Xmla Data Source.
47 |
Explore the Code
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
57 |
58 |
59 |
60 |
61 |
62 | |content|
63 | |scripts|
64 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igDataChart.html:
--------------------------------------------------------------------------------
1 | |title|Ignite UI Chart and Zoombar|title|
2 |
3 | |styles|
4 |
5 |
6 |
7 | |styles|
8 |
9 | |content|
10 |
11 |
12 |
13 |
14 |
TRY IT OUT:
15 |
16 |
17 | - Scroll the chart with the scroll bar
18 | - Change the viewable area of the chart by dragging the handles inside the zoombar
19 |
20 |
21 |
22 |
This sample demonstrates how to link together the igDataChart and igZoomBar using AngularJS directives.
23 |
Explore the Code
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
37 |
38 |
42 |
43 |
44 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | |content|
59 |
60 | |scripts|
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | |scripts|
--------------------------------------------------------------------------------
/samples/igCombo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | igCombo - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
38 |
39 |
40 |
41 |
42 |
43 |
TRY IT OUT:
44 |
45 |
46 | - Enter a Product ID in the textbox and see how the combos change
47 | - Change a product's name in the group of textboxes below and see how the names change in each combo
48 |
49 |
50 |
51 |
This sample demonstrates how to use AngularJS directives to create igCombos.
52 |
Explore the Code
53 |
54 |
55 |
56 |
57 |
58 |
59 |
values: 1 - 20
60 |
61 |
62 |
63 |
71 |
72 |
73 |
74 |
75 |
76 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
Edit Product Name
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
--------------------------------------------------------------------------------
/src-samples/src/igGrid.html:
--------------------------------------------------------------------------------
1 | |title|igGrid: The Basics|title|
2 |
3 | |styles|
4 |
5 |
6 | |styles|
7 |
8 | |content|
9 |
10 |
11 |
12 |
13 |
14 |
TRY IT OUT:
15 |
16 |
17 | - Add a new product either through the grid's UI or the form on the right of the grid
18 | - Change a product's name in the group of textboxes below and see how the names change in the grid
19 | - Delete a product either through the grid's UI or with the button next to each product in the table under the grid
20 |
21 |
22 |
23 |
This sample demonstrates how AngularJS directives are used with the igGrid to allow for two-way binding in the grid.
24 |
Explore the Code
25 |
26 |
27 |
28 |
29 |
30 |
31 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
71 |
72 |
73 |
74 |
75 |
95 |
104 |
105 | |content|
106 |
107 | |scripts|
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 | |scripts|
--------------------------------------------------------------------------------
/src-samples/src/igTree.html:
--------------------------------------------------------------------------------
1 | |title|igTree|title|
2 |
3 | |styles|
4 |
5 | |styles|
6 |
7 | |content|
8 |
9 |
10 |
11 |
12 |
TRY IT OUT:
13 |
14 |
15 | - Add and remove nodes from the tree using the buttons
16 | - Edit product names and see how the tree responds
17 |
18 |
19 |
20 |
This sample demonstrates how to create an igTree with an AngularJS directive.
21 |
Explore the Code
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
Add a new root-level node
38 |
39 |
40 |
41 |
42 |
Add a new root-level node (by name)
43 |
44 |
45 |
46 |
47 |
48 | {{newProductCategory.ProductCategoryID = ProductCategories.length + 1}}
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
Remove the selected node from the tree
60 |
61 |
62 |
63 |
64 |
108 |
109 |
110 |
111 |
112 |
113 | |content|
114 |
115 | |scripts|
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 | |scripts|
--------------------------------------------------------------------------------
/samples/igHierarchicalGrid.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | igHierarchicalGrid - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
This sample demonstrates how AngularJS directives are used to instantiate igHierarchicalGrid.
45 |
Explore the Code
46 |
47 |
48 |
49 |
50 |
51 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
--------------------------------------------------------------------------------
/src-samples/src/grid/master-detail/index.html:
--------------------------------------------------------------------------------
1 | |title|igGrid: Master/Detail|title|
2 |
3 | |styles|
4 |
5 |
6 |
11 | |styles|
12 |
13 | |content|
14 |
15 |
igGrid Master/Detail
16 |
Oops! There's been a problem: {{error}}
17 |
18 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
35 |
37 |
41 |
42 |
43 |
44 |
126 |
127 | |content|
128 |
129 |
130 | |scripts|
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 | |scripts|
--------------------------------------------------------------------------------
/samples/igTileManager.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Tile Manager - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
72 |
73 |
74 |
75 |
76 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
This sample demonstrates how AngularJS directives are used to instantiate igTileManager.
103 |
Explore the Code
104 |
105 |
106 |
107 |
108 |
118 |
119 |
120 |
121 |
122 |
123 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/samples/igTreeGrid.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | igTreeGrid - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
This sample demonstrates how AngularJS directives are used with the igTreeGrid.
46 |
Explore the Code
47 |
48 |
49 |
50 |
51 |
52 |
53 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/test/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Jasmine Spec Runner v2.0.0
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | igGrid
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
57 |
58 | igTree
59 |
60 |
61 |
62 |
63 |
64 |
65 |
84 |
85 | igCombo
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
100 |
101 |
102 |
103 |
104 | igEditors
105 |
106 |
107 |
108 | | igCurrencyEditor |
109 | |
110 |
111 |
112 | | igDateEditor |
113 | |
114 |
115 |
116 | | igMaskEditor |
117 | |
118 |
119 |
120 | | igNumericEditor |
121 | |
122 |
123 |
124 | | igPercentEditor |
125 | |
126 |
127 |
128 | | igTextEditor |
129 | |
130 |
131 |
132 | | igDatePicker |
133 | |
134 |
135 |
136 | | igCheckboxEditor |
137 | |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
--------------------------------------------------------------------------------
/samples/igEditors.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Editors - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
38 |
39 |
40 |
41 |
42 |
43 |
TRY IT OUT:
44 |
45 |
46 | - Enter a value in one of the editors
47 | - Try to enter values that don't make sense (e.g., alpha characters in a numeric field) and observe the results
48 |
49 |
50 |
51 |
This sample demonstrates how create a number of different editors using AngularJS directives.
52 |
Explore the Code
53 |
54 |
55 |
56 |
102 |
103 |
104 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
--------------------------------------------------------------------------------
/samples/igMap.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Map - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
39 |
40 |
41 |
42 |
43 |
44 |
TRY IT OUT:
45 |
46 |
47 | - Use the mouse wheel to zoom in on the map
48 | - Click and drag or use the arrow keys to pan the map
49 |
50 |
51 |
52 |
This sample demonstrates how create an igMap using an AngularJS directive.
53 |
Explore the Code
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/samples/igHtmlEditor.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | HTML Editor - Ignite UI integration with AngularJS
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
29 |
30 |
31 |
32 |
33 |
52 |
53 |
54 |
55 |
56 |
57 |
TRY IT OUT:
58 |
59 |
60 | - Change the content in the TEXTAREA on the right to see igHtmlEditor on the left updated
61 |
62 |
63 |
64 |
This sample demonstrates how AngularJS directives are used with the igHtmlEditor to allow for one-way binding.
65 |
Explore the Code
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------