Commit 608cfdac authored by Evren Kutar's avatar Evren Kutar

ADD refs GH-6 docs generated using angular-jsdoc

FIX rref #5046 workaround for actions by show/hide column based on action=Boolean
parent 2188bae8
...@@ -216,6 +216,14 @@ module.exports = function (grunt) { ...@@ -216,6 +216,14 @@ module.exports = function (grunt) {
"app/bower_components/intro.js/themes/introjs-nassim.css" "app/bower_components/intro.js/themes/introjs-nassim.css"
], ],
dest: 'dist/<%= grunt.branchname %>/css/app.css' dest: 'dist/<%= grunt.branchname %>/css/app.css'
},
docs: {
src: ['docs/templates/index_head', 'docs/html/partials/api/**/*.html', 'docs/templates/index_tail'],
dest: 'docs/html/partials/api/index.html'
},
docs_list: {
src: ['docs/html/partials/api/**/index.html'],
dest: 'docs/html/partials/api/list.html'
} }
}, },
watch: { watch: {
...@@ -323,6 +331,27 @@ module.exports = function (grunt) { ...@@ -323,6 +331,27 @@ module.exports = function (grunt) {
} }
} }
} }
},
jsdoc: {
dist: {
src: [
"app/app.js",
"app/zetalib/interceptors.js",
"app/zetalib/form_service.js",
"app/shared/directives.js",
"app/components/auth/auth_controller.js",
"app/components/auth/auth_service.js",
"app/components/crud/crud_controller.js"
],
options: {
destination: 'docs/html',
configure: 'node_modules/angular-jsdoc/common/conf.json',
template: 'node_modules/angular-jsdoc/angular-template',
//tutorial: 'tutorials',
readme: './README.md'
}
}
} }
}); });
...@@ -339,6 +368,7 @@ module.exports = function (grunt) { ...@@ -339,6 +368,7 @@ module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-angular-gettext'); grunt.loadNpmTasks('grunt-angular-gettext');
grunt.loadNpmTasks('grunt-preprocess'); grunt.loadNpmTasks('grunt-preprocess');
grunt.loadNpmTasks('grunt-env'); grunt.loadNpmTasks('grunt-env');
grunt.loadNpmTasks('grunt-jsdoc');
grunt.registerTask('dev', ['env:dev', 'preprocess:dev', 'html2js:dev', 'default']); grunt.registerTask('dev', ['env:dev', 'preprocess:dev', 'html2js:dev', 'default']);
grunt.registerTask('test', ['bower', 'karma:continuous']); grunt.registerTask('test', ['bower', 'karma:continuous']);
...@@ -362,11 +392,4 @@ module.exports = function (grunt) { ...@@ -362,11 +392,4 @@ module.exports = function (grunt) {
'uglify:branch' 'uglify:branch'
]); ]);
}); });
grunt.registerTask('dgeni', 'Generate docs via dgeni.', function() {
var Dgeni = require('dgeni');
var done = this.async();
var dgeni = new Dgeni([require('./docs/docs_conf')]);
dgeni.generate().then(done);
});
}; };
\ No newline at end of file
...@@ -11,9 +11,14 @@ ...@@ -11,9 +11,14 @@
/** /**
* @ngdoc module * @ngdoc module
* @name ulakbus * @name ulakbus
* @description * @module ulakbus
* Ulakbus module is the main module of ulakbus-ui. All application-wide configurations and definings of constants * @description Ulakbus module is the main module of ulakbus-ui. All application-wide configurations and definings
* handled in this module. * of constants handled in this module. \r
* There are two scripts on `app/` root; `main.js` and `app.js`. And `main.html`, `index.html`.
* `main.*` files are contains both production and development requirements or configurations/necessities for
* relative environment. Tagged with `// \@if NODE_ENV='PRODUCTION'` in commented line and configured in
* Gruntfile.js with package `preprocess` and `env`, related grunt command generates index.* for given file.
*
*/ */
angular.module( angular.module(
'ulakbus', [ 'ulakbus', [
...@@ -22,7 +27,7 @@ angular.module( ...@@ -22,7 +27,7 @@ angular.module(
'ngRoute', 'ngRoute',
'ngSanitize', 'ngSanitize',
'ngCookies', 'ngCookies',
'formService', 'ulakbus.formService',
'ulakbus.dashboard', 'ulakbus.dashboard',
'ulakbus.auth', 'ulakbus.auth',
'ulakbus.error_pages', 'ulakbus.error_pages',
...@@ -35,11 +40,10 @@ angular.module( ...@@ -35,11 +40,10 @@ angular.module(
'ulakbus.uitemplates' 'ulakbus.uitemplates'
]) ])
/** /**
* @ngdoc object * @memberof ulakbus
* @ngdoc constant
* @name RESTURL * @name RESTURL
* @module ulakbus * @description RESTURL is the url of rest api to talk.
* @description
* RESTURL is the url of rest api to talk
* Based on the environment it changes from dev to prod * Based on the environment it changes from dev to prod
*/ */
.constant("RESTURL", (function () { .constant("RESTURL", (function () {
......
...@@ -11,23 +11,21 @@ ...@@ -11,23 +11,21 @@
/** /**
* @ngdoc module * @ngdoc module
* @name ulakbus.auth * @name ulakbus.auth
* @description * @module ulakbus.auth
* ulakbus.auth module handles authorization process of ulakbus-ui. * @description ulakbus.auth module handles authorization process of ulakbus-ui.
* *
* @requires ngRoute * @requires ngRoute
* @requires schemaForm
* @requires ngCookies * @requires ngCookies
*/ */
angular.module('ulakbus.auth', ['ngRoute', 'schemaForm', 'ngCookies']) angular.module('ulakbus.auth', ['ngRoute', 'ngCookies'])
/** /**
* @memberof ulakbus.auth
* @ngdoc controller * @ngdoc controller
* @name LoginCtrl * @name LoginCtrl
* @module ulakbus.auth * @description LoginCtrl responsible to handle login process.<br>
* @description * Using 'ulakbus.formService.get_form' function generates the login form and post it to the API with input datas.
* LoginCtrl responsible to handle login process.
* Using 'formService.get_form' function generates the login form and post it to the API with input datas.
*/ */
.controller('LoginCtrl', function ($scope, $q, $timeout, $routeParams, $rootScope, $log, Generator, LoginService) { .controller('LoginCtrl', function ($scope, $q, $timeout, $routeParams, $rootScope, $log, Generator, AuthService) {
$scope.url = 'login'; $scope.url = 'login';
$scope.form_params = {}; $scope.form_params = {};
$scope.form_params['clear_wf'] = 1; $scope.form_params['clear_wf'] = 1;
...@@ -44,7 +42,7 @@ angular.module('ulakbus.auth', ['ngRoute', 'schemaForm', 'ngCookies']) ...@@ -44,7 +42,7 @@ angular.module('ulakbus.auth', ['ngRoute', 'schemaForm', 'ngCookies'])
if (form.$valid) { if (form.$valid) {
$scope.loggingIn = true; $scope.loggingIn = true;
$rootScope.loginAttempt = 1; $rootScope.loginAttempt = 1;
LoginService.login($scope.url, $scope.model) AuthService.login($scope.url, $scope.model)
.error(function (data) { .error(function (data) {
$scope.message = data.title; $scope.message = data.title;
}) })
......
...@@ -10,15 +10,26 @@ ...@@ -10,15 +10,26 @@
angular.module('ulakbus.auth') angular.module('ulakbus.auth')
/** /**
* @memberof ulakbus.auth
* @ngdoc service * @ngdoc service
* @name LoginService * @name AuthService
* @description * @description provides generic functions for authorization process.
* LoginService provides generic functions for authorization process.
*/ */
.factory('LoginService', function ($http, $rootScope, $location, $log, RESTURL) { .factory('AuthService', function ($http, $rootScope, $location, $log, Generator, RESTURL) {
var loginService = {}; var authService = {};
loginService.login = function (url, credentials) { /**
* @memberof ulakbus.auth
* @ngdoc function
* @function login
* @description login function post credentials to API and handles login.
* If login req returns success then interceptor will redirects to related path.
* @memberof ulakbus.auth
* @param url
* @param credentials
* @returns {*}
*/
authService.login = function (url, credentials) {
credentials['cmd'] = "do"; credentials['cmd'] = "do";
return $http return $http
.post(RESTURL.url + url, credentials) .post(RESTURL.url + url, credentials)
...@@ -33,7 +44,15 @@ angular.module('ulakbus.auth') ...@@ -33,7 +44,15 @@ angular.module('ulakbus.auth')
}); });
}; };
loginService.logout = function () { /**
* @memberof ulakbus.auth
* @ngdoc controller
* @function logout
* @description logout function posts logout request to API and redirects to login path
* @memberof ulakbus.auth
* @returns {*}
*/
authService.logout = function () {
$log.debug("logout"); $log.debug("logout");
return $http.post(RESTURL.url + 'logout', {}).success(function (data) { return $http.post(RESTURL.url + 'logout', {}).success(function (data) {
$rootScope.loggedInUser = false; $rootScope.loggedInUser = false;
...@@ -42,10 +61,5 @@ angular.module('ulakbus.auth') ...@@ -42,10 +61,5 @@ angular.module('ulakbus.auth')
}); });
}; };
loginService.isValidEmail = function (email) { return authService;
var re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
return re.test(email);
};
return loginService;
}); });
\ No newline at end of file
...@@ -43,65 +43,23 @@ describe('ulakbus.auth module', function () { ...@@ -43,65 +43,23 @@ describe('ulakbus.auth module', function () {
var controller = $controller('LoginCtrl', {$scope: $scope}); var controller = $controller('LoginCtrl', {$scope: $scope});
expect($scope.onSubmit).toBeDefined(); expect($scope.onSubmit).toBeDefined();
//expect($scope.loginForm).toBeDefined(); expect($scope.loginForm).toBeDefined();
//
//$scope.onSubmit($scope.loginForm);
}) })
); );
it('should validate email', inject(['LoginService', it('ensures user can log in', function (AuthService, $httpBackend, RESTURL) {
function (LoginService) {
expect(LoginService.isValidEmail).not.toBe(null);
// test cases - testing for success
var validEmails = [
'test@test.com',
'test@test.co.uk',
'test734ltylytkliytkryety9ef@jb-fe.com'
];
// test cases - testing for failure
var invalidEmails = [
'test@testcom',
'test@ test.co.uk',
'ghgf@fe.com.co.',
'tes@t@test.com',
''
];
// you can loop through arrays of test cases like this
for (var i in validEmails) {
var valid = LoginService.isValidEmail(validEmails[i]);
expect(valid).toBeTruthy();
}
for (var i in invalidEmails) {
var valid = LoginService.isValidEmail(invalidEmails[i]);
expect(valid).toBeFalsy();
}
}])
);
it('should submit form', inject(function ($httpBackend, RESTURL) {
}));
it('ensures user can log in', function (LoginService, $httpBackend, RESTURL) {
// todo: after backend api ready implement this // todo: after backend api ready implement this
}); });
it('should get login success', it('should get login success',
inject(function (LoginService, $httpBackend, $location, RESTURL) { inject(function (AuthService, $httpBackend, $location, RESTURL) {
// use httpBackend to imitate login api // use httpBackend to imitate login api
$httpBackend.expectPOST(RESTURL.url + 'login', { $httpBackend.expectPOST(RESTURL.url + 'login', {
email: 'test@test.com', email: 'test@test.com',
password: 'password', password: 'password',
cmd: 'do' cmd: 'do'
}) })
// todo: with real api change response data from list to obj
.respond(200, [{ .respond(200, [{
'id': 1, 'user': { 'id': 1, 'user': {
'id': 12 'id': 12
...@@ -111,11 +69,9 @@ describe('ulakbus.auth module', function () { ...@@ -111,11 +69,9 @@ describe('ulakbus.auth module', function () {
}]); }]);
var cred = {email: 'test@test.com', password: 'password'}; var cred = {email: 'test@test.com', password: 'password'};
LoginService.login('login', cred) AuthService.login('login', cred)
.then(function (data) { .then(function (data) {
expect(data).not.toBe(null); expect(data).not.toBe(null);
// after login path need to be change dashboard
//expect($location.path()).toBe('');
}); });
$httpBackend.flush(); $httpBackend.flush();
...@@ -123,7 +79,7 @@ describe('ulakbus.auth module', function () { ...@@ -123,7 +79,7 @@ describe('ulakbus.auth module', function () {
); );
it('should logout', it('should logout',
inject(function (LoginService, $httpBackend, $location, RESTURL) { inject(function (AuthService, $httpBackend, $location, RESTURL) {
// use httpBackend to imitate login api // use httpBackend to imitate login api
...@@ -132,7 +88,7 @@ describe('ulakbus.auth module', function () { ...@@ -132,7 +88,7 @@ describe('ulakbus.auth module', function () {
is_login: false is_login: false
}); });
LoginService.logout().success(function (data) { AuthService.logout().success(function (data) {
expect(data.is_login).toBe(false); expect(data.is_login).toBe(false);
}); });
......
...@@ -10,12 +10,17 @@ ...@@ -10,12 +10,17 @@
/** /**
* @ngdoc module * @ngdoc module
* @name ulakbus.crud * @name ulakbus.crud
* @packageFile crud_controller.js * @module ulakbus.crud
* @description * @description
* ulakbus.crud module is the main module for ui. It interacts with backend and manipulate data to screen generically. * ulakbus.crud module is the main module for ui. It interacts with backend and manipulate data to screen
* generically.
* *
* @requires ui.bootstrap
* @requires schemaForm
* @requires ulakbus.formService
* @type {ng.$compileProvider|*}
*/ */
angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'ulakbus.formService'])
.config(function (sfErrorMessageProvider) { .config(function (sfErrorMessageProvider) {
sfErrorMessageProvider.setDefaultMessage(302, 'Bu alan zorunludur.'); sfErrorMessageProvider.setDefaultMessage(302, 'Bu alan zorunludur.');
sfErrorMessageProvider.setDefaultMessage(200, 'En az {{schema.minLength}} değer giriniz.'); sfErrorMessageProvider.setDefaultMessage(200, 'En az {{schema.minLength}} değer giriniz.');
...@@ -23,28 +28,24 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) ...@@ -23,28 +28,24 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService'])
}) })
/** /**
* @memberof ulakbus.crud
* @ngdoc service * @ngdoc service
* @name CrudUtility * @name CrudUtility
* @module ulakbus.crud * @description Crud Utility is a service to provide generic functions for Crud controllers to format data and
* @description * scope object.
* Crud Utility is a service to provide generic functions for Crud controllers to format data and scope object. * @returns {service}
* @returns {object}
*/ */
.service('CrudUtility', function ($log, $rootScope) { .service('CrudUtility', function ($log, $rootScope) {
return { return {
/** /**
* @memberof ulakbus.crud
* @ngdoc function * @ngdoc function
* @name generateParam * @name generateParam
* @module ulakbus.crud * @description generateParam is a function to generate required params to post backend api.
* @description * @param {object} scope
* generateParam is a function to generate required params to post backend api. * @param {object} routeParams
* * @param {string} cmd
* scope * @returns {object} scope
*
* @param scope
* @param routeParams
* @param cmd
* @returns {*}
*/ */
generateParam: function (scope, routeParams, cmd) { generateParam: function (scope, routeParams, cmd) {
scope.url = routeParams.wf; scope.url = routeParams.wf;
...@@ -79,14 +80,13 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) ...@@ -79,14 +80,13 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService'])
return scope; return scope;
}, },
/** /**
* @memberof ulakbus.crud
* @ngdoc function * @ngdoc function
* @name listPageItems * @name listPageItems
* @module ulakbus.crud * @description listPageItems is a function to prepare objects to list in the list page.
* @description
* listPageItems is a function to prepare objects to list in the list page.
* *
* @param scope * @param {object} scope
* @param pageData * @param {object} pageData
*/ */
listPageItems: function (scope, pageData) { listPageItems: function (scope, pageData) {
angular.forEach(pageData, function (value, key) { angular.forEach(pageData, function (value, key) {
...@@ -119,11 +119,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) ...@@ -119,11 +119,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService'])
}) })
/** /**
* @memberof ulakbus.crud
* @ngdoc controller * @ngdoc controller
* @name CRUDCtrl * @name CRUDCtrl
* @module ulakbus.crud * @description CRUDCtrl controller is base controller for crud module to redirect to related controller
* @description
* CRUDCtrl controller is base controller for crud module to redirect to related controller
* This controller play an empty role for api calls. * This controller play an empty role for api calls.
* With response data, location path change to related controller * With response data, location path change to related controller
* *
...@@ -136,20 +135,19 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) ...@@ -136,20 +135,19 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService'])
}) })
/** /**
* @memberof ulakbus.crud
* @ngdoc controller * @ngdoc controller
* @name CRUDListFormCtrl * @name CRUDListFormCtrl
* @module ulakbus.crud * @description CRUDListFormCtrl is the main controller for crud module
* @description
* CRUDListFormCtrl is the main controller for crud module
* Based on the client_cmd parameter it generates its scope items. * Based on the client_cmd parameter it generates its scope items.
* client_cmd can be in ['show', 'list', 'form', 'reload', 'refresh'] * client_cmd can be in ['show', 'list', 'form', 'reload', 'refresh']
* There are 3 directives to manipulate controllers scope objects in crud.html * There are 3 directives to manipulate controllers scope objects in crud.html
* * <br>
* The controller works in 2 ways, with and without pageData. * The controller works in 2 ways, with and without pageData.
* pageData is generated by formService.Generator and it contains data to manipulate page. * pageData is generated by formService.Generator and it contains data to manipulate page.
* If pageData has set, using Generator's getPageData() function, sets its scope items. After getting pageData * If pageData has set, using Generator's getPageData() function, sets its scope items. After getting pageData
* pageData must be set to `{pageData: false}` for clear scope of next job. * pageData must be set to `{pageData: false}` for clear scope of next job.
* * <br>
* If pageData has not set using Generator's get_wf() function gets scope items from api call. * If pageData has not set using Generator's get_wf() function gets scope items from api call.
* *
* @returns {object} * @returns {object}
...@@ -285,11 +283,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) ...@@ -285,11 +283,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService'])
}) })
/** /**
* @memberof ulakbus.crud
* @ngdoc directive * @ngdoc directive
* @name crudListDirective * @name crudListDirective
* @module ulakbus.crud * @description directive for listing objects.
* @description
* directive for listing objects.
* provides template for `scope.objects` object. * provides template for `scope.objects` object.
*/ */
.directive('crudListDirective', function () { .directive('crudListDirective', function () {
...@@ -300,11 +297,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) ...@@ -300,11 +297,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService'])
}; };
}) })
/** /**
* @memberof ulakbus.crud
* @ngdoc directive * @ngdoc directive
* @name crudFormDirective * @name crudFormDirective
* @module ulakbus.crud * @description directive for form generation.
* @description
* directive for form generation.
* provides template for `scope.forms` object. * provides template for `scope.forms` object.
*/ */
.directive('crudFormDirective', function () { .directive('crudFormDirective', function () {
...@@ -315,11 +311,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) ...@@ -315,11 +311,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService'])
}; };
}) })
/** /**
* @memberof ulakbus.crud
* @ngdoc directive * @ngdoc directive
* @name crudShowDirective * @name crudShowDirective
* @module ulakbus.crud * @description directive for single object or detail of an object.
* @description
* directive for single object or detail of an object.
* provides template for `scope.object` object. * provides template for `scope.object` object.
*/ */
.directive('crudShowDirective', function () { .directive('crudShowDirective', function () {
...@@ -330,11 +325,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) ...@@ -330,11 +325,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService'])
}; };
}) })
/** /**
* @memberof ulakbus.crud
* @ngdoc directive * @ngdoc directive
* @name formLocator * @name formLocator
* @module ulakbus.crud * @description directive for finding form element. we use this directive because when form dynamically generated using
* @description
* directive for finding form element. we use this directive because when form dynamically generated using
* schemaform it belongs to a scope which is hard to reach. This makes it easy to locate form object. * schemaform it belongs to a scope which is hard to reach. This makes it easy to locate form object.
*/ */
.directive('formLocator', function () { .directive('formLocator', function () {
...@@ -346,11 +340,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService']) ...@@ -346,11 +340,10 @@ angular.module('ulakbus.crud', ['ui.bootstrap', 'schemaForm', 'formService'])
}) })
/** /**
* @memberof ulakbus.crud
* @ngdoc directive * @ngdoc directive
* @name crudFilters * @name crudFilters
* @module ulakbus.crud * @description directive for filtering functionality. There are three types of filters; `check`, `select`, and `date`.
* @description
* directive for filtering functionality. There are three types of filters; `check`, `select`, and `date`.
* @todo filter items returns unselected in response object * @todo filter items returns unselected in response object
*/ */
.directive('crudFilters', function(Generator) { .directive('crudFilters', function(Generator) {
......
...@@ -10,7 +10,7 @@ describe('crud controller module', function () { ...@@ -10,7 +10,7 @@ describe('crud controller module', function () {
beforeEach(module('ulakbus')); beforeEach(module('ulakbus'));
beforeEach(module('ulakbus.crud')); beforeEach(module('ulakbus.crud'));
beforeEach(module('formService')); beforeEach(module('ulakbus.formService'));
beforeEach(inject(function ($injector) { beforeEach(inject(function ($injector) {
$httpBackend = $injector.get('$httpBackend'); $httpBackend = $injector.get('$httpBackend');
......
...@@ -8,6 +8,14 @@ ...@@ -8,6 +8,14 @@
'use strict'; 'use strict';
/**
* @ngdoc module
* @name ulakbus.dashboard
* @module ulakbus.dashboard
* @description ulakbus.dashboard module is holding dashboard's controller, directives and other components.
*
* @type {ng.$compileProvider|*}
*/
angular.module('ulakbus.dashboard', []) angular.module('ulakbus.dashboard', [])
.config(function ($uibTooltipProvider) { .config(function ($uibTooltipProvider) {
$uibTooltipProvider.setTriggers({'click': 'mouseleave'}); $uibTooltipProvider.setTriggers({'click': 'mouseleave'});
......
...@@ -11,9 +11,14 @@ ...@@ -11,9 +11,14 @@
/** /**
* @ngdoc module * @ngdoc module
* @name ulakbus * @name ulakbus
* @description * @module ulakbus
* Ulakbus module is the main module of ulakbus-ui. All application-wide configurations and definings of constants * @description Ulakbus module is the main module of ulakbus-ui. All application-wide configurations and definings
* handled in this module. * of constants handled in this module. \r
* There are two scripts on `app/` root; `main.js` and `app.js`. And `main.html`, `index.html`.
* `main.*` files are contains both production and development requirements or configurations/necessities for
* relative environment. Tagged with `// \@if NODE_ENV='PRODUCTION'` in commented line and configured in
* Gruntfile.js with package `preprocess` and `env`, related grunt command generates index.* for given file.
*
*/ */
angular.module( angular.module(
'ulakbus', [ 'ulakbus', [
...@@ -22,7 +27,7 @@ angular.module( ...@@ -22,7 +27,7 @@ angular.module(
'ngRoute', 'ngRoute',
'ngSanitize', 'ngSanitize',
'ngCookies', 'ngCookies',
'formService', 'ulakbus.formService',
'ulakbus.dashboard', 'ulakbus.dashboard',
'ulakbus.auth', 'ulakbus.auth',
'ulakbus.error_pages', 'ulakbus.error_pages',
...@@ -40,11 +45,10 @@ angular.module( ...@@ -40,11 +45,10 @@ angular.module(
// @endif // @endif
]) ])
/** /**
* @ngdoc object * @memberof ulakbus
* @ngdoc constant
* @name RESTURL * @name RESTURL
* @module ulakbus * @description RESTURL is the url of rest api to talk.
* @description
* RESTURL is the url of rest api to talk
* Based on the environment it changes from dev to prod * Based on the environment it changes from dev to prod
*/ */
.constant("RESTURL", (function () { .constant("RESTURL", (function () {
......
...@@ -4,14 +4,16 @@ ...@@ -4,14 +4,16 @@
* *
* This file is licensed under the GNU General Public License v3 * This file is licensed under the GNU General Public License v3
* (GPLv3). See LICENSE.txt for details. * (GPLv3). See LICENSE.txt for details.
* @type {ng.$compileProvider|*}
*/ */
angular.module('ulakbus') angular.module('ulakbus')
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name logout * @name logout
* @description * @description logout directive provides a button with click event. When triggered it post to
* logout directive provides a button with click event. When triggered it post to /logout path of the API. * '/logout' path of the API.
*/ */
.directive('logout', function ($http, $location, RESTURL) { .directive('logout', function ($http, $location, RESTURL) {
return { return {
...@@ -26,10 +28,10 @@ angular.module('ulakbus') ...@@ -26,10 +28,10 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name headerNotification * @name headerNotification
* @description * @description This directive is responsible to get and show notification.
* This directive is responsible to get and show notification.
* It calls API's /notify path with given interval and broadcasts `notifications` application-wide. * It calls API's /notify path with given interval and broadcasts `notifications` application-wide.
* There are 4 types of notifications: * There are 4 types of notifications:
* 1: tasks, 2: messages, 3: announcements, 4: recents * 1: tasks, 2: messages, 3: announcements, 4: recents
...@@ -41,6 +43,10 @@ angular.module('ulakbus') ...@@ -41,6 +43,10 @@ angular.module('ulakbus')
restrict: 'E', restrict: 'E',
replace: true, replace: true,
link: function ($scope) { link: function ($scope) {
/**
* Group notifications
* @param notifications
*/
$scope.groupNotifications = function (notifications) { $scope.groupNotifications = function (notifications) {
// notification categories: // notification categories:
// 1: tasks, 2: messages, 3: announcements, 4: recents // 1: tasks, 2: messages, 3: announcements, 4: recents
...@@ -50,6 +56,10 @@ angular.module('ulakbus') ...@@ -50,6 +56,10 @@ angular.module('ulakbus')
$scope.notifications[value.type].push(value); $scope.notifications[value.type].push(value);
}); });
}; };
/**
* Get notifications from API's /notify path and group it then broadcast "notifications" object.
* {ignoreLoadingBar: true} is telling loading bar not work on this particular request.
*/
$scope.getNotifications = function () { $scope.getNotifications = function () {
// ignore loading bar here // ignore loading bar here
$http.get(RESTURL.url + "notify", {ignoreLoadingBar: true}).success(function (data) { $http.get(RESTURL.url + "notify", {ignoreLoadingBar: true}).success(function (data) {
...@@ -67,9 +77,11 @@ angular.module('ulakbus') ...@@ -67,9 +77,11 @@ angular.module('ulakbus')
} }
}, 5000); }, 5000);
// when clicked mark as read notification /**
// it can be list of notifications * When clicked mark the notification as read.
// todo: do it in detail page of notification * @param items
* @todo: do it in detail page of notification
*/
$scope.markAsRead = function (items) { $scope.markAsRead = function (items) {
$http.post(RESTURL.url + "notify", {ignoreLoadingBar: true, read: [items]}) $http.post(RESTURL.url + "notify", {ignoreLoadingBar: true, read: [items]})
.success(function (data) { .success(function (data) {
...@@ -86,10 +98,10 @@ angular.module('ulakbus') ...@@ -86,10 +98,10 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name searchDirective * @name searchDirective
* @description * @description This directive provides reusable search form application-wide.
* This directive provides reusable search form application-wide.
* When search form submitted and response returns, it broadcasts the result with key `updateObjects`. * When search form submitted and response returns, it broadcasts the result with key `updateObjects`.
*/ */
.directive('searchDirective', function (Generator, $log, $rootScope) { .directive('searchDirective', function (Generator, $log, $rootScope) {
...@@ -143,10 +155,11 @@ angular.module('ulakbus') ...@@ -143,10 +155,11 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name sortDirective * @name sortDirective
* @description * @description Sort directive is responsible to post sorting params to API and process the response to the screen.
* * @todo test and implement when backend ready
*/ */
.directive('sortDirective', function (Generator, $log) { .directive('sortDirective', function (Generator, $log) {
return { return {
...@@ -195,10 +208,10 @@ angular.module('ulakbus') ...@@ -195,10 +208,10 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name collapseMenu * @name collapseMenu
* @description * @description Toggle collapses sidebar menu when clicked menu button
* toggle collapses sidebar menu when clicked menu button
*/ */
.directive('collapseMenu', function ($timeout, $window, $cookies) { .directive('collapseMenu', function ($timeout, $window, $cookies) {
return { return {
...@@ -238,16 +251,15 @@ angular.module('ulakbus') ...@@ -238,16 +251,15 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name headerSubmenu * @name headerSubmenu
* @description * @description Contains breadcrumb elements and loading animation
*
*/ */
.directive('headerSubMenu', function ($location) { .directive('headerSubMenu', function ($location) {
return { return {
templateUrl: 'shared/templates/directives/header-sub-menu.html', templateUrl: 'shared/templates/directives/header-sub-menu.html',
restrict: 'E', restrict: 'E',
//controller: "CRUDAddEditCtrl",
replace: true, replace: true,
link: function ($scope) { link: function ($scope) {
$scope.style = 'width:calc(100% - 300px);'; $scope.style = 'width:calc(100% - 300px);';
...@@ -258,10 +270,10 @@ angular.module('ulakbus') ...@@ -258,10 +270,10 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name breadcrumb * @name breadcrumb
* @description * @description Produces breadcrumb with related links
* produces breadcrumb with related links
*/ */
.directive('headerBreadcrumb', function ($location) { .directive('headerBreadcrumb', function ($location) {
return { return {
...@@ -276,10 +288,11 @@ angular.module('ulakbus') ...@@ -276,10 +288,11 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name selectedUser * @name selectedUser
* @description * @description Selected user on which the current job done is hold in this directive.
* * @deprecated
*/ */
.directive('selectedUser', function ($http, RESTURL) { .directive('selectedUser', function ($http, RESTURL) {
return { return {
...@@ -310,12 +323,11 @@ angular.module('ulakbus') ...@@ -310,12 +323,11 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name sidebar * @name sidebar
* @description * @description Changes breadcrumb when an item selected consists of menu items of related user or transaction
* changes breadcrumb when an item selected * controller communicates with dashboard controller to shape menu items and authz.
* consists of menu items of related user or transaction
* controller communicates with dashboard controller to shape menu items and authz
*/ */
.directive('sidebar', ['$location', function () { .directive('sidebar', ['$location', function () {
return { return {
...@@ -474,10 +486,11 @@ angular.module('ulakbus') ...@@ -474,10 +486,11 @@ angular.module('ulakbus')
}; };
}]) }])
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name stats * @name stats
* @description * @description Statistical data directive.
* * @todo unused for now
*/ */
.directive('stats', function () { .directive('stats', function () {
return { return {
...@@ -498,10 +511,10 @@ angular.module('ulakbus') ...@@ -498,10 +511,10 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name notifications * @name notifications
* @description * @description Holds notifications template with related rootscope items.
*
*/ */
.directive('notifications', function () { .directive('notifications', function () {
return { return {
...@@ -511,10 +524,10 @@ angular.module('ulakbus') ...@@ -511,10 +524,10 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name msgbox * @name msgbox
* @description * @description Holds msgbox template with related rootscope items.
*
*/ */
.directive('msgbox', function () { .directive('msgbox', function () {
return { return {
...@@ -524,10 +537,10 @@ angular.module('ulakbus') ...@@ -524,10 +537,10 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name alertBox * @name alertBox
* @description * @description Triggers when `alertBox` broadcasted with alert data..
*
*/ */
.directive('alertBox', function ($timeout) { .directive('alertBox', function ($timeout) {
return { return {
...@@ -545,10 +558,10 @@ angular.module('ulakbus') ...@@ -545,10 +558,10 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name sidebarSearch * @name sidebarSearch
* @description * @description unused for now
*
*/ */
.directive('sidebarSearch', function () { .directive('sidebarSearch', function () {
return { return {
...@@ -562,10 +575,11 @@ angular.module('ulakbus') ...@@ -562,10 +575,11 @@ angular.module('ulakbus')
}; };
}) })
/** /**
* @memberof ulakbus
* @ngdoc directive * @ngdoc directive
* @name fileread * @name fileread
* @description * @description Fileread directive is responsible for reading uploaded file and replace it to related model item.
* * @todo implement preview only for images
*/ */
.directive("fileread", function ($timeout) { .directive("fileread", function ($timeout) {
return { return {
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<span ng-if="value.verbose_name">{{ value.verbose_name }}</span> <span ng-if="value.verbose_name">{{ value.verbose_name }}</span>
<span ng-if="!value.verbose_name">{{key}}</span> <span ng-if="!value.verbose_name">{{key}}</span>
</th> </th>
<th>İşlem</th> <th ng-if="action!==False">İşlem</th>
</tr> </tr>
</thead> </thead>
<tbody ng-class="{hidden: node.lengthModels < 1}"> <tbody ng-class="{hidden: node.lengthModels < 1}">
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
ng-model="node.model[outerIndex][k]" ng-model="node.model[outerIndex][k]"
ng-change="nodeModelChange(this)"> ng-change="nodeModelChange(this)">
</td> </td>
<td> <td ng-if="action!==False">
<button modal-for-nodes="{{node.schema.model_name}},{{node.schema.formType}},edit,{{$index}}">Düzenle <button modal-for-nodes="{{node.schema.model_name}},{{node.schema.formType}},edit,{{$index}}">Düzenle
</button> </button>
<br> <br>
......
This diff is collapsed.
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
describe('form service module', function () { describe('form service module', function () {
beforeEach(module('ulakbus')); beforeEach(module('ulakbus'));
beforeEach(module('formService')); beforeEach(module('ulakbus.formService'));
var location; var location;
beforeEach(inject(function ($location, $injector) { beforeEach(inject(function ($location, $injector) {
......
...@@ -9,11 +9,12 @@ ...@@ -9,11 +9,12 @@
angular.module('ulakbus') angular.module('ulakbus')
.config(['$httpProvider', function ($httpProvider) { .config(['$httpProvider', function ($httpProvider) {
/** /**
* @ngdoc function * @memberof ulakbus.formService
* @ngdoc interceptor
* @name http_interceptor * @name http_interceptor
* @module ulakbus * @memberof ulakbus
* @description * @description The http interceptor for all requests and responses to check and config payload and response
* The http interceptor for all requests and responses to check and config payload and response objects. * objects.
* - To prevent OPTIONS preflight request change header Content-Type to `text/plain`. * - To prevent OPTIONS preflight request change header Content-Type to `text/plain`.
* - 4xx - 5xx errors are handled in response objects. * - 4xx - 5xx errors are handled in response objects.
* - `_debug_queries` is helper object for development purposes to see how long the queries lasts. * - `_debug_queries` is helper object for development purposes to see how long the queries lasts.
......
This diff is collapsed.
This diff is collapsed.
...@@ -1805,7 +1805,7 @@ angular.module("shared/templates/nodeTable.html", []).run(["$templateCache", fun ...@@ -1805,7 +1805,7 @@ angular.module("shared/templates/nodeTable.html", []).run(["$templateCache", fun
" <span ng-if=\"value.verbose_name\">{{ value.verbose_name }}</span>\n" + " <span ng-if=\"value.verbose_name\">{{ value.verbose_name }}</span>\n" +
" <span ng-if=\"!value.verbose_name\">{{key}}</span>\n" + " <span ng-if=\"!value.verbose_name\">{{key}}</span>\n" +
" </th>\n" + " </th>\n" +
" <th>İşlem</th>\n" + " <th ng-if=\"action!==False\">İşlem</th>\n" +
" </tr>\n" + " </tr>\n" +
" </thead>\n" + " </thead>\n" +
" <tbody ng-class=\"{hidden: node.lengthModels < 1}\">\n" + " <tbody ng-class=\"{hidden: node.lengthModels < 1}\">\n" +
...@@ -1838,7 +1838,7 @@ angular.module("shared/templates/nodeTable.html", []).run(["$templateCache", fun ...@@ -1838,7 +1838,7 @@ angular.module("shared/templates/nodeTable.html", []).run(["$templateCache", fun
" ng-model=\"node.model[outerIndex][k]\"\n" + " ng-model=\"node.model[outerIndex][k]\"\n" +
" ng-change=\"nodeModelChange(this)\">\n" + " ng-change=\"nodeModelChange(this)\">\n" +
" </td>\n" + " </td>\n" +
" <td>\n" + " <td ng-if=\"action!==False\">\n" +
" <button modal-for-nodes=\"{{node.schema.model_name}},{{node.schema.formType}},edit,{{$index}}\">Düzenle\n" + " <button modal-for-nodes=\"{{node.schema.model_name}},{{node.schema.formType}},edit,{{$index}}\">Düzenle\n" +
" </button>\n" + " </button>\n" +
" <br>\n" + " <br>\n" +
......
Angular Template
----------------
This template is written in `angular-template`, and it is used when template name is given `angular-template` as an option.
To generate with this template, set template option to `node_modules/angular-jsdoc/angular-template`. e.g.;
$ node_modules/jsdoc/jsdoc.js \
--configure node_modules/angular-jsdoc/common/conf.json \
--template node_modules/angular-jsdoc/angular-template \
--destination build/docs \
--readme README.md \
--recurse directives services
Files
angular-template
├── css # css used in layout.html
├── js # javascript used in layout.html
├── fonts # font used in layout.html
├── html
│   ├── class.html # class layout written in angular-template
│   └── layout.html # layout written in angular-template
└── publish.js # the main file that generate jsdoc
html * {
box-sizing: border-box;
-ms-box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
body {
font-family: "Open Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
font-weight: 300;
font-size: 1rem;
line-height: 1.5rem;
color: #5c5c5c;
background-color: white;
padding: 10px;
}
h1 {
font-family: "Arquitecta";
font-size: 3rem;
line-height: 3rem;
margin-top: 3.1875rem;
margin-bottom: 1.3125rem;
font-weight: 300;
}
footer {
margin: 0rem;
padding: 1.5rem;
text-align: right;
background-color: #554f4e;
overflow-y: auto;
color: #fff;
}
nav {
margin-top: 0px;
padding-top: 50px;
background-color: #fff;
}
#main {
float: none;
width: auto;
}
.page-wrap {
padding: 1.5rem 14px;
margin-bottom: 0rem;
background-color: #6c6463;
width: 70%;
}
.page-wrap h1 {
margin-top: -0.375rem;
color: #FFFFFF;
}
.page-wrap #main h1 {
color: inherit;
}
.big-container {
padding: 0rem;
background-color: #FFFFFF;
border-top: solid 1px #828282;
min-height: 24rem;
overflow: hidden;
background-repeat: repeat-x;
background-position: top;
margin-bottom: 1.5rem;
padding: 2.0rem 1.5rem 3rem 1.5rem;
}
/**
* This is enhanced theme by Umut Topuzoglu<https://github.com/ulocl>. Thanks, Umut
*/
@font-face {
font-family: 'Open Sans';
font-weight: normal;
font-style: normal;
src: url('../fonts/OpenSans-Regular-webfont.eot');
src:
local('Open Sans'),
local('OpenSans'),
url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/OpenSans-Regular-webfont.woff') format('woff'),
url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg');
}
@font-face {
font-family: 'Open Sans Light';
font-weight: normal;
font-style: normal;
src: url('../fonts/OpenSans-Light-webfont.eot');
src:
local('Open Sans Light'),
local('OpenSans Light'),
url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/OpenSans-Light-webfont.woff') format('woff'),
url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg');
}
* { box-sizing: border-box }
html
{
overflow: auto;
background-color: #fff;
font-size: 14px;
}
body
{
font-family: 'Open Sans', sans-serif;
line-height: 1.5;
color: #4d4e53;
background-color: white;
}
a, a:visited, a:active {
color: #0095dd;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
header
{
display: block;
padding: 0px 4px;
}
tt, code, kbd, samp {
font-family: Consolas, Monaco, 'Andale Mono', monospace;
padding: 0 0.25em;
background-color: #ddd;
}
.class-description {
font-size: 130%;
line-height: 140%;
margin-bottom: 1em;
margin-top: 1em;
}
.class-description:empty {
margin: 0;
}
#main {
float: left;
width: 70%;
padding-right: 20px;
}
article dl {
margin-bottom: 40px;
}
section
{
display: block;
background-color: #fff;
padding: 12px 24px;
border-bottom: 1px solid #ccc;
margin-right: 30px;
}
.variation {
display: none;
}
.signature-attributes {
font-size: 60%;
color: #aaa;
font-style: italic;
font-weight: lighter;
}
nav
{
display: block;
float: right;
margin-top: 28px;
width: 30%;
box-sizing: border-box;
border-left: 1px solid #ccc;
padding-left: 16px;
}
nav ul {
font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
font-size: 100%;
line-height: 17px;
padding: 0;
margin: 0;
list-style-type: none;
}
nav ul a, nav ul a:visited, nav ul a:active {
font-family: Consolas, Monaco, 'Andale Mono', monospace;
line-height: 18px;
color: #4D4E53;
}
nav h3 {
margin-top: 12px;
}
nav ul {
margin-top: 1.5em;
}
nav li {
margin-top: 6px;
margin-left: 10px;
}
footer {
display: block;
padding: 6px;
margin-top: 12px;
font-style: italic;
font-size: 90%;
}
h1, h2, h3, h4 {
font-weight: 200;
margin: 0;
}
h1
{
font-family: 'Open Sans Light', sans-serif;
font-size: 48px;
letter-spacing: -2px;
margin: 12px 24px 20px;
}
h2, h3
{
font-size: 30px;
font-weight: 700;
letter-spacing: -1px;
margin-bottom: 12px;
}
h4
{
font-size: 18px;
letter-spacing: -0.33px;
margin-bottom: 12px;
color: #4d4e53;
}
h5, .container-overview .subsection-title
{
font-size: 120%;
font-weight: bold;
letter-spacing: -0.01em;
margin: 8px 0 3px 0;
}
h6
{
font-size: 100%;
letter-spacing: -0.01em;
margin: 6px 0 3px 0;
font-style: italic;
}
.ancestors { color: #999; }
.ancestors a
{
color: #999 !important;
text-decoration: none;
}
.clear
{
clear: both;
}
.important
{
font-weight: bold;
color: #950B02;
}
.yes-def {
text-indent: -1000px;
}
.type-signature {
color: #aaa;
}
.name, .signature {
font-family: Consolas, Monaco, 'Andale Mono', monospace;
}
.details { margin-top: 14px; border-left: 2px solid #DDD; }
.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; }
.details dd { margin-left: 70px; }
.details ul { margin: 0; }
.details ul { list-style-type: none; }
.details li { margin-left: 30px; padding-top: 6px; }
.details pre.prettyprint { margin: 0 }
.details .object-value { padding-top: 0; }
.description {
margin-bottom: 1em;
margin-top: 1em;
}
.code-caption
{
font-style: italic;
font-size: 107%;
margin: 0;
}
.prettyprint
{
border: 1px solid #ddd;
width: 80%;
overflow: auto;
}
.prettyprint.source {
width: inherit;
}
.prettyprint code
{
font-size: 100%;
line-height: 18px;
display: block;
margin: 0;
background-color: #fff;
color: #4D4E53;
}
.prettyprint code span.line
{
display: inline-block;
}
.prettyprint.linenums
{
padding-left: 70px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.prettyprint.linenums ol
{
padding-left: 0;
}
.prettyprint.linenums li
{
border-left: 3px #ddd solid;
}
.prettyprint.linenums li.selected,
.prettyprint.linenums li.selected *
{
background-color: lightyellow;
}
.prettyprint.linenums li *
{
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.params, .props
{
border-spacing: 0;
border: 0;
border-collapse: collapse;
}
.params .name, .props .name, .name code {
color: #4D4E53;
font-family: Consolas, Monaco, 'Andale Mono', monospace;
font-size: 100%;
}
.params td, .params th, .props td, .props th
{
border: 1px solid #ddd;
margin: 0px;
text-align: left;
vertical-align: top;
padding: 4px 6px;
display: table-cell;
}
.params thead tr, .props thead tr
{
background-color: #ddd;
font-weight: bold;
}
.params .params thead tr, .props .props thead tr
{
background-color: #fff;
font-weight: bold;
}
.params th, .props th { border-right: 1px solid #aaa; }
.params thead .last, .props thead .last { border-right: 1px solid #ddd; }
.params td.description > p:first-child,
.props td.description > p:first-child
{
margin-top: 0;
padding-top: 0;
}
.params td.description > p:last-child,
.props td.description > p:last-child
{
margin-bottom: 0;
padding-bottom: 0;
}
.disabled {
color: #454545;
}
/* Tomorrow Theme */
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
/* Pretty printing styles. Used with prettify.js. */
/* SPAN elements with the classes below are added by prettyprint. */
/* plain text */
.pln {
color: #4d4d4c; }
@media screen {
/* string content */
.str {
color: #718c00; }
/* a keyword */
.kwd {
color: #8959a8; }
/* a comment */
.com {
color: #8e908c; }
/* a type name */
.typ {
color: #4271ae; }
/* a literal value */
.lit {
color: #f5871f; }
/* punctuation */
.pun {
color: #4d4d4c; }
/* lisp open bracket */
.opn {
color: #4d4d4c; }
/* lisp close bracket */
.clo {
color: #4d4d4c; }
/* a markup tag name */
.tag {
color: #c82829; }
/* a markup attribute name */
.atn {
color: #f5871f; }
/* a markup attribute value */
.atv {
color: #3e999f; }
/* a declaration */
.dec {
color: #f5871f; }
/* a variable name */
.var {
color: #c82829; }
/* a function name */
.fun {
color: #4271ae; } }
/* Use higher contrast and text-weight for printable form. */
@media print, projection {
.str {
color: #060; }
.kwd {
color: #006;
font-weight: bold; }
.com {
color: #600;
font-style: italic; }
.typ {
color: #404;
font-weight: bold; }
.lit {
color: #044; }
.pun, .opn, .clo {
color: #440; }
.tag {
color: #006;
font-weight: bold; }
.atn {
color: #404; }
.atv {
color: #060; } }
/* Style */
/*
pre.prettyprint {
background: white;
font-family: Consolas, Monaco, 'Andale Mono', monospace;
font-size: 12px;
line-height: 1.5;
border: 1px solid #ccc;
padding: 10px; }
*/
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin-top: 0;
margin-bottom: 0; }
/* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L4,
li.L5,
li.L6,
li.L7,
li.L8,
li.L9 {
/* */ }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 {
/* */ }
/* Pretty printing styles. Used with prettify.js. */
/* SPAN elements with the classes below are added by prettyprint. */
.pln { color: #000 } /* plain text */
@media screen {
.str { color: #080 } /* string content */
.kwd { color: #008 } /* a keyword */
.com { color: #800 } /* a comment */
.typ { color: #606 } /* a type name */
.lit { color: #066 } /* a literal value */
/* punctuation, lisp open bracket, lisp close bracket */
.pun, .opn, .clo { color: #660 }
.tag { color: #008 } /* a markup tag name */
.atn { color: #606 } /* a markup attribute name */
.atv { color: #080 } /* a markup attribute value */
.dec, .var { color: #606 } /* a declaration; a variable name */
.fun { color: red } /* a function name */
}
/* Use higher contrast and text-weight for printable form. */
@media print, projection {
.str { color: #060 }
.kwd { color: #006; font-weight: bold }
.com { color: #600; font-style: italic }
.typ { color: #404; font-weight: bold }
.lit { color: #044 }
.pun, .opn, .clo { color: #440 }
.tag { color: #006; font-weight: bold }
.atn { color: #404 }
.atv { color: #060 }
}
/* Put a border around prettyprinted code snippets. */
pre.prettyprint { padding: 2px; border: 1px solid #888 }
/* Specify class=linenums on a pre to get line numbering */
ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L5,
li.L6,
li.L7,
li.L8 { list-style-type: none }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 { background: #eee }
<!doctype html>
<html>
<head>
<title>JSDoc: config</title>
<link type="text/css" rel="stylesheet" href="css/jsdoc-default.css">
<link href="css/prettify-tomorrow.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300,700" rel="stylesheet" type="text/css">
<link href="css/custom.css" type="text/css" rel="stylesheet">
<script src="js/prettify.js"></script>
<script src="js/angular.min.js"></script>
</head>
<body ng-app="">
<nav>
<h2><a href="index.html">Index</a></h2>
<ul class="module">
<!-- app -->
<h3>
<a href="" ng-click="moduleapp = !moduleapp">
module: app
</a>
<i ng-cloak="" ng-show="moduleapp">+</i>
</h3>
<li id="app" ng-hide="moduleapp">
<ul class="group">
<h3>
<a href="" ng-click="appconfig = !appconfig">
config
</a>
<i ng-cloak="" ng-show="appconfig">+</i>
</h3>
<ul ng-hide="appconfig">
<li>
<a href="app.config.html">config</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appfilter = !appfilter">
filter
</a>
<i ng-cloak="" ng-show="appfilter">+</i>
</h3>
<ul ng-hide="appfilter">
<li>
<a href="app.customCurrency.html">customCurrency</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appservice = !appservice">
service
</a>
<i ng-cloak="" ng-show="appservice">+</i>
</h3>
<ul ng-hide="appservice">
<li>
<a href="app.testService.html">testService</a>
</li>
</ul>
</ul>
</li>
</ul><ul class="module">
<!-- ngmap -->
<h3>
<a href="" ng-click="modulengmap = !modulengmap">
module: ngmap
</a>
<i ng-cloak="" ng-show="modulengmap">+</i>
</h3>
<li id="ngmap" ng-hide="modulengmap">
<ul class="group">
<h3>
<a href="" ng-click="ngmapservice = !ngmapservice">
service
</a>
<i ng-cloak="" ng-show="ngmapservice">+</i>
</h3>
<ul ng-hide="ngmapservice">
<li>
<a href="ngmap.Attr2Options.html">Attr2Options</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapdirective = !ngmapdirective">
directive
</a>
<i ng-cloak="" ng-show="ngmapdirective">+</i>
</h3>
<ul ng-hide="ngmapdirective">
<li>
<a href="ngmap.map.html">map</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapcontroller = !ngmapcontroller">
controller
</a>
<i ng-cloak="" ng-show="ngmapcontroller">+</i>
</h3>
<ul ng-hide="ngmapcontroller">
<li>
<a href="ngmap.MapController.html">MapController</a>
</li>
</ul>
</ul>
</li>
</ul>
</nav>
<div id="content" class="page-wrap">
<h3 style="float:right; color:#ccc">
Angular config
</h3>
<h1 class="title">
config
<a class="name-link signature-attributes" href="source/app.config.html#line8">source</a>
</h1>
<div id="main" class="big-container">
<!-- source code html -->
<!-- index.html -->
<!-- class files -->
<div>
<div><div class="container-overview">
<dt></dt>
<dd>
<div class="description">
<p>Configures ui-router's states.</p>
</div>
<div class="details"></div>
<div>
<h5>Dependencies:</h5>
<table class="params">
<thead>
<tr><th>Name</th><th>Type</th><th class="last">Description</th></tr>
</thead>
<tbody>
<tr>
<td class="name" nowrap="">$urlRouterProvider</td>
<td class="type"><span class="param-type">
Service
</span></td>
<td class="description last"><p>Watches $location and provides interface to default state</p></td>
</tr>
</tbody>
</table>
</div>
</dd>
</div>
<section>
</section></div>
</div>
</div>
<footer style="clear:both">
Documentation generated by
<a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.2</a>
using
<a href="https://github.com/allenhwkim/angular-jsdoc">Angular-JSDoc template</a>
</footer>
</div>
<!--%= prettyJson %-->
<script>
prettyPrint();
var lineNo = window.location.hash.match(/#line([0-9]+)$/);
lineNo && document.querySelector("ol li:nth-child("+(lineNo[1])+")").scrollIntoView();
</script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<title>JSDoc: customCurrency</title>
<link type="text/css" rel="stylesheet" href="css/jsdoc-default.css">
<link href="css/prettify-tomorrow.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300,700" rel="stylesheet" type="text/css">
<link href="css/custom.css" type="text/css" rel="stylesheet">
<script src="js/prettify.js"></script>
<script src="js/angular.min.js"></script>
</head>
<body ng-app="">
<nav>
<h2><a href="index.html">Index</a></h2>
<ul class="module">
<!-- app -->
<h3>
<a href="" ng-click="moduleapp = !moduleapp">
module: app
</a>
<i ng-cloak="" ng-show="moduleapp">+</i>
</h3>
<li id="app" ng-hide="moduleapp">
<ul class="group">
<h3>
<a href="" ng-click="appconfig = !appconfig">
config
</a>
<i ng-cloak="" ng-show="appconfig">+</i>
</h3>
<ul ng-hide="appconfig">
<li>
<a href="app.config.html">config</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appfilter = !appfilter">
filter
</a>
<i ng-cloak="" ng-show="appfilter">+</i>
</h3>
<ul ng-hide="appfilter">
<li>
<a href="app.customCurrency.html">customCurrency</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appservice = !appservice">
service
</a>
<i ng-cloak="" ng-show="appservice">+</i>
</h3>
<ul ng-hide="appservice">
<li>
<a href="app.testService.html">testService</a>
</li>
</ul>
</ul>
</li>
</ul><ul class="module">
<!-- ngmap -->
<h3>
<a href="" ng-click="modulengmap = !modulengmap">
module: ngmap
</a>
<i ng-cloak="" ng-show="modulengmap">+</i>
</h3>
<li id="ngmap" ng-hide="modulengmap">
<ul class="group">
<h3>
<a href="" ng-click="ngmapservice = !ngmapservice">
service
</a>
<i ng-cloak="" ng-show="ngmapservice">+</i>
</h3>
<ul ng-hide="ngmapservice">
<li>
<a href="ngmap.Attr2Options.html">Attr2Options</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapdirective = !ngmapdirective">
directive
</a>
<i ng-cloak="" ng-show="ngmapdirective">+</i>
</h3>
<ul ng-hide="ngmapdirective">
<li>
<a href="ngmap.map.html">map</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapcontroller = !ngmapcontroller">
controller
</a>
<i ng-cloak="" ng-show="ngmapcontroller">+</i>
</h3>
<ul ng-hide="ngmapcontroller">
<li>
<a href="ngmap.MapController.html">MapController</a>
</li>
</ul>
</ul>
</li>
</ul>
</nav>
<div id="content" class="page-wrap">
<h3 style="float:right; color:#ccc">
Angular filter
</h3>
<h1 class="title">
customCurrency
<a class="name-link signature-attributes" href="source/app.customCurrency.html#line1">source</a>
</h1>
<div id="main" class="big-container">
<!-- source code html -->
<!-- index.html -->
<!-- class files -->
<div>
<div><div class="container-overview">
<dt></dt>
<dd>
<div class="description">
<p>returns custom currency from the given input</p>
</div>
<div class="details"></div>
<div>
<h5>Dependencies:</h5>
<table class="params">
<thead>
<tr><th>Name</th><th>Type</th><th class="last">Description</th></tr>
</thead>
<tbody>
<tr>
<td class="name" nowrap="">Test</td>
<td class="type"><span class="param-type">
$http
</span></td>
<td class="description last"></td>
</tr>
</tbody>
</table>
</div>
<div>
<h5>Tutorials:</h5>
<ul>
<li>
<a href="tutorial-tutorial1.html">Tutorial One</a>
</li>
</ul>
</div>
</dd>
</div>
<section>
<div class="functions">
<h3 class="subsection-title">Methods</h3>
<dl>
<dt>
<a href="source/app.customCurrency.html#line18" class="name-link">
<h4 class="name">
customCurrencyFilter
<span class="signature">(input, symbol, place)</span>
</h4>
</a>
</dt>
<dd>
<div class="description">
<p>. Create the return function and set the required parameter name to <strong>input</strong>
. setup optional parameters for the currency symbol and location (left or right of the amount)</p>
</div>
<div>
<h5>Parameters:</h5>
<table class="params">
<thead>
<tr><th>Name</th><th>Type</th><th class="last">Description</th></tr>
</thead>
<tbody>
<tr>
<td class="name">input</td>
<td class="type"><span class="param-type">
Number | String
</span></td>
<td class="description last"></td>
</tr><tr>
<td class="name">symbol</td>
<td class="type"><span class="param-type">
String
</span></td>
<td class="description last"></td>
</tr><tr>
<td class="name">place</td>
<td class="type"><span class="param-type">
Boolean
</span></td>
<td class="description last"><p>true or false</p></td>
</tr>
</tbody>
</table>
</div>
</dd>
</dl>
</div>
</section></div>
</div>
</div>
<footer style="clear:both">
Documentation generated by
<a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.2</a>
using
<a href="https://github.com/allenhwkim/angular-jsdoc">Angular-JSDoc template</a>
</footer>
</div>
<!--%= prettyJson %-->
<script>
prettyPrint();
var lineNo = window.location.hash.match(/#line([0-9]+)$/);
lineNo && document.querySelector("ol li:nth-child("+(lineNo[1])+")").scrollIntoView();
</script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<title>JSDoc: testService</title>
<link type="text/css" rel="stylesheet" href="css/jsdoc-default.css">
<link href="css/prettify-tomorrow.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300,700" rel="stylesheet" type="text/css">
<link href="css/custom.css" type="text/css" rel="stylesheet">
<script src="js/prettify.js"></script>
<script src="js/angular.min.js"></script>
</head>
<body ng-app="">
<nav>
<h2><a href="index.html">Index</a></h2>
<ul class="module">
<!-- app -->
<h3>
<a href="" ng-click="moduleapp = !moduleapp">
module: app
</a>
<i ng-cloak="" ng-show="moduleapp">+</i>
</h3>
<li id="app" ng-hide="moduleapp">
<ul class="group">
<h3>
<a href="" ng-click="appconfig = !appconfig">
config
</a>
<i ng-cloak="" ng-show="appconfig">+</i>
</h3>
<ul ng-hide="appconfig">
<li>
<a href="app.config.html">config</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appfilter = !appfilter">
filter
</a>
<i ng-cloak="" ng-show="appfilter">+</i>
</h3>
<ul ng-hide="appfilter">
<li>
<a href="app.customCurrency.html">customCurrency</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appservice = !appservice">
service
</a>
<i ng-cloak="" ng-show="appservice">+</i>
</h3>
<ul ng-hide="appservice">
<li>
<a href="app.testService.html">testService</a>
</li>
</ul>
</ul>
</li>
</ul><ul class="module">
<!-- ngmap -->
<h3>
<a href="" ng-click="modulengmap = !modulengmap">
module: ngmap
</a>
<i ng-cloak="" ng-show="modulengmap">+</i>
</h3>
<li id="ngmap" ng-hide="modulengmap">
<ul class="group">
<h3>
<a href="" ng-click="ngmapservice = !ngmapservice">
service
</a>
<i ng-cloak="" ng-show="ngmapservice">+</i>
</h3>
<ul ng-hide="ngmapservice">
<li>
<a href="ngmap.Attr2Options.html">Attr2Options</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapdirective = !ngmapdirective">
directive
</a>
<i ng-cloak="" ng-show="ngmapdirective">+</i>
</h3>
<ul ng-hide="ngmapdirective">
<li>
<a href="ngmap.map.html">map</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapcontroller = !ngmapcontroller">
controller
</a>
<i ng-cloak="" ng-show="ngmapcontroller">+</i>
</h3>
<ul ng-hide="ngmapcontroller">
<li>
<a href="ngmap.MapController.html">MapController</a>
</li>
</ul>
</ul>
</li>
</ul>
</nav>
<div id="content" class="page-wrap">
<h3 style="float:right; color:#ccc">
Angular service
</h3>
<h1 class="title">
testService
<a class="name-link signature-attributes" href="source/app.testService.html#line6">source</a>
</h1>
<div id="main" class="big-container">
<!-- source code html -->
<!-- index.html -->
<!-- class files -->
<div>
<div><div class="container-overview">
<dt></dt>
<dd>
<div class="description">
<p>The siteLanguageServices provides information about available languges
of a site.</p>
</div>
<div class="details"></div>
<div>
<h5>Dependencies:</h5>
<table class="params">
<thead>
<tr><th>Name</th><th>Type</th><th class="last">Description</th></tr>
</thead>
<tbody>
<tr>
<td class="name" nowrap="">Test</td>
<td class="type"><span class="param-type">
$http
</span></td>
<td class="description last"></td>
</tr>
</tbody>
</table>
</div>
<div>
<h5>Properties:</h5>
<table class="props">
<thead>
<tr><th>Name</th><th>Type</th><th class="last">Description</th></tr>
</thead>
<tbody>
<tr>
<td class="name" nowrap="">obj</td>
<td class="type"><span class="param-type">
object
</span></td>
<td class="description last"><p>property of this service</p></td>
</tr>
</tbody>
</table>
</div>
</dd>
</div>
<section>
<div class="functions">
<h3 class="subsection-title">Methods</h3>
<dl>
<dt>
<a href="source/app.testService.html#line22" class="name-link">
<h4 class="name">
test
///// NO param jsdoc tag here
</h4>
</a>
</dt>
<dd>
<div class="description">
</div>
</dd>
</dl>
</div>
</section></div>
</div>
</div>
<footer style="clear:both">
Documentation generated by
<a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.2</a>
using
<a href="https://github.com/allenhwkim/angular-jsdoc">Angular-JSDoc template</a>
</footer>
</div>
<!--%= prettyJson %-->
<script>
prettyPrint();
var lineNo = window.location.hash.match(/#line([0-9]+)$/);
lineNo && document.querySelector("ol li:nth-child("+(lineNo[1])+")").scrollIntoView();
</script>
</body>
</html>
\ No newline at end of file
html * {
box-sizing: border-box;
-ms-box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
body {
font-family: "Open Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
font-weight: 300;
font-size: 1rem;
line-height: 1.5rem;
color: #5c5c5c;
background-color: white;
padding: 10px;
}
h1 {
font-family: "Arquitecta";
font-size: 3rem;
line-height: 3rem;
margin-top: 3.1875rem;
margin-bottom: 1.3125rem;
font-weight: 300;
}
footer {
margin: 0rem;
padding: 1.5rem;
text-align: right;
background-color: #554f4e;
overflow-y: auto;
color: #fff;
}
nav {
margin-top: 0px;
padding-top: 50px;
background-color: #fff;
}
#main {
float: none;
width: auto;
}
.page-wrap {
padding: 1.5rem 14px;
margin-bottom: 0rem;
background-color: #6c6463;
width: 70%;
}
.page-wrap h1 {
margin-top: -0.375rem;
color: #FFFFFF;
}
.page-wrap #main h1 {
color: inherit;
}
.big-container {
padding: 0rem;
background-color: #FFFFFF;
border-top: solid 1px #828282;
min-height: 24rem;
overflow: hidden;
background-repeat: repeat-x;
background-position: top;
margin-bottom: 1.5rem;
padding: 2.0rem 1.5rem 3rem 1.5rem;
}
/**
* This is enhanced theme by Umut Topuzoglu<https://github.com/ulocl>. Thanks, Umut
*/
@font-face {
font-family: 'Open Sans';
font-weight: normal;
font-style: normal;
src: url('../fonts/OpenSans-Regular-webfont.eot');
src:
local('Open Sans'),
local('OpenSans'),
url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/OpenSans-Regular-webfont.woff') format('woff'),
url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg');
}
@font-face {
font-family: 'Open Sans Light';
font-weight: normal;
font-style: normal;
src: url('../fonts/OpenSans-Light-webfont.eot');
src:
local('Open Sans Light'),
local('OpenSans Light'),
url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/OpenSans-Light-webfont.woff') format('woff'),
url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg');
}
* { box-sizing: border-box }
html
{
overflow: auto;
background-color: #fff;
font-size: 14px;
}
body
{
font-family: 'Open Sans', sans-serif;
line-height: 1.5;
color: #4d4e53;
background-color: white;
}
a, a:visited, a:active {
color: #0095dd;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
header
{
display: block;
padding: 0px 4px;
}
tt, code, kbd, samp {
font-family: Consolas, Monaco, 'Andale Mono', monospace;
padding: 0 0.25em;
background-color: #ddd;
}
.class-description {
font-size: 130%;
line-height: 140%;
margin-bottom: 1em;
margin-top: 1em;
}
.class-description:empty {
margin: 0;
}
#main {
float: left;
width: 70%;
padding-right: 20px;
}
article dl {
margin-bottom: 40px;
}
section
{
display: block;
background-color: #fff;
padding: 12px 24px;
border-bottom: 1px solid #ccc;
margin-right: 30px;
}
.variation {
display: none;
}
.signature-attributes {
font-size: 60%;
color: #aaa;
font-style: italic;
font-weight: lighter;
}
nav
{
display: block;
float: right;
margin-top: 28px;
width: 30%;
box-sizing: border-box;
border-left: 1px solid #ccc;
padding-left: 16px;
}
nav ul {
font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
font-size: 100%;
line-height: 17px;
padding: 0;
margin: 0;
list-style-type: none;
}
nav ul a, nav ul a:visited, nav ul a:active {
font-family: Consolas, Monaco, 'Andale Mono', monospace;
line-height: 18px;
color: #4D4E53;
}
nav h3 {
margin-top: 12px;
}
nav ul {
margin-top: 1.5em;
}
nav li {
margin-top: 6px;
margin-left: 10px;
}
footer {
display: block;
padding: 6px;
margin-top: 12px;
font-style: italic;
font-size: 90%;
}
h1, h2, h3, h4 {
font-weight: 200;
margin: 0;
}
h1
{
font-family: 'Open Sans Light', sans-serif;
font-size: 48px;
letter-spacing: -2px;
margin: 12px 24px 20px;
}
h2, h3
{
font-size: 30px;
font-weight: 700;
letter-spacing: -1px;
margin-bottom: 12px;
}
h4
{
font-size: 18px;
letter-spacing: -0.33px;
margin-bottom: 12px;
color: #4d4e53;
}
h5, .container-overview .subsection-title
{
font-size: 120%;
font-weight: bold;
letter-spacing: -0.01em;
margin: 8px 0 3px 0;
}
h6
{
font-size: 100%;
letter-spacing: -0.01em;
margin: 6px 0 3px 0;
font-style: italic;
}
.ancestors { color: #999; }
.ancestors a
{
color: #999 !important;
text-decoration: none;
}
.clear
{
clear: both;
}
.important
{
font-weight: bold;
color: #950B02;
}
.yes-def {
text-indent: -1000px;
}
.type-signature {
color: #aaa;
}
.name, .signature {
font-family: Consolas, Monaco, 'Andale Mono', monospace;
}
.details { margin-top: 14px; border-left: 2px solid #DDD; }
.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; }
.details dd { margin-left: 70px; }
.details ul { margin: 0; }
.details ul { list-style-type: none; }
.details li { margin-left: 30px; padding-top: 6px; }
.details pre.prettyprint { margin: 0 }
.details .object-value { padding-top: 0; }
.description {
margin-bottom: 1em;
margin-top: 1em;
}
.code-caption
{
font-style: italic;
font-size: 107%;
margin: 0;
}
.prettyprint
{
border: 1px solid #ddd;
width: 80%;
overflow: auto;
}
.prettyprint.source {
width: inherit;
}
.prettyprint code
{
font-size: 100%;
line-height: 18px;
display: block;
margin: 0;
background-color: #fff;
color: #4D4E53;
}
.prettyprint code span.line
{
display: inline-block;
}
.prettyprint.linenums
{
padding-left: 70px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.prettyprint.linenums ol
{
padding-left: 0;
}
.prettyprint.linenums li
{
border-left: 3px #ddd solid;
}
.prettyprint.linenums li.selected,
.prettyprint.linenums li.selected *
{
background-color: lightyellow;
}
.prettyprint.linenums li *
{
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.params, .props
{
border-spacing: 0;
border: 0;
border-collapse: collapse;
}
.params .name, .props .name, .name code {
color: #4D4E53;
font-family: Consolas, Monaco, 'Andale Mono', monospace;
font-size: 100%;
}
.params td, .params th, .props td, .props th
{
border: 1px solid #ddd;
margin: 0px;
text-align: left;
vertical-align: top;
padding: 4px 6px;
display: table-cell;
}
.params thead tr, .props thead tr
{
background-color: #ddd;
font-weight: bold;
}
.params .params thead tr, .props .props thead tr
{
background-color: #fff;
font-weight: bold;
}
.params th, .props th { border-right: 1px solid #aaa; }
.params thead .last, .props thead .last { border-right: 1px solid #ddd; }
.params td.description > p:first-child,
.props td.description > p:first-child
{
margin-top: 0;
padding-top: 0;
}
.params td.description > p:last-child,
.props td.description > p:last-child
{
margin-bottom: 0;
padding-bottom: 0;
}
.disabled {
color: #454545;
}
/* Tomorrow Theme */
/* Original theme - https://github.com/chriskempson/tomorrow-theme */
/* Pretty printing styles. Used with prettify.js. */
/* SPAN elements with the classes below are added by prettyprint. */
/* plain text */
.pln {
color: #4d4d4c; }
@media screen {
/* string content */
.str {
color: #718c00; }
/* a keyword */
.kwd {
color: #8959a8; }
/* a comment */
.com {
color: #8e908c; }
/* a type name */
.typ {
color: #4271ae; }
/* a literal value */
.lit {
color: #f5871f; }
/* punctuation */
.pun {
color: #4d4d4c; }
/* lisp open bracket */
.opn {
color: #4d4d4c; }
/* lisp close bracket */
.clo {
color: #4d4d4c; }
/* a markup tag name */
.tag {
color: #c82829; }
/* a markup attribute name */
.atn {
color: #f5871f; }
/* a markup attribute value */
.atv {
color: #3e999f; }
/* a declaration */
.dec {
color: #f5871f; }
/* a variable name */
.var {
color: #c82829; }
/* a function name */
.fun {
color: #4271ae; } }
/* Use higher contrast and text-weight for printable form. */
@media print, projection {
.str {
color: #060; }
.kwd {
color: #006;
font-weight: bold; }
.com {
color: #600;
font-style: italic; }
.typ {
color: #404;
font-weight: bold; }
.lit {
color: #044; }
.pun, .opn, .clo {
color: #440; }
.tag {
color: #006;
font-weight: bold; }
.atn {
color: #404; }
.atv {
color: #060; } }
/* Style */
/*
pre.prettyprint {
background: white;
font-family: Consolas, Monaco, 'Andale Mono', monospace;
font-size: 12px;
line-height: 1.5;
border: 1px solid #ccc;
padding: 10px; }
*/
/* Specify class=linenums on a pre to get line numbering */
ol.linenums {
margin-top: 0;
margin-bottom: 0; }
/* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L4,
li.L5,
li.L6,
li.L7,
li.L8,
li.L9 {
/* */ }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 {
/* */ }
/* Pretty printing styles. Used with prettify.js. */
/* SPAN elements with the classes below are added by prettyprint. */
.pln { color: #000 } /* plain text */
@media screen {
.str { color: #080 } /* string content */
.kwd { color: #008 } /* a keyword */
.com { color: #800 } /* a comment */
.typ { color: #606 } /* a type name */
.lit { color: #066 } /* a literal value */
/* punctuation, lisp open bracket, lisp close bracket */
.pun, .opn, .clo { color: #660 }
.tag { color: #008 } /* a markup tag name */
.atn { color: #606 } /* a markup attribute name */
.atv { color: #080 } /* a markup attribute value */
.dec, .var { color: #606 } /* a declaration; a variable name */
.fun { color: red } /* a function name */
}
/* Use higher contrast and text-weight for printable form. */
@media print, projection {
.str { color: #060 }
.kwd { color: #006; font-weight: bold }
.com { color: #600; font-style: italic }
.typ { color: #404; font-weight: bold }
.lit { color: #044 }
.pun, .opn, .clo { color: #440 }
.tag { color: #006; font-weight: bold }
.atn { color: #404 }
.atv { color: #060 }
}
/* Put a border around prettyprinted code snippets. */
pre.prettyprint { padding: 2px; border: 1px solid #888 }
/* Specify class=linenums on a pre to get line numbering */
ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
li.L0,
li.L1,
li.L2,
li.L3,
li.L5,
li.L6,
li.L7,
li.L8 { list-style-type: none }
/* Alternate shading for lines */
li.L1,
li.L3,
li.L5,
li.L7,
li.L9 { background: #eee }
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<!doctype html>
<html>
<head>
<title>JSDoc: Index</title>
<link type="text/css" rel="stylesheet" href="css/jsdoc-default.css">
<link href="css/prettify-tomorrow.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300,700" rel="stylesheet" type="text/css">
<link href="css/custom.css" type="text/css" rel="stylesheet">
<script src="js/prettify.js"></script>
<script src="js/angular.min.js"></script>
</head>
<body ng-app="">
<nav>
<h2><a href="index.html">Index</a></h2>
<ul class="module">
<!-- app -->
<h3>
<a href="" ng-click="moduleapp = !moduleapp">
module: app
</a>
<i ng-cloak="" ng-show="moduleapp">+</i>
</h3>
<li id="app" ng-hide="moduleapp">
<ul class="group">
<h3>
<a href="" ng-click="appconfig = !appconfig">
config
</a>
<i ng-cloak="" ng-show="appconfig">+</i>
</h3>
<ul ng-hide="appconfig">
<li>
<a href="app.config.html">config</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appfilter = !appfilter">
filter
</a>
<i ng-cloak="" ng-show="appfilter">+</i>
</h3>
<ul ng-hide="appfilter">
<li>
<a href="app.customCurrency.html">customCurrency</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appservice = !appservice">
service
</a>
<i ng-cloak="" ng-show="appservice">+</i>
</h3>
<ul ng-hide="appservice">
<li>
<a href="app.testService.html">testService</a>
</li>
</ul>
</ul>
</li>
</ul><ul class="module">
<!-- ngmap -->
<h3>
<a href="" ng-click="modulengmap = !modulengmap">
module: ngmap
</a>
<i ng-cloak="" ng-show="modulengmap">+</i>
</h3>
<li id="ngmap" ng-hide="modulengmap">
<ul class="group">
<h3>
<a href="" ng-click="ngmapservice = !ngmapservice">
service
</a>
<i ng-cloak="" ng-show="ngmapservice">+</i>
</h3>
<ul ng-hide="ngmapservice">
<li>
<a href="ngmap.Attr2Options.html">Attr2Options</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapdirective = !ngmapdirective">
directive
</a>
<i ng-cloak="" ng-show="ngmapdirective">+</i>
</h3>
<ul ng-hide="ngmapdirective">
<li>
<a href="ngmap.map.html">map</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapcontroller = !ngmapcontroller">
controller
</a>
<i ng-cloak="" ng-show="ngmapcontroller">+</i>
</h3>
<ul ng-hide="ngmapcontroller">
<li>
<a href="ngmap.MapController.html">MapController</a>
</li>
</ul>
</ul>
</li>
</ul>
</nav>
<div id="content" class="page-wrap">
<h1 class="title">
Index
</h1>
<div id="main" class="big-container">
<!-- source code html -->
<!-- index.html -->
<section class="section-readme">
<article>
<h1>Sample Code</h1><p>This is markdown README.md</p>
</article>
</section>
<!-- class files -->
</div>
<footer style="clear:both">
Documentation generated by
<a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.2</a>
using
<a href="https://github.com/allenhwkim/angular-jsdoc">Angular-JSDoc template</a>
</footer>
</div>
<!--%= prettyJson %-->
<script>
prettyPrint();
var lineNo = window.location.hash.match(/#line([0-9]+)$/);
lineNo && document.querySelector("ol li:nth-child("+(lineNo[1])+")").scrollIntoView();
</script>
</body>
</html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<!doctype html>
<html>
<head>
<base href="../">
<title>JSDoc: source : config.js</title>
<link type="text/css" rel="stylesheet" href="css/jsdoc-default.css">
<link href="css/prettify-tomorrow.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300,700" rel="stylesheet" type="text/css">
<link href="css/custom.css" type="text/css" rel="stylesheet">
<script src="js/prettify.js"></script>
<script src="js/angular.min.js"></script>
</head>
<body ng-app="">
<nav>
<h2><a href="index.html">Index</a></h2>
<ul class="module">
<!-- app -->
<h3>
<a href="" ng-click="moduleapp = !moduleapp">
module: app
</a>
<i ng-cloak="" ng-show="moduleapp">+</i>
</h3>
<li id="app" ng-hide="moduleapp">
<ul class="group">
<h3>
<a href="" ng-click="appconfig = !appconfig">
config
</a>
<i ng-cloak="" ng-show="appconfig">+</i>
</h3>
<ul ng-hide="appconfig">
<li>
<a href="app.config.html">config</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appfilter = !appfilter">
filter
</a>
<i ng-cloak="" ng-show="appfilter">+</i>
</h3>
<ul ng-hide="appfilter">
<li>
<a href="app.customCurrency.html">customCurrency</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appservice = !appservice">
service
</a>
<i ng-cloak="" ng-show="appservice">+</i>
</h3>
<ul ng-hide="appservice">
<li>
<a href="app.testService.html">testService</a>
</li>
</ul>
</ul>
</li>
</ul><ul class="module">
<!-- ngmap -->
<h3>
<a href="" ng-click="modulengmap = !modulengmap">
module: ngmap
</a>
<i ng-cloak="" ng-show="modulengmap">+</i>
</h3>
<li id="ngmap" ng-hide="modulengmap">
<ul class="group">
<h3>
<a href="" ng-click="ngmapservice = !ngmapservice">
service
</a>
<i ng-cloak="" ng-show="ngmapservice">+</i>
</h3>
<ul ng-hide="ngmapservice">
<li>
<a href="ngmap.Attr2Options.html">Attr2Options</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapdirective = !ngmapdirective">
directive
</a>
<i ng-cloak="" ng-show="ngmapdirective">+</i>
</h3>
<ul ng-hide="ngmapdirective">
<li>
<a href="ngmap.map.html">map</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapcontroller = !ngmapcontroller">
controller
</a>
<i ng-cloak="" ng-show="ngmapcontroller">+</i>
</h3>
<ul ng-hide="ngmapcontroller">
<li>
<a href="ngmap.MapController.html">MapController</a>
</li>
</ul>
</ul>
</li>
</ul>
</nav>
<div id="content" class="page-wrap">
<h1 class="title">
source : config.js
</h1>
<div id="main" class="big-container">
<!-- source code html -->
<article>
<pre class="prettyprint source linenums"><code>(function () {
'use strict';
angular
.module('app')
.config(stateConfig)
/**
* Configures ui-router's states.
* @memberof app
* @ngdoc config
* @name config
* @param {Service} $urlRouterProvider Watches $location and provides interface to default state
*/
function stateConfig($urlRouterProvider) {
$urlRouterProvider.otherwise('/search')
}
})();
</code></pre>
</article>
<!-- index.html -->
<!-- class files -->
</div>
<footer style="clear:both">
Documentation generated by
<a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.2</a>
using
<a href="https://github.com/allenhwkim/angular-jsdoc">Angular-JSDoc template</a>
</footer>
</div>
<!--%= prettyJson %-->
<script>
prettyPrint();
var lineNo = window.location.hash.match(/#line([0-9]+)$/);
lineNo && document.querySelector("ol li:nth-child("+(lineNo[1])+")").scrollIntoView();
</script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<base href="../">
<title>JSDoc: source : custom-currency.js</title>
<link type="text/css" rel="stylesheet" href="css/jsdoc-default.css">
<link href="css/prettify-tomorrow.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300,700" rel="stylesheet" type="text/css">
<link href="css/custom.css" type="text/css" rel="stylesheet">
<script src="js/prettify.js"></script>
<script src="js/angular.min.js"></script>
</head>
<body ng-app="">
<nav>
<h2><a href="index.html">Index</a></h2>
<ul class="module">
<!-- app -->
<h3>
<a href="" ng-click="moduleapp = !moduleapp">
module: app
</a>
<i ng-cloak="" ng-show="moduleapp">+</i>
</h3>
<li id="app" ng-hide="moduleapp">
<ul class="group">
<h3>
<a href="" ng-click="appconfig = !appconfig">
config
</a>
<i ng-cloak="" ng-show="appconfig">+</i>
</h3>
<ul ng-hide="appconfig">
<li>
<a href="app.config.html">config</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appfilter = !appfilter">
filter
</a>
<i ng-cloak="" ng-show="appfilter">+</i>
</h3>
<ul ng-hide="appfilter">
<li>
<a href="app.customCurrency.html">customCurrency</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appservice = !appservice">
service
</a>
<i ng-cloak="" ng-show="appservice">+</i>
</h3>
<ul ng-hide="appservice">
<li>
<a href="app.testService.html">testService</a>
</li>
</ul>
</ul>
</li>
</ul><ul class="module">
<!-- ngmap -->
<h3>
<a href="" ng-click="modulengmap = !modulengmap">
module: ngmap
</a>
<i ng-cloak="" ng-show="modulengmap">+</i>
</h3>
<li id="ngmap" ng-hide="modulengmap">
<ul class="group">
<h3>
<a href="" ng-click="ngmapservice = !ngmapservice">
service
</a>
<i ng-cloak="" ng-show="ngmapservice">+</i>
</h3>
<ul ng-hide="ngmapservice">
<li>
<a href="ngmap.Attr2Options.html">Attr2Options</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapdirective = !ngmapdirective">
directive
</a>
<i ng-cloak="" ng-show="ngmapdirective">+</i>
</h3>
<ul ng-hide="ngmapdirective">
<li>
<a href="ngmap.map.html">map</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapcontroller = !ngmapcontroller">
controller
</a>
<i ng-cloak="" ng-show="ngmapcontroller">+</i>
</h3>
<ul ng-hide="ngmapcontroller">
<li>
<a href="ngmap.MapController.html">MapController</a>
</li>
</ul>
</ul>
</li>
</ul>
</nav>
<div id="content" class="page-wrap">
<h1 class="title">
source : custom-currency.js
</h1>
<div id="main" class="big-container">
<!-- source code html -->
<article>
<pre class="prettyprint source linenums"><code>/**
* The siteLanguageServices provides information about available languges
* of a site.
*
* @memberof app
* @ngdoc filter
* @name customCurrency
* @param {$http} Test
* @desc
* returns custom currency from the given input
* @tutorial tutorial1
*/
(function() {
'use strict';
var customCurrency = function($http) {
/**
* @func customCurrencyFilter
* @memberof customCurrency
* @desc
* . Create the return function and set the required parameter name to **input**
* . setup optional parameters for the currency symbol and location (left or right of the amount)
* @param {Number|String} input
* @param {String} symbol
* @param {Boolean} place true or false
*/
return function(input, symbol, place) {
// Ensure that we are working with a number
if(isNaN(input)) {
return input;
} else {
// Check if optional parameters are passed, if not, use the defaults
var symbol = symbol || '$';
var place = place === undefined ? true : place;
// Perform the operation to set the symbol in the right location
if( place === true) {
return symbol + input;
} else {
return input + symbol;
}
}
}
};
angular.module('app').filter('customCurrency', customCurrency);
})();
</code></pre>
</article>
<!-- index.html -->
<!-- class files -->
</div>
<footer style="clear:both">
Documentation generated by
<a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.2</a>
using
<a href="https://github.com/allenhwkim/angular-jsdoc">Angular-JSDoc template</a>
</footer>
</div>
<!--%= prettyJson %-->
<script>
prettyPrint();
var lineNo = window.location.hash.match(/#line([0-9]+)$/);
lineNo && document.querySelector("ol li:nth-child("+(lineNo[1])+")").scrollIntoView();
</script>
</body>
</html>
\ No newline at end of file
<!doctype html>
<html>
<head>
<base href="../">
<title>JSDoc: source : test-service.js</title>
<link type="text/css" rel="stylesheet" href="css/jsdoc-default.css">
<link href="css/prettify-tomorrow.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300,700" rel="stylesheet" type="text/css">
<link href="css/custom.css" type="text/css" rel="stylesheet">
<script src="js/prettify.js"></script>
<script src="js/angular.min.js"></script>
</head>
<body ng-app="">
<nav>
<h2><a href="index.html">Index</a></h2>
<ul class="module">
<!-- app -->
<h3>
<a href="" ng-click="moduleapp = !moduleapp">
module: app
</a>
<i ng-cloak="" ng-show="moduleapp">+</i>
</h3>
<li id="app" ng-hide="moduleapp">
<ul class="group">
<h3>
<a href="" ng-click="appconfig = !appconfig">
config
</a>
<i ng-cloak="" ng-show="appconfig">+</i>
</h3>
<ul ng-hide="appconfig">
<li>
<a href="app.config.html">config</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appfilter = !appfilter">
filter
</a>
<i ng-cloak="" ng-show="appfilter">+</i>
</h3>
<ul ng-hide="appfilter">
<li>
<a href="app.customCurrency.html">customCurrency</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="appservice = !appservice">
service
</a>
<i ng-cloak="" ng-show="appservice">+</i>
</h3>
<ul ng-hide="appservice">
<li>
<a href="app.testService.html">testService</a>
</li>
</ul>
</ul>
</li>
</ul><ul class="module">
<!-- ngmap -->
<h3>
<a href="" ng-click="modulengmap = !modulengmap">
module: ngmap
</a>
<i ng-cloak="" ng-show="modulengmap">+</i>
</h3>
<li id="ngmap" ng-hide="modulengmap">
<ul class="group">
<h3>
<a href="" ng-click="ngmapservice = !ngmapservice">
service
</a>
<i ng-cloak="" ng-show="ngmapservice">+</i>
</h3>
<ul ng-hide="ngmapservice">
<li>
<a href="ngmap.Attr2Options.html">Attr2Options</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapdirective = !ngmapdirective">
directive
</a>
<i ng-cloak="" ng-show="ngmapdirective">+</i>
</h3>
<ul ng-hide="ngmapdirective">
<li>
<a href="ngmap.map.html">map</a>
</li>
</ul>
</ul><ul class="group">
<h3>
<a href="" ng-click="ngmapcontroller = !ngmapcontroller">
controller
</a>
<i ng-cloak="" ng-show="ngmapcontroller">+</i>
</h3>
<ul ng-hide="ngmapcontroller">
<li>
<a href="ngmap.MapController.html">MapController</a>
</li>
</ul>
</ul>
</li>
</ul>
</nav>
<div id="content" class="page-wrap">
<h1 class="title">
source : test-service.js
</h1>
<div id="main" class="big-container">
<!-- source code html -->
<article>
<pre class="prettyprint source linenums"><code>(function () {
'use strict';
angular.module('app').service('testService', testService);
/**
* @memberof app
* @ngdoc service
* @name testService
* @param {$http} Test
* @property {object} obj property of this service
* @ngInject
* @desc The siteLanguageServices provides information about available languges
* of a site.
*
*/
function testService ($http) {
/** @property {object} obj property of this service */
var obj = {};
/**
* @memberof testService
* @method test
* ///// NO param jsdoc tag here
*/
function test() {
}
}
})();
</code></pre>
</article>
<!-- index.html -->
<!-- class files -->
</div>
<footer style="clear:both">
Documentation generated by
<a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.2</a>
using
<a href="https://github.com/allenhwkim/angular-jsdoc">Angular-JSDoc template</a>
</footer>
</div>
<!--%= prettyJson %-->
<script>
prettyPrint();
var lineNo = window.location.hash.match(/#line([0-9]+)$/);
lineNo && document.querySelector("ol li:nth-child("+(lineNo[1])+")").scrollIntoView();
</script>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<section>
<h2>Child A</h2>
<article>
<p>child A</p>
<p>This
is
test
tutorial</p>
</article>
</section>
\ No newline at end of file
<section>
<h2>Child B</h2>
<article>
<p>child B</p>
<p>test</p>
</article>
</section>
\ No newline at end of file
<section>
<h2>Tutorial Two</h2>
<article>
test tutorial
test tutorial
</article>
</section>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment